sinwan 0.0.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 (134) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -1
  3. package/dist/cjs/index.development.js +2288 -0
  4. package/dist/cjs/index.development.js.map +35 -0
  5. package/dist/cjs/index.production.min.js +3 -0
  6. package/dist/cjs/index.production.min.js.map +35 -0
  7. package/dist/cjs/jsx/jsx-dev-runtime.development.js +124 -0
  8. package/dist/cjs/jsx/jsx-dev-runtime.development.js.map +10 -0
  9. package/dist/cjs/jsx/jsx-dev-runtime.production.min.js +3 -0
  10. package/dist/cjs/jsx/jsx-dev-runtime.production.min.js.map +10 -0
  11. package/dist/cjs/jsx/jsx-runtime.development.js +116 -0
  12. package/dist/cjs/jsx/jsx-runtime.development.js.map +10 -0
  13. package/dist/cjs/jsx/jsx-runtime.production.min.js +3 -0
  14. package/dist/cjs/jsx/jsx-runtime.production.min.js.map +10 -0
  15. package/dist/cjs/package.json +4 -0
  16. package/dist/cjs/renderer/index.development.js +1175 -0
  17. package/dist/cjs/renderer/index.development.js.map +24 -0
  18. package/dist/cjs/renderer/index.production.min.js +3 -0
  19. package/dist/cjs/renderer/index.production.min.js.map +24 -0
  20. package/dist/cjs/server/index.development.js +1265 -0
  21. package/dist/cjs/server/index.development.js.map +23 -0
  22. package/dist/cjs/server/index.production.min.js +3 -0
  23. package/dist/cjs/server/index.production.min.js.map +23 -0
  24. package/dist/component/control-flow.d.ts +18 -0
  25. package/dist/component/control-flow.d.ts.map +1 -0
  26. package/dist/component/create.d.ts +75 -0
  27. package/dist/component/create.d.ts.map +1 -0
  28. package/dist/component/index.d.ts +12 -0
  29. package/dist/component/index.d.ts.map +1 -0
  30. package/dist/component/instance.d.ts +84 -0
  31. package/dist/component/instance.d.ts.map +1 -0
  32. package/dist/component/lifecycle.d.ts +41 -0
  33. package/dist/component/lifecycle.d.ts.map +1 -0
  34. package/dist/component/provide-inject.d.ts +45 -0
  35. package/dist/component/provide-inject.d.ts.map +1 -0
  36. package/dist/escaper.d.ts +26 -0
  37. package/dist/escaper.d.ts.map +1 -0
  38. package/dist/esm/index.development.js +2201 -0
  39. package/dist/esm/index.development.js.map +35 -0
  40. package/dist/esm/index.production.min.js +4 -0
  41. package/dist/esm/index.production.min.js.map +35 -0
  42. package/dist/esm/jsx/jsx-dev-runtime.development.js +73 -0
  43. package/dist/esm/jsx/jsx-dev-runtime.development.js.map +10 -0
  44. package/dist/esm/jsx/jsx-dev-runtime.production.min.js +4 -0
  45. package/dist/esm/jsx/jsx-dev-runtime.production.min.js.map +10 -0
  46. package/dist/esm/jsx/jsx-runtime.development.js +77 -0
  47. package/dist/esm/jsx/jsx-runtime.development.js.map +10 -0
  48. package/dist/esm/jsx/jsx-runtime.production.min.js +4 -0
  49. package/dist/esm/jsx/jsx-runtime.production.min.js.map +10 -0
  50. package/dist/esm/package.json +4 -0
  51. package/dist/esm/renderer/index.development.js +1124 -0
  52. package/dist/esm/renderer/index.development.js.map +24 -0
  53. package/dist/esm/renderer/index.production.min.js +4 -0
  54. package/dist/esm/renderer/index.production.min.js.map +24 -0
  55. package/dist/esm/server/index.development.js +1214 -0
  56. package/dist/esm/server/index.development.js.map +23 -0
  57. package/dist/esm/server/index.production.min.js +4 -0
  58. package/dist/esm/server/index.production.min.js.map +23 -0
  59. package/dist/hydration/hydrate.d.ts +29 -0
  60. package/dist/hydration/hydrate.d.ts.map +1 -0
  61. package/dist/hydration/index.d.ts +7 -0
  62. package/dist/hydration/index.d.ts.map +1 -0
  63. package/dist/hydration/markers.d.ts +48 -0
  64. package/dist/hydration/markers.d.ts.map +1 -0
  65. package/dist/hydration/walk.d.ts +32 -0
  66. package/dist/hydration/walk.d.ts.map +1 -0
  67. package/dist/index.d.ts +14 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +7 -0
  70. package/dist/index.mjs +4 -0
  71. package/dist/jsx/jsx-dev-runtime.d.ts +10 -0
  72. package/dist/jsx/jsx-dev-runtime.d.ts.map +1 -0
  73. package/dist/jsx/jsx-runtime.d.ts +67 -0
  74. package/dist/jsx/jsx-runtime.d.ts.map +1 -0
  75. package/dist/jsx/jsx-types.d.ts +702 -0
  76. package/dist/jsx/jsx-types.d.ts.map +1 -0
  77. package/dist/jsx-dev-runtime.d.ts +1 -0
  78. package/dist/jsx-dev-runtime.js +7 -0
  79. package/dist/jsx-dev-runtime.mjs +4 -0
  80. package/dist/jsx-runtime.d.ts +1 -0
  81. package/dist/jsx-runtime.js +7 -0
  82. package/dist/jsx-runtime.mjs +4 -0
  83. package/dist/reactivity/batch.d.ts +27 -0
  84. package/dist/reactivity/batch.d.ts.map +1 -0
  85. package/dist/reactivity/computed.d.ts +41 -0
  86. package/dist/reactivity/computed.d.ts.map +1 -0
  87. package/dist/reactivity/effect.d.ts +79 -0
  88. package/dist/reactivity/effect.d.ts.map +1 -0
  89. package/dist/reactivity/index.d.ts +15 -0
  90. package/dist/reactivity/index.d.ts.map +1 -0
  91. package/dist/reactivity/scheduler.d.ts +35 -0
  92. package/dist/reactivity/scheduler.d.ts.map +1 -0
  93. package/dist/reactivity/signal.d.ts +36 -0
  94. package/dist/reactivity/signal.d.ts.map +1 -0
  95. package/dist/renderer/attributes.d.ts +8 -0
  96. package/dist/renderer/attributes.d.ts.map +1 -0
  97. package/dist/renderer/dom-ops.d.ts +30 -0
  98. package/dist/renderer/dom-ops.d.ts.map +1 -0
  99. package/dist/renderer/events.d.ts +21 -0
  100. package/dist/renderer/events.d.ts.map +1 -0
  101. package/dist/renderer/index.d.ts +12 -0
  102. package/dist/renderer/index.d.ts.map +1 -0
  103. package/dist/renderer/mount.d.ts +27 -0
  104. package/dist/renderer/mount.d.ts.map +1 -0
  105. package/dist/renderer/render-children.d.ts +19 -0
  106. package/dist/renderer/render-children.d.ts.map +1 -0
  107. package/dist/renderer/render-control-flow.d.ts +13 -0
  108. package/dist/renderer/render-control-flow.d.ts.map +1 -0
  109. package/dist/renderer/render-element.d.ts +13 -0
  110. package/dist/renderer/render-element.d.ts.map +1 -0
  111. package/dist/renderer/types.d.ts +65 -0
  112. package/dist/renderer/types.d.ts.map +1 -0
  113. package/dist/renderer/unmount.d.ts +20 -0
  114. package/dist/renderer/unmount.d.ts.map +1 -0
  115. package/dist/renderer.d.ts +1 -0
  116. package/dist/renderer.js +7 -0
  117. package/dist/renderer.mjs +4 -0
  118. package/dist/server/hydration-markers.d.ts +23 -0
  119. package/dist/server/hydration-markers.d.ts.map +1 -0
  120. package/dist/server/index.d.ts +9 -0
  121. package/dist/server/index.d.ts.map +1 -0
  122. package/dist/server/renderer.d.ts +33 -0
  123. package/dist/server/renderer.d.ts.map +1 -0
  124. package/dist/server/stream.d.ts +20 -0
  125. package/dist/server/stream.d.ts.map +1 -0
  126. package/dist/server.d.ts +1 -0
  127. package/dist/server.js +7 -0
  128. package/dist/server.mjs +4 -0
  129. package/dist/types.d.ts +48 -0
  130. package/dist/types.d.ts.map +1 -0
  131. package/package.json +116 -4
  132. package/bun.lock +0 -26
  133. package/src/index.ts +0 -1
  134. package/tsconfig.json +0 -29
