sinwan 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +66 -39
  2. package/dist/cjs/index.development.js +1624 -961
  3. package/dist/cjs/index.development.js.map +21 -18
  4. package/dist/cjs/index.production.min.js +2 -2
  5. package/dist/cjs/index.production.min.js.map +21 -18
  6. package/dist/cjs/jsx/jsx-dev-runtime.development.js +6 -16
  7. package/dist/cjs/jsx/jsx-dev-runtime.development.js.map +3 -3
  8. package/dist/cjs/jsx/jsx-dev-runtime.production.min.js +2 -2
  9. package/dist/cjs/jsx/jsx-dev-runtime.production.min.js.map +3 -3
  10. package/dist/cjs/jsx/jsx-runtime.development.js +6 -16
  11. package/dist/cjs/jsx/jsx-runtime.development.js.map +3 -3
  12. package/dist/cjs/jsx/jsx-runtime.production.min.js +2 -2
  13. package/dist/cjs/jsx/jsx-runtime.production.min.js.map +3 -3
  14. package/dist/cjs/renderer/index.development.js +1175 -0
  15. package/dist/cjs/renderer/index.development.js.map +24 -0
  16. package/dist/cjs/renderer/index.production.min.js +3 -0
  17. package/dist/cjs/renderer/index.production.min.js.map +24 -0
  18. package/dist/cjs/server/index.development.js +665 -329
  19. package/dist/cjs/server/index.development.js.map +11 -10
  20. package/dist/cjs/server/index.production.min.js +2 -2
  21. package/dist/cjs/server/index.production.min.js.map +11 -10
  22. package/dist/component/control-flow.d.ts +18 -0
  23. package/dist/component/control-flow.d.ts.map +1 -0
  24. package/dist/component/index.d.ts +3 -1
  25. package/dist/component/index.d.ts.map +1 -1
  26. package/dist/component/instance.d.ts +7 -1
  27. package/dist/component/instance.d.ts.map +1 -1
  28. package/dist/component/lifecycle.d.ts +2 -1
  29. package/dist/component/lifecycle.d.ts.map +1 -1
  30. package/dist/component/provide-inject.d.ts +11 -5
  31. package/dist/component/provide-inject.d.ts.map +1 -1
  32. package/dist/esm/index.development.js +1301 -660
  33. package/dist/esm/index.development.js.map +21 -18
  34. package/dist/esm/index.production.min.js +2 -2
  35. package/dist/esm/index.production.min.js.map +21 -18
  36. package/dist/esm/jsx/jsx-dev-runtime.development.js +6 -16
  37. package/dist/esm/jsx/jsx-dev-runtime.development.js.map +3 -3
  38. package/dist/esm/jsx/jsx-dev-runtime.production.min.js +2 -2
  39. package/dist/esm/jsx/jsx-dev-runtime.production.min.js.map +3 -3
  40. package/dist/esm/jsx/jsx-runtime.development.js +6 -16
  41. package/dist/esm/jsx/jsx-runtime.development.js.map +3 -3
  42. package/dist/esm/jsx/jsx-runtime.production.min.js +2 -2
  43. package/dist/esm/jsx/jsx-runtime.production.min.js.map +3 -3
  44. package/dist/esm/renderer/index.development.js +1124 -0
  45. package/dist/esm/renderer/index.development.js.map +24 -0
  46. package/dist/esm/renderer/index.production.min.js +4 -0
  47. package/dist/esm/renderer/index.production.min.js.map +24 -0
  48. package/dist/esm/server/index.development.js +665 -329
  49. package/dist/esm/server/index.development.js.map +11 -10
  50. package/dist/esm/server/index.production.min.js +2 -2
  51. package/dist/esm/server/index.production.min.js.map +11 -10
  52. package/dist/hydration/walk.d.ts.map +1 -1
  53. package/dist/index.d.ts +6 -6
  54. package/dist/index.d.ts.map +1 -1
  55. package/dist/jsx/jsx-runtime.d.ts +13 -0
  56. package/dist/jsx/jsx-runtime.d.ts.map +1 -1
  57. package/dist/jsx/jsx-types.d.ts +122 -57
  58. package/dist/jsx/jsx-types.d.ts.map +1 -1
  59. package/dist/renderer/attributes.d.ts.map +1 -1
  60. package/dist/renderer/dom-ops.d.ts +4 -1
  61. package/dist/renderer/dom-ops.d.ts.map +1 -1
  62. package/dist/renderer/index.d.ts +1 -1
  63. package/dist/renderer/index.d.ts.map +1 -1
  64. package/dist/renderer/mount.d.ts +2 -5
  65. package/dist/renderer/mount.d.ts.map +1 -1
  66. package/dist/renderer/render-children.d.ts +2 -2
  67. package/dist/renderer/render-children.d.ts.map +1 -1
  68. package/dist/renderer/render-control-flow.d.ts +13 -0
  69. package/dist/renderer/render-control-flow.d.ts.map +1 -0
  70. package/dist/renderer/render-element.d.ts +1 -1
  71. package/dist/renderer/render-element.d.ts.map +1 -1
  72. package/dist/renderer/types.d.ts +2 -0
  73. package/dist/renderer/types.d.ts.map +1 -1
  74. package/dist/renderer/unmount.d.ts +20 -0
  75. package/dist/renderer/unmount.d.ts.map +1 -0
  76. package/dist/renderer.d.ts +1 -0
  77. package/dist/renderer.js +7 -0
  78. package/dist/renderer.mjs +4 -0
  79. package/dist/server/hydration-markers.d.ts.map +1 -1
  80. package/dist/server/index.d.ts +1 -1
  81. package/dist/server/index.d.ts.map +1 -1
  82. package/dist/server/renderer.d.ts.map +1 -1
  83. package/dist/server/stream.d.ts +9 -1
  84. package/dist/server/stream.d.ts.map +1 -1
  85. package/dist/types.d.ts +8 -2
  86. package/dist/types.d.ts.map +1 -1
  87. package/package.json +15 -1
