@lytjs/component 3.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.
Files changed (63) hide show
  1. package/dist/index.cjs +1 -0
  2. package/dist/index.mjs +1 -0
  3. package/dist/types/builtins/async-component.d.ts +61 -0
  4. package/dist/types/builtins/async-component.d.ts.map +1 -0
  5. package/dist/types/builtins/error-boundary.d.ts +28 -0
  6. package/dist/types/builtins/error-boundary.d.ts.map +1 -0
  7. package/dist/types/builtins/index.d.ts +19 -0
  8. package/dist/types/builtins/index.d.ts.map +1 -0
  9. package/dist/types/builtins/keep-alive.d.ts +118 -0
  10. package/dist/types/builtins/keep-alive.d.ts.map +1 -0
  11. package/dist/types/builtins/suspense.d.ts +51 -0
  12. package/dist/types/builtins/suspense.d.ts.map +1 -0
  13. package/dist/types/builtins/transition-group.d.ts +40 -0
  14. package/dist/types/builtins/transition-group.d.ts.map +1 -0
  15. package/dist/types/builtins/transition.d.ts +136 -0
  16. package/dist/types/builtins/transition.d.ts.map +1 -0
  17. package/dist/types/composition-api.d.ts +116 -0
  18. package/dist/types/composition-api.d.ts.map +1 -0
  19. package/dist/types/define-component.d.ts +265 -0
  20. package/dist/types/define-component.d.ts.map +1 -0
  21. package/dist/types/emit.d.ts +79 -0
  22. package/dist/types/emit.d.ts.map +1 -0
  23. package/dist/types/index.d.ts +23 -0
  24. package/dist/types/index.d.ts.map +1 -0
  25. package/dist/types/lifecycle.d.ts +92 -0
  26. package/dist/types/lifecycle.d.ts.map +1 -0
  27. package/dist/types/props.d.ts +85 -0
  28. package/dist/types/props.d.ts.map +1 -0
  29. package/dist/types/signal-state.d.ts +58 -0
  30. package/dist/types/signal-state.d.ts.map +1 -0
  31. package/dist/types/slots.d.ts +80 -0
  32. package/dist/types/slots.d.ts.map +1 -0
  33. package/dist/types/src/builtins/async-component.d.ts +61 -0
  34. package/dist/types/src/builtins/async-component.d.ts.map +1 -0
  35. package/dist/types/src/builtins/error-boundary.d.ts +28 -0
  36. package/dist/types/src/builtins/error-boundary.d.ts.map +1 -0
  37. package/dist/types/src/builtins/index.d.ts +19 -0
  38. package/dist/types/src/builtins/index.d.ts.map +1 -0
  39. package/dist/types/src/builtins/keep-alive.d.ts +118 -0
  40. package/dist/types/src/builtins/keep-alive.d.ts.map +1 -0
  41. package/dist/types/src/builtins/suspense.d.ts +51 -0
  42. package/dist/types/src/builtins/suspense.d.ts.map +1 -0
  43. package/dist/types/src/builtins/transition-group.d.ts +40 -0
  44. package/dist/types/src/builtins/transition-group.d.ts.map +1 -0
  45. package/dist/types/src/builtins/transition.d.ts +136 -0
  46. package/dist/types/src/builtins/transition.d.ts.map +1 -0
  47. package/dist/types/src/composition-api.d.ts +116 -0
  48. package/dist/types/src/composition-api.d.ts.map +1 -0
  49. package/dist/types/src/define-component.d.ts +265 -0
  50. package/dist/types/src/define-component.d.ts.map +1 -0
  51. package/dist/types/src/emit.d.ts +79 -0
  52. package/dist/types/src/emit.d.ts.map +1 -0
  53. package/dist/types/src/index.d.ts +23 -0
  54. package/dist/types/src/index.d.ts.map +1 -0
  55. package/dist/types/src/lifecycle.d.ts +92 -0
  56. package/dist/types/src/lifecycle.d.ts.map +1 -0
  57. package/dist/types/src/props.d.ts +85 -0
  58. package/dist/types/src/props.d.ts.map +1 -0
  59. package/dist/types/src/signal-state.d.ts +58 -0
  60. package/dist/types/src/signal-state.d.ts.map +1 -0
  61. package/dist/types/src/slots.d.ts +80 -0
  62. package/dist/types/src/slots.d.ts.map +1 -0
  63. package/package.json +44 -0
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Lyt.js Props 系统
3
+ *
4
+ * 提供 props 声明标准化、验证与初始化能力。
5
+ * 支持数组形式和对象形式的 props 声明,
6
+ * 支持类型检查、默认值(值 / 工厂函数)、required 校验。
7
+ * 纯原生实现,零外部依赖。
8
+ */
9
+ /** 支持的 prop 原始类型构造器 */
10
+ export type PropType = typeof String | typeof Number | typeof Boolean | typeof Array | typeof Object | typeof Function;
11
+ /** 单个 prop 的声明选项 */
12
+ export interface PropOptions {
13
+ /** 期望类型,可以是单个类型或类型数组 */
14
+ type?: PropType | PropType[] | null;
15
+ /** 是否必传,默认 false */
16
+ required?: boolean;
17
+ /** 默认值,可以是静态值或返回默认值的工厂函数 */
18
+ default?: any;
19
+ /** 自定义验证函数,返回 true 表示通过 */
20
+ validator?: (value: any) => boolean;
21
+ }
22
+ /** 标准化后的 props 选项映射 */
23
+ export type NormalizedPropsOptions = Record<string, PropOptions>;
24
+ /** 标准化后的 props 选项(保留原始 key 顺序) */
25
+ export type NormalizedProps = {
26
+ /** 标准化后的选项映射 */
27
+ options: NormalizedPropsOptions;
28
+ /** 原始 key 列表(保持声明顺序) */
29
+ keys: string[];
30
+ };
31
+ /**
32
+ * 标准化 props 声明
33
+ *
34
+ * 支持两种形式:
35
+ * - 数组形式:['title', 'count'] → 每个元素转为 { type: null }
36
+ * - 对象形式:{ title: String, count: { type: Number, default: 0 } }
37
+ *
38
+ * @param props - 组件 options 中传入的 props 声明
39
+ * @returns 标准化后的 props 结构(options + keys)
40
+ */
41
+ export declare function normalizePropsOptions(props: string[] | Record<string, PropOptions | PropType | PropType[]> | undefined | null): NormalizedProps;
42
+ /**
43
+ * 验证单个 prop 值是否符合声明约束
44
+ *
45
+ * 检查顺序:
46
+ * 1. required 校验
47
+ * 2. type 校验(如果声明了 type)
48
+ * 3. 自定义 validator 校验
49
+ *
50
+ * @param propName - prop 名称
51
+ * @param propOptions - 该 prop 的标准化选项
52
+ * @param value - 传入的 prop 值
53
+ * @returns 验证是否通过
54
+ */
55
+ export declare function validateProp(propName: string, propOptions: PropOptions, value: unknown): boolean;
56
+ /**
57
+ * 获取 prop 的默认值
58
+ *
59
+ * 如果 default 是工厂函数则调用并返回结果,
60
+ * 否则直接返回 default 值。
61
+ *
62
+ * @param propOptions - 该 prop 的标准化选项
63
+ * @param propName - prop 名称(用于错误提示)
64
+ * @returns 默认值
65
+ */
66
+ export declare function getPropDefaultValue(propOptions: PropOptions, propName: string): any;
67
+ /**
68
+ * 初始化组件 props
69
+ *
70
+ * 流程:
71
+ * 1. 遍历标准化后的 props keys
72
+ * 2. 从 rawProps 中取值,没有则取默认值
73
+ * 3. 对 Boolean 类型做特殊转换
74
+ * 4. 执行 validateProp 校验
75
+ * 5. 将最终值写入 instance.props
76
+ *
77
+ * @param instance - 组件内部实例(需有 props 和 propsOptions 属性)
78
+ * @param rawProps - 父组件传入的原始 props
79
+ * @returns 初始化后的 props 对象
80
+ */
81
+ export declare function initProps(instance: {
82
+ props: Record<string, any>;
83
+ propsOptions: NormalizedProps;
84
+ }, rawProps: Record<string, any> | null | undefined): Record<string, any>;
85
+ //# sourceMappingURL=props.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.d.ts","sourceRoot":"","sources":["../../src/props.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,uBAAuB;AACvB,MAAM,MAAM,QAAQ,GAChB,OAAO,MAAM,GACb,OAAO,MAAM,GACb,OAAO,OAAO,GACd,OAAO,KAAK,GACZ,OAAO,MAAM,GACb,OAAO,QAAQ,CAAC;AAEpB,oBAAoB;AACpB,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC;IACpC,oBAAoB;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,OAAO,CAAC,EAAE,GAAG,CAAC;IACd,2BAA2B;IAC3B,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;CACrC;AAED,uBAAuB;AACvB,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEjE,kCAAkC;AAClC,MAAM,MAAM,eAAe,GAAG;IAC5B,gBAAgB;IAChB,OAAO,EAAE,sBAAsB,CAAC;IAChC,wBAAwB;IACxB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AAmGF;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC,GAAG,SAAS,GAAG,IAAI,GACvF,eAAe,CAsDjB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,WAAW,EACxB,KAAK,EAAE,OAAO,GACb,OAAO,CAwET;AAED;;;;;;;;;GASG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,MAAM,GACf,GAAG,CAuBL;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAAC,YAAY,EAAE,eAAe,CAAA;CAAE,EACvE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,GAAG,SAAS,GAC/C,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAmCrB"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Lyt.js Signal State Adapter
3
+ *
4
+ * 将普通状态对象转换为基于 Signal 的响应式状态。
5
+ * 提供 Proxy 包装,使组件代码可以使用 this.count 而非 this.count.value()。
6
+ * 纯原生零依赖实现。
7
+ */
8
+ import { type WritableSignal } from '@lytjs/reactivity/signal';
9
+ /** Signal 状态对象:每个 key 对应一个 WritableSignal */
10
+ export type SignalState = Record<string, WritableSignal<any>>;
11
+ /** Signal 状态代理(自动解包/设置 Signal 值) */
12
+ export type SignalStateProxy = Record<string, any>;
13
+ /**
14
+ * 将普通状态对象转换为 Signal-based 状态
15
+ *
16
+ * 例如:createSignalState({ count: 0, name: 'hello' })
17
+ * 返回:{ count: signal(0), name: signal('hello') }
18
+ *
19
+ * @param initialState - 初始状态对象
20
+ * @returns 每个字段对应一个 WritableSignal 的对象
21
+ */
22
+ export declare function createSignalState(initialState: Record<string, any>): SignalState;
23
+ /**
24
+ * 创建 Signal 状态代理
25
+ *
26
+ * 代理对象会自动解包 Signal 值(读取时调用 sig()),
27
+ * 并自动设置 Signal 值(写入时调用 sig.set(value))。
28
+ *
29
+ * 这允许组件代码使用 this.count 而非 this.count.value()。
30
+ *
31
+ * @param signalState - Signal 状态对象
32
+ * @returns 代理对象
33
+ */
34
+ export declare function createSignalStateProxy(signalState: SignalState): SignalStateProxy;
35
+ /**
36
+ * 获取 Signal 状态的原始值快照
37
+ *
38
+ * @param signalState - Signal 状态对象
39
+ * @returns 包含所有 Signal 当前值的普通对象
40
+ */
41
+ export declare function getSignalStateSnapshot(signalState: SignalState): Record<string, any>;
42
+ /**
43
+ * 批量更新 Signal 状态
44
+ *
45
+ * @param signalState - Signal 状态对象
46
+ * @param partial - 要更新的部分状态
47
+ */
48
+ export declare function patchSignalState(signalState: SignalState, partial: Record<string, any>): void;
49
+ /**
50
+ * 清理 Signal 状态(停止所有 Signal 的订阅)
51
+ *
52
+ * 注意:当前 Signal 实现没有显式的 dispose 方法,
53
+ * 此函数为未来扩展预留。
54
+ *
55
+ * @param signalState - Signal 状态对象
56
+ */
57
+ export declare function disposeSignalState(signalState: SignalState): void;
58
+ //# sourceMappingURL=signal-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal-state.d.ts","sourceRoot":"","sources":["../../src/signal-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAIL,KAAK,cAAc,EAEpB,MAAM,0BAA0B,CAAA;AAMjC,6CAA6C;AAC7C,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,CAAA;AAE7D,oCAAoC;AACpC,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;AAMlD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,WAAW,CAQhF;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,gBAAgB,CAwDjF;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CASpF;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,CAS7F;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI,CAGjE"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Lyt.js 插槽系统
3
+ *
4
+ * 提供组件插槽的初始化、标准化与访问能力。
5
+ * 支持默认插槽、具名插槽和作用域插槽。
6
+ * 纯原生实现,零外部依赖。
7
+ */
8
+ /**
9
+ * 插槽内容类型
10
+ *
11
+ * 插槽内容可以是:
12
+ * - 普通值(字符串、数字等)
13
+ * - 返回 VNode / 内容的函数(作用域插槽)
14
+ * - VNode 数组
15
+ * - null / undefined(空插槽)
16
+ */
17
+ export type SlotValue = any | ((...args: any[]) => any) | null | undefined;
18
+ /** 插槽映射表:插槽名 → 插槽内容 */
19
+ export type Slots = Record<string, SlotValue>;
20
+ /** 子节点结构,用于传递插槽内容 */
21
+ export interface SlotChildren {
22
+ /** 默认插槽内容 */
23
+ default?: SlotValue;
24
+ /** 具名插槽内容 */
25
+ [name: string]: SlotValue | undefined;
26
+ }
27
+ /** 组件实例所需的最小插槽接口 */
28
+ export interface SlotsInstance {
29
+ /** 初始化后的插槽映射 */
30
+ slots: Slots;
31
+ }
32
+ /**
33
+ * 标准化插槽内容
34
+ *
35
+ * 将各种形式的插槽内容统一处理:
36
+ * - null / undefined → 返回 null(空插槽)
37
+ * - 函数 → 保持原样(作用域插槽,调用时传入 props)
38
+ * - 数组 → 保持原样(多个子节点)
39
+ * - 其他值 → 包装为数组(单个子节点)
40
+ *
41
+ * @param value - 原始插槽内容
42
+ * @returns 标准化后的插槽内容
43
+ */
44
+ export declare function normalizeSlotValue(value: SlotValue): SlotValue;
45
+ /**
46
+ * 初始化组件插槽
47
+ *
48
+ * 从 children 中提取插槽内容并标准化。
49
+ * children 可以是:
50
+ * - null / undefined → 无插槽
51
+ * - 函数 → 默认作用域插槽
52
+ * - 数组 → 默认插槽内容(多个子节点)
53
+ * - 普通对象 → 具名插槽映射
54
+ *
55
+ * @param instance - 组件实例(需有 slots 属性)
56
+ * @param children - 父组件传入的子节点 / 插槽内容
57
+ * @returns 初始化后的插槽映射
58
+ */
59
+ export declare function initSlots(instance: SlotsInstance, children: SlotChildren | SlotValue | null | undefined): Slots;
60
+ /**
61
+ * 渲染插槽
62
+ *
63
+ * 获取指定名称的插槽内容并渲染。
64
+ * 如果是作用域插槽(函数),传入 scope 参数调用。
65
+ *
66
+ * @param slots - 插槽映射
67
+ * @param name - 插槽名称(默认为 'default')
68
+ * @param scope - 传递给作用域插槽的数据
69
+ * @returns 插槽渲染结果,如果没有对应插槽则返回 null
70
+ */
71
+ export declare function renderSlot(slots: Slots, name?: string, scope?: any): any;
72
+ /**
73
+ * 检查插槽是否存在
74
+ *
75
+ * @param slots - 插槽映射
76
+ * @param name - 插槽名称(默认为 'default')
77
+ * @returns 插槽是否存在且有内容
78
+ */
79
+ export declare function hasSlot(slots: Slots, name?: string): boolean;
80
+ //# sourceMappingURL=slots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slots.d.ts","sourceRoot":"","sources":["../../src/slots.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH;;;;;;;;GAQG;AACH,MAAM,MAAM,SAAS,GACjB,GAAG,GACH,CAAC,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,GAAG,CAAC,GACzB,IAAI,GACJ,SAAS,CAAC;AAEd,uBAAuB;AACvB,MAAM,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAE9C,qBAAqB;AACrB,MAAM,WAAW,YAAY;IAC3B,aAAa;IACb,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,aAAa;IACb,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;CACvC;AAED,oBAAoB;AACpB,MAAM,WAAW,aAAa;IAC5B,gBAAgB;IAChB,KAAK,EAAE,KAAK,CAAC;CACd;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,CAkB9D;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACvB,QAAQ,EAAE,aAAa,EACvB,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GACpD,KAAK,CA4CP;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,KAAK,EACZ,IAAI,GAAE,MAAkB,EACxB,KAAK,CAAC,EAAE,GAAG,GACV,GAAG,CAcL;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,MAAkB,GAAG,OAAO,CAGvE"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Lyt.js defineAsyncComponent - 异步组件定义
3
+ *
4
+ * 定义异步加载的组件,支持加载状态、错误处理、超时和重试。
5
+ * 可配合 Suspense 组件使用(suspensible 模式)。
6
+ * 纯原生实现,零外部依赖。
7
+ */
8
+ import { type ComponentDefine } from '../define-component';
9
+ /** 异步组件配置选项 */
10
+ export interface AsyncComponentOptions {
11
+ /** 异步加载函数,返回 Promise<ComponentDefine | ComponentOptions> */
12
+ loader: () => Promise<any>;
13
+ /** 加载中显示的组件 */
14
+ loadingComponent?: any;
15
+ /** 加载失败显示的组件 */
16
+ errorComponent?: any;
17
+ /** 延迟显示 loading 的时间(ms),默认 200 */
18
+ delay?: number;
19
+ /** 超时时间(ms),超时后显示 errorComponent */
20
+ timeout?: number;
21
+ /** 错误回调 */
22
+ onError?: (error: Error, retry: () => void, fail: () => void) => void;
23
+ /** 是否配合 Suspense 使用,默认 true */
24
+ suspensible?: boolean;
25
+ /** 重试次数上限,默认 3 */
26
+ retryCount?: number;
27
+ }
28
+ /**
29
+ * 定义异步组件
30
+ *
31
+ * 返回一个包装组件,首次渲染时调用 loader 异步加载真实组件。
32
+ * 加载过程中可显示 loadingComponent,加载失败显示 errorComponent。
33
+ *
34
+ * @param options - 异步组件配置选项,或直接传入 loader 函数
35
+ * @returns 异步组件定义(ComponentDefine)
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * // 简单用法:传入 loader 函数
40
+ * const AsyncComp = defineAsyncComponent(() => import('./MyComponent'));
41
+ *
42
+ * // 完整配置
43
+ * const AsyncComp = defineAsyncComponent({
44
+ * loader: () => import('./MyComponent'),
45
+ * loadingComponent: LoadingSpinner,
46
+ * errorComponent: ErrorDisplay,
47
+ * delay: 200, // 200ms 后才显示 loading
48
+ * timeout: 10000, // 10s 超时
49
+ * onError(error, retry, fail) {
50
+ * if (error.message.includes('network')) {
51
+ * retry(); // 网络错误时重试
52
+ * } else {
53
+ * fail(); // 其他错误直接失败
54
+ * }
55
+ * },
56
+ * suspensible: true, // 配合 Suspense 使用
57
+ * });
58
+ * ```
59
+ */
60
+ export declare function defineAsyncComponent(options: AsyncComponentOptions | (() => Promise<any>)): ComponentDefine;
61
+ //# sourceMappingURL=async-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"async-component.d.ts","sourceRoot":"","sources":["../../../../src/builtins/async-component.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEL,KAAK,eAAe,EAErB,MAAM,qBAAqB,CAAC;AAM7B,eAAe;AACf,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3B,eAAe;IACf,gBAAgB,CAAC,EAAE,GAAG,CAAC;IACvB,gBAAgB;IAChB,cAAc,CAAC,EAAE,GAAG,CAAC;IACrB,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,IAAI,KAAK,IAAI,CAAC;IACtE,+BAA+B;IAC/B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAuFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,qBAAqB,GAAG,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GACpD,eAAe,CAiQjB"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Lyt.js ErrorBoundary 内置错误边界组件
3
+ *
4
+ * 捕获子组件渲染错误,显示降级 UI(fallback slot),
5
+ * 支持 onError 回调和错误状态管理。
6
+ * 支持同步和异步错误捕获、错误计数自动禁用、开发模式错误详情。
7
+ * 纯原生实现,零外部依赖。
8
+ */
9
+ import { type ComponentDefine } from '../define-component';
10
+ /** ErrorBoundary 组件的 Props 接口 */
11
+ export interface ErrorBoundaryProps {
12
+ /** 降级 UI 内容(错误时显示) */
13
+ fallback?: any;
14
+ /** 最大错误记录数,默认 100 */
15
+ maxErrors?: number;
16
+ /** 错误回调 */
17
+ onError?: (error: Error, vm: any, info: string) => void;
18
+ /** 错误捕获回调,返回 true 阻止传播 */
19
+ onErrorCaptured?: (error: Error, vm: any, info: string) => boolean | void;
20
+ /** 错误状态变化回调 */
21
+ onErrorChange?: (hasError: boolean, error: Error | null) => void;
22
+ /** 重置回调(用户触发重置时调用) */
23
+ onReset?: () => void;
24
+ /** 自动禁用的最大错误次数,默认 Infinity(不自动禁用) */
25
+ maxErrorCount?: number;
26
+ }
27
+ export declare const ErrorBoundaryComponent: ComponentDefine;
28
+ //# sourceMappingURL=error-boundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-boundary.d.ts","sourceRoot":"","sources":["../../../../src/builtins/error-boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAA;AAM5B,iCAAiC;AACjC,MAAM,WAAW,kBAAkB;IACjC,sBAAsB;IACtB,QAAQ,CAAC,EAAE,GAAG,CAAA;IACd,qBAAqB;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,WAAW;IACX,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvD,0BAA0B;IAC1B,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,CAAA;IACzE,eAAe;IACf,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAA;IAChE,sBAAsB;IACtB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;IACpB,qCAAqC;IACrC,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAcD,eAAO,MAAM,sBAAsB,EAAE,eAuNnC,CAAA"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Lyt.js 内置组件 — 统一导出入口
3
+ *
4
+ * 导出所有内置组件和工具函数。
5
+ * 纯原生实现,零外部依赖。
6
+ */
7
+ export { Transition, TransitionPropsKeys } from './transition';
8
+ export type { TransitionProps } from './transition';
9
+ export { TransitionGroup } from './transition-group';
10
+ export type { TransitionGroupProps } from './transition-group';
11
+ export { KeepAlive, pruneCacheEntry, pruneCache, registerKeepAliveInstance, attachCacheRef } from './keep-alive';
12
+ export type { KeepAliveProps } from './keep-alive';
13
+ export { Suspense } from './suspense';
14
+ export type { SuspenseProps } from './suspense';
15
+ export { ErrorBoundaryComponent } from './error-boundary';
16
+ export type { ErrorBoundaryProps } from './error-boundary';
17
+ export { defineAsyncComponent } from './async-component';
18
+ export type { AsyncComponentOptions } from './async-component';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/builtins/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,yBAAyB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjH,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEnD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAE3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Lyt.js KeepAlive 内置缓存组件
3
+ *
4
+ * 缓存组件实例,避免重复渲染和销毁。
5
+ * 支持 include/exclude 匹配规则和 max LRU 淘汰策略。
6
+ * 提供 activated/deactivated 生命周期钩子。
7
+ * 纯原生实现,零外部依赖。
8
+ */
9
+ import { type ComponentDefine, type ComponentInternalInstance } from '../define-component';
10
+ /** KeepAlive 组件的 Props 接口 */
11
+ export interface KeepAliveProps {
12
+ /** 匹配的组件名缓存(字符串精确匹配或 RegExp 正则匹配) */
13
+ include?: string | RegExp | (string | RegExp)[];
14
+ /** 匹配的组件名不缓存 */
15
+ exclude?: string | RegExp | (string | RegExp)[];
16
+ /** 最大缓存数量,超过时使用 LRU 淘汰策略 */
17
+ max?: number;
18
+ }
19
+ /** 缓存条目 */
20
+ interface CacheEntry {
21
+ /** 缓存的 VNode(原始引用,非拷贝) */
22
+ vnode: any;
23
+ /** 缓存的组件实例 */
24
+ component: ComponentInternalInstance | null;
25
+ /** 缓存的 key(组件名) */
26
+ key: string;
27
+ /** 组件实例的完整状态快照(deactivate 时保存) */
28
+ savedState: SavedComponentState | null;
29
+ }
30
+ /** 组件实例状态快照 */
31
+ interface SavedComponentState {
32
+ /** 组件内部 state(reactive 对象的原始值) */
33
+ state: Record<string, any>;
34
+ /** 组件 setupState */
35
+ setupState: Record<string, any>;
36
+ /** 计算属性引用(@lyt/reactivity ComputedRef) */
37
+ computedRefs: Record<string, {
38
+ value: any;
39
+ } | (() => any)>;
40
+ /** 子树 */
41
+ subTree: any;
42
+ /** 是否已挂载 */
43
+ isMounted: boolean;
44
+ /** watch 停止句柄列表 */
45
+ watchStopHandles: any[];
46
+ /** 生命周期钩子快照 */
47
+ lifecycleHooks: Partial<Record<string, any[]>>;
48
+ }
49
+ /**
50
+ * KeepAlive 内置缓存组件
51
+ *
52
+ * 缓存包裹的组件实例,切换时不会销毁组件而是移入缓存,
53
+ * 再次切换回来时从缓存恢复,避免重复创建和销毁。
54
+ *
55
+ * 缓存策略:
56
+ * - include:只有匹配的组件会被缓存
57
+ * - exclude:匹配的组件不会被缓存
58
+ * - max:最大缓存数量,使用 LRU(最近最少使用)策略淘汰
59
+ *
60
+ * 生命周期:
61
+ * - activated:从缓存恢复时触发
62
+ * - deactivated:移入缓存时触发
63
+ *
64
+ * @example
65
+ * ```ts
66
+ * // 基本用法
67
+ * <keep-alive>
68
+ * <component :is="currentComponent" />
69
+ * </keep-alive>
70
+ *
71
+ * // 配置 include/exclude
72
+ * <keep-alive include="Home" exclude="Login" :max="10">
73
+ * <component :is="currentComponent" />
74
+ * </keep-alive>
75
+ * ```
76
+ */
77
+ export declare const KeepAlive: ComponentDefine;
78
+ /**
79
+ * 注册组件实例到 KeepAlive 缓存
80
+ *
81
+ * 当 KeepAlive 包裹的子组件完成挂载后,
82
+ * 渲染器应调用此方法将组件实例关联到对应的缓存条目。
83
+ *
84
+ * @param vnode - 子组件的 VNode
85
+ * @param component - 子组件的内部实例
86
+ */
87
+ export declare function registerKeepAliveInstance(vnode: any, component: ComponentInternalInstance): void;
88
+ /**
89
+ * 将缓存 Map 引用关联到 VNode
90
+ *
91
+ * 在 KeepAlive render 时调用,使 registerKeepAliveInstance
92
+ * 能找到正确的缓存 Map。
93
+ *
94
+ * @param vnode - 子组件 VNode
95
+ * @param cache - KeepAlive 的缓存 Map
96
+ */
97
+ export declare function attachCacheRef(vnode: any, cache: Map<string, CacheEntry>): void;
98
+ /**
99
+ * 淘汰指定缓存条目
100
+ *
101
+ * 从缓存中移除指定 key 的条目,
102
+ * 并触发该组件的 deactivated 钩子。
103
+ *
104
+ * @param cache - 缓存 Map
105
+ * @param key - 要淘汰的缓存 key
106
+ */
107
+ export declare function pruneCacheEntry(cache: Map<string, CacheEntry>, key: string): void;
108
+ /**
109
+ * 根据 include/exclude 规则清理缓存
110
+ *
111
+ * 遍历所有缓存条目,移除不满足条件的条目。
112
+ *
113
+ * @param cache - 缓存 Map
114
+ * @param props - KeepAlive props
115
+ */
116
+ export declare function pruneCache(cache: Map<string, CacheEntry>, props: KeepAliveProps): void;
117
+ export {};
118
+ //# sourceMappingURL=keep-alive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keep-alive.d.ts","sourceRoot":"","sources":["../../../../src/builtins/keep-alive.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,yBAAyB,EAC/B,MAAM,qBAAqB,CAAC;AAa7B,6BAA6B;AAC7B,MAAM,WAAW,cAAc;IAC7B,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAChD,gBAAgB;IAChB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAChD,4BAA4B;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,WAAW;AACX,UAAU,UAAU;IAClB,0BAA0B;IAC1B,KAAK,EAAE,GAAG,CAAC;IACX,cAAc;IACd,SAAS,EAAE,yBAAyB,GAAG,IAAI,CAAC;IAC5C,mBAAmB;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,kCAAkC;IAClC,UAAU,EAAE,mBAAmB,GAAG,IAAI,CAAC;CACxC;AAED,eAAe;AACf,UAAU,mBAAmB;IAC3B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3B,oBAAoB;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAChC,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,GAAG,CAAA;KAAE,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC3D,SAAS;IACT,OAAO,EAAE,GAAG,CAAC;IACb,YAAY;IACZ,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB;IACnB,gBAAgB,EAAE,GAAG,EAAE,CAAC;IACxB,eAAe;IACf,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;CAChD;AA0KD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,eAAO,MAAM,SAAS,EAAE,eAiItB,CAAC;AAMH;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,yBAAyB,GACnC,IAAI,CAgBN;AAED;;;;;;;;GAQG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,GAAG,EACV,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,GAC7B,IAAI,CAIN;AAiDD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,GAAG,EAAE,MAAM,GACV,IAAI,CAWN;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,EAC9B,KAAK,EAAE,cAAc,GACpB,IAAI,CAaN"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Lyt.js Suspense 内置异步依赖等待组件
3
+ *
4
+ * 等待异步子组件加载完成后再显示真实内容,
5
+ * 加载过程中显示 fallback 占位内容。
6
+ * 支持多个异步子组件(全部完成后才切换),
7
+ * 支持超时处理和事件回调。
8
+ * 纯原生实现,零外部依赖。
9
+ */
10
+ import { type ComponentDefine } from '../define-component';
11
+ /** Suspense 组件的 Props 接口 */
12
+ export interface SuspenseProps {
13
+ /** 异步加载时显示的占位内容 */
14
+ fallback?: any;
15
+ /** 超时时间(ms),超时后显示 fallback */
16
+ timeout?: number;
17
+ /** 等待开始回调 */
18
+ onPending?: () => void;
19
+ /** 异步组件全部加载完成回调 */
20
+ onResolve?: () => void;
21
+ /** 显示 fallback 回调 */
22
+ onFallback?: () => void;
23
+ }
24
+ /**
25
+ * Suspense 内置异步依赖等待组件
26
+ *
27
+ * 等待所有异步子组件加载完成后再显示真实内容。
28
+ * 加载过程中显示 fallback 占位内容。
29
+ *
30
+ * 工作流程:
31
+ * 1. 检测子组件是否为异步组件
32
+ * 2. 如果有异步组件,显示 fallback
33
+ * 3. 等待所有异步组件加载完成
34
+ * 4. 全部完成后切换为真实内容
35
+ * 5. 如果超时,显示 fallback 并触发超时处理
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * // 基本用法
40
+ * <suspense :fallback="LoadingSpinner">
41
+ * <async-component />
42
+ * </suspense>
43
+ *
44
+ * // 带超时
45
+ * <suspense :fallback="LoadingSpinner" :timeout="3000" :onResolve="handleLoaded">
46
+ * <async-component />
47
+ * </suspense>
48
+ * ```
49
+ */
50
+ export declare const Suspense: ComponentDefine;
51
+ //# sourceMappingURL=suspense.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suspense.d.ts","sourceRoot":"","sources":["../../../../src/builtins/suspense.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAM7B,4BAA4B;AAC5B,MAAM,WAAW,aAAa;IAC5B,mBAAmB;IACnB,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,mBAAmB;IACnB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,qBAAqB;IACrB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;CACzB;AAiHD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,eAAO,MAAM,QAAQ,EAAE,eAgOrB,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Lyt.js TransitionGroup 内置列表过渡组件
3
+ *
4
+ * 继承 Transition 的所有功能,额外处理列表中元素的移动过渡(FLIP 动画技术)。
5
+ * 使用 getBoundingClientRect 记录元素位置,在 DOM 更新后计算位移并应用 transform 动画。
6
+ * 纯原生实现,零外部依赖。
7
+ */
8
+ import { type ComponentDefine } from '../define-component';
9
+ import { type TransitionProps } from './transition';
10
+ /** TransitionGroup 组件的 Props 接口 */
11
+ export interface TransitionGroupProps extends TransitionProps {
12
+ /** 包裹标签名,默认不渲染包裹元素(Fragment) */
13
+ tag?: string;
14
+ /** 移动过渡类名 */
15
+ moveClass?: string;
16
+ }
17
+ /**
18
+ * TransitionGroup 内置列表过渡组件
19
+ *
20
+ * 处理列表中多个子元素的进入、离开和移动过渡。
21
+ * 继承 Transition 的 CSS 类名和 JS 钩子功能,
22
+ * 额外使用 FLIP 技术实现元素移动动画。
23
+ *
24
+ * @example
25
+ * ```ts
26
+ * // 列表过渡
27
+ * <transition-group name="list" tag="ul">
28
+ * <li v-for="item in items" :key="item.id">
29
+ * {{ item.text }}
30
+ * </li>
31
+ * </transition-group>
32
+ *
33
+ * // CSS 示例
34
+ * // .list-enter-active, .list-leave-active { transition: all 0.3s; }
35
+ * // .list-enter-from, .list-leave-to { opacity: 0; transform: translateX(30px); }
36
+ * // .list-move { transition: transform 0.3s; }
37
+ * ```
38
+ */
39
+ export declare const TransitionGroup: ComponentDefine;
40
+ //# sourceMappingURL=transition-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transition-group.d.ts","sourceRoot":"","sources":["../../../../src/builtins/transition-group.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,KAAK,eAAe,EAMrB,MAAM,cAAc,CAAC;AAMtB,mCAAmC;AACnC,MAAM,WAAW,oBAAqB,SAAQ,eAAe;IAC3D,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwFD;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,eAAe,EAAE,eAwI5B,CAAC"}