@sigx/vite 0.1.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.
- package/README.md +40 -0
- package/dist/cli.d.ts +12 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +372 -0
- package/dist/cli.js.map +1 -0
- package/dist/core/src/Component.d.ts +131 -0
- package/dist/core/src/Component.d.ts.map +1 -0
- package/dist/core/src/Component.js +272 -0
- package/dist/core/src/Component.js.map +1 -0
- package/dist/core/src/Signals.d.ts +34 -0
- package/dist/core/src/Signals.d.ts.map +1 -0
- package/dist/core/src/Signals.js +222 -0
- package/dist/core/src/Signals.js.map +1 -0
- package/dist/core/src/Templating.d.ts +11 -0
- package/dist/core/src/Templating.d.ts.map +1 -0
- package/dist/core/src/Templating.js +81 -0
- package/dist/core/src/Templating.js.map +1 -0
- package/dist/core/src/factory/index.d.ts +20 -0
- package/dist/core/src/factory/index.d.ts.map +1 -0
- package/dist/core/src/factory/index.js +50 -0
- package/dist/core/src/factory/index.js.map +1 -0
- package/dist/core/src/index.d.ts +8 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/index.js +9 -0
- package/dist/core/src/index.js.map +1 -0
- package/dist/core/src/jsx-runtime.d.ts +43 -0
- package/dist/core/src/jsx-runtime.d.ts.map +1 -0
- package/dist/core/src/jsx-runtime.js +469 -0
- package/dist/core/src/jsx-runtime.js.map +1 -0
- package/dist/core/src/messaging/index.d.ts +9 -0
- package/dist/core/src/messaging/index.d.ts.map +1 -0
- package/dist/core/src/messaging/index.js +37 -0
- package/dist/core/src/messaging/index.js.map +1 -0
- package/dist/core/src/models/index.d.ts +18 -0
- package/dist/core/src/models/index.d.ts.map +1 -0
- package/dist/core/src/models/index.js +12 -0
- package/dist/core/src/models/index.js.map +1 -0
- package/dist/core/src/sheet.d.ts +51 -0
- package/dist/core/src/sheet.d.ts.map +1 -0
- package/dist/core/src/sheet.js +151 -0
- package/dist/core/src/sheet.js.map +1 -0
- package/dist/core/src/stores/DefineInjectable.d.ts +5 -0
- package/dist/core/src/stores/DefineInjectable.d.ts.map +1 -0
- package/dist/core/src/stores/DefineInjectable.js +56 -0
- package/dist/core/src/stores/DefineInjectable.js.map +1 -0
- package/dist/core/src/stores/Store.d.ts +70 -0
- package/dist/core/src/stores/Store.d.ts.map +1 -0
- package/dist/core/src/stores/Store.js +180 -0
- package/dist/core/src/stores/Store.js.map +1 -0
- package/dist/core/src/styled.d.ts +15 -0
- package/dist/core/src/styled.d.ts.map +1 -0
- package/dist/core/src/styled.js +62 -0
- package/dist/core/src/styled.js.map +1 -0
- package/dist/core/src/utils/index.d.ts +5 -0
- package/dist/core/src/utils/index.d.ts.map +1 -0
- package/dist/core/src/utils/index.js +12 -0
- package/dist/core/src/utils/index.js.map +1 -0
- package/dist/hmr-plugin/src/index.d.ts +2 -0
- package/dist/hmr-plugin/src/index.d.ts.map +1 -0
- package/dist/hmr-plugin/src/index.js +59 -0
- package/dist/hmr-plugin/src/index.js.map +1 -0
- package/dist/hmr.d.ts +10 -0
- package/dist/hmr.d.ts.map +1 -0
- package/dist/hmr.js +99 -0
- package/dist/hmr.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +52 -0
- package/dist/index.js.map +1 -0
- package/dist/vite/src/index.d.ts +2 -0
- package/dist/vite/src/index.d.ts.map +1 -0
- package/dist/vite/src/index.js +59 -0
- package/dist/vite/src/index.js.map +1 -0
- package/package.json +53 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
// component.ts
|
|
2
|
+
import { render, registerComponentSchema, jsx } from "./jsx-runtime.js";
|
|
3
|
+
import { effect, signal, reactive } from "./Signals.js";
|
|
4
|
+
// Dev mode - can be set to false in production builds
|
|
5
|
+
const DEV = true;
|
|
6
|
+
let currentComponentContext = null;
|
|
7
|
+
export function getCurrentInstance() {
|
|
8
|
+
return currentComponentContext;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Adopt stylesheets for the current component.
|
|
12
|
+
* Works for both Shadow DOM and Light DOM components.
|
|
13
|
+
*
|
|
14
|
+
* @param sheets One or more CSSStyleSheet objects created via `css` tag
|
|
15
|
+
*/
|
|
16
|
+
export function adoptStyles(...sheets) {
|
|
17
|
+
const ctx = getCurrentInstance();
|
|
18
|
+
if (!ctx) {
|
|
19
|
+
console.warn("adoptStyles called outside of component setup");
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (ctx.shadow) {
|
|
23
|
+
// Shadow DOM: just adopt them
|
|
24
|
+
ctx.shadow.adoptedStyleSheets = [...ctx.shadow.adoptedStyleSheets, ...sheets];
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
// Light DOM: adopt to document, but avoid duplicates
|
|
28
|
+
// Note: This affects the global document, so styles should be scoped or unique
|
|
29
|
+
const doc = document;
|
|
30
|
+
const existing = new Set(doc.adoptedStyleSheets);
|
|
31
|
+
const newSheets = sheets.filter(s => !existing.has(s));
|
|
32
|
+
if (newSheets.length > 0) {
|
|
33
|
+
doc.adoptedStyleSheets = [...doc.adoptedStyleSheets, ...newSheets];
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export function onMount(fn) {
|
|
38
|
+
if (currentComponentContext) {
|
|
39
|
+
currentComponentContext.onMount(fn);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.warn("onMount called outside of component setup");
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
export function onCleanup(fn) {
|
|
46
|
+
if (currentComponentContext) {
|
|
47
|
+
currentComponentContext.onCleanup(fn);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
console.warn("onCleanup called outside of component setup");
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const plugins = [];
|
|
54
|
+
export function registerComponentPlugin(plugin) {
|
|
55
|
+
plugins.push(plugin);
|
|
56
|
+
}
|
|
57
|
+
const setupRegistry = new Map();
|
|
58
|
+
/**
|
|
59
|
+
* Helper to create a proxy that tracks property access
|
|
60
|
+
* This allows us to auto-detect which props are used without explicit prop arrays
|
|
61
|
+
*/
|
|
62
|
+
function createPropsProxy(target, onAccess) {
|
|
63
|
+
return new Proxy(target, {
|
|
64
|
+
get(obj, prop) {
|
|
65
|
+
if (typeof prop === 'string' && onAccess) {
|
|
66
|
+
onAccess(prop);
|
|
67
|
+
}
|
|
68
|
+
return obj[prop];
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Define a component with automatic type registration.
|
|
74
|
+
* Returns a JSX factory function that can be used directly in JSX.
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* ```typescript
|
|
78
|
+
* // Mix props and events in any order with intersection
|
|
79
|
+
* export const MyComponent = defineComponent<
|
|
80
|
+
* DefineProp<"name", string, true> & DefineEvent<"change", string>
|
|
81
|
+
* >("my-component", ({ props, emit }) => { ... });
|
|
82
|
+
*
|
|
83
|
+
* // Or reverse order
|
|
84
|
+
* export const MyComponent = defineComponent<
|
|
85
|
+
* DefineEvent<"change", string> & DefineProp<"name", string, true>
|
|
86
|
+
* >("my-component", ({ props, emit }) => { ... });
|
|
87
|
+
* ```
|
|
88
|
+
*/
|
|
89
|
+
export function defineComponent(tagName, setup, options = { shadow: true }) {
|
|
90
|
+
// Store/Update setup in registry for HMR support
|
|
91
|
+
setupRegistry.set(tagName, setup);
|
|
92
|
+
// Allow plugins to intercept component definition
|
|
93
|
+
for (const plugin of plugins) {
|
|
94
|
+
if (plugin.onDefine?.(tagName, setup)) {
|
|
95
|
+
return null; // Plugin handled it
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
class BaseComponent extends HTMLElement {
|
|
99
|
+
constructor() {
|
|
100
|
+
super();
|
|
101
|
+
this.__issigx = true;
|
|
102
|
+
this._mountCallbacks = [];
|
|
103
|
+
this._cleanupCallbacks = [];
|
|
104
|
+
this._dispose = null;
|
|
105
|
+
this._props = reactive({});
|
|
106
|
+
this._registeredProps = new Set();
|
|
107
|
+
if (options.shadow !== false) {
|
|
108
|
+
this.attachShadow({ mode: "open" });
|
|
109
|
+
}
|
|
110
|
+
// We'll set up property getters/setters dynamically as props are set
|
|
111
|
+
// This allows the type system to drive everything without runtime prop arrays
|
|
112
|
+
}
|
|
113
|
+
connectedCallback() {
|
|
114
|
+
// Check if we are just moving in the DOM
|
|
115
|
+
if (this.__isMoving)
|
|
116
|
+
return;
|
|
117
|
+
// Notify plugins
|
|
118
|
+
plugins.forEach(p => p.onConnect?.(tagName, this));
|
|
119
|
+
// Delay initialization to allow property bindings to be set first
|
|
120
|
+
// Properties are set synchronously during render, but after connectedCallback
|
|
121
|
+
setTimeout(() => this._init(), 0);
|
|
122
|
+
}
|
|
123
|
+
_registerProp(propName) {
|
|
124
|
+
if (this._registeredProps.has(propName))
|
|
125
|
+
return;
|
|
126
|
+
this._registeredProps.add(propName);
|
|
127
|
+
// Capture existing value if it was set before we defined the property
|
|
128
|
+
// (e.g. by jsx-runtime setting it as a property on the instance)
|
|
129
|
+
if (Object.prototype.hasOwnProperty.call(this, propName)) {
|
|
130
|
+
const existingValue = this[propName];
|
|
131
|
+
this._props[propName] = existingValue;
|
|
132
|
+
}
|
|
133
|
+
Object.defineProperty(this, propName, {
|
|
134
|
+
get() {
|
|
135
|
+
return this._props[propName];
|
|
136
|
+
},
|
|
137
|
+
set(value) {
|
|
138
|
+
this._props[propName] = value;
|
|
139
|
+
},
|
|
140
|
+
enumerable: true,
|
|
141
|
+
configurable: true,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
_init() {
|
|
145
|
+
const el = this;
|
|
146
|
+
const shadow = this.shadowRoot;
|
|
147
|
+
// Track which props are accessed during setup to auto-register them
|
|
148
|
+
const accessedProps = new Set();
|
|
149
|
+
const propsProxy = createPropsProxy(this._props, (key) => {
|
|
150
|
+
accessedProps.add(key);
|
|
151
|
+
this._registerProp(key);
|
|
152
|
+
});
|
|
153
|
+
// Create typed emit function
|
|
154
|
+
const emit = (eventName, ...args) => {
|
|
155
|
+
const detail = args.length > 0 ? args[0] : undefined;
|
|
156
|
+
const event = new CustomEvent(eventName, {
|
|
157
|
+
detail,
|
|
158
|
+
bubbles: true,
|
|
159
|
+
composed: true,
|
|
160
|
+
});
|
|
161
|
+
el.dispatchEvent(event);
|
|
162
|
+
};
|
|
163
|
+
const getParent = (node) => {
|
|
164
|
+
// Try to find VNode attached to the element
|
|
165
|
+
let vnode = node?.__vnode;
|
|
166
|
+
if (vnode) {
|
|
167
|
+
// Walk up VNode tree to find the highest VNode with a DOM node
|
|
168
|
+
while (vnode && vnode.parent) {
|
|
169
|
+
vnode = vnode.parent;
|
|
170
|
+
if (vnode.dom) {
|
|
171
|
+
node = vnode.dom;
|
|
172
|
+
// If we hit a sigx component in the VNode tree, that is our parent!
|
|
173
|
+
if (node.__issigx) {
|
|
174
|
+
return node;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Standard DOM traversal from here (ShadowRoot boundary)
|
|
180
|
+
let current = node;
|
|
181
|
+
while (current) {
|
|
182
|
+
// Skip the starting node if it's the component itself (already handled or just starting)
|
|
183
|
+
if (current !== node && current.__issigx) {
|
|
184
|
+
return current;
|
|
185
|
+
}
|
|
186
|
+
if (current instanceof ShadowRoot) {
|
|
187
|
+
current = current.host;
|
|
188
|
+
// The host is always a component (or element), check it
|
|
189
|
+
if (current.__issigx) {
|
|
190
|
+
return current;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
current = current.parentNode;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
};
|
|
199
|
+
const parent = getParent(this);
|
|
200
|
+
this.__parentComponent = parent;
|
|
201
|
+
const ctx = {
|
|
202
|
+
el,
|
|
203
|
+
shadow,
|
|
204
|
+
signal,
|
|
205
|
+
reactive,
|
|
206
|
+
props: propsProxy,
|
|
207
|
+
emit: emit,
|
|
208
|
+
parent,
|
|
209
|
+
onMount: (fn) => this._mountCallbacks.push(fn),
|
|
210
|
+
onCleanup: (fn) => this._cleanupCallbacks.push(fn)
|
|
211
|
+
};
|
|
212
|
+
// Use the latest setup from registry (supports HMR)
|
|
213
|
+
const currentSetup = setupRegistry.get(tagName) || setup;
|
|
214
|
+
const prevContext = currentComponentContext;
|
|
215
|
+
currentComponentContext = ctx;
|
|
216
|
+
let view;
|
|
217
|
+
try {
|
|
218
|
+
view = currentSetup(ctx);
|
|
219
|
+
}
|
|
220
|
+
finally {
|
|
221
|
+
currentComponentContext = prevContext;
|
|
222
|
+
}
|
|
223
|
+
let isFirstRun = true;
|
|
224
|
+
this._dispose = effect(() => {
|
|
225
|
+
const prev = currentComponentContext;
|
|
226
|
+
currentComponentContext = ctx;
|
|
227
|
+
try {
|
|
228
|
+
const tpl = view();
|
|
229
|
+
// Render to shadow root if available, otherwise to the element itself
|
|
230
|
+
render(tpl, shadow || el);
|
|
231
|
+
if (isFirstRun) {
|
|
232
|
+
isFirstRun = false;
|
|
233
|
+
const mountCtx = { el, shadow };
|
|
234
|
+
this._mountCallbacks.forEach((fn) => fn(mountCtx));
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
finally {
|
|
238
|
+
currentComponentContext = prev;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
// Register schema for dev mode validation
|
|
242
|
+
if (DEV && accessedProps.size > 0) {
|
|
243
|
+
registerComponentSchema(tagName, Array.from(accessedProps));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
disconnectedCallback() {
|
|
247
|
+
// Check if we are just moving in the DOM
|
|
248
|
+
if (this.__isMoving)
|
|
249
|
+
return;
|
|
250
|
+
// Notify plugins
|
|
251
|
+
plugins.forEach(p => p.onDisconnect?.(tagName, this));
|
|
252
|
+
const el = this;
|
|
253
|
+
const shadow = this.shadowRoot;
|
|
254
|
+
const ctx = { el, shadow };
|
|
255
|
+
this._cleanupCallbacks.forEach((fn) => fn(ctx));
|
|
256
|
+
this._cleanupCallbacks = [];
|
|
257
|
+
this._mountCallbacks = [];
|
|
258
|
+
this._dispose?.();
|
|
259
|
+
this._dispose = null;
|
|
260
|
+
// Clean up VDOM
|
|
261
|
+
render(null, shadow || el);
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
customElements.define(tagName, BaseComponent);
|
|
265
|
+
// Return JSX factory function that can be used as <PropTest count={5} />
|
|
266
|
+
const factory = ((props) => jsx(tagName, props));
|
|
267
|
+
factory.__tag = tagName;
|
|
268
|
+
factory.__props = null;
|
|
269
|
+
factory.__events = null;
|
|
270
|
+
return factory;
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=Component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Component.js","sourceRoot":"","sources":["../../../../core/src/Component.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export type EffectFn = () => void;
|
|
2
|
+
export interface ReactiveEffect extends EffectFn {
|
|
3
|
+
deps: Set<ReactiveEffect>[];
|
|
4
|
+
}
|
|
5
|
+
export declare function batch(fn: () => void): void;
|
|
6
|
+
export interface Signal<T> {
|
|
7
|
+
value: T;
|
|
8
|
+
}
|
|
9
|
+
export declare function signal<T>(initial: T): Signal<T>;
|
|
10
|
+
export declare function effect(fn: EffectFn): () => void;
|
|
11
|
+
/**
|
|
12
|
+
* Create a reactive object where all property accesses are tracked
|
|
13
|
+
*/
|
|
14
|
+
export declare function reactive<T extends object>(target: T): T;
|
|
15
|
+
export type WatchSource<T = any> = Signal<T> | (() => T);
|
|
16
|
+
export type WatchCallback<V = any, OV = any> = (value: V, oldValue: OV, onCleanup: (fn: () => void) => void) => any;
|
|
17
|
+
export interface WatchOptions<Immediate = boolean> {
|
|
18
|
+
immediate?: Immediate;
|
|
19
|
+
deep?: boolean | number;
|
|
20
|
+
once?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface WatchHandle {
|
|
23
|
+
(): void;
|
|
24
|
+
pause: () => void;
|
|
25
|
+
resume: () => void;
|
|
26
|
+
stop: () => void;
|
|
27
|
+
}
|
|
28
|
+
export declare function watch<T>(source: WatchSource<T>, cb: WatchCallback<T>, options?: WatchOptions): WatchHandle;
|
|
29
|
+
export type EffectScope = {
|
|
30
|
+
run<T>(fn: () => T): T | undefined;
|
|
31
|
+
stop(fromParent?: boolean): void;
|
|
32
|
+
};
|
|
33
|
+
export declare function effectScope(detached?: boolean): EffectScope;
|
|
34
|
+
//# sourceMappingURL=Signals.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signals.d.ts","sourceRoot":"","sources":["../../../../core/src/Signals.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC;AAElC,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC5C,IAAI,EAAE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;CAC/B;AAMD,wBAAgB,KAAK,CAAC,EAAE,EAAE,MAAM,IAAI,QAcnC;AA0CD,MAAM,WAAW,MAAM,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC;CACZ;AAMD,wBAAgB,MAAM,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAqC/C;AAED,wBAAgB,MAAM,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAE/C;AAaD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAkEvD;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,MAAM,MAAM,aAAa,CAAC,CAAC,GAAG,GAAG,EAAE,EAAE,GAAG,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,IAAI,KAAK,IAAI,KAAK,GAAG,CAAC;AACpH,MAAM,WAAW,YAAY,CAAC,SAAS,GAAG,OAAO;IAC7C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,IAAI,CAAC;IACT,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,IAAI,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,WAAW,CAgC1G;AAED,MAAM,MAAM,WAAW,GAAG;IACtB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC;IACnC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;CACpC,CAAA;AAED,wBAAgB,WAAW,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,WAAW,CAc3D"}
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
// signals.ts
|
|
2
|
+
let activeEffect = null;
|
|
3
|
+
let batchDepth = 0;
|
|
4
|
+
const pendingEffects = new Set();
|
|
5
|
+
export function batch(fn) {
|
|
6
|
+
batchDepth++;
|
|
7
|
+
try {
|
|
8
|
+
fn();
|
|
9
|
+
}
|
|
10
|
+
finally {
|
|
11
|
+
batchDepth--;
|
|
12
|
+
if (batchDepth === 0) {
|
|
13
|
+
const effects = Array.from(pendingEffects);
|
|
14
|
+
pendingEffects.clear();
|
|
15
|
+
for (const effect of effects) {
|
|
16
|
+
effect();
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function runEffect(fn) {
|
|
22
|
+
const effect = function () {
|
|
23
|
+
cleanup(effect);
|
|
24
|
+
activeEffect = effect;
|
|
25
|
+
fn();
|
|
26
|
+
activeEffect = null;
|
|
27
|
+
};
|
|
28
|
+
effect.deps = [];
|
|
29
|
+
effect();
|
|
30
|
+
// disposer
|
|
31
|
+
return () => cleanup(effect);
|
|
32
|
+
}
|
|
33
|
+
function cleanup(effect) {
|
|
34
|
+
if (!effect.deps)
|
|
35
|
+
return;
|
|
36
|
+
for (const dep of effect.deps) {
|
|
37
|
+
dep.delete(effect);
|
|
38
|
+
}
|
|
39
|
+
effect.deps.length = 0;
|
|
40
|
+
}
|
|
41
|
+
function track(depSet) {
|
|
42
|
+
if (!activeEffect)
|
|
43
|
+
return;
|
|
44
|
+
depSet.add(activeEffect);
|
|
45
|
+
activeEffect.deps.push(depSet);
|
|
46
|
+
}
|
|
47
|
+
function trigger(depSet) {
|
|
48
|
+
const effects = Array.from(depSet);
|
|
49
|
+
for (const effect of effects) {
|
|
50
|
+
if (batchDepth > 0) {
|
|
51
|
+
pendingEffects.add(effect);
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
effect();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
function isObject(val) {
|
|
59
|
+
return val !== null && typeof val === 'object';
|
|
60
|
+
}
|
|
61
|
+
export function signal(initial) {
|
|
62
|
+
let value = (isObject(initial) ? reactive(initial) : initial);
|
|
63
|
+
const dep = new Set();
|
|
64
|
+
// We use a target that has the 'value' property so that 'in' checks work
|
|
65
|
+
const target = { value: null };
|
|
66
|
+
return new Proxy(target, {
|
|
67
|
+
get(target, prop) {
|
|
68
|
+
if (prop === 'value') {
|
|
69
|
+
track(dep);
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
// Support primitive conversion for templates
|
|
73
|
+
if (prop === Symbol.toPrimitive || prop === 'toString' || prop === 'valueOf') {
|
|
74
|
+
return () => {
|
|
75
|
+
track(dep);
|
|
76
|
+
return value;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
return Reflect.get(target, prop);
|
|
80
|
+
},
|
|
81
|
+
set(target, prop, newValue) {
|
|
82
|
+
if (prop === 'value') {
|
|
83
|
+
const newValToStore = (isObject(newValue) ? reactive(newValue) : newValue);
|
|
84
|
+
if (Object.is(newValToStore, value))
|
|
85
|
+
return true;
|
|
86
|
+
value = newValToStore;
|
|
87
|
+
trigger(dep);
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
return Reflect.set(target, prop, newValue);
|
|
91
|
+
},
|
|
92
|
+
has(target, prop) {
|
|
93
|
+
if (prop === 'value')
|
|
94
|
+
return true;
|
|
95
|
+
return Reflect.has(target, prop);
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
export function effect(fn) {
|
|
100
|
+
return runEffect(fn);
|
|
101
|
+
}
|
|
102
|
+
const arrayInstrumentations = {};
|
|
103
|
+
['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'].forEach(method => {
|
|
104
|
+
arrayInstrumentations[method] = function (...args) {
|
|
105
|
+
let res;
|
|
106
|
+
batch(() => {
|
|
107
|
+
res = Array.prototype[method].apply(this, args);
|
|
108
|
+
});
|
|
109
|
+
return res;
|
|
110
|
+
};
|
|
111
|
+
});
|
|
112
|
+
/**
|
|
113
|
+
* Create a reactive object where all property accesses are tracked
|
|
114
|
+
*/
|
|
115
|
+
export function reactive(target) {
|
|
116
|
+
const depsMap = new Map();
|
|
117
|
+
const reactiveCache = new WeakMap();
|
|
118
|
+
return new Proxy(target, {
|
|
119
|
+
get(obj, prop) {
|
|
120
|
+
if (Array.isArray(obj) && typeof prop === 'string' && arrayInstrumentations.hasOwnProperty(prop)) {
|
|
121
|
+
return arrayInstrumentations[prop];
|
|
122
|
+
}
|
|
123
|
+
const value = Reflect.get(obj, prop);
|
|
124
|
+
// Track this property access
|
|
125
|
+
let dep = depsMap.get(prop);
|
|
126
|
+
if (!dep) {
|
|
127
|
+
dep = new Set();
|
|
128
|
+
depsMap.set(prop, dep);
|
|
129
|
+
}
|
|
130
|
+
track(dep);
|
|
131
|
+
// If the value is an object, make it reactive too (with caching)
|
|
132
|
+
if (value && typeof value === 'object') {
|
|
133
|
+
let cached = reactiveCache.get(value);
|
|
134
|
+
if (!cached) {
|
|
135
|
+
cached = reactive(value);
|
|
136
|
+
reactiveCache.set(value, cached);
|
|
137
|
+
}
|
|
138
|
+
return cached;
|
|
139
|
+
}
|
|
140
|
+
return value;
|
|
141
|
+
},
|
|
142
|
+
set(obj, prop, newValue) {
|
|
143
|
+
const oldLength = Array.isArray(obj) ? obj.length : 0;
|
|
144
|
+
const oldValue = Reflect.get(obj, prop);
|
|
145
|
+
const result = Reflect.set(obj, prop, newValue);
|
|
146
|
+
// Only trigger if value actually changed
|
|
147
|
+
if (!Object.is(oldValue, newValue)) {
|
|
148
|
+
const dep = depsMap.get(prop);
|
|
149
|
+
if (dep) {
|
|
150
|
+
trigger(dep);
|
|
151
|
+
}
|
|
152
|
+
// Special handling for Arrays
|
|
153
|
+
if (Array.isArray(obj)) {
|
|
154
|
+
// If we set an index and length changed, trigger length dependency
|
|
155
|
+
if (prop !== 'length' && obj.length !== oldLength) {
|
|
156
|
+
const lengthDep = depsMap.get('length');
|
|
157
|
+
if (lengthDep) {
|
|
158
|
+
trigger(lengthDep);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
// If we set length, trigger indices that are now out of bounds
|
|
162
|
+
if (prop === 'length' && typeof newValue === 'number' && newValue < oldLength) {
|
|
163
|
+
for (let i = newValue; i < oldLength; i++) {
|
|
164
|
+
const idxDep = depsMap.get(String(i));
|
|
165
|
+
if (idxDep)
|
|
166
|
+
trigger(idxDep);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
export function watch(source, cb, options) {
|
|
176
|
+
let oldValue;
|
|
177
|
+
let isFirst = true;
|
|
178
|
+
let cleanupFn = null;
|
|
179
|
+
const runner = effect(() => {
|
|
180
|
+
const newValue = typeof source === 'function' ? source() : source.value;
|
|
181
|
+
if (isFirst) {
|
|
182
|
+
if (options?.immediate) {
|
|
183
|
+
if (cleanupFn)
|
|
184
|
+
cleanupFn();
|
|
185
|
+
cb(newValue, oldValue, (fn) => cleanupFn = fn);
|
|
186
|
+
}
|
|
187
|
+
isFirst = false;
|
|
188
|
+
}
|
|
189
|
+
else {
|
|
190
|
+
if (cleanupFn)
|
|
191
|
+
cleanupFn();
|
|
192
|
+
cb(newValue, oldValue, (fn) => cleanupFn = fn);
|
|
193
|
+
}
|
|
194
|
+
oldValue = newValue;
|
|
195
|
+
});
|
|
196
|
+
const stop = () => {
|
|
197
|
+
runner();
|
|
198
|
+
if (cleanupFn)
|
|
199
|
+
cleanupFn();
|
|
200
|
+
};
|
|
201
|
+
const handle = stop;
|
|
202
|
+
handle.stop = stop;
|
|
203
|
+
handle.pause = () => { }; // Not implemented
|
|
204
|
+
handle.resume = () => { }; // Not implemented
|
|
205
|
+
return handle;
|
|
206
|
+
}
|
|
207
|
+
export function effectScope(detached) {
|
|
208
|
+
const effects = [];
|
|
209
|
+
let active = true;
|
|
210
|
+
return {
|
|
211
|
+
run(fn) {
|
|
212
|
+
if (!active)
|
|
213
|
+
return undefined;
|
|
214
|
+
return fn();
|
|
215
|
+
},
|
|
216
|
+
stop() {
|
|
217
|
+
active = false;
|
|
218
|
+
effects.forEach(e => e());
|
|
219
|
+
}
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
//# sourceMappingURL=Signals.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Signals.js","sourceRoot":"","sources":["../../../../core/src/Signals.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type TemplateResult = string;
|
|
2
|
+
export type EventHandler = (event: Event) => void;
|
|
3
|
+
/**
|
|
4
|
+
* Tagged template function for creating HTML templates.
|
|
5
|
+
* @param strings - Template string parts
|
|
6
|
+
* @param values - Interpolated values
|
|
7
|
+
* @returns HTML string
|
|
8
|
+
*/
|
|
9
|
+
export declare function html(strings: TemplateStringsArray, ...values: unknown[]): TemplateResult;
|
|
10
|
+
export declare function render(templateResult: TemplateResult, container: Element | ShadowRoot): void;
|
|
11
|
+
//# sourceMappingURL=Templating.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Templating.d.ts","sourceRoot":"","sources":["../../../../core/src/Templating.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC;AAEpC,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;AAclD;;;;;GAKG;AACH,wBAAgB,IAAI,CAChB,OAAO,EAAE,oBAAoB,EAC7B,GAAG,MAAM,EAAE,OAAO,EAAE,GACrB,cAAc,CA4BhB;AAED,wBAAgB,MAAM,CAClB,cAAc,EAAE,cAAc,EAC9B,SAAS,EAAE,OAAO,GAAG,UAAU,GAChC,IAAI,CAuCN"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
// templating.ts
|
|
2
|
+
// Special marker for event handlers
|
|
3
|
+
const EVENT_MARKER = "__event__";
|
|
4
|
+
let eventId = 0;
|
|
5
|
+
const eventRegistry = new Map();
|
|
6
|
+
/**
|
|
7
|
+
* Check if a value is a signal (has value property)
|
|
8
|
+
*/
|
|
9
|
+
function isSignal(v) {
|
|
10
|
+
return v !== null && typeof v === "object" && "value" in v;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Tagged template function for creating HTML templates.
|
|
14
|
+
* @param strings - Template string parts
|
|
15
|
+
* @param values - Interpolated values
|
|
16
|
+
* @returns HTML string
|
|
17
|
+
*/
|
|
18
|
+
export function html(strings, ...values) {
|
|
19
|
+
let out = "";
|
|
20
|
+
strings.forEach((str, i) => {
|
|
21
|
+
out += str;
|
|
22
|
+
if (i < values.length) {
|
|
23
|
+
let v = values[i];
|
|
24
|
+
// Auto-unwrap signals - check before checking for functions
|
|
25
|
+
if (isSignal(v)) {
|
|
26
|
+
v = v.value;
|
|
27
|
+
}
|
|
28
|
+
// Check if this is an event handler (function in an attribute position)
|
|
29
|
+
// Match @eventname=" at the end of the string
|
|
30
|
+
if (typeof v === "function" && /@\w+\s*=\s*"$/.test(str)) {
|
|
31
|
+
const id = `${EVENT_MARKER}${eventId++}`;
|
|
32
|
+
eventRegistry.set(id, v);
|
|
33
|
+
out += id;
|
|
34
|
+
}
|
|
35
|
+
else if (Array.isArray(v)) {
|
|
36
|
+
out += v.join("");
|
|
37
|
+
}
|
|
38
|
+
else if (v !== null && v !== undefined) {
|
|
39
|
+
out += String(v);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
export function render(templateResult, container) {
|
|
46
|
+
// Clear old event listeners
|
|
47
|
+
const oldHandlers = container.__handlers__;
|
|
48
|
+
if (oldHandlers) {
|
|
49
|
+
oldHandlers.forEach((handler) => {
|
|
50
|
+
container.removeEventListener(handler.type, handler.fn, true);
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
container.innerHTML = templateResult;
|
|
54
|
+
// Attach new event listeners
|
|
55
|
+
const handlers = [];
|
|
56
|
+
const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT);
|
|
57
|
+
let node;
|
|
58
|
+
while ((node = walker.nextNode())) {
|
|
59
|
+
const el = node;
|
|
60
|
+
Array.from(el.attributes).forEach((attr) => {
|
|
61
|
+
if (attr.name.startsWith("@")) {
|
|
62
|
+
const eventType = attr.name.slice(1); // Remove @
|
|
63
|
+
const handlerId = attr.value;
|
|
64
|
+
if (handlerId.startsWith(EVENT_MARKER)) {
|
|
65
|
+
const handler = eventRegistry.get(handlerId);
|
|
66
|
+
if (handler) {
|
|
67
|
+
const fn = (e) => {
|
|
68
|
+
if (e.target === el)
|
|
69
|
+
handler(e);
|
|
70
|
+
};
|
|
71
|
+
container.addEventListener(eventType, fn, true);
|
|
72
|
+
handlers.push({ type: eventType, fn });
|
|
73
|
+
el.removeAttribute(attr.name);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
container.__handlers__ = handlers;
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=Templating.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Templating.js","sourceRoot":"","sources":["../../../../core/src/Templating.ts"],"names":[],"mappings":"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"}
|