@@ -0,0 +1,75 @@
1
+ /**
2
+ * SinwanJS View Module — Component Factories
3
+ *
4
+ * createComponent and createPage factories for defining
5
+ * typed components and pages with full TypeScript inference.
6
+ */
7
+ import type { SinwanComponent, SinwanPage, SinwanNode, SinwanSlots } from "../types.ts";
8
+ /**
9
+ * Create a typed Sinwan component.
10
+ *
11
+ * Mirrors React.FC<P> exactly - single props object with children injected.
12
+ * Children can be a single SinwanNode or a SinwanSlots object for named slots.
13
+ *
14
+ * @example
15
+ * interface CardProps {
16
+ * title: string;
17
+ * }
18
+ * const Card = createComponent<CardProps>(({ title, children }) => (
19
+ * <div class="card">
20
+ * <h2>{title}</h2>
21
+ * <div class="content">{children}</div>
22
+ * </div>
23
+ * ));
24
+ */
25
+ export declare function createComponent<P extends object = {}>(fn: (props: P & {
26
+ children?: SinwanNode | SinwanSlots;
27
+ }) => ReturnType<SinwanComponent<P>>): SinwanComponent<P>;
28
+ /**
29
+ * Create a typed Sinwan page.
30
+ *
31
+ * Pages receive a plain data object and return a renderable element tree.
32
+ * Pages are registered with the app and rendered via `c.render("name", data)`.
33
+ *
34
+ * @example
35
+ * interface HomeData {
36
+ * title: string;
37
+ * posts: { id: number; title: string }[];
38
+ * }
39
+ * const HomePage = createPage<HomeData>(({ title, posts }) => (
40
+ * <Layout title={title}>
41
+ * <h1>{title}</h1>
42
+ * <ul>{posts.map(p => <li key={p.id}>{p.title}</li>)}</ul>
43
+ * </Layout>
44
+ * ));
45
+ *
46
+ * app.setRenderer("home", HomePage);
47
+ * app.get("/", (c) => c.render("home", { title: "Home", posts: [] }));
48
+ */
49
+ export declare function createPage<D extends object = {}>(fn: (data: D) => ReturnType<SinwanPage<D>>): SinwanPage<D>;
50
+ /**
51
+ * Create a layout component.
52
+ *
53
+ * Layouts are just components that accept children. They typically render
54
+ * the HTML document structure, head metadata, and shared UI elements.
55
+ *
56
+ * @example
57
+ * interface LayoutProps {
58
+ * title?: string;
59
+ * lang?: string;
60
+ * }
61
+ * const Layout = createLayout<LayoutProps>(({ title = "App", lang = "en", children }) => (
62
+ * <html lang={lang}>
63
+ * <head><title>{title}</title></head>
64
+ * <body>{children}</body>
65
+ * </html>
66
+ * ));
67
+ */
68
+ export declare function createLayout<P extends object = {}>(fn: (props: P & {
69
+ children: SinwanNode;
70
+ }) => ReturnType<SinwanComponent<P & {
71
+ children: SinwanNode;
72
+ }>>): SinwanComponent<P & {
73
+ children: SinwanNode;
74
+ }>;
75
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/component/create.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,eAAe,EACf,UAAU,EACV,UAAU,EACV,WAAW,EACZ,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EACnD,EAAE,EAAE,CACF,KAAK,EAAE,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,UAAU,GAAG,WAAW,CAAA;CAAE,KAC/C,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAClC,eAAe,CAAC,CAAC,CAAC,CAKpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAC9C,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GACzC,UAAU,CAAC,CAAC,CAAC,CAKf;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,EAAE,EAChD,EAAE,EAAE,CACF,KAAK,EAAE,CAAC,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAA;CAAE,KAChC,UAAU,CAAC,eAAe,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC,GAC7D,eAAe,CAAC,CAAC,GAAG;IAAE,QAAQ,EAAE,UAAU,CAAA;CAAE,CAAC,CAE/C"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SinwanJS Component Runtime — Public API
3
+ */
4
+ export { getCurrentInstance, setCurrentInstance, withInstance, createComponentInstance, fireMountedHooks, fireUnmountedHooks, fireUpdatedHooks, queueUpdatedHooks, handleComponentError, } from "./instance.ts";
5
+ export type { ComponentInstance } from "./instance.ts";
6
+ export { onMounted, onUnmounted, onUpdated, onError } from "./lifecycle.ts";
7
+ export { createComponent, createPage, createLayout } from "./create.ts";
8
+ export { Show, For } from "./control-flow.ts";
9
+ export type { ShowProps, ForProps } from "./control-flow.ts";
10
+ export { provide, inject } from "./provide-inject.ts";
11
+ export type { InjectionKey } from "./provide-inject.ts";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/component/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAEvB,YAAY,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAGvD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG5E,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGxE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC9C,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAG7D,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AACtD,YAAY,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * SinwanJS Component Runtime — Instance Management
3
+ *
4
+ * Each component rendered on the client gets a ComponentInstance
5
+ * that tracks its lifecycle hooks, effects, parent/child tree,
6
+ * and provide/inject context.
7
+ *
8
+ * A global `currentInstance` stack lets lifecycle hooks (onMounted, etc.)
9
+ * register themselves during setup or synchronous lifecycle callbacks —
10
+ * same pattern as Vue's getCurrentInstance.
11
+ */
12
+ import type { SinwanComponent } from "../types.ts";
13
+ import type { MountedNode } from "../renderer/types.ts";
14
+ import type { CleanupFn } from "../reactivity/index.ts";
15
+ export interface ComponentInstance {
16
+ /** Unique identifier for this instance. */
17
+ uid: number;
18
+ /** The component definition (setup function). */
19
+ component: SinwanComponent<any>;
20
+ /** Props passed to this component. */
21
+ props: Record<string, any>;
22
+ /** The rendered DOM subtree (set after render). */
23
+ element: MountedNode | null;
24
+ /** Parent instance in the component tree. */
25
+ parent: ComponentInstance | null;
26
+ /** Child component instances. */
27
+ children: ComponentInstance[];
28
+ /** All effect dispose functions owned by this component. */
29
+ effects: CleanupFn[];
30
+ /** Callbacks to fire after the component is mounted to DOM. */
31
+ _mountedHooks: (() => void)[];
32
+ /** Callbacks to fire when the component is unmounted. */
33
+ _unmountedHooks: (() => void)[];
34
+ /** Callbacks to fire after any reactive update in this component. */
35
+ _updatedHooks: (() => void)[];
36
+ /** Error handler callbacks. */
37
+ _errorHooks: ((err: Error) => void)[];
38
+ /** Values provided by this instance (for inject in children). */
39
+ provides: Record<string | symbol, unknown>;
40
+ isMounted: boolean;
41
+ isUnmounted: boolean;
42
+ }
43
+ /**
44
+ * Create a fresh ComponentInstance.
45
+ */
46
+ export declare function createComponentInstance(component: SinwanComponent<any>, props: Record<string, any>, parent: ComponentInstance | null): ComponentInstance;
47
+ /**
48
+ * Get the currently active component instance.
49
+ * Used by lifecycle hooks to register themselves.
50
+ */
51
+ export declare function getCurrentInstance(): ComponentInstance | null;
52
+ /**
53
+ * Set the current instance (called by renderer before setup).
54
+ * Returns the previous instance for restoration.
55
+ */
56
+ export declare function setCurrentInstance(instance: ComponentInstance | null): ComponentInstance | null;
57
+ /**
58
+ * Run a function with `instance` as the current component instance.
59
+ * Automatically restores the previous instance when done.
60
+ */
61
+ export declare function withInstance<T>(instance: ComponentInstance, fn: () => T): T;
62
+ /**
63
+ * Fire all onMounted hooks for an instance and its children (depth-first).
64
+ */
65
+ export declare function fireMountedHooks(instance: ComponentInstance): void;
66
+ /**
67
+ * Fire all onUnmounted hooks and dispose all effects for an instance
68
+ * and its children (depth-first, children first).
69
+ */
70
+ export declare function fireUnmountedHooks(instance: ComponentInstance): void;
71
+ /**
72
+ * Fire onUpdated hooks for the current instance.
73
+ */
74
+ export declare function fireUpdatedHooks(instance: ComponentInstance): void;
75
+ /**
76
+ * Queue onUpdated hooks to run after the current reactive flush.
77
+ * Multiple DOM effects in the same flush produce one updated callback.
78
+ */
79
+ export declare function queueUpdatedHooks(instance: ComponentInstance | null): void;
80
+ /**
81
+ * Handle an error in the component tree — walks up to find an error handler.
82
+ */
83
+ export declare function handleComponentError(instance: ComponentInstance, err: Error): void;
84
+ //# sourceMappingURL=instance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instance.d.ts","sourceRoot":"","sources":["../../src/component/instance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAOxD,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;IAEZ,iDAAiD;IACjD,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC;IAEhC,sCAAsC;IACtC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAE3B,mDAAmD;IACnD,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAE5B,6CAA6C;IAC7C,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAEjC,iCAAiC;IACjC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAE9B,4DAA4D;IAC5D,OAAO,EAAE,SAAS,EAAE,CAAC;IAIrB,+DAA+D;IAC/D,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAE9B,yDAAyD;IACzD,eAAe,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAEhC,qEAAqE;IACrE,aAAa,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAE9B,+BAA+B;IAC/B,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC,EAAE,CAAC;IAItC,iEAAiE;IACjE,QAAQ,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,CAAC;IAI3C,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,eAAe,CAAC,GAAG,CAAC,EAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC1B,MAAM,EAAE,iBAAiB,GAAG,IAAI,GAC/B,iBAAiB,CAkBnB;AAMD;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,iBAAiB,GAAG,IAAI,CAE7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GACjC,iBAAiB,GAAG,IAAI,CAI1B;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,iBAAiB,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAO3E;AAID;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAgBlE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAqBpE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAIlE;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI,GAAG,IAAI,CAkB1E;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,iBAAiB,EAC3B,GAAG,EAAE,KAAK,GACT,IAAI,CAaN"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * SinwanJS Component Runtime — Lifecycle Hooks
3
+ *
4
+ * Vue-style lifecycle hooks that register on the current component instance.
5
+ * Must be registered while a component instance is active: during setup,
6
+ * or synchronously from another lifecycle hook owned by that component.
7
+ */
8
+ /**
9
+ * Register a callback that fires after the component is mounted to the DOM.
10
+ *
11
+ * @example
12
+ * const Timer = createComponent(() => {
13
+ * onMounted(() => {
14
+ * console.log("Timer mounted!");
15
+ * });
16
+ * return <div>Timer</div>;
17
+ * });
18
+ */
19
+ export declare function onMounted(fn: () => void): void;
20
+ /**
21
+ * Register a callback that fires when the component is unmounted.
22
+ * Use for cleanup: cancel timers, remove global listeners, etc.
23
+ *
24
+ * @example
25
+ * onMounted(() => {
26
+ * const id = setInterval(tick, 1000);
27
+ * onUnmounted(() => clearInterval(id));
28
+ * });
29
+ */
30
+ export declare function onUnmounted(fn: () => void): void;
31
+ /**
32
+ * Register a callback that fires after any reactive DOM update
33
+ * within this component. Useful for post-update DOM measurements.
34
+ */
35
+ export declare function onUpdated(fn: () => void): void;
36
+ /**
37
+ * Register an error handler for this component and its children.
38
+ * Errors bubble up the component tree until a handler is found.
39
+ */
40
+ export declare function onError(fn: (err: Error) => void): void;
41
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/component/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAM9C;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAMhD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAM9C;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAMtD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * SinwanJS Component Runtime — Provide / Inject
3
+ *
4
+ * Dependency injection system like Vue's provide/inject.
5
+ * A parent component provides a value; any descendant can inject it.
6
+ * Uses prototype chain inheritance on the instance's `provides` object.
7
+ */
8
+ /** Injection key — string or symbol for type safety. */
9
+ export type InjectionKey<T> = symbol & {
10
+ __type?: T;
11
+ };
12
+ /**
13
+ * Provide a value for descendants to inject.
14
+ * Must be called while a component instance is active.
15
+ * Prefer setup so descendants can inject the value during their setup.
16
+ *
17
+ * @example
18
+ * const ThemeKey: InjectionKey<string> = Symbol("theme");
19
+ *
20
+ * const App = createComponent(() => {
21
+ * provide(ThemeKey, "dark");
22
+ * return <Child />;
23
+ * });
24
+ */
25
+ export declare function provide<T>(key: string | symbol, value: T): void;
26
+ /**
27
+ * Inject a value provided by an ancestor component.
28
+ * Must be called while a component instance is active.
29
+ *
30
+ * Overloads:
31
+ * - `inject(InjectionKey<T>)` — typed key, returns `T | undefined`
32
+ * - `inject(InjectionKey<T>, T)` — typed key with default, returns `T`
33
+ * - `inject<T>(key, default?)` — string/symbol key, T must be specified
34
+ *
35
+ * @example
36
+ * const Child = createComponent(() => {
37
+ * const theme = inject(ThemeKey, "light");
38
+ * return <div class={theme}>Hello</div>;
39
+ * });
40
+ */
41
+ export declare function inject<T>(key: InjectionKey<T>): T | undefined;
42
+ export declare function inject<T>(key: InjectionKey<T>, defaultValue: T): T;
43
+ export declare function inject<T>(key: string | symbol, defaultValue: T): T;
44
+ export declare function inject<T>(key: string | symbol): T | undefined;
45
+ //# sourceMappingURL=provide-inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provide-inject.d.ts","sourceRoot":"","sources":["../../src/component/provide-inject.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,wDAAwD;AACxD,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,MAAM,GAAG;IAAE,MAAM,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI,CAW/D;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;AAC/D,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC;AACpE,wBAAgB,MAAM,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Sinwan — HTML Escaping
3
+ *
4
+ * Security utilities for sanitizing interpolated values.
5
+ * Runtime-agnostic: prefers `Bun.escapeHTML` when running on Bun (native
6
+ * speed), and falls back to a portable implementation everywhere else
7
+ * (Node, Deno, Cloudflare Workers, browsers).
8
+ */
9
+ import { HtmlEscapedString, raw } from "./jsx/jsx-runtime";
10
+ export { HtmlEscapedString, raw };
11
+ /**
12
+ * Escape HTML entities in any value.
13
+ * Returns "" for null/undefined/boolean and pass-through for numbers.
14
+ * Pre-escaped strings (`HtmlEscapedString`) are returned untouched.
15
+ */
16
+ export declare function escapeHtml(value: unknown): string;
17
+ /**
18
+ * Mark a string as safe HTML (pre-escaped).
19
+ * USE WITH CAUTION - only for trusted content!
20
+ */
21
+ export declare function safeHtml(html: string): HtmlEscapedString;
22
+ /**
23
+ * Check if a value is already escaped HTML.
24
+ */
25
+ export declare function isSafeHtml(value: unknown): value is HtmlEscapedString;
26
+ //# sourceMappingURL=escaper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escaper.d.ts","sourceRoot":"","sources":["../src/escaper.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC;AAgClC;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAMjD;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAExD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,iBAAiB,CAErE"}