package/README.md CHANGED
@@ -1,67 +1,94 @@
1
- # Sinwan — Reactive UI Library
1
+ # Sinwan
2
2
 
3
- A modern reactive UI library with SSR, hydration, and fine-grained reactivity.
3
+ A small reactive UI library for JSX, fine-grained reactivity, SSR, and hydration.
4
4
 
5
- ## Features
5
+ Sinwan gives you signals, component lifecycle hooks, a direct DOM renderer, and a React-shaped JSX runtime without a virtual DOM.
6
+
7
+ ## Install
8
+
9
+ ```sh
10
+ npm install sinwan
11
+ ```
12
+
13
+ ```sh
14
+ bun add sinwan
15
+ ```
6
16
 
7
- - **Reactivity** — `signal()`, `computed()`, `effect()`, `batch()` with fine-grained tracking
8
- - **JSX** — Custom JSX runtime producing `SinwanElement` trees
9
- - **Components** `createComponent()` with lifecycle hooks (`onMounted`, `onUnmounted`, `onUpdated`, `onError`)
10
- - **Renderer** — Client-side DOM renderer with reactive text, attributes, and event binding
11
- - **Provide/Inject** — Dependency injection across component trees
12
- - **SSR** — `renderToString()`, `streamPage()` for server-side rendering
13
- - **Hydration** — `hydrate()` to attach reactivity to server-rendered HTML without DOM recreation
17
+ ## JSX Setup
18
+
19
+ Use the automatic JSX runtime:
20
+
21
+ ```jsonc
22
+ {
23
+ "compilerOptions": {
24
+ "jsx": "react-jsx",
25
+ "jsxImportSource": "sinwan"
26
+ }
27
+ }
28
+ ```
14
29
 
15
30
  ## Quick Start
16
31
 
17
32
  ```tsx
18
- import { signal, createComponent, mount, onMounted } from "Sinwan";
33
+ import { createComponent, mount, signal } from "sinwan";
19
34
 
20
- const Counter = createComponent<{ initial?: number }>(({ initial = 0 }) => {
21
- const count = signal(initial);
22
-
23
- onMounted(() => console.log("Counter mounted!"));
35
+ const Counter = createComponent(() => {
36
+ const count = signal(0);
24
37
 
25
38
  return (
26
- <div>
27
- <span>{count}</span>
28
- <button onClick={() => count.value++}>+</button>
29
- </div>
39
+ <button onClick={() => (count.value += 1)}>
40
+ Count: {count}
41
+ </button>
30
42
  );
31
43
  });
32
44
 
33
45
  mount(Counter, document.getElementById("app")!);
34
46
  ```
35
47
 
36
- ## SSR + Hydration
48
+ ## Features
49
+
50
+ - Fine-grained reactivity: `signal`, `computed`, `effect`, `batch`, `nextTick`
51
+ - JSX runtime: `sinwan/jsx-runtime` and `sinwan/jsx-dev-runtime`
52
+ - Components: `createComponent`, lifecycle hooks, provide/inject, `<Show>`, `<For>`
53
+ - DOM renderer: reactive text, attributes, events, refs, namespaces, and cleanup
54
+ - Server rendering: `renderToString`, `streamPage`, hydratable strings and streams
55
+ - Hydration: reuse server-rendered DOM with `hydrate`
56
+
57
+ ## SSR and Hydration
37
58
 
38
59
  ```tsx
39
60
  // Server
40
- import { renderToHydratableString } from "Sinwan/server";
41
- const html = await renderToHydratableString(Counter, { initial: 5 });
61
+ import { renderToHydratableString } from "sinwan/server";
42
62
 
43
- // Client
44
- import { hydrate } from "Sinwan";
45
- hydrate(Counter, document.getElementById("app")!, { initial: 5 });
63
+ const html = await renderToHydratableString(App, { initial: 5 });
46
64
  ```
47
65
 
48
- ## Project Structure
66
+ ```tsx
67
+ // Client
68
+ import { hydrate } from "sinwan";
49
69
 
70
+ hydrate(App, document.getElementById("app")!, { initial: 5 });
50
71
  ```
51
- src/
52
- ├── types.ts # Core types (SinwanNode, SinwanElement, etc.)
53
- ├── escaper.ts # HTML escaping
54
- ├── jsx/ # JSX runtime
55
- ├── reactivity/ # signal, computed, effect, batch, scheduler
56
- ├── component/ # createComponent, lifecycle, provide/inject
57
- ├── renderer/ # Client DOM renderer (mount, render-element, etc.)
58
- ├── hydration/ # Client hydration (hydrate, markers, walk)
59
- ├── server/ # SSR (renderToString, stream, hydration-markers)
60
- └── index.ts # Main barrel export
61
- ```
62
72
 
63
- ## Tests
73
+ ## Documentation
74
+
75
+ - [Documentation v1](./docs/v1/README.md)
76
+ - [API reference](./docs/v1/15-api-reference.md)
77
+ - [Changelog](./docs/v1/CHANGELOG.md)
78
+ - [Troubleshooting](./docs/v1/17-troubleshooting.md)
64
79
 
65
- ```bash
80
+ ## Development
81
+
82
+ ```sh
66
83
  bun test
84
+ bun run typecheck
85
+ bun run build
67
86
  ```
87
+
88
+ ## Author
89
+
90
+ Mohammed Ben Cheikh
91
+
92
+ ## License
93
+
94
+ MIT - see [LICENSE](./LICENSE).