@avento-space/ts-ui 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 (143) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +277 -0
  3. package/dist/adapters/dom/hydration.d.ts +4 -0
  4. package/dist/adapters/dom/hydration.d.ts.map +1 -0
  5. package/dist/adapters/dom/hydration.js +366 -0
  6. package/dist/adapters/dom/hydration.js.map +1 -0
  7. package/dist/adapters/dom/index.d.ts +3 -0
  8. package/dist/adapters/dom/index.d.ts.map +1 -0
  9. package/dist/adapters/dom/index.js +3 -0
  10. package/dist/adapters/dom/index.js.map +1 -0
  11. package/dist/adapters/dom/node-metadata.d.ts +18 -0
  12. package/dist/adapters/dom/node-metadata.d.ts.map +1 -0
  13. package/dist/adapters/dom/node-metadata.js +146 -0
  14. package/dist/adapters/dom/node-metadata.js.map +1 -0
  15. package/dist/adapters/dom/renderer.d.ts +6 -0
  16. package/dist/adapters/dom/renderer.d.ts.map +1 -0
  17. package/dist/adapters/dom/renderer.js +748 -0
  18. package/dist/adapters/dom/renderer.js.map +1 -0
  19. package/dist/adapters/ssr/index.d.ts +3 -0
  20. package/dist/adapters/ssr/index.d.ts.map +1 -0
  21. package/dist/adapters/ssr/index.js +2 -0
  22. package/dist/adapters/ssr/index.js.map +1 -0
  23. package/dist/adapters/ssr/renderer.d.ts +9 -0
  24. package/dist/adapters/ssr/renderer.d.ts.map +1 -0
  25. package/dist/adapters/ssr/renderer.js +294 -0
  26. package/dist/adapters/ssr/renderer.js.map +1 -0
  27. package/dist/compiler/index.d.ts +2 -0
  28. package/dist/compiler/index.d.ts.map +1 -0
  29. package/dist/compiler/index.js +2 -0
  30. package/dist/compiler/index.js.map +1 -0
  31. package/dist/compiler/jsx.d.ts +10 -0
  32. package/dist/compiler/jsx.d.ts.map +1 -0
  33. package/dist/compiler/jsx.js +48 -0
  34. package/dist/compiler/jsx.js.map +1 -0
  35. package/dist/components/button.d.ts +12 -0
  36. package/dist/components/button.d.ts.map +1 -0
  37. package/dist/components/button.js +11 -0
  38. package/dist/components/button.js.map +1 -0
  39. package/dist/components/index.d.ts +9 -0
  40. package/dist/components/index.d.ts.map +1 -0
  41. package/dist/components/index.js +5 -0
  42. package/dist/components/index.js.map +1 -0
  43. package/dist/components/input.d.ts +22 -0
  44. package/dist/components/input.d.ts.map +1 -0
  45. package/dist/components/input.js +44 -0
  46. package/dist/components/input.js.map +1 -0
  47. package/dist/components/list.d.ts +18 -0
  48. package/dist/components/list.d.ts.map +1 -0
  49. package/dist/components/list.js +46 -0
  50. package/dist/components/list.js.map +1 -0
  51. package/dist/components/portal.d.ts +7 -0
  52. package/dist/components/portal.d.ts.map +1 -0
  53. package/dist/components/portal.js +30 -0
  54. package/dist/components/portal.js.map +1 -0
  55. package/dist/core/context.d.ts +13 -0
  56. package/dist/core/context.d.ts.map +1 -0
  57. package/dist/core/context.js +46 -0
  58. package/dist/core/context.js.map +1 -0
  59. package/dist/core/h.d.ts +4 -0
  60. package/dist/core/h.d.ts.map +1 -0
  61. package/dist/core/h.js +23 -0
  62. package/dist/core/h.js.map +1 -0
  63. package/dist/core/index.d.ts +14 -0
  64. package/dist/core/index.d.ts.map +1 -0
  65. package/dist/core/index.js +10 -0
  66. package/dist/core/index.js.map +1 -0
  67. package/dist/core/lifecycle.d.ts +11 -0
  68. package/dist/core/lifecycle.d.ts.map +1 -0
  69. package/dist/core/lifecycle.js +62 -0
  70. package/dist/core/lifecycle.js.map +1 -0
  71. package/dist/core/plugin.d.ts +17 -0
  72. package/dist/core/plugin.d.ts.map +1 -0
  73. package/dist/core/plugin.js +117 -0
  74. package/dist/core/plugin.js.map +1 -0
  75. package/dist/core/reactive-context.d.ts +20 -0
  76. package/dist/core/reactive-context.d.ts.map +1 -0
  77. package/dist/core/reactive-context.js +42 -0
  78. package/dist/core/reactive-context.js.map +1 -0
  79. package/dist/core/scheduler.d.ts +13 -0
  80. package/dist/core/scheduler.d.ts.map +1 -0
  81. package/dist/core/scheduler.js +80 -0
  82. package/dist/core/scheduler.js.map +1 -0
  83. package/dist/core/signal.d.ts +14 -0
  84. package/dist/core/signal.d.ts.map +1 -0
  85. package/dist/core/signal.js +397 -0
  86. package/dist/core/signal.js.map +1 -0
  87. package/dist/core/store.d.ts +6 -0
  88. package/dist/core/store.d.ts.map +1 -0
  89. package/dist/core/store.js +35 -0
  90. package/dist/core/store.js.map +1 -0
  91. package/dist/core/types.d.ts +52 -0
  92. package/dist/core/types.d.ts.map +1 -0
  93. package/dist/core/types.js +8 -0
  94. package/dist/core/types.js.map +1 -0
  95. package/dist/devtools/index.d.ts +5 -0
  96. package/dist/devtools/index.d.ts.map +1 -0
  97. package/dist/devtools/index.js +3 -0
  98. package/dist/devtools/index.js.map +1 -0
  99. package/dist/devtools/inspector.d.ts +14 -0
  100. package/dist/devtools/inspector.d.ts.map +1 -0
  101. package/dist/devtools/inspector.js +83 -0
  102. package/dist/devtools/inspector.js.map +1 -0
  103. package/dist/devtools/logger.d.ts +17 -0
  104. package/dist/devtools/logger.d.ts.map +1 -0
  105. package/dist/devtools/logger.js +44 -0
  106. package/dist/devtools/logger.js.map +1 -0
  107. package/dist/examples/counter.d.ts +4 -0
  108. package/dist/examples/counter.d.ts.map +1 -0
  109. package/dist/examples/counter.js +21 -0
  110. package/dist/examples/counter.js.map +1 -0
  111. package/dist/examples/ssr.d.ts +2 -0
  112. package/dist/examples/ssr.d.ts.map +1 -0
  113. package/dist/examples/ssr.js +43 -0
  114. package/dist/examples/ssr.js.map +1 -0
  115. package/dist/examples/todo.d.ts +4 -0
  116. package/dist/examples/todo.d.ts.map +1 -0
  117. package/dist/examples/todo.js +76 -0
  118. package/dist/examples/todo.js.map +1 -0
  119. package/dist/index.d.ts +18 -0
  120. package/dist/index.d.ts.map +1 -0
  121. package/dist/index.js +20 -0
  122. package/dist/index.js.map +1 -0
  123. package/dist/plugins/index.d.ts +3 -0
  124. package/dist/plugins/index.d.ts.map +1 -0
  125. package/dist/plugins/index.js +2 -0
  126. package/dist/plugins/index.js.map +1 -0
  127. package/dist/plugins/router.d.ts +4 -0
  128. package/dist/plugins/router.d.ts.map +1 -0
  129. package/dist/plugins/router.js +90 -0
  130. package/dist/plugins/router.js.map +1 -0
  131. package/dist/plugins/types.d.ts +17 -0
  132. package/dist/plugins/types.d.ts.map +1 -0
  133. package/dist/plugins/types.js +2 -0
  134. package/dist/plugins/types.js.map +1 -0
  135. package/dist/render/reconciler.d.ts +6 -0
  136. package/dist/render/reconciler.d.ts.map +1 -0
  137. package/dist/render/reconciler.js +80 -0
  138. package/dist/render/reconciler.js.map +1 -0
  139. package/dist/render/types.d.ts +17 -0
  140. package/dist/render/types.d.ts.map +1 -0
  141. package/dist/render/types.js +2 -0
  142. package/dist/render/types.js.map +1 -0
  143. package/package.json +99 -0
