@sigx/runtime-core 0.1.5 → 0.1.6
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/dist/app-types.d.ts +35 -15
- package/dist/app-types.d.ts.map +1 -1
- package/dist/app.d.ts +4 -8
- package/dist/app.d.ts.map +1 -1
- package/dist/component.d.ts +127 -38
- package/dist/component.d.ts.map +1 -1
- package/dist/compound.d.ts +34 -0
- package/dist/compound.d.ts.map +1 -0
- package/dist/di/factory.d.ts +3 -2
- package/dist/di/factory.d.ts.map +1 -1
- package/dist/di/injectable.d.ts +80 -6
- package/dist/di/injectable.d.ts.map +1 -1
- package/dist/hydration/index.d.ts +88 -0
- package/dist/hydration/index.d.ts.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +458 -690
- package/dist/index.js.map +1 -1
- package/dist/jsx-runtime.d.ts +3 -2
- package/dist/jsx-runtime.d.ts.map +1 -1
- package/dist/lazy.d.ts.map +1 -1
- package/dist/model.d.ts +68 -0
- package/dist/model.d.ts.map +1 -0
- package/dist/platform.d.ts +9 -9
- package/dist/platform.d.ts.map +1 -1
- package/dist/renderer.d.ts +1 -3
- package/dist/renderer.d.ts.map +1 -1
- package/dist/utils/is-component.d.ts +30 -0
- package/dist/utils/is-component.d.ts.map +1 -0
- package/dist/utils/normalize.d.ts +4 -1
- package/dist/utils/normalize.d.ts.map +1 -1
- package/dist/utils/props-accessor.d.ts +6 -9
- package/dist/utils/props-accessor.d.ts.map +1 -1
- package/package.json +7 -6
- package/dist/sheet.d.ts +0 -51
- package/dist/sheet.d.ts.map +0 -1
- package/dist/stores/store.d.ts +0 -70
- package/dist/stores/store.d.ts.map +0 -1
- package/dist/styled.d.ts +0 -15
- package/dist/styled.d.ts.map +0 -1
- package/dist/utils/component-helpers.d.ts +0 -38
- package/dist/utils/component-helpers.d.ts.map +0 -1
package/dist/app-types.d.ts
CHANGED
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import type { VNode } from './jsx-runtime.js';
|
|
8
8
|
import type { ComponentSetupContext } from './component.js';
|
|
9
|
+
import type { InjectableFunction } from './di/injectable.js';
|
|
9
10
|
/**
|
|
10
11
|
* Component instance info passed to lifecycle hooks.
|
|
11
12
|
* This is renderer-agnostic - works with DOM, Terminal, or any platform.
|
|
12
13
|
*/
|
|
13
14
|
export interface ComponentInstance {
|
|
14
|
-
/** Component name (if defined via
|
|
15
|
+
/** Component name (if defined via component options) */
|
|
15
16
|
name?: string;
|
|
16
17
|
/** The component's setup context with props, slots, emit, etc. */
|
|
17
18
|
ctx: ComponentSetupContext;
|
|
@@ -81,10 +82,12 @@ export interface AppContext {
|
|
|
81
82
|
*
|
|
82
83
|
* @example
|
|
83
84
|
* ```typescript
|
|
85
|
+
* const useMyService = defineInjectable(() => new MyService());
|
|
86
|
+
*
|
|
84
87
|
* const myPlugin: Plugin<{ debug?: boolean }> = {
|
|
85
88
|
* name: 'my-plugin',
|
|
86
89
|
* install(app, options) {
|
|
87
|
-
* app.
|
|
90
|
+
* app.defineProvide(useMyService);
|
|
88
91
|
* app.hook({
|
|
89
92
|
* onComponentMounted: (instance) => {
|
|
90
93
|
* if (options?.debug) console.log('Mounted:', instance.name);
|
|
@@ -109,8 +112,10 @@ export interface Plugin<Options = any> {
|
|
|
109
112
|
*
|
|
110
113
|
* @example
|
|
111
114
|
* ```typescript
|
|
115
|
+
* const useLogger = defineInjectable(() => createLogger());
|
|
116
|
+
*
|
|
112
117
|
* const simplePlugin: PluginInstallFn = (app) => {
|
|
113
|
-
* app.
|
|
118
|
+
* app.defineProvide(useLogger);
|
|
114
119
|
* };
|
|
115
120
|
* ```
|
|
116
121
|
*/
|
|
@@ -153,13 +158,11 @@ export type UnmountFn<TContainer = any> = (container: TContainer) => void;
|
|
|
153
158
|
*
|
|
154
159
|
* // Using with defineInjectable tokens
|
|
155
160
|
* const useConfig = defineInjectable(() => ({ apiUrl: 'https://...' }));
|
|
156
|
-
* app.
|
|
157
|
-
*
|
|
158
|
-
* // Or with simple symbols/values
|
|
159
|
-
* app.provide(ConfigToken, myConfig);
|
|
161
|
+
* const config = app.defineProvide(useConfig);
|
|
162
|
+
* config.apiUrl = 'https://custom.api.com';
|
|
160
163
|
*
|
|
161
164
|
* app.use(routerPlugin)
|
|
162
|
-
* .mount(document.getElementById('app')
|
|
165
|
+
* .mount(document.getElementById('app')!);
|
|
163
166
|
* ```
|
|
164
167
|
*/
|
|
165
168
|
export interface App<TContainer = any> {
|
|
@@ -172,16 +175,28 @@ export interface App<TContainer = any> {
|
|
|
172
175
|
*/
|
|
173
176
|
use<Options>(plugin: Plugin<Options> | PluginInstallFn<Options>, options?: Options): App<TContainer>;
|
|
174
177
|
/**
|
|
175
|
-
* Provide a
|
|
178
|
+
* Provide a new instance of an injectable at app level.
|
|
179
|
+
* All components will receive this instance when calling the injectable function.
|
|
180
|
+
*
|
|
181
|
+
* @param useFn - An injectable function created by defineInjectable
|
|
182
|
+
* @param factory - Optional custom factory. If not provided, uses the injectable's default factory.
|
|
183
|
+
* @returns The created instance
|
|
184
|
+
*
|
|
185
|
+
* @example
|
|
186
|
+
* ```typescript
|
|
187
|
+
* const useApiConfig = defineInjectable(() => ({ baseUrl: 'https://api.example.com' }));
|
|
176
188
|
*
|
|
177
|
-
*
|
|
178
|
-
* - A function created by defineInjectable
|
|
179
|
-
* - A Symbol
|
|
180
|
-
* - Any unique object reference
|
|
189
|
+
* const app = defineApp(<App />);
|
|
181
190
|
*
|
|
182
|
-
*
|
|
191
|
+
* // Use default factory
|
|
192
|
+
* const config = app.defineProvide(useApiConfig);
|
|
193
|
+
* config.baseUrl = 'https://custom.api.com';
|
|
194
|
+
*
|
|
195
|
+
* // Or provide custom factory
|
|
196
|
+
* app.defineProvide(useApiConfig, () => ({ baseUrl: 'https://other.api.com' }));
|
|
197
|
+
* ```
|
|
183
198
|
*/
|
|
184
|
-
|
|
199
|
+
defineProvide<T>(useFn: InjectableFunction<T>, factory?: () => T): T;
|
|
185
200
|
/**
|
|
186
201
|
* Register lifecycle hooks to observe all components
|
|
187
202
|
*/
|
|
@@ -222,5 +237,10 @@ export interface App<TContainer = any> {
|
|
|
222
237
|
* @internal
|
|
223
238
|
*/
|
|
224
239
|
_container: TContainer | null;
|
|
240
|
+
/**
|
|
241
|
+
* The root component passed to defineApp()
|
|
242
|
+
* @internal
|
|
243
|
+
*/
|
|
244
|
+
_rootComponent: any;
|
|
225
245
|
}
|
|
226
246
|
//# sourceMappingURL=app-types.d.ts.map
|
package/dist/app-types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-types.d.ts","sourceRoot":"","sources":["../src/app-types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"app-types.d.ts","sourceRoot":"","sources":["../src/app-types.ts"],"names":[],"mappings":"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"}
|
package/dist/app.d.ts
CHANGED
|
@@ -6,10 +6,6 @@
|
|
|
6
6
|
*/
|
|
7
7
|
export type { ComponentInstance, AppConfig, AppLifecycleHooks, AppContext, Plugin, PluginInstallFn, MountFn, UnmountFn, App } from './app-types.js';
|
|
8
8
|
import type { ComponentInstance, AppContext, MountFn, App } from './app-types.js';
|
|
9
|
-
/**
|
|
10
|
-
* Unique symbol for app context injection
|
|
11
|
-
*/
|
|
12
|
-
export declare const AppContextKey: unique symbol;
|
|
13
9
|
/**
|
|
14
10
|
* Set the default mount function for the platform.
|
|
15
11
|
* Called by platform packages (runtime-dom, runtime-terminal) on import.
|
|
@@ -33,7 +29,6 @@ export declare function getDefaultMount(): MountFn<any> | null;
|
|
|
33
29
|
* @example
|
|
34
30
|
* ```tsx
|
|
35
31
|
* import { defineApp, defineInjectable } from '@sigx/runtime-core';
|
|
36
|
-
* import { render } from '@sigx/runtime-dom';
|
|
37
32
|
*
|
|
38
33
|
* // Define an injectable service
|
|
39
34
|
* const useApiConfig = defineInjectable(() => ({ baseUrl: 'https://api.example.com' }));
|
|
@@ -42,10 +37,11 @@ export declare function getDefaultMount(): MountFn<any> | null;
|
|
|
42
37
|
*
|
|
43
38
|
* app.use(myPlugin, { option: 'value' });
|
|
44
39
|
*
|
|
45
|
-
* // Provide
|
|
46
|
-
* app.
|
|
40
|
+
* // Provide custom instance at app level
|
|
41
|
+
* const config = app.defineProvide(useApiConfig);
|
|
42
|
+
* config.baseUrl = 'https://custom.api.com';
|
|
47
43
|
*
|
|
48
|
-
* app.mount(document.getElementById('app')
|
|
44
|
+
* app.mount(document.getElementById('app')!);
|
|
49
45
|
* ```
|
|
50
46
|
*/
|
|
51
47
|
export declare function defineApp<TContainer = any>(rootComponent: any): App<TContainer>;
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACR,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,MAAM,EACN,eAAe,EACf,OAAO,EACP,SAAS,EACT,GAAG,EACN,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EACR,iBAAiB,EAEjB,UAAU,EAGV,OAAO,EACP,GAAG,EACN,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,YAAY,EACR,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,UAAU,EACV,MAAM,EACN,eAAe,EACf,OAAO,EACP,SAAS,EACT,GAAG,EACN,MAAM,gBAAgB,CAAC;AAGxB,OAAO,KAAK,EACR,iBAAiB,EAEjB,UAAU,EAGV,OAAO,EACP,GAAG,EACN,MAAM,gBAAgB,CAAC;AAsBxB;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,UAAU,GAAG,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAEpF;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAErD;AAMD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,UAAU,GAAG,GAAG,EAAE,aAAa,EAAE,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,CAuI/E;AAMD;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CASpG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CASpG;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAStG;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CASpG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAChC,OAAO,EAAE,UAAU,GAAG,IAAI,EAC1B,GAAG,EAAE,KAAK,EACV,QAAQ,EAAE,iBAAiB,GAAG,IAAI,EAClC,IAAI,EAAE,MAAM,GACb,OAAO,CAyBT"}
|
package/dist/component.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { JSXElement } from "./jsx-runtime.js";
|
|
2
2
|
import { signal } from "@sigx/reactivity";
|
|
3
|
+
import type { Model as ModelType } from "./model.js";
|
|
3
4
|
/**
|
|
4
5
|
* Extension point for additional component attributes.
|
|
5
6
|
* Use module augmentation to add attributes to all components:
|
|
@@ -27,9 +28,79 @@ export type DefineProp<TName extends string, TType, Required extends boolean = f
|
|
|
27
28
|
[K in TName]: TType;
|
|
28
29
|
};
|
|
29
30
|
/**
|
|
30
|
-
*
|
|
31
|
+
* Model binding tuple type - [stateObject, key] for forwarding
|
|
32
|
+
* @deprecated Use Model<T> interface instead
|
|
31
33
|
*/
|
|
32
|
-
export type
|
|
34
|
+
export type ModelBinding<T> = [Record<string, T>, string];
|
|
35
|
+
/**
|
|
36
|
+
* Re-export Model type for convenience
|
|
37
|
+
*/
|
|
38
|
+
export type { ModelType as Model };
|
|
39
|
+
/**
|
|
40
|
+
* Define a 2-way bound model.
|
|
41
|
+
*
|
|
42
|
+
* The component receives a Model<T> object with:
|
|
43
|
+
* - `.value` - Get or set the current value
|
|
44
|
+
* - `.binding` - The underlying binding for forwarding
|
|
45
|
+
*
|
|
46
|
+
* Default form: DefineModel<T>
|
|
47
|
+
* - props.model: Model<T> (read/write/forward)
|
|
48
|
+
* - props.model.value to read/write
|
|
49
|
+
* - <Child model={props.model} /> to forward
|
|
50
|
+
*
|
|
51
|
+
* Named form: DefineModel<"name", T>
|
|
52
|
+
* - props.name: Model<T> (read/write/forward)
|
|
53
|
+
* - props.name.value to read/write
|
|
54
|
+
* - <Child model={props.name} /> to forward
|
|
55
|
+
*
|
|
56
|
+
* Callers use: model={() => state.prop} or model:name={() => state.prop}
|
|
57
|
+
*
|
|
58
|
+
* @example
|
|
59
|
+
* ```tsx
|
|
60
|
+
* interface InputProps extends DefineModel<string> {
|
|
61
|
+
* placeholder?: string;
|
|
62
|
+
* }
|
|
63
|
+
*
|
|
64
|
+
* const Input = component<InputProps>(({ props }) => {
|
|
65
|
+
* // Read
|
|
66
|
+
* console.log(props.model.value);
|
|
67
|
+
*
|
|
68
|
+
* // Write
|
|
69
|
+
* props.model.value = "new value";
|
|
70
|
+
*
|
|
71
|
+
* // Forward
|
|
72
|
+
* <Child model={props.model} />
|
|
73
|
+
* });
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export type DefineModel<TNameOrType, TType = void> = TType extends void ? {
|
|
77
|
+
model?: ModelType<TNameOrType>;
|
|
78
|
+
/** @internal Marker for JSX to accept binding tuples */
|
|
79
|
+
__modelBindings?: {
|
|
80
|
+
model: TNameOrType;
|
|
81
|
+
};
|
|
82
|
+
} & DefineEvent<"update:modelValue", TNameOrType> : TNameOrType extends string ? {
|
|
83
|
+
[K in TNameOrType]?: ModelType<TType>;
|
|
84
|
+
} & {
|
|
85
|
+
/** @internal Marker for JSX to accept binding tuples */
|
|
86
|
+
__modelBindings?: {
|
|
87
|
+
[K in TNameOrType]: TType;
|
|
88
|
+
};
|
|
89
|
+
} & DefineEvent<`update:${TNameOrType}`, TType> : never;
|
|
90
|
+
/**
|
|
91
|
+
* Extract model binding definitions from a component props type.
|
|
92
|
+
* Used at JSX level to allow binding tuples for model props.
|
|
93
|
+
*/
|
|
94
|
+
type ExtractModelBindings<T> = T extends {
|
|
95
|
+
__modelBindings?: infer M;
|
|
96
|
+
} ? NonNullable<M> : {};
|
|
97
|
+
/**
|
|
98
|
+
* Transform Model<T> props to also accept binding syntax at JSX level.
|
|
99
|
+
* This allows: model={[state, "value"]} or model={props.model}
|
|
100
|
+
*/
|
|
101
|
+
type ExternalModelProps<T> = {
|
|
102
|
+
[K in keyof ExtractModelBindings<T>]?: ModelType<ExtractModelBindings<T>[K]> | ModelBinding<ExtractModelBindings<T>[K]> | (() => ExtractModelBindings<T>[K]);
|
|
103
|
+
};
|
|
33
104
|
export type EventDefinition<T> = {
|
|
34
105
|
__eventDetail: T;
|
|
35
106
|
};
|
|
@@ -111,14 +182,6 @@ export interface MountContext<TElement = PlatformElement> {
|
|
|
111
182
|
*/
|
|
112
183
|
export interface SetupContext {
|
|
113
184
|
}
|
|
114
|
-
/**
|
|
115
|
-
* Type for defaults object - REQUIRES all optional keys to be provided.
|
|
116
|
-
* Required props (where undefined is not assignable) get type 'never' to prevent setting them.
|
|
117
|
-
* This ensures you don't forget to add a default when adding a new optional prop.
|
|
118
|
-
*/
|
|
119
|
-
type DefaultsFor<TProps> = {
|
|
120
|
-
[K in keyof TProps as undefined extends TProps[K] ? K : never]-?: NonNullable<TProps[K]>;
|
|
121
|
-
};
|
|
122
185
|
/**
|
|
123
186
|
* Props type after defaults are applied - all props become required (non-undefined)
|
|
124
187
|
*/
|
|
@@ -126,47 +189,53 @@ export type PropsWithDefaults<TProps, D> = {
|
|
|
126
189
|
readonly [K in keyof TProps]-?: K extends keyof D ? NonNullable<TProps[K]> : TProps[K];
|
|
127
190
|
};
|
|
128
191
|
/**
|
|
129
|
-
* Props accessor -
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
* When calling props(), you MUST provide defaults for ALL optional props.
|
|
133
|
-
* This ensures you don't forget to add a default when adding a new optional prop.
|
|
134
|
-
* Required props cannot be in the defaults object.
|
|
192
|
+
* Props accessor - a reactive proxy for component props.
|
|
193
|
+
* Use destructuring with defaults for optional props.
|
|
135
194
|
*
|
|
136
195
|
* @example
|
|
137
196
|
* ```tsx
|
|
138
|
-
* //
|
|
139
|
-
* const
|
|
140
|
-
* return () => <button class={
|
|
197
|
+
* // Destructure with defaults
|
|
198
|
+
* const { variant = 'primary', size = 'md' } = ctx.props;
|
|
199
|
+
* return () => <button class={variant}>...</button>
|
|
200
|
+
*
|
|
201
|
+
* // Or spread to forward all props
|
|
202
|
+
* return () => <ChildComponent {...ctx.props} />
|
|
141
203
|
* ```
|
|
142
204
|
*/
|
|
143
205
|
export type PropsAccessor<TProps> = {
|
|
144
206
|
readonly [K in keyof TProps]: TProps[K];
|
|
145
|
-
} & {
|
|
146
|
-
(defaults: DefaultsFor<TProps>): PropsWithDefaults<TProps, DefaultsFor<TProps>> & PropsAccessor<TProps>;
|
|
147
207
|
};
|
|
148
208
|
export interface ComponentSetupContext<TElement = PlatformElement, TProps extends Record<string, any> = {}, TEvents extends Record<string, any> = {}, TRef = any, TSlots = {}> extends SetupContext {
|
|
149
209
|
el: TElement;
|
|
150
210
|
signal: typeof signal;
|
|
151
211
|
/**
|
|
152
|
-
* Component props -
|
|
153
|
-
*
|
|
212
|
+
* Component props - includes regular props and Model<T> objects.
|
|
213
|
+
*
|
|
214
|
+
* Models are accessed via props: props.model.value, props.title.value
|
|
154
215
|
*
|
|
155
216
|
* @example
|
|
156
217
|
* ```tsx
|
|
157
|
-
* //
|
|
158
|
-
*
|
|
218
|
+
* // Read model
|
|
219
|
+
* const value = props.model.value;
|
|
220
|
+
*
|
|
221
|
+
* // Write model
|
|
222
|
+
* props.model.value = "new value";
|
|
223
|
+
*
|
|
224
|
+
* // Forward to child
|
|
225
|
+
* <Child model={props.model} />
|
|
159
226
|
*
|
|
160
|
-
* //
|
|
161
|
-
*
|
|
227
|
+
* // Forward via context
|
|
228
|
+
* defineProvide(ctx, () => props.model);
|
|
162
229
|
* ```
|
|
163
230
|
*/
|
|
164
231
|
props: PropsAccessor<TProps>;
|
|
165
232
|
slots: SlotsObject<TSlots>;
|
|
166
233
|
emit: EmitFn<TEvents>;
|
|
167
234
|
parent: any | null;
|
|
168
|
-
|
|
169
|
-
|
|
235
|
+
onMounted(fn: (ctx: MountContext<TElement>) => void): void;
|
|
236
|
+
onUnmounted(fn: (ctx: MountContext<TElement>) => void): void;
|
|
237
|
+
onCreated(fn: () => void): void;
|
|
238
|
+
onUpdated(fn: () => void): void;
|
|
170
239
|
expose(exposed: TRef): void;
|
|
171
240
|
/**
|
|
172
241
|
* The current render function. Can be replaced directly for HMR.
|
|
@@ -181,12 +250,14 @@ export interface ComponentSetupContext<TElement = PlatformElement, TProps extend
|
|
|
181
250
|
}
|
|
182
251
|
export declare function getCurrentInstance(): ComponentSetupContext<any, any, any, any, {}> | null;
|
|
183
252
|
export declare function setCurrentInstance(ctx: ComponentSetupContext<any, any, any> | null): ComponentSetupContext<any, any, any, any, {}> | null;
|
|
184
|
-
export declare function
|
|
185
|
-
export declare function
|
|
253
|
+
export declare function onMounted(fn: (ctx: MountContext) => void): void;
|
|
254
|
+
export declare function onUnmounted(fn: (ctx: MountContext) => void): void;
|
|
255
|
+
export declare function onCreated(fn: () => void): void;
|
|
256
|
+
export declare function onUpdated(fn: () => void): void;
|
|
186
257
|
export type ViewFn = () => JSXElement | JSXElement[] | undefined;
|
|
187
258
|
/**
|
|
188
259
|
* Type for component setup functions.
|
|
189
|
-
* Includes Props, Events, Ref and Slots generics to preserve type information.
|
|
260
|
+
* Includes Props, Events, Ref, and Slots generics to preserve type information.
|
|
190
261
|
* Can be sync or async - async setup is awaited on server, runs sync on client hydration.
|
|
191
262
|
*/
|
|
192
263
|
export type SetupFn<TProps extends Record<string, any> = {}, TEvents extends Record<string, any> = {}, TRef = any, TSlots = {}> = (ctx: ComponentSetupContext<PlatformElement, TProps, TEvents, TRef, TSlots>) => ViewFn | Promise<ViewFn>;
|
|
@@ -238,9 +309,17 @@ export type ComponentRef<T extends {
|
|
|
238
309
|
__ref: any;
|
|
239
310
|
}> = Ref<T["__ref"]>;
|
|
240
311
|
/**
|
|
241
|
-
* Strip internal type markers from props
|
|
312
|
+
* Strip internal type markers from component props.
|
|
313
|
+
* This ensures the component's internal `props` accessor only shows actual props,
|
|
314
|
+
* not internal type markers or event definitions.
|
|
315
|
+
*
|
|
316
|
+
* Note: `model` and named models (from DefineModel) are now kept as they are
|
|
317
|
+
* actual Model<T> objects on props. Only the JSX-level `model:name` syntax
|
|
318
|
+
* and event markers are stripped.
|
|
242
319
|
*/
|
|
243
|
-
type StripInternalMarkers<T> =
|
|
320
|
+
type StripInternalMarkers<T> = {
|
|
321
|
+
[K in keyof T as K extends "__exposed" | "__slots" | "__models" | "__modelBindings" ? never : K extends `model:${string}` ? never : K extends `update:${string}` ? never : K]: T[K];
|
|
322
|
+
};
|
|
244
323
|
/**
|
|
245
324
|
* Component options (optional second param)
|
|
246
325
|
*/
|
|
@@ -254,7 +333,18 @@ export interface ComponentOptions {
|
|
|
254
333
|
type SlotProps<TSlots> = TSlots extends Record<string, any> ? {
|
|
255
334
|
slots?: Partial<TSlots>;
|
|
256
335
|
} : {};
|
|
257
|
-
|
|
336
|
+
/**
|
|
337
|
+
* Sync binding type - used at JSX level to enable two-way binding
|
|
338
|
+
* The JSX runtime transforms sync into value + onUpdate:value
|
|
339
|
+
*/
|
|
340
|
+
type SyncBinding<T> = [object, string] | (() => T);
|
|
341
|
+
/**
|
|
342
|
+
* Sync props - if the component has a 'value' prop, allow 'sync' binding
|
|
343
|
+
*/
|
|
344
|
+
type SyncProps<TCombined> = 'value' extends keyof TCombined ? {
|
|
345
|
+
sync?: SyncBinding<TCombined['value']>;
|
|
346
|
+
} : {};
|
|
347
|
+
export type ComponentFactory<TCombined extends Record<string, any>, TRef, TSlots> = ((props: StripInternalMarkers<Omit<TCombined, EventNames<TCombined>>> & EventHandlers<TCombined> & SlotProps<TSlots> & SyncProps<TCombined> & ExternalModelProps<TCombined> & JSX.IntrinsicAttributes & ComponentAttributeExtensions & {
|
|
258
348
|
ref?: Ref<TRef>;
|
|
259
349
|
children?: any;
|
|
260
350
|
}) => JSXElement) & {
|
|
@@ -281,7 +371,7 @@ export type ComponentFactory<TCombined extends Record<string, any>, TRef, TSlots
|
|
|
281
371
|
* ```tsx
|
|
282
372
|
* type CardProps = DefineProp<"title", string> & DefineSlot<"header">;
|
|
283
373
|
*
|
|
284
|
-
* export const Card =
|
|
374
|
+
* export const Card = component<CardProps>((ctx) => {
|
|
285
375
|
* const { title } = ctx.props;
|
|
286
376
|
* const { slots } = ctx;
|
|
287
377
|
*
|
|
@@ -294,6 +384,5 @@ export type ComponentFactory<TCombined extends Record<string, any>, TRef, TSlots
|
|
|
294
384
|
* });
|
|
295
385
|
* ```
|
|
296
386
|
*/
|
|
297
|
-
export declare function
|
|
298
|
-
export {};
|
|
387
|
+
export declare function component<TCombined extends Record<string, any> = {}, TRef = ExtractExposed<TCombined>, TSlots = ExtractSlots<TCombined>>(setup: (ctx: ComponentSetupContext<PlatformElement, StripInternalMarkers<TCombined>, TCombined, TRef, TSlots>) => ViewFn | Promise<ViewFn>, options?: ComponentOptions): ComponentFactory<TCombined, TRef, TSlots>;
|
|
299
388
|
//# sourceMappingURL=component.d.ts.map
|
package/dist/component.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../src/component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,OAAO,KAAK,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAKrD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,4BAA4B;CAE5C;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,MAAM,EAAE,KAAK,EAAE,QAAQ,SAAS,OAAO,GAAG,KAAK,IAAI,QAAQ,SAAS,KAAK,GACxG;KAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,KAAK;CAAE,GACxB;KAAG,CAAC,IAAI,KAAK,GAAG,KAAK;CAAE,CAAC;AAE9B;;;GAGG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAE1D;;GAEG;AACH,YAAY,EAAE,SAAS,IAAI,KAAK,EAAE,CAAC;AAEnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,MAAM,WAAW,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,IAAI,KAAK,SAAS,IAAI,GAEjE;IACE,KAAK,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAC/B,wDAAwD;IACxD,eAAe,CAAC,EAAE;QAAE,KAAK,EAAE,WAAW,CAAA;KAAE,CAAC;CAC1C,GACC,WAAW,CAAC,mBAAmB,EAAE,WAAW,CAAC,GAE/C,WAAW,SAAS,MAAM,GAC1B;KACG,CAAC,IAAI,WAAW,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC;CACtC,GACC;IACA,wDAAwD;IACxD,eAAe,CAAC,EAAE;SAAG,CAAC,IAAI,WAAW,GAAG,KAAK;KAAE,CAAC;CACjD,GACC,WAAW,CAAC,UAAU,WAAW,EAAE,EAAE,KAAK,CAAC,GAC7C,KAAK,CAAC;AAEZ;;;GAGG;AACH,KAAK,oBAAoB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAE7F;;;GAGG;AACH,KAAK,kBAAkB,CAAC,CAAC,IAAI;KACxB,CAAC,IAAI,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,EAC/B,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACrC,YAAY,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GACxC,CAAC,MAAM,oBAAoB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAAE,aAAa,EAAE,CAAC,CAAA;CAAE,CAAC;AAEtD;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,KAAK,SAAS,MAAM,EAAE,OAAO,GAAG,IAAI,IAAI;KAC3D,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC;CAC1C,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,UAAU,CAAC,KAAK,SAAS,MAAM,EAAE,MAAM,GAAG,IAAI,IAAI;IAC1D,OAAO,CAAC,EAAE;SACL,CAAC,IAAI,KAAK,GAAG,MAAM,SAAS,IAAI,GAC/B,MAAM,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI,GACtC,CAAC,KAAK,EAAE,MAAM,KAAK,UAAU,GAAG,UAAU,EAAE,GAAG,IAAI;KACxD,CAAA;CACJ,CAAC;AAEF;;GAEG;AACH,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAEhE;;GAEG;AACH,KAAK,WAAW,GAAG,MAAM,UAAU,EAAE,CAAC;AAEtC;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,MAAM,GAAG,EAAE,IAAI;IACnC,OAAO,EAAE,WAAW,CAAC;CACxB,GAAG,MAAM,CAAC;AAEX;;GAEG;AACH,KAAK,UAAU,CAAC,OAAO,IAAI;KACtB,CAAC,IAAI,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK;CACxF,CAAC,MAAM,OAAO,CAAC,GAAG,MAAM,CAAC;AAE1B;;GAEG;AACH,KAAK,WAAW,CAAC,OAAO,EAAE,KAAK,SAAS,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,SAAS;KAAG,CAAC,IAAI,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,MAAM,OAAO,CAAC;CAAE,GAC1H,OAAO,GACP,KAAK,CAAC;AAEZ;;GAEG;AACH,MAAM,MAAM,MAAM,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,UAAU,CAAC,OAAO,CAAC,EACxF,SAAS,EAAE,KAAK,EAChB,GAAG,IAAI,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,IAAI,GAAG,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAC7F,IAAI,CAAC;AAEV;;GAEG;AACH,KAAK,UAAU,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,GACrE,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAC5B,CAAC,CAAC;AAER;;GAEG;AACH,KAAK,aAAa,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI;KACrD,CAAC,IAAI,MAAM,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,SAAS,eAAe,CAAC,GAAG,CAAC,GAAG,SAAS,GACxE,KAAK,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAC7B,KAAK,CACN,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,GAAG,CAAC,GAAG,KAAK,KAAK,IAAI;CAC5F,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,aAAa;CAE7B;AAED,uEAAuE;AACvE,MAAM,MAAM,eAAe,GAAG,aAAa,SAAS;IAAE,OAAO,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,GAAG,CAAC;AAEnF;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,QAAQ,GAAG,eAAe;IACpD,EAAE,EAAE,QAAQ,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;CAE5B;AAgBD;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,MAAM,EAAE,CAAC,IAAI;IACvC,QAAQ,EAAE,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;CACzF,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,aAAa,CAAC,MAAM,IAAI;IAChC,QAAQ,EAAE,CAAC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;CAC1C,CAAC;AAEF,MAAM,WAAW,qBAAqB,CAClC,QAAQ,GAAG,eAAe,EAC1B,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EACvC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EACxC,IAAI,GAAG,GAAG,EACV,MAAM,GAAG,EAAE,CACb,SAAQ,YAAY;IAClB,EAAE,EAAE,QAAQ,CAAC;IACb,MAAM,EAAE,OAAO,MAAM,CAAC;IACtB;;;;;;;;;;;;;;;;;;;OAmBG;IACH,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACtB,MAAM,EAAE,GAAG,GAAG,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC3D,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,CAAC,QAAQ,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7D,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAChC,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAChC,MAAM,CAAC,OAAO,EAAE,IAAI,GAAG,IAAI,CAAC;IAC5B;;;OAGG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;OAGG;IACH,MAAM,IAAI,IAAI,CAAC;CAClB;AAID,wBAAgB,kBAAkB,yDAEjC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI,wDAIlF;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,QAMxD;AAED,wBAAgB,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,IAAI,QAM1D;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,QAMvC;AAED,wBAAgB,SAAS,CAAC,EAAE,EAAE,MAAM,IAAI,QAMvC;AAED,MAAM,MAAM,MAAM,GAAG,MAAM,UAAU,GAAG,UAAU,EAAE,GAAG,SAAS,CAAC;AAEjE;;;;GAIG;AACH,MAAM,MAAM,OAAO,CACf,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EACvC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EACxC,IAAI,GAAG,GAAG,EACV,MAAM,GAAG,EAAE,IACX,CAAC,GAAG,EAAE,qBAAqB,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;AAK7G;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,QAAQ;WALG,MAAM;WAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;cAO9F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,CAS9G;AAED,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI;IAC1B,SAAS,CAAC,EAAE;QAAE,MAAM,EAAE,CAAC,CAAA;KAAE,CAAC;CAC7B,CAAC;AAEF,KAAK,cAAc,CAAC,CAAC,IAAI,WAAW,SAAS,MAAM,CAAC,GAC9C,CAAC,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAAG,CAAC,GAAG,IAAI,CAAC,GACpE,IAAI,CAAC;AAEX,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI;IAAE,OAAO,EAAE,CAAC,GAAG,IAAI,CAAA;CAAE,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,GAAG,CAAA;CAAE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC;AAE3D;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS;IAAE,KAAK,EAAE,GAAG,CAAA;CAAE,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAGrE;;;;;;;;GAQG;AACH,KAAK,oBAAoB,CAAC,CAAC,IAAI;KAC1B,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,WAAW,GAAG,SAAS,GAAG,UAAU,GAAG,iBAAiB,GAAG,KAAK,GACrF,CAAC,SAAS,SAAS,MAAM,EAAE,GAAG,KAAK,GACnC,CAAC,SAAS,UAAU,MAAM,EAAE,GAAG,KAAK,GACpC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC7B,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,KAAK,SAAS,CAAC,MAAM,IAAI,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACrD;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;CAAE,GAC3B,EAAE,CAAC;AAET;;;GAGG;AACH,KAAK,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAEnD;;GAEG;AACH,KAAK,SAAS,CAAC,SAAS,IAAI,OAAO,SAAS,MAAM,SAAS,GACrD;IAAE,IAAI,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;CAAE,GAC1C,EAAE,CAAC;AAGT,MAAM,MAAM,gBAAgB,CAAC,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,oBAAoB,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,CAAC,SAAS,CAAC,GAAG,kBAAkB,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,mBAAmB,GAAG,4BAA4B,GAAG;IACvT,GAAG,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAChB,QAAQ,CAAC,EAAE,GAAG,CAAC;CAClB,KAAK,UAAU,CAAC,GAAG;IAChB,gDAAgD;IAChD,OAAO,EAAE,OAAO,CAAC,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IAC3E,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,OAAO,EAAE,oBAAoB,CAAC,SAAS,CAAC,CAAC;IACzC,sCAAsC;IACtC,QAAQ,EAAE,SAAS,CAAC;IACpB,mCAAmC;IACnC,KAAK,EAAE,IAAI,CAAC;IACZ,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,SAAS,CACrB,SAAS,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,EAC1C,IAAI,GAAG,cAAc,CAAC,SAAS,CAAC,EAChC,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,EAEhC,KAAK,EAAE,CAAC,GAAG,EAAE,qBAAqB,CAAC,eAAe,EAAE,oBAAoB,CAAC,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,EAC1I,OAAO,CAAC,EAAE,gBAAgB,GAC3B,gBAAgB,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CA4B3C"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ComponentFactory } from './component.js';
|
|
2
|
+
/**
|
|
3
|
+
* Creates a compound component by attaching sub-components as static properties.
|
|
4
|
+
*
|
|
5
|
+
* This enables the pattern of `Parent.Child` components (e.g., `Menu.Item`, `Card.Body`)
|
|
6
|
+
* while preserving full TypeScript type inference for both the parent and children.
|
|
7
|
+
*
|
|
8
|
+
* @param main - The main/parent component factory
|
|
9
|
+
* @param sub - An object containing sub-components to attach
|
|
10
|
+
* @returns The main component with sub-components attached as static properties
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* // Define individual components
|
|
15
|
+
* const _Menu = component<MenuProps>(ctx => { ... });
|
|
16
|
+
* const _MenuItem = component<MenuItemProps>(ctx => { ... });
|
|
17
|
+
* const _MenuTitle = component<MenuTitleProps>(ctx => { ... });
|
|
18
|
+
*
|
|
19
|
+
* // Create compound component
|
|
20
|
+
* export const Menu = compound(_Menu, {
|
|
21
|
+
* Item: _MenuItem,
|
|
22
|
+
* Title: _MenuTitle,
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* // Usage in JSX
|
|
26
|
+
* <Menu>
|
|
27
|
+
* <Menu.Title>Navigation</Menu.Title>
|
|
28
|
+
* <Menu.Item value="home">Home</Menu.Item>
|
|
29
|
+
* <Menu.Item value="about">About</Menu.Item>
|
|
30
|
+
* </Menu>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
export declare function compound<TMain extends ComponentFactory<any, any, any>, TSub extends Record<string, ComponentFactory<any, any, any>>>(main: TMain, sub: TSub): TMain & TSub;
|
|
34
|
+
//# sourceMappingURL=compound.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compound.d.ts","sourceRoot":"","sources":["../src/compound.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,QAAQ,CACpB,KAAK,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC7C,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,EAC9D,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,GAAG,KAAK,GAAG,IAAI,CAEtC"}
|
package/dist/di/factory.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type InjectableFunction } from "./injectable.js";
|
|
1
2
|
import { InstanceLifetimes, guid } from "../models/index.js";
|
|
2
3
|
export declare class SubscriptionHandler {
|
|
3
4
|
private unsubs;
|
|
@@ -9,9 +10,9 @@ export interface SetupFactoryContext {
|
|
|
9
10
|
subscriptions: SubscriptionHandler;
|
|
10
11
|
overrideDispose(onDispose: (fn: () => void) => void): void;
|
|
11
12
|
}
|
|
12
|
-
export declare function defineFactory<InferReturnSetup>(setup: (ctx: SetupFactoryContext, ...args: any) => InferReturnSetup, lifetime: InstanceLifetimes, typeIdentifier?: guid):
|
|
13
|
+
export declare function defineFactory<InferReturnSetup>(setup: (ctx: SetupFactoryContext, ...args: any) => InferReturnSetup, lifetime: InstanceLifetimes, typeIdentifier?: guid): InjectableFunction<InferReturnSetup & {
|
|
13
14
|
dispose?: () => void;
|
|
14
|
-
}
|
|
15
|
+
}>;
|
|
15
16
|
export declare function defineFactory<InferReturnSetup, T1>(setup: (ctx: SetupFactoryContext, param1: T1) => InferReturnSetup, lifetime: InstanceLifetimes, typeIdentifier?: guid): (param1: T1) => InferReturnSetup;
|
|
16
17
|
export declare function defineFactory<InferReturnSetup, T1, T2>(setup: (ctx: SetupFactoryContext, param1: T1, param2: T2) => InferReturnSetup, lifetime: InstanceLifetimes, typeIdentifier?: string): (param1: T1, param2: T2) => InferReturnSetup;
|
|
17
18
|
export declare function defineFactory<InferReturnSetup, T1, T2, T3>(setup: (ctx: SetupFactoryContext, param1: T1, param2: T2, param3: T3) => InferReturnSetup, lifetime: InstanceLifetimes, typeIdentifier?: guid): (param1: T1, param2: T2, param3: T3) => InferReturnSetup;
|
package/dist/di/factory.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/di/factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/di/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/di/injectable.d.ts
CHANGED
|
@@ -1,9 +1,83 @@
|
|
|
1
|
-
|
|
1
|
+
import type { AppContext } from "../app-types.js";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
3
|
+
* Injectable function type with metadata
|
|
4
4
|
*/
|
|
5
|
-
export
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
export interface InjectableFunction<T> {
|
|
6
|
+
(): T;
|
|
7
|
+
_factory: () => T;
|
|
8
|
+
_token: symbol;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Define an injectable service/value that can be provided at app or component level.
|
|
12
|
+
*
|
|
13
|
+
* The returned function can be called to get the current instance:
|
|
14
|
+
* - If provided at component level via `defineProvide()`, returns that instance
|
|
15
|
+
* - If provided at app level via `app.defineProvide()`, returns that instance
|
|
16
|
+
* - Otherwise falls back to a global singleton created by the factory
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // Define a service
|
|
21
|
+
* const useApiConfig = defineInjectable(() => ({
|
|
22
|
+
* baseUrl: 'https://api.example.com'
|
|
23
|
+
* }));
|
|
24
|
+
*
|
|
25
|
+
* // Use it in any component - gets nearest provided instance or global singleton
|
|
26
|
+
* const config = useApiConfig();
|
|
27
|
+
* console.log(config.baseUrl);
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function defineInjectable<T>(factory: () => T): InjectableFunction<T>;
|
|
31
|
+
/**
|
|
32
|
+
* Provide a new instance of an injectable at the current component level.
|
|
33
|
+
* Child components will receive this instance when calling the injectable function.
|
|
34
|
+
*
|
|
35
|
+
* @param useFn - The injectable function created by defineInjectable
|
|
36
|
+
* @param factory - Optional custom factory to create the instance (overrides default)
|
|
37
|
+
*
|
|
38
|
+
* @example
|
|
39
|
+
* ```typescript
|
|
40
|
+
* const useApiConfig = defineInjectable(() => ({ baseUrl: 'https://api.example.com' }));
|
|
41
|
+
*
|
|
42
|
+
* const MyComponent = component(() => {
|
|
43
|
+
* // Create and provide a new instance for this subtree
|
|
44
|
+
* const config = defineProvide(useApiConfig);
|
|
45
|
+
* config.baseUrl = 'https://custom.api.com';
|
|
46
|
+
*
|
|
47
|
+
* return () => <ChildComponent />;
|
|
48
|
+
* });
|
|
49
|
+
*
|
|
50
|
+
* // Or provide a pre-constructed instance:
|
|
51
|
+
* const MyComponent2 = component(() => {
|
|
52
|
+
* const customService = createMyService({ custom: 'options' });
|
|
53
|
+
* defineProvide(useMyService, () => customService);
|
|
54
|
+
*
|
|
55
|
+
* return () => <ChildComponent />;
|
|
56
|
+
* });
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
export declare function defineProvide<T>(useFn: InjectableFunction<T>, factory?: () => T): T;
|
|
60
|
+
/**
|
|
61
|
+
* Get the current AppContext from the component tree.
|
|
62
|
+
* The AppContext is provided at the root component level during mount/hydrate/SSR.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```typescript
|
|
66
|
+
* const appContext = useAppContext();
|
|
67
|
+
* console.log(appContext?.app);
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare function useAppContext(): AppContext | null;
|
|
71
|
+
/**
|
|
72
|
+
* Get the AppContext token.
|
|
73
|
+
* Used by renderers to provide the AppContext at the root component level.
|
|
74
|
+
* @internal
|
|
75
|
+
*/
|
|
76
|
+
export declare function getAppContextToken(): symbol;
|
|
77
|
+
/**
|
|
78
|
+
* Provide the AppContext on a component's provides Map.
|
|
79
|
+
* Called by the renderer for the ROOT component only.
|
|
80
|
+
* @internal
|
|
81
|
+
*/
|
|
82
|
+
export declare function provideAppContext(ctx: any, appContext: AppContext): void;
|
|
9
83
|
//# sourceMappingURL=injectable.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/di/injectable.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"injectable.d.ts","sourceRoot":"","sources":["../../src/di/injectable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AA6DlD;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACjC,IAAI,CAAC,CAAC;IACN,QAAQ,EAAE,MAAM,CAAC,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAuB3E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,CAWnF;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,IAAI,UAAU,GAAG,IAAI,CAEjD;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAaxE"}
|