@@ -0,0 +1,18 @@
1
+ import type { VNode, VNodeChild } from '../core/types.js';
2
+ export interface ListProps {
3
+ items: VNodeChild[];
4
+ renderItem: (item: VNodeChild, index: number) => VNode;
5
+ keyed?: boolean;
6
+ emptyState?: VNodeChild;
7
+ }
8
+ export declare function List(props: ListProps): VNode;
9
+ export interface VirtualListProps {
10
+ items: VNodeChild[];
11
+ renderItem: (item: VNodeChild, index: number) => VNode;
12
+ itemHeight: number;
13
+ containerHeight: number;
14
+ overscan?: number;
15
+ scrollTop?: number;
16
+ }
17
+ export declare function VirtualList(props: VirtualListProps): VNode;
18
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/components/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,KAAK,CAiB5C;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,UAAU,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,KAAK,CAoC1D"}
@@ -0,0 +1,46 @@
1
+ import { h } from '../core/h.js';
2
+ export function List(props) {
3
+ if (props.items.length === 0 && props.emptyState != null) {
4
+ return h('div', { class: 'list-empty' }, [
5
+ typeof props.emptyState === 'object' && !Array.isArray(props.emptyState)
6
+ ? props.emptyState
7
+ : h('p', { class: 'empty-text' }, [String(props.emptyState)]),
8
+ ]);
9
+ }
10
+ return h('ul', { class: 'list' }, props.items.map((item, index) => h('li', {
11
+ key: props.keyed ? index : undefined,
12
+ class: 'list-item',
13
+ }, [props.renderItem(item, index)])));
14
+ }
15
+ export function VirtualList(props) {
16
+ const overscan = props.overscan ?? 3;
17
+ const totalHeight = props.items.length * props.itemHeight;
18
+ const visibleCount = Math.ceil(props.containerHeight / props.itemHeight) + overscan * 2;
19
+ const startIndex = Math.max(0, Math.floor(((props.scrollTop ?? 0) / props.itemHeight)) - overscan);
20
+ const endIndex = Math.min(props.items.length, startIndex + visibleCount);
21
+ const visibleItems = props.items.slice(startIndex, endIndex);
22
+ return h('div', {
23
+ style: {
24
+ height: `${props.containerHeight}px`,
25
+ overflowY: 'auto',
26
+ position: 'relative',
27
+ },
28
+ }, [
29
+ h('div', {
30
+ style: {
31
+ height: `${totalHeight}px`,
32
+ position: 'relative',
33
+ },
34
+ }, visibleItems.map((item, i) => h('div', {
35
+ key: startIndex + i,
36
+ style: {
37
+ position: 'absolute',
38
+ top: `${(startIndex + i) * props.itemHeight}px`,
39
+ height: `${props.itemHeight}px`,
40
+ left: 0,
41
+ right: 0,
42
+ },
43
+ }, [props.renderItem(item, startIndex + i)]))),
44
+ ]);
45
+ }
46
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/components/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { VNode, VNodeChild } from '../core/types.js';
2
+ export interface PortalProps {
3
+ target?: string | Element;
4
+ }
5
+ export declare function setPortalRoot(el: Element | null): void;
6
+ export declare function Portal(props: PortalProps, children?: VNodeChild[]): VNode;
7
+ //# sourceMappingURL=portal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.d.ts","sourceRoot":"","sources":["../../src/components/portal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG1D,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAID,wBAAgB,aAAa,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAEtD;AAaD,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,QAAQ,CAAC,EAAE,UAAU,EAAE,GAAG,KAAK,CAYzE"}
@@ -0,0 +1,30 @@
1
+ import { Fragment } from '../core/types.js';
2
+ let defaultPortalRoot = null;
3
+ export function setPortalRoot(el) {
4
+ defaultPortalRoot = el;
5
+ }
6
+ function resolveTarget(target) {
7
+ if (!target)
8
+ return defaultPortalRoot ?? null;
9
+ if (typeof target === 'string') {
10
+ if (typeof document !== 'undefined')
11
+ return document.querySelector(target);
12
+ return null;
13
+ }
14
+ return target;
15
+ }
16
+ let portalIdCounter = 0;
17
+ export function Portal(props, children) {
18
+ const comp = ((_props, _children) => {
19
+ return { type: Fragment, props: null, children: _children ?? [] };
20
+ });
21
+ comp.__isPortal = true;
22
+ comp.__portalId = `__portal_${++portalIdCounter}`;
23
+ comp.__portalTarget = resolveTarget(props.target);
24
+ return {
25
+ type: comp,
26
+ props: null,
27
+ children: children ?? [],
28
+ };
29
+ }
30
+ //# sourceMappingURL=portal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portal.js","sourceRoot":"","sources":["../../src/components/portal.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAM5C,IAAI,iBAAiB,GAAmB,IAAI,CAAC;AAE7C,MAAM,UAAU,aAAa,CAAC,EAAkB;IAC9C,iBAAiB,GAAG,EAAE,CAAC;AACzB,CAAC;AAED,SAAS,aAAa,CAAC,MAAyB;IAC9C,IAAI,CAAC,MAAM;QAAE,OAAO,iBAAiB,IAAI,IAAI,CAAC;IAC9C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC3E,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,IAAI,eAAe,GAAG,CAAC,CAAC;AAExB,MAAM,UAAU,MAAM,CAAC,KAAkB,EAAE,QAAuB;IAChE,MAAM,IAAI,GAAG,CAAC,CAAC,MAA2B,EAAE,SAAiB,EAAO,EAAE;QACpE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,IAAI,EAAE,EAAE,CAAC;IACpE,CAAC,CAAQ,CAAC;IACV,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,UAAU,GAAG,YAAY,EAAE,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,cAAc,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO;QACL,IAAI,EAAE,IAAI;QACV,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,QAAQ,IAAI,EAAE;KACzB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { Context } from './types.js';
2
+ export interface ContextProvider {
3
+ context: Context<any>;
4
+ value: any;
5
+ }
6
+ export declare function createContext<T>(defaultValue: T): Context<T>;
7
+ export declare function createProviderComponent<T>(context: Context<T>, value: T): (props: Record<string, any>, children?: any[]) => any;
8
+ export declare function getContextProviders(): ContextProvider[] | null;
9
+ export declare function pushContextProviders(providers: ContextProvider[] | null): void;
10
+ export declare function popContextProviders(): void;
11
+ export declare function setContextProviders(providers: ContextProvider[] | null): ContextProvider[] | null;
12
+ export declare function useContext<T>(context: Context<T>): T;
13
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC;CACZ;AAKD,wBAAgB,aAAa,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAK5D;AAED,wBAAgB,uBAAuB,CAAC,CAAC,EACvC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,KAAK,EAAE,CAAC,GACP,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,EAAE,GAAG,EAAE,KAAK,GAAG,CAQvD;AAED,wBAAgB,mBAAmB,IAAI,eAAe,EAAE,GAAG,IAAI,CAE9D;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,IAAI,CAG9E;AAED,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,IAAI,GAAG,eAAe,EAAE,GAAG,IAAI,CAIjG;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAWpD"}
@@ -0,0 +1,46 @@
1
+ import { Fragment } from './types.js';
2
+ let currentProviders = null;
3
+ const providerStack = [];
4
+ export function createContext(defaultValue) {
5
+ return {
6
+ id: Symbol('context'),
7
+ defaultValue,
8
+ };
9
+ }
10
+ export function createProviderComponent(context, value) {
11
+ const comp = ((_props, children) => {
12
+ return { type: Fragment, props: null, children: children ?? [] };
13
+ });
14
+ comp.__isProvider = true;
15
+ comp.__context = context;
16
+ comp.__value = value;
17
+ return comp;
18
+ }
19
+ export function getContextProviders() {
20
+ return currentProviders ? [...currentProviders] : null;
21
+ }
22
+ export function pushContextProviders(providers) {
23
+ providerStack.push(currentProviders);
24
+ currentProviders = providers;
25
+ }
26
+ export function popContextProviders() {
27
+ currentProviders = providerStack.pop() ?? null;
28
+ }
29
+ export function setContextProviders(providers) {
30
+ const prev = currentProviders;
31
+ currentProviders = providers;
32
+ return prev;
33
+ }
34
+ export function useContext(context) {
35
+ const providers = currentProviders;
36
+ if (providers) {
37
+ for (let i = providers.length - 1; i >= 0; i--) {
38
+ const p = providers[i];
39
+ if (p.context.id === context.id) {
40
+ return p.value;
41
+ }
42
+ }
43
+ }
44
+ return context.defaultValue;
45
+ }
46
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAOtC,IAAI,gBAAgB,GAA6B,IAAI,CAAC;AACtD,MAAM,aAAa,GAAiC,EAAE,CAAC;AAEvD,MAAM,UAAU,aAAa,CAAI,YAAe;IAC9C,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC;QACrB,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAmB,EACnB,KAAQ;IAER,MAAM,IAAI,GAAG,CAAC,CAAC,MAA2B,EAAE,QAAgB,EAAO,EAAE;QACnE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC;IACnE,CAAC,CAAQ,CAAC;IACV,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;IACzB,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAmC;IACtE,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACrC,gBAAgB,GAAG,SAAS,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,mBAAmB;IACjC,gBAAgB,GAAG,aAAa,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAmC;IACrE,MAAM,IAAI,GAAG,gBAAgB,CAAC;IAC9B,gBAAgB,GAAG,SAAS,CAAC;IAC7B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,OAAmB;IAC/C,MAAM,SAAS,GAAG,gBAAgB,CAAC;IACnC,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,EAAE,CAAC;gBAChC,OAAO,CAAC,CAAC,KAAK,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAC,YAAY,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { VNode, VNodeChild, Component } from './types.js';
2
+ import { Fragment } from './types.js';
3
+ export declare function h(type: string | Component | typeof Fragment, props?: Record<string, any> | null, ...children: (VNodeChild | VNodeChild[])[]): VNode;
4
+ //# sourceMappingURL=h.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h.d.ts","sourceRoot":"","sources":["../../src/core/h.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,wBAAgB,CAAC,CACf,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,QAAQ,EAC1C,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,EACxC,GAAG,QAAQ,EAAE,CAAC,UAAU,GAAG,UAAU,EAAE,CAAC,EAAE,GACzC,KAAK,CAUP"}
package/dist/core/h.js ADDED
@@ -0,0 +1,23 @@
1
+ export function h(type, props = null, ...children) {
2
+ const flat = [];
3
+ for (const child of children) {
4
+ if (Array.isArray(child)) {
5
+ flattenInto(child, flat);
6
+ }
7
+ else {
8
+ flat.push(child);
9
+ }
10
+ }
11
+ return { type: type, props: props ?? null, children: flat };
12
+ }
13
+ function flattenInto(source, target) {
14
+ for (const item of source) {
15
+ if (Array.isArray(item)) {
16
+ flattenInto(item, target);
17
+ }
18
+ else {
19
+ target.push(item);
20
+ }
21
+ }
22
+ }
23
+ //# sourceMappingURL=h.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"h.js","sourceRoot":"","sources":["../../src/core/h.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,CAAC,CACf,IAA0C,EAC1C,QAAoC,IAAI,EACxC,GAAG,QAAuC;IAE1C,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC3B,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAW,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AACrE,CAAC;AAED,SAAS,WAAW,CAAC,MAAoB,EAAE,MAAoB;IAC7D,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,14 @@
1
+ export type { VNode, VNodeChild, Component, Signal, WritableSignal, ReadonlySignal, Context, Store, LifecycleHook, LifecycleContext, Plugin, PluginAPI, } from './types.js';
2
+ export { Fragment } from './types.js';
3
+ export { h } from './h.js';
4
+ export { batch, scheduleMicrotask, isBatching } from './scheduler.js';
5
+ export { signal, computed, effect, isSignal, untrack, hydrateSignals } from './signal.js';
6
+ export { createContext, useContext, setContextProviders, getContextProviders, createProviderComponent } from './context.js';
7
+ export type { ContextProvider } from './context.js';
8
+ export { createStore, createSliceStore } from './store.js';
9
+ export { setCurrentLifecycle, getCurrentLifecycle, onMount, onUnmount, onUpdate, trackSignal, } from './lifecycle.js';
10
+ export { registerPlugin, unregisterPlugin, getPlugin, hasPlugin, runPluginHook, getPluginAPI, createPluginSystem, } from './plugin.js';
11
+ export type { PluginSystem } from './plugin.js';
12
+ export { snapshotReactiveContext, restoreReactiveContext, runWithReactiveContext, createNewReactiveContext, } from './reactive-context.js';
13
+ export type { ReactiveContext } from './reactive-context.js';
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,KAAK,EAAE,UAAU,EAAE,SAAS,EAC5B,MAAM,EAAE,cAAc,EAAE,cAAc,EACtC,OAAO,EAAE,KAAK,EACd,aAAa,EAAE,gBAAgB,EAC/B,MAAM,EAAE,SAAS,GAClB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC5H,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EACL,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAC1C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EACtD,aAAa,EAAE,YAAY,EAAE,kBAAkB,GAChD,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,uBAAuB,EAAE,sBAAsB,EAC/C,sBAAsB,EAAE,wBAAwB,GACjD,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export { Fragment } from './types.js';
2
+ export { h } from './h.js';
3
+ export { batch, scheduleMicrotask, isBatching } from './scheduler.js';
4
+ export { signal, computed, effect, isSignal, untrack, hydrateSignals } from './signal.js';
5
+ export { createContext, useContext, setContextProviders, getContextProviders, createProviderComponent } from './context.js';
6
+ export { createStore, createSliceStore } from './store.js';
7
+ export { setCurrentLifecycle, getCurrentLifecycle, onMount, onUnmount, onUpdate, trackSignal, } from './lifecycle.js';
8
+ export { registerPlugin, unregisterPlugin, getPlugin, hasPlugin, runPluginHook, getPluginAPI, createPluginSystem, } from './plugin.js';
9
+ export { snapshotReactiveContext, restoreReactiveContext, runWithReactiveContext, createNewReactiveContext, } from './reactive-context.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACtE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC1F,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE5H,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EACL,mBAAmB,EAAE,mBAAmB,EACxC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,GAC1C,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EAAE,gBAAgB,EAAE,SAAS,EAAE,SAAS,EACtD,aAAa,EAAE,YAAY,EAAE,kBAAkB,GAChD,MAAM,aAAa,CAAC;AAErB,OAAO,EACL,uBAAuB,EAAE,sBAAsB,EAC/C,sBAAsB,EAAE,wBAAwB,GACjD,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { LifecycleContext } from './types.js';
2
+ export declare function getCurrentLifecycle(): LifecycleContext | null;
3
+ export declare function setCurrentLifecycle(ctx: LifecycleContext | null): LifecycleContext | null;
4
+ export declare function createLifecycleContext(): LifecycleContext;
5
+ export declare function trackSignal(s: {
6
+ destroy(): void;
7
+ }): void;
8
+ export declare function onMount(fn: () => void): void;
9
+ export declare function onUnmount(fn: () => void): void;
10
+ export declare function onUpdate(fn: () => void): void;
11
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIlE,wBAAgB,mBAAmB,IAAI,gBAAgB,GAAG,IAAI,CAE7D;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,IAAI,GAAG,gBAAgB,GAAG,IAAI,CAIzF;AAED,wBAAgB,sBAAsB,IAAI,gBAAgB,CAsCzD;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE;IAAE,OAAO,IAAI,IAAI,CAAA;CAAE,GAAG,IAAI,CAExD;AAED,wBAAgB,OAAO,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAE5C;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAE9C;AAED,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAE7C"}
@@ -0,0 +1,62 @@
1
+ let currentContext = null;
2
+ export function getCurrentLifecycle() {
3
+ return currentContext;
4
+ }
5
+ export function setCurrentLifecycle(ctx) {
6
+ const prev = currentContext;
7
+ currentContext = ctx;
8
+ return prev;
9
+ }
10
+ export function createLifecycleContext() {
11
+ const hooks = new Map([
12
+ ['mount', new Set()],
13
+ ['unmount', new Set()],
14
+ ['update', new Set()],
15
+ ]);
16
+ const signalCleanups = new Set();
17
+ return {
18
+ hooks,
19
+ signals: signalCleanups,
20
+ addSignal(s) {
21
+ signalCleanups.add(s);
22
+ },
23
+ runHook(hook) {
24
+ const fns = hooks.get(hook);
25
+ if (fns) {
26
+ for (const fn of fns) {
27
+ try {
28
+ fn();
29
+ }
30
+ catch (e) {
31
+ console.error(`Lifecycle hook "${hook}" failed:`, e);
32
+ }
33
+ }
34
+ }
35
+ },
36
+ dispose() {
37
+ hooks.forEach((set) => set.clear());
38
+ for (const s of signalCleanups) {
39
+ try {
40
+ s.destroy();
41
+ }
42
+ catch (e) {
43
+ console.error('Lifecycle cleanup failed:', e);
44
+ }
45
+ }
46
+ signalCleanups.clear();
47
+ },
48
+ };
49
+ }
50
+ export function trackSignal(s) {
51
+ currentContext?.addSignal(s);
52
+ }
53
+ export function onMount(fn) {
54
+ currentContext?.hooks.get('mount')?.add(fn);
55
+ }
56
+ export function onUnmount(fn) {
57
+ currentContext?.hooks.get('unmount')?.add(fn);
58
+ }
59
+ export function onUpdate(fn) {
60
+ currentContext?.hooks.get('update')?.add(fn);
61
+ }
62
+ //# sourceMappingURL=lifecycle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.js","sourceRoot":"","sources":["../../src/core/lifecycle.ts"],"names":[],"mappings":"AAEA,IAAI,cAAc,GAA4B,IAAI,CAAC;AAEnD,MAAM,UAAU,mBAAmB;IACjC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAA4B;IAC9D,MAAM,IAAI,GAAG,cAAc,CAAC;IAC5B,cAAc,GAAG,GAAG,CAAC;IACrB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAiC;QACpD,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC;QACpB,CAAC,SAAS,EAAE,IAAI,GAAG,EAAE,CAAC;QACtB,CAAC,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC;KACtB,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,IAAI,GAAG,EAAuB,CAAC;IAEtD,OAAO;QACL,KAAK;QACL,OAAO,EAAE,cAAc;QACvB,SAAS,CAAC,CAAsB;YAC9B,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,CAAC,IAAmB;YACzB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC5B,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACH,EAAE,EAAE,CAAC;oBACP,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACX,OAAO,CAAC,KAAK,CAAC,mBAAmB,IAAI,WAAW,EAAE,CAAC,CAAC,CAAC;oBACvD,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO;YACL,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;YACpC,KAAK,MAAM,CAAC,IAAI,cAAc,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,CAAC,CAAC,OAAO,EAAE,CAAC;gBACd,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;YACD,cAAc,CAAC,KAAK,EAAE,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAsB;IAChD,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,EAAc;IACpC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,EAAc;IACtC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,EAAc;IACrC,cAAc,EAAE,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,17 @@
1
+ import type { Plugin, PluginAPI } from './types.js';
2
+ export interface PluginSystem {
3
+ registerPlugin(plugin: Plugin): void;
4
+ unregisterPlugin(name: string): boolean;
5
+ getPlugin(name: string): Plugin | undefined;
6
+ hasPlugin(name: string): boolean;
7
+ runPluginHook(name: string, ...args: any[]): void;
8
+ getPluginAPI(): PluginAPI;
9
+ }
10
+ export declare function createPluginSystem(): PluginSystem;
11
+ export declare function registerPlugin(plugin: Plugin): void;
12
+ export declare function unregisterPlugin(name: string): boolean;
13
+ export declare function getPlugin(name: string): Plugin | undefined;
14
+ export declare function hasPlugin(name: string): boolean;
15
+ export declare function runPluginHook(name: string, ...args: any[]): void;
16
+ export declare function getPluginAPI(): PluginAPI;
17
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACxC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5C,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACjC,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IAClD,YAAY,IAAI,SAAS,CAAC;CAC3B;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAyGjD;AAID,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAEnD;AACD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEtD;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1D;AACD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AACD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAEhE;AACD,wBAAgB,YAAY,IAAI,SAAS,CAExC"}
@@ -0,0 +1,117 @@
1
+ export function createPluginSystem() {
2
+ const pluginHooks = new Map();
3
+ const registeredPlugins = new Map();
4
+ const pluginHookCleanups = new Map();
5
+ function registerPlugin(plugin) {
6
+ if (!plugin || typeof plugin !== 'object') {
7
+ throw new Error('Invalid plugin: plugin must be a non-null object');
8
+ }
9
+ if (typeof plugin.name !== 'string' || plugin.name.length === 0) {
10
+ throw new Error('Invalid plugin: plugin.name must be a non-empty string');
11
+ }
12
+ if (typeof plugin.version !== 'string') {
13
+ throw new Error('Invalid plugin: plugin.version must be a string');
14
+ }
15
+ if (typeof plugin.setup !== 'function') {
16
+ throw new Error(`Invalid plugin "${plugin.name}": plugin.setup must be a function`);
17
+ }
18
+ if (registeredPlugins.has(plugin.name)) {
19
+ throw new Error(`Plugin "${plugin.name}" is already registered`);
20
+ }
21
+ registeredPlugins.set(plugin.name, plugin);
22
+ const cleanups = new Set();
23
+ pluginHookCleanups.set(plugin.name, cleanups);
24
+ const pluginAPI = {
25
+ registerHook(name, fn) {
26
+ if (!pluginHooks.has(name)) {
27
+ pluginHooks.set(name, new Set());
28
+ }
29
+ const hooks = pluginHooks.get(name);
30
+ hooks.add(fn);
31
+ const cleanup = () => {
32
+ hooks.delete(fn);
33
+ cleanups.delete(cleanup);
34
+ };
35
+ cleanups.add(cleanup);
36
+ return cleanup;
37
+ },
38
+ getHook(name) {
39
+ const hooks = pluginHooks.get(name);
40
+ return hooks ? new Set(hooks) : new Set();
41
+ },
42
+ };
43
+ plugin.setup(pluginAPI);
44
+ }
45
+ function unregisterPlugin(name) {
46
+ const cleanups = pluginHookCleanups.get(name);
47
+ if (cleanups) {
48
+ for (const fn of cleanups)
49
+ fn();
50
+ pluginHookCleanups.delete(name);
51
+ }
52
+ return registeredPlugins.delete(name);
53
+ }
54
+ function getPlugin(name) {
55
+ return registeredPlugins.get(name);
56
+ }
57
+ function hasPlugin(name) {
58
+ return registeredPlugins.has(name);
59
+ }
60
+ function runPluginHook(name, ...args) {
61
+ const hooks = pluginHooks.get(name);
62
+ if (hooks) {
63
+ for (const fn of hooks) {
64
+ try {
65
+ fn(...args);
66
+ }
67
+ catch (e) {
68
+ console.error(`Plugin hook "${name}" failed:`, e);
69
+ }
70
+ }
71
+ }
72
+ }
73
+ function getPluginAPI() {
74
+ return {
75
+ registerHook(name, fn) {
76
+ if (!pluginHooks.has(name)) {
77
+ pluginHooks.set(name, new Set());
78
+ }
79
+ const hooks = pluginHooks.get(name);
80
+ hooks.add(fn);
81
+ return () => hooks.delete(fn);
82
+ },
83
+ getHook(name) {
84
+ const hooks = pluginHooks.get(name);
85
+ return hooks ? new Set(hooks) : new Set();
86
+ },
87
+ };
88
+ }
89
+ return {
90
+ registerPlugin,
91
+ unregisterPlugin,
92
+ getPlugin,
93
+ hasPlugin,
94
+ runPluginHook,
95
+ getPluginAPI,
96
+ };
97
+ }
98
+ const defaultSystem = createPluginSystem();
99
+ export function registerPlugin(plugin) {
100
+ defaultSystem.registerPlugin(plugin);
101
+ }
102
+ export function unregisterPlugin(name) {
103
+ return defaultSystem.unregisterPlugin(name);
104
+ }
105
+ export function getPlugin(name) {
106
+ return defaultSystem.getPlugin(name);
107
+ }
108
+ export function hasPlugin(name) {
109
+ return defaultSystem.hasPlugin(name);
110
+ }
111
+ export function runPluginHook(name, ...args) {
112
+ defaultSystem.runPluginHook(name, ...args);
113
+ }
114
+ export function getPluginAPI() {
115
+ return defaultSystem.getPluginAPI();
116
+ }
117
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/core/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { SchedulerSnapshot } from './scheduler.js';
2
+ import type { LifecycleContext } from './types.js';
3
+ import type { ContextProvider } from './context.js';
4
+ export interface ReactiveContext {
5
+ signal: {
6
+ activeNode: unknown;
7
+ };
8
+ scheduler: SchedulerSnapshot;
9
+ lifecycle: {
10
+ currentContext: LifecycleContext | null;
11
+ };
12
+ context: {
13
+ currentProviders: ContextProvider[] | null;
14
+ };
15
+ }
16
+ export declare function snapshotReactiveContext(): ReactiveContext;
17
+ export declare function restoreReactiveContext(ctx: ReactiveContext): void;
18
+ export declare function runWithReactiveContext<T>(ctx: ReactiveContext, fn: () => T): T;
19
+ export declare function createNewReactiveContext(): ReactiveContext;
20
+ //# sourceMappingURL=reactive-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-context.d.ts","sourceRoot":"","sources":["../../src/core/reactive-context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE;QAAE,UAAU,EAAE,OAAO,CAAA;KAAE,CAAC;IAChC,SAAS,EAAE,iBAAiB,CAAC;IAC7B,SAAS,EAAE;QAAE,cAAc,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAAE,CAAC;IACvD,OAAO,EAAE;QAAE,gBAAgB,EAAE,eAAe,EAAE,GAAG,IAAI,CAAA;KAAE,CAAC;CACzD;AAED,wBAAgB,uBAAuB,IAAI,eAAe,CAOzD;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAKjE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ9E;AAED,wBAAgB,wBAAwB,IAAI,eAAe,CAY1D"}
@@ -0,0 +1,42 @@
1
+ import { snapshotActiveNode, restoreActiveNode } from './signal.js';
2
+ import { snapshotSchedulerState, restoreSchedulerState } from './scheduler.js';
3
+ import { getCurrentLifecycle, setCurrentLifecycle } from './lifecycle.js';
4
+ import { getContextProviders, setContextProviders } from './context.js';
5
+ export function snapshotReactiveContext() {
6
+ return {
7
+ signal: { activeNode: snapshotActiveNode() },
8
+ scheduler: snapshotSchedulerState(),
9
+ lifecycle: { currentContext: getCurrentLifecycle() },
10
+ context: { currentProviders: getContextProviders() },
11
+ };
12
+ }
13
+ export function restoreReactiveContext(ctx) {
14
+ restoreActiveNode(ctx.signal.activeNode);
15
+ restoreSchedulerState(ctx.scheduler);
16
+ setCurrentLifecycle(ctx.lifecycle.currentContext);
17
+ setContextProviders(ctx.context.currentProviders);
18
+ }
19
+ export function runWithReactiveContext(ctx, fn) {
20
+ const prev = snapshotReactiveContext();
21
+ restoreReactiveContext(ctx);
22
+ try {
23
+ return fn();
24
+ }
25
+ finally {
26
+ restoreReactiveContext(prev);
27
+ }
28
+ }
29
+ export function createNewReactiveContext() {
30
+ return {
31
+ signal: { activeNode: null },
32
+ scheduler: {
33
+ batchDepth: 0,
34
+ pendingEffects: new Set(),
35
+ microtaskQueued: false,
36
+ microtaskQueue: [],
37
+ },
38
+ lifecycle: { currentContext: null },
39
+ context: { currentProviders: null },
40
+ };
41
+ }
42
+ //# sourceMappingURL=reactive-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactive-context.js","sourceRoot":"","sources":["../../src/core/reactive-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEpE,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAUxE,MAAM,UAAU,uBAAuB;IACrC,OAAO;QACL,MAAM,EAAE,EAAE,UAAU,EAAE,kBAAkB,EAAE,EAAE;QAC5C,SAAS,EAAE,sBAAsB,EAAE;QACnC,SAAS,EAAE,EAAE,cAAc,EAAE,mBAAmB,EAAE,EAAE;QACpD,OAAO,EAAE,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,EAAE;KACrD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAoB;IACzD,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IACzC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,mBAAmB,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAClD,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAI,GAAoB,EAAE,EAAW;IACzE,MAAM,IAAI,GAAG,uBAAuB,EAAE,CAAC;IACvC,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,CAAC;QACH,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;YAAS,CAAC;QACT,sBAAsB,CAAC,IAAI,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,MAAM,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE;QAC5B,SAAS,EAAE;YACT,UAAU,EAAE,CAAC;YACb,cAAc,EAAE,IAAI,GAAG,EAAE;YACzB,eAAe,EAAE,KAAK;YACtB,cAAc,EAAE,EAAE;SACnB;QACD,SAAS,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE;QACnC,OAAO,EAAE,EAAE,gBAAgB,EAAE,IAAI,EAAE;KACpC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface SchedulerSnapshot {
2
+ batchDepth: number;
3
+ pendingEffects: Set<() => void>;
4
+ microtaskQueued: boolean;
5
+ microtaskQueue: (() => void)[];
6
+ }
7
+ export declare function snapshotSchedulerState(): SchedulerSnapshot;
8
+ export declare function restoreSchedulerState(snap: SchedulerSnapshot): void;
9
+ export declare function batch(fn: () => void): void;
10
+ export declare function isBatching(): boolean;
11
+ export declare function scheduleEffect(fn: () => void): () => void;
12
+ export declare function scheduleMicrotask(fn: () => void): void;
13
+ //# sourceMappingURL=scheduler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/core/scheduler.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC;IAChC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;CAChC;AAED,wBAAgB,sBAAsB,IAAI,iBAAiB,CAO1D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,iBAAiB,GAAG,IAAI,CAOnE;AAED,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAU1C;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAQzD;AAgBD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAatD"}