@geektech/tsone 0.0.1 → 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.
Files changed (40) hide show
  1. package/README-zh.md +405 -0
  2. package/README.md +288 -32
  3. package/dist/core/animation/TransitionGroup.d.ts +7 -0
  4. package/dist/core/animation/index.d.ts +2 -0
  5. package/dist/core/animation/list-animation-controller.d.ts +16 -0
  6. package/dist/core/animation/transition-group-strategy.d.ts +15 -0
  7. package/dist/core/animation/types.d.ts +25 -0
  8. package/dist/core/app.d.ts +30 -8
  9. package/dist/core/component/base.d.ts +18 -1
  10. package/dist/core/component/index.d.ts +2 -2
  11. package/dist/core/document.d.ts +32 -0
  12. package/dist/core/form.d.ts +24 -0
  13. package/dist/core/index.d.ts +4 -0
  14. package/dist/core/model.d.ts +18 -0
  15. package/dist/core/reactive/types.d.ts +5 -0
  16. package/dist/core/reactive.d.ts +5 -2
  17. package/dist/core/renderer/element-strategy.d.ts +25 -0
  18. package/dist/core/renderer/types.d.ts +6 -1
  19. package/dist/core/renderer.d.ts +9 -23
  20. package/dist/core/vnode.d.ts +56 -16
  21. package/dist/{index-dgv88dz4.js → index-8wjswsye.js} +6 -2
  22. package/dist/index-8wjswsye.js.map +10 -0
  23. package/dist/index-vpx80nq5.js +32 -0
  24. package/dist/index-vpx80nq5.js.map +10 -0
  25. package/dist/{index-3j2jsdpc.js → index-wv9gyjqt.js} +858 -244
  26. package/dist/index-wv9gyjqt.js.map +25 -0
  27. package/dist/index.d.ts +3 -2
  28. package/dist/index.js +380 -20
  29. package/dist/index.js.map +8 -5
  30. package/dist/router/index.d.ts +1 -1
  31. package/dist/router/index.js +6 -4
  32. package/dist/router/index.js.map +1 -1
  33. package/dist/style/StyleManager.d.ts +1 -0
  34. package/dist/style/index.d.ts +1 -0
  35. package/dist/style/index.js +6 -2
  36. package/dist/style/index.js.map +1 -1
  37. package/dist/style/sheet.d.ts +13 -0
  38. package/package.json +4 -14
  39. package/dist/index-3j2jsdpc.js.map +0 -20
  40. package/dist/index-dgv88dz4.js.map +0 -10
@@ -0,0 +1,25 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../lib/core/reactive/types.ts", "../lib/core/reactive.ts", "../lib/core/vnode.ts", "../lib/core/model.ts", "../lib/core/renderer/props.ts", "../lib/core/renderer/element-strategy.ts", "../lib/core/animation/list-animation-controller.ts", "../lib/core/animation/types.ts", "../lib/core/animation/transition-group-strategy.ts", "../lib/core/renderer.ts", "../lib/core/template.ts", "../lib/core/component/base.ts", "../lib/router/instance.ts", "../lib/router/matcher.ts", "../lib/router/history.ts", "../lib/router/index.ts"],
4
+ "sourcesContent": [
5
+ "export interface ReactiveEffect<T = unknown> {\n (): T | undefined;\n deps: Set<ReactiveEffect>[];\n id: number;\n active: boolean;\n scheduler?: (effect: ReactiveEffect) => void;\n}\n\nexport interface ReactiveEffectOptions {\n lazy?: boolean;\n scheduler?: (effect: ReactiveEffect) => void;\n throwOnError?: boolean;\n}\n\nexport interface ComputedRef<T> {\n readonly value: T;\n}\n\nexport const IS_REACTIVE = Symbol('is_reactive');\nexport const IS_READONLY = Symbol('is_readonly');\nexport const IS_REF = Symbol('is_ref');\n\nexport interface Ref<T = unknown> {\n value: T;\n}\n\nexport const MUTATING_ARRAY_METHODS = [\n 'push',\n 'pop',\n 'shift',\n 'unshift',\n 'splice',\n 'sort',\n 'reverse',\n] as const;\n\nexport function hasReactiveFlag(\n value: object,\n flag: typeof IS_REACTIVE | typeof IS_READONLY\n): boolean {\n return Boolean(Reflect.get(value, flag));\n}\n\nexport function isObject(value: unknown): value is object {\n return value !== null && typeof value === 'object';\n}\n",
6
+ "import {\n ComputedRef,\n IS_REACTIVE,\n IS_REF,\n IS_READONLY,\n MUTATING_ARRAY_METHODS,\n Ref,\n ReactiveEffect,\n ReactiveEffectOptions,\n hasReactiveFlag,\n isObject,\n} from './reactive/types';\n\nexport type {\n ComputedRef,\n Ref,\n ReactiveEffect,\n ReactiveEffectOptions,\n} from './reactive/types';\n\nlet effectId = 0;\n\n// 响应式系统\nexport class ReactiveSystem {\n private static instance: ReactiveSystem;\n private activeEffect: ReactiveEffect | null = null;\n private readonly effectStack: ReactiveEffect[] = [];\n private targetMap = new WeakMap<\n object,\n Map<string | symbol, Set<ReactiveEffect>>\n >();\n private reactiveMap = new WeakMap<object, object>();\n private readonlyMap = new WeakMap<object, object>();\n\n private constructor() {}\n\n public static getInstance(): ReactiveSystem {\n if (!ReactiveSystem.instance) {\n ReactiveSystem.instance = new ReactiveSystem();\n }\n return ReactiveSystem.instance;\n }\n\n public reactive<T extends object>(target: T): T {\n // 检查输入参数\n if (!isObject(target)) {\n console.warn('reactive: target must be an object');\n return target;\n }\n\n // 如果传入的是已经是响应式对象,直接返回\n if (isReactive(target)) {\n return target;\n }\n\n // 如果目标已经有对应的响应式对象,返回已存在的代理\n if (this.reactiveMap.has(target)) {\n return this.reactiveMap.get(target) as T;\n }\n\n // 优化数组处理\n if (Array.isArray(target)) {\n return this.createReactiveArray(target);\n }\n\n // 普通对象处理\n const proxy = new Proxy(target, {\n get: (target, key: string | symbol) => {\n // 处理响应式标记的特殊属性\n if (key === IS_REACTIVE) {\n return true;\n }\n if (key === IS_READONLY) {\n return false;\n }\n\n // 收集依赖\n this.track(target, key);\n\n const value = Reflect.get(target, key);\n\n // 如果是对象,递归转换为响应式\n if (isObject(value) && !hasReactiveFlag(value, IS_READONLY)) {\n return this.reactive(value);\n }\n return value;\n },\n set: (target, key: string | symbol, value) => {\n // 检查是否是只读的\n if (hasReactiveFlag(target, IS_READONLY)) {\n console.warn(`Cannot set property ${String(key)} on readonly object`);\n return false;\n }\n\n const oldValue = Reflect.get(target, key);\n\n // 如果新值是对象,转换为响应式\n if (\n isObject(value) &&\n !hasReactiveFlag(value, IS_REACTIVE) &&\n !hasReactiveFlag(value, IS_READONLY)\n ) {\n value = this.reactive(value);\n }\n\n const result = Reflect.set(target, key, value);\n\n // 只有当值真正改变时才触发更新\n if (oldValue !== value) {\n this.trigger(target, key);\n }\n return result;\n },\n deleteProperty: (target, key: string | symbol) => {\n // 检查是否是只读的\n if (hasReactiveFlag(target, IS_READONLY)) {\n console.warn(\n `Cannot delete property ${String(key)} on readonly object`\n );\n return false;\n }\n\n const hadKey = key in target;\n const result = Reflect.deleteProperty(target, key);\n\n if (hadKey) {\n this.trigger(target, key);\n }\n return result;\n },\n });\n\n // 存储响应式对象的映射关系\n this.reactiveMap.set(target, proxy);\n return proxy;\n }\n\n /**\n * 创建响应式数组\n */\n private createReactiveArray<T extends unknown[]>(target: T): T {\n // 如果目标已经有对应的响应式对象,返回已存在的代理\n if (this.reactiveMap.has(target)) {\n return this.reactiveMap.get(target) as T;\n }\n\n const proxy = new Proxy(target, {\n get: (target, key: string | symbol) => {\n // 处理响应式标记的特殊属性\n if (key === IS_REACTIVE) {\n return true;\n }\n if (key === IS_READONLY) {\n return false;\n }\n\n // 收集依赖\n this.track(target, key);\n\n const value = Reflect.get(target, key);\n\n // 处理数组的变异方法\n if (\n typeof key === 'string' &&\n MUTATING_ARRAY_METHODS.includes(\n key as (typeof MUTATING_ARRAY_METHODS)[number]\n )\n ) {\n return (...args: unknown[]) => {\n // 执行原始方法\n const arrayMethod = value as (...methodArgs: unknown[]) => unknown;\n const result = arrayMethod.apply(target, args);\n // 触发数组更新\n this.trigger(target, 'length');\n this.trigger(target, key);\n return result;\n };\n }\n\n if (isObject(value) && !hasReactiveFlag(value, IS_READONLY)) {\n return this.reactive(value);\n }\n\n return value;\n },\n set: (target, key: string | symbol, value) => {\n // 检查是否是只读的\n if (hasReactiveFlag(target, IS_READONLY)) {\n console.warn(`Cannot set property ${String(key)} on readonly object`);\n return false;\n }\n\n const oldValue = Reflect.get(target, key);\n\n // 如果新值是对象,转换为响应式\n if (\n isObject(value) &&\n !hasReactiveFlag(value, IS_REACTIVE) &&\n !hasReactiveFlag(value, IS_READONLY)\n ) {\n value = this.reactive(value);\n }\n\n const result = Reflect.set(target, key, value);\n\n // 只有当值真正改变时才触发更新\n if (oldValue !== value) {\n this.trigger(target, key);\n // 对于数组索引的修改,同时触发length的更新\n if (typeof key === 'string' && !isNaN(Number(key))) {\n this.trigger(target, 'length');\n }\n }\n return result;\n },\n deleteProperty: (target, key: string | symbol) => {\n // 检查是否是只读的\n if (hasReactiveFlag(target, IS_READONLY)) {\n console.warn(\n `Cannot delete property ${String(key)} on readonly object`\n );\n return false;\n }\n\n const hadKey = key in target;\n const result = Reflect.deleteProperty(target, key);\n\n if (hadKey) {\n this.trigger(target, key);\n // 对于数组,同时触发length的更新\n this.trigger(target, 'length');\n }\n return result;\n },\n });\n\n // 存储响应式对象的映射关系\n this.reactiveMap.set(target, proxy);\n return proxy;\n }\n\n public readonly<T extends object>(target: T): Readonly<T> {\n // 检查输入参数\n if (!isObject(target)) {\n console.warn('readonly: target must be an object');\n return target;\n }\n\n // 如果传入的是已经是只读响应式对象,直接返回\n if (hasReactiveFlag(target, IS_READONLY)) {\n return target as Readonly<T>;\n }\n\n // 如果目标已经有对应的只读响应式对象,返回已存在的代理\n if (this.readonlyMap.has(target)) {\n return this.readonlyMap.get(target) as Readonly<T>;\n }\n\n const proxy = new Proxy(target, {\n get: (target, key: string | symbol) => {\n // 处理响应式标记的特殊属性\n if (key === IS_REACTIVE) {\n return false;\n }\n if (key === IS_READONLY) {\n return true;\n }\n\n const value = Reflect.get(target, key);\n // 如果是对象,递归转换为只读响应式\n if (isObject(value)) {\n return this.readonly(value);\n }\n return value;\n },\n set: () => {\n console.warn('Cannot set property on readonly object');\n return false;\n },\n deleteProperty: () => {\n console.warn('Cannot delete property on readonly object');\n return false;\n },\n });\n\n // 存储只读响应式对象的映射关系\n this.readonlyMap.set(target, proxy);\n return proxy as Readonly<T>;\n }\n\n public effect<T = unknown>(\n fn: () => T,\n options?: ReactiveEffectOptions\n ): ReactiveEffect<T> {\n const { lazy = false, scheduler, throwOnError = false } = options || {};\n\n const effectFn: ReactiveEffect<T> = () => {\n if (!effectFn.active) {\n return fn();\n }\n\n try {\n // 清除之前的依赖关系\n this.cleanup(effectFn);\n this.effectStack.push(effectFn);\n this.activeEffect = effectFn;\n return fn();\n } catch (error) {\n if (throwOnError) {\n throw error;\n }\n console.error('Effect error:', error);\n return undefined;\n } finally {\n this.effectStack.pop();\n this.activeEffect =\n this.effectStack[this.effectStack.length - 1] ?? null;\n }\n };\n\n effectFn.id = effectId++;\n effectFn.deps = [];\n effectFn.active = true;\n effectFn.scheduler = scheduler;\n\n // 如果不是懒加载,立即执行\n if (!lazy) {\n effectFn();\n }\n\n return effectFn;\n }\n\n public computed<T>(getter: () => T): ComputedRef<T> {\n let dirty = true;\n let value: T;\n const computedTarget = {};\n const trackComputedValue = (): void => {\n this.track(computedTarget, 'value');\n };\n\n const runner = this.effect(\n () => {\n value = getter();\n dirty = false;\n },\n {\n lazy: true,\n scheduler: () => {\n if (!dirty) {\n dirty = true;\n this.trigger(computedTarget, 'value');\n }\n },\n }\n );\n\n return {\n get value(): T {\n if (dirty) {\n runner();\n }\n trackComputedValue();\n return value as T;\n },\n };\n }\n\n private cleanup(effect: ReactiveEffect): void {\n // 清除effect的所有依赖\n effect.deps.forEach((dep) => {\n dep.delete(effect);\n });\n effect.deps.length = 0;\n }\n\n private track(target: object, key: string | symbol): void {\n if (!this.activeEffect || !this.activeEffect.active) return;\n\n let depsMap = this.targetMap.get(target);\n if (!depsMap) {\n depsMap = new Map();\n this.targetMap.set(target, depsMap);\n }\n\n let dep = depsMap.get(key);\n if (!dep) {\n dep = new Set();\n depsMap.set(key, dep);\n }\n\n if (!dep.has(this.activeEffect)) {\n dep.add(this.activeEffect);\n this.activeEffect.deps.push(dep);\n }\n }\n\n private trigger(target: object, key: string | symbol): void {\n const depsMap = this.targetMap.get(target);\n if (!depsMap) return;\n\n const dep = depsMap.get(key);\n if (!dep) return;\n\n // 创建依赖的副本进行遍历,避免在遍历过程中依赖发生变化\n const effects = new Set(dep);\n effects.forEach((effect) => {\n if (effect.active) {\n if (effect.scheduler) {\n effect.scheduler(effect);\n } else {\n effect();\n }\n }\n });\n }\n\n // 停止一个effect的执行\n public stop(effect: ReactiveEffect): void {\n if (effect.active) {\n this.cleanup(effect);\n effect.active = false;\n }\n }\n}\n\n// 导出响应式API\nexport function reactive<T extends object>(target: T): T {\n return ReactiveSystem.getInstance().reactive(target);\n}\n\nexport function readonly<T extends object>(target: T): Readonly<T> {\n return ReactiveSystem.getInstance().readonly(target);\n}\n\nexport function effect<T = unknown>(\n fn: () => T,\n options?: ReactiveEffectOptions\n): ReactiveEffect<T> {\n return ReactiveSystem.getInstance().effect(fn, options);\n}\n\nexport function computed<T>(getter: () => T): ComputedRef<T> {\n return ReactiveSystem.getInstance().computed(getter);\n}\n\nexport function ref<T>(value: T): Ref<T> {\n const wrapper = { value };\n Object.defineProperty(wrapper, IS_REF, {\n configurable: false,\n enumerable: false,\n value: true,\n });\n\n return reactive(wrapper) as Ref<T>;\n}\n\nexport function isRef(value: unknown): value is Ref<unknown> {\n return isObject(value) && Boolean(Reflect.get(value, IS_REF));\n}\n\nexport function unref<T>(value: T | Ref<T>): T {\n return isRef(value) ? value.value : value;\n}\n\nexport function stop(effect: ReactiveEffect): void {\n ReactiveSystem.getInstance().stop(effect);\n}\n\n// 工具函数:判断是否是响应式对象\nexport function isReactive(value: unknown): boolean {\n return isObject(value) && hasReactiveFlag(value, IS_REACTIVE);\n}\n\n// 工具函数:判断是否是只读响应式对象\nexport function isReadonly(value: unknown): boolean {\n return isObject(value) && hasReactiveFlag(value, IS_READONLY);\n}\n",
7
+ "import type {\n AnyComponentConstructor,\n ComponentConstructor,\n ComponentEventListener,\n ComponentProps,\n} from './component';\nimport type { ModelBinding } from './model';\n\nexport interface ComponentType {\n mount(container: HTMLElement): void;\n unmount(): void;\n on(eventName: string, listener: ComponentEventListener): () => void;\n}\n\ntype VNodeComponentProps = ComponentProps;\n\nexport type VNodeComponentConstructor<\n P extends VNodeComponentProps = VNodeComponentProps,\n> = ComponentConstructor<P> | AnyComponentConstructor;\n\nexport type HTMLPropValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | Record<string, string | number>\n | EventListener;\n\nexport interface HTMLProps {\n [key: string]: HTMLPropValue;\n class?: string;\n className?: string;\n style?: Record<string, string | number>;\n}\n\nexport interface EventListeners {\n [eventName: string]: (event: Event) => void;\n}\n\nexport interface Directions {\n model?: ModelBinding;\n if?: boolean;\n show?: boolean;\n}\n\nexport interface VNodeBase {\n key?: string | number;\n slot?: string;\n directions?: Directions;\n}\n\nexport interface HTMLNode extends VNodeBase {\n tag: string;\n props?: HTMLProps;\n children?: Array<VNode | string>;\n listeners?: EventListeners;\n}\n\nexport interface ComponentNode<\n P extends VNodeComponentProps = VNodeComponentProps,\n> extends VNodeBase {\n component: VNodeComponentConstructor<P>;\n props?: P;\n children?: Array<VNode | string>;\n emitters?: Record<string, ComponentEventListener>;\n}\n\nexport interface SlotProvider extends VNodeBase {\n tag: 'slot';\n props: { name: string };\n children?: Array<VNode | string>;\n}\n\nexport interface SlotInjector extends VNodeBase {\n tag: string;\n slot: string;\n}\n\nexport type VNode = HTMLNode | ComponentNode | SlotProvider | SlotInjector;\n\nexport type ElementShortcutOptions = Omit<HTMLNode, 'tag'>;\n\nexport type ElementShortcut = (options?: ElementShortcutOptions) => HTMLNode;\n\nexport function isComponentNode(vnode: VNode): vnode is ComponentNode {\n return typeof vnode === 'object' && vnode !== null && 'component' in vnode;\n}\n\nexport function isHTMLNode(vnode: VNode): vnode is HTMLNode {\n return (\n typeof vnode === 'object' &&\n vnode !== null &&\n 'tag' in vnode &&\n vnode.tag !== 'slot'\n );\n}\n\nexport function isSlotProvider(vnode: VNode): vnode is SlotProvider {\n return (\n typeof vnode === 'object' &&\n vnode !== null &&\n 'tag' in vnode &&\n vnode.tag === 'slot'\n );\n}\n\nexport function h(\n tag: string,\n props?: HTMLProps,\n children?: Array<VNode | string>,\n listeners?: EventListeners,\n key?: string | number,\n directions?: Directions\n): HTMLNode {\n return {\n tag,\n props,\n children,\n listeners,\n key,\n directions,\n };\n}\n\nexport function Tag(\n tag: string,\n options: ElementShortcutOptions = {}\n): HTMLNode {\n return {\n tag,\n ...options,\n };\n}\n\nfunction createElementFactory(tag: string): ElementShortcut {\n return (options: ElementShortcutOptions = {}) => Tag(tag, options);\n}\n\nexport const Div = createElementFactory('div');\nexport const Span = createElementFactory('span');\nexport const P = createElementFactory('p');\nexport const Button = createElementFactory('button');\nexport const Input = createElementFactory('input');\nexport const Section = createElementFactory('section');\nexport const Main = createElementFactory('main');\nexport const Header = createElementFactory('header');\nexport const Footer = createElementFactory('footer');\nexport const Nav = createElementFactory('nav');\nexport const Article = createElementFactory('article');\nexport const Aside = createElementFactory('aside');\nexport const H1 = createElementFactory('h1');\nexport const H2 = createElementFactory('h2');\nexport const H3 = createElementFactory('h3');\nexport const H4 = createElementFactory('h4');\nexport const H5 = createElementFactory('h5');\nexport const H6 = createElementFactory('h6');\nexport const Strong = createElementFactory('strong');\nexport const Em = createElementFactory('em');\nexport const Small = createElementFactory('small');\nexport const Pre = createElementFactory('pre');\nexport const Code = createElementFactory('code');\nexport const Blockquote = createElementFactory('blockquote');\nexport const Ul = createElementFactory('ul');\nexport const Ol = createElementFactory('ol');\nexport const Li = createElementFactory('li');\nexport const A = createElementFactory('a');\nexport const Img = createElementFactory('img');\nexport const Form = createElementFactory('form');\nexport const Label = createElementFactory('label');\nexport const Textarea = createElementFactory('textarea');\nexport const Select = createElementFactory('select');\nexport const Option = createElementFactory('option');\nexport const Table = createElementFactory('table');\nexport const Thead = createElementFactory('thead');\nexport const Tbody = createElementFactory('tbody');\nexport const Tr = createElementFactory('tr');\nexport const Th = createElementFactory('th');\nexport const Td = createElementFactory('td');\n\nexport function createComponent<P extends VNodeComponentProps>(\n componentClass: ComponentConstructor<P>,\n props?: P,\n children?: Array<VNode | string>,\n key?: string | number,\n directions?: Directions\n): ComponentNode<P> {\n return {\n component: componentClass,\n props,\n children,\n key,\n directions,\n };\n}\n\nexport function slot(\n name: string,\n key?: string | number,\n directions?: Directions\n): SlotProvider {\n return {\n tag: 'slot',\n props: { name },\n key,\n directions,\n };\n}\n\nexport function each<T>(\n items: readonly T[],\n render: (item: T, index: number) => VNode | string,\n key: (item: T, index: number) => string | number\n): VNode[] {\n return items.map((item, index) => {\n const vnode = render(item, index);\n if (typeof vnode === 'string') {\n throw new Error('each render callback must return a VNode');\n }\n\n return { ...vnode, key: key(item, index) };\n });\n}\n",
8
+ "import { effect, stop, type ReactiveEffect } from './reactive';\n\nexport interface ModelBindingOptions {\n path: string;\n parse?: (value: unknown) => unknown;\n format?: (value: unknown) => string;\n}\n\nexport type ModelBinding = string | ModelBindingOptions;\n\ntype ModelState = Record<string, unknown>;\n\ninterface BindingRecord {\n binding: ModelBinding;\n path: string;\n parse?: (value: unknown) => unknown;\n format?: (value: unknown) => string;\n eventName: 'input' | 'change';\n listener: EventListener;\n effect: ReactiveEffect;\n}\n\nfunction pathSegments(path: string): string[] {\n const segments = path.split('.');\n if (\n path.length === 0 ||\n segments.some(\n (segment) =>\n segment.length === 0 ||\n segment === '__proto__' ||\n segment === 'prototype' ||\n segment === 'constructor'\n )\n ) {\n throw new Error(`Invalid model path \"${path}\"`);\n }\n return segments;\n}\n\nfunction isRecord(value: unknown): value is ModelState {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction hasOwn(value: object, key: string): boolean {\n return Object.prototype.hasOwnProperty.call(value, key);\n}\n\nexport function modelPath(binding: ModelBinding): string {\n return typeof binding === 'string' ? binding : binding.path;\n}\n\nexport function getModelValue(state: ModelState, path: string): unknown {\n let value: unknown = state;\n\n for (const segment of pathSegments(path)) {\n if (!isRecord(value)) {\n throw new Error(`Invalid model path \"${path}\"`);\n }\n if (!hasOwn(value, segment)) {\n if (segment in value) {\n throw new Error(`Invalid model path \"${path}\"`);\n }\n return undefined;\n }\n value = value[segment];\n }\n\n return value;\n}\n\nexport function setModelValue(\n state: ModelState,\n path: string,\n value: unknown\n): void {\n const segments = pathSegments(path);\n let target: ModelState = state;\n\n for (const segment of segments.slice(0, -1)) {\n if (!hasOwn(target, segment)) {\n if (segment in target) {\n throw new Error(`Invalid model path \"${path}\"`);\n }\n target[segment] = {};\n } else if (!isRecord(target[segment])) {\n throw new Error(`Invalid model path \"${path}\"`);\n }\n const nextTarget = target[segment];\n if (!isRecord(nextTarget)) {\n throw new Error(`Invalid model path \"${path}\"`);\n }\n target = nextTarget;\n }\n\n const lastSegment = segments[segments.length - 1];\n target[lastSegment] = value;\n}\n\nfunction displayValue(binding: ModelBinding, value: unknown): string {\n if (typeof binding !== 'string' && binding.format) {\n return binding.format(value);\n }\n return value === undefined || value === null ? '' : String(value);\n}\n\nfunction toModelValue(binding: ModelBinding, value: unknown): unknown {\n if (typeof binding !== 'string' && binding.parse) {\n return binding.parse(value);\n }\n return value;\n}\n\nfunction syncControl(\n element: HTMLElement,\n binding: ModelBinding,\n value: unknown\n): void {\n if (element instanceof HTMLInputElement) {\n if (element.type === 'checkbox') {\n element.checked = Array.isArray(value)\n ? value.some((item) => String(item) === element.value)\n : Boolean(value);\n return;\n }\n if (element.type === 'radio') {\n element.checked = value === element.value;\n return;\n }\n element.value = displayValue(binding, value);\n return;\n }\n\n if (element instanceof HTMLTextAreaElement) {\n element.value = displayValue(binding, value);\n return;\n }\n\n if (element instanceof HTMLSelectElement) {\n if (element.multiple) {\n const selected = Array.isArray(value)\n ? new Set(value.map(String))\n : new Set<string>();\n for (let index = 0; index < element.options.length; index += 1) {\n const option = element.options.item(index);\n if (!option) {\n continue;\n }\n option.selected = selected.has(option.value);\n }\n return;\n }\n element.value = displayValue(binding, value);\n }\n}\n\nfunction controlValue(element: HTMLElement, currentValue: unknown): unknown {\n if (element instanceof HTMLInputElement) {\n if (element.type === 'checkbox') {\n if (Array.isArray(currentValue)) {\n const values = currentValue.filter(\n (value) => String(value) !== element.value\n );\n return element.checked ? [...values, element.value] : values;\n }\n return element.checked;\n }\n if (element.type === 'radio') {\n return element.checked ? element.value : currentValue;\n }\n return element.value;\n }\n if (element instanceof HTMLTextAreaElement) {\n return element.value;\n }\n if (element instanceof HTMLSelectElement) {\n if (!element.multiple) {\n return element.value;\n }\n const values: string[] = [];\n for (let index = 0; index < element.selectedOptions.length; index += 1) {\n const option = element.selectedOptions.item(index);\n if (option) {\n values.push(option.value);\n }\n }\n return values;\n }\n return undefined;\n}\n\nexport class ModelBindingController {\n private readonly bindings = new WeakMap<HTMLElement, BindingRecord>();\n\n public bind(\n element: HTMLElement,\n binding: ModelBinding,\n state: ModelState\n ): void {\n if (!this.isSupportedControl(element)) {\n return;\n }\n\n const existing = this.bindings.get(element);\n if (existing && this.sameBinding(existing, binding)) {\n return;\n }\n this.cleanup(element);\n\n const path = modelPath(binding);\n const sync = (): void =>\n syncControl(element, binding, getModelValue(state, path));\n const eventName =\n element instanceof HTMLTextAreaElement ||\n (element instanceof HTMLInputElement &&\n !['checkbox', 'radio'].includes(element.type))\n ? 'input'\n : 'change';\n const listener = (): void => {\n const currentValue = getModelValue(state, path);\n setModelValue(\n state,\n path,\n toModelValue(binding, controlValue(element, currentValue))\n );\n };\n\n element.addEventListener(eventName, listener);\n const effectRef = effect(sync);\n this.bindings.set(element, {\n binding,\n path,\n parse: typeof binding === 'string' ? undefined : binding.parse,\n format: typeof binding === 'string' ? undefined : binding.format,\n eventName,\n listener,\n effect: effectRef,\n });\n }\n\n public cleanup(element: HTMLElement): void {\n const existing = this.bindings.get(element);\n if (!existing) {\n return;\n }\n element.removeEventListener(existing.eventName, existing.listener);\n stop(existing.effect);\n this.bindings.delete(element);\n }\n\n private isSupportedControl(element: HTMLElement): boolean {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLTextAreaElement ||\n element instanceof HTMLSelectElement\n );\n }\n\n private sameBinding(record: BindingRecord, binding: ModelBinding): boolean {\n if (typeof record.binding === 'string' || typeof binding === 'string') {\n return record.binding === binding;\n }\n return (\n record.path === binding.path &&\n record.parse === binding.parse &&\n record.format === binding.format\n );\n }\n}\n",
9
+ "export interface ParsedEventName {\n eventName: string;\n modifiers: Set<string>;\n}\n\nexport function isEventProp(key: string): boolean {\n return /^on[A-Z]/.test(key) || /^on[a-z]/.test(key);\n}\n\nexport function eventNameFromProp(key: string): string {\n return key.slice(2).toLowerCase();\n}\n\nexport function parseEventName(event: string): ParsedEventName {\n const [eventName, ...modifiers] = event.split('.');\n return { eventName, modifiers: new Set(modifiers) };\n}\n\nexport function wrapEventHandler(\n handler: (event: Event) => void,\n modifiers: Set<string>\n): EventListener {\n const eventHandler = (event: Event): void => {\n if (modifiers.has('stop')) {\n event.stopPropagation();\n }\n\n if (modifiers.has('prevent')) {\n event.preventDefault();\n }\n\n if (modifiers.has('self') && event.currentTarget !== event.target) {\n return;\n }\n\n if (modifiers.has('once')) {\n (event.currentTarget as EventTarget).removeEventListener(\n event.type,\n eventHandler\n );\n }\n\n handler(event);\n };\n\n return eventHandler;\n}\n\nexport function setStyleValue(\n style: CSSStyleDeclaration,\n property: string,\n value: string | number\n): void {\n const cssProperty = property.includes('-')\n ? property\n : property.replace(/[A-Z]/g, (match) => `-${match.toLowerCase()}`);\n\n style.setProperty(cssProperty, String(value));\n}\n",
10
+ "import { ModelBindingController } from '../model';\nimport { effect, ReactiveEffect, stop } from '../reactive';\nimport {\n EventListeners,\n HTMLNode,\n HTMLProps,\n VNode,\n isHTMLNode,\n} from '../vnode';\nimport {\n eventNameFromProp,\n isEventProp,\n parseEventName,\n setStyleValue,\n wrapEventHandler,\n} from './props';\nimport type { RenderRuntimeContext, RenderStrategy, Renderable } from './types';\n\nexport class ElementRenderStrategy<TNode extends HTMLNode = HTMLNode>\n implements RenderStrategy<TNode>\n{\n private readonly listeners = new WeakMap<\n HTMLElement,\n Map<string, { eventName: string; listener: EventListener }>\n >();\n private readonly effects = new WeakMap<HTMLElement, Set<ReactiveEffect>>();\n private readonly modelBindings = new ModelBindingController();\n\n public matches(vnode: Renderable): vnode is TNode {\n return typeof vnode === 'object' && vnode !== null && isHTMLNode(vnode);\n }\n\n public mount(vnode: TNode, context: RenderRuntimeContext): Node {\n if (vnode.directions?.if === false) {\n return document.createComment('if');\n }\n\n const element = document.createElement(vnode.tag);\n this.applyProps(element, {}, vnode.props ?? {}, context);\n this.updateListeners(element, {}, this.collectListeners(vnode));\n this.mountChildren(element, vnode, context);\n this.applyDirections(element, undefined, vnode.directions, context);\n\n return element;\n }\n\n public patch(\n oldVNode: TNode,\n newVNode: TNode,\n currentNode: Node,\n context: RenderRuntimeContext\n ): Node {\n if (\n oldVNode.tag !== newVNode.tag ||\n currentNode.nodeType === Node.COMMENT_NODE\n ) {\n const nextNode = this.mount(newVNode, context);\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n this.unmount(oldVNode, currentNode, context);\n return nextNode;\n }\n\n if (!(currentNode instanceof HTMLElement)) {\n return currentNode;\n }\n\n if (newVNode.directions?.if === false) {\n const nextNode = document.createComment('if');\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n this.unmount(oldVNode, currentNode, context);\n return nextNode;\n }\n\n this.applyProps(\n currentNode,\n oldVNode.props ?? {},\n newVNode.props ?? {},\n context\n );\n this.updateListeners(\n currentNode,\n this.collectListeners(oldVNode),\n this.collectListeners(newVNode)\n );\n this.updateChildren(currentNode, oldVNode, newVNode, context);\n this.applyDirections(\n currentNode,\n oldVNode.directions,\n newVNode.directions,\n context\n );\n\n return currentNode;\n }\n\n public unmount(\n vnode: TNode,\n currentNode: Node,\n context: RenderRuntimeContext\n ): void {\n if (!(currentNode instanceof HTMLElement)) {\n return;\n }\n\n this.effects.get(currentNode)?.forEach((item) => stop(item));\n this.effects.delete(currentNode);\n\n this.listeners.get(currentNode)?.forEach(({ eventName, listener }) => {\n currentNode.removeEventListener(eventName, listener);\n });\n this.listeners.delete(currentNode);\n this.modelBindings.cleanup(currentNode);\n this.unmountChildren(currentNode, vnode, context);\n }\n\n protected mountChildren(\n element: HTMLElement,\n vnode: TNode,\n context: RenderRuntimeContext\n ): void {\n (vnode.children ?? []).forEach((child) => {\n element.appendChild(context.renderer.mount(child, context));\n });\n }\n\n protected updateChildren(\n element: HTMLElement,\n oldVNode: TNode,\n newVNode: TNode,\n context: RenderRuntimeContext\n ): void {\n this.updateOrdinaryChildren(\n element,\n oldVNode.children ?? [],\n newVNode.children ?? [],\n context\n );\n }\n\n protected unmountChildren(\n element: HTMLElement,\n vnode: TNode,\n context: RenderRuntimeContext\n ): void {\n (vnode.children ?? []).forEach((child, index) => {\n const childNode = element.childNodes[index];\n if (childNode) {\n context.renderer.unmount(child, childNode, context);\n }\n });\n }\n\n private applyProps(\n element: HTMLElement,\n oldProps: HTMLProps,\n newProps: HTMLProps,\n context: RenderRuntimeContext\n ): void {\n Object.keys(oldProps).forEach((key) => {\n if (isEventProp(key) || key in newProps) {\n return;\n }\n\n if (key === 'className' || key === 'class') {\n element.removeAttribute('class');\n } else if (key === 'style') {\n element.removeAttribute('style');\n } else {\n element.removeAttribute(key);\n }\n });\n\n Object.entries(newProps).forEach(([key, value]) => {\n if (isEventProp(key)) {\n return;\n }\n\n if (key === 'className' || key === 'class') {\n element.className = String(value ?? '');\n return;\n }\n\n if (key === 'style' && typeof value === 'object' && value !== null) {\n element.removeAttribute('style');\n Object.entries(value).forEach(([cssKey, cssValue]) => {\n setStyleValue(element.style, cssKey, cssValue);\n });\n return;\n }\n\n if (value === false || value === undefined || value === null) {\n element.removeAttribute(key);\n return;\n }\n\n if (value === true) {\n element.setAttribute(key, '');\n return;\n }\n\n if (\n typeof value === 'string' &&\n context.templateEngine.hasExpressions(value)\n ) {\n this.setupReactiveAttribute(element, key, value, context);\n return;\n }\n\n element.setAttribute(key, String(value));\n });\n }\n\n private applyDirections(\n element: HTMLElement,\n oldDirections: HTMLNode['directions'],\n newDirections: HTMLNode['directions'],\n context: RenderRuntimeContext\n ): void {\n if (newDirections && 'show' in newDirections) {\n element.style.display = newDirections.show ? '' : 'none';\n } else if (oldDirections && 'show' in oldDirections) {\n element.style.display = '';\n }\n\n if (!newDirections?.model) {\n this.modelBindings.cleanup(element);\n return;\n }\n\n this.modelBindings.bind(\n element,\n newDirections.model,\n context.templateEngine.state as Record<string, unknown>\n );\n }\n\n private updateOrdinaryChildren(\n element: HTMLElement,\n oldChildren: Array<VNode | string>,\n newChildren: Array<VNode | string>,\n context: RenderRuntimeContext\n ): void {\n this.assertNoDuplicateKeys(oldChildren);\n this.assertNoDuplicateKeys(newChildren);\n\n if (this.hasOnlyKeyedChildren(oldChildren, newChildren)) {\n this.updateKeyedChildren(element, oldChildren, newChildren, context);\n return;\n }\n\n const sharedLength = Math.min(oldChildren.length, newChildren.length);\n\n for (let index = 0; index < sharedLength; index += 1) {\n const childNode = element.childNodes[index];\n if (!childNode) {\n element.appendChild(\n context.renderer.mount(newChildren[index], context)\n );\n continue;\n }\n context.renderer.patch(\n oldChildren[index],\n newChildren[index],\n childNode,\n context\n );\n }\n\n for (let index = sharedLength; index < newChildren.length; index += 1) {\n element.appendChild(context.renderer.mount(newChildren[index], context));\n }\n\n for (\n let index = oldChildren.length - 1;\n index >= newChildren.length;\n index -= 1\n ) {\n const childNode = element.childNodes[index];\n if (childNode) {\n context.renderer.unmount(oldChildren[index], childNode, context);\n if (childNode.parentNode === element) {\n element.removeChild(childNode);\n }\n }\n }\n }\n\n private updateKeyedChildren(\n element: HTMLElement,\n oldChildren: Array<VNode | string>,\n newChildren: Array<VNode | string>,\n context: RenderRuntimeContext\n ): void {\n const oldEntries = oldChildren.map((vnode, index) => ({\n vnode,\n node: element.childNodes[index],\n index,\n }));\n const keyedOldEntries = new Map<\n string | number,\n { vnode: VNode | string; node: Node; index: number }\n >();\n const usedOldIndexes = new Set<number>();\n\n oldEntries.forEach((entry) => {\n const key = this.getVNodeKey(entry.vnode);\n if (key !== undefined && entry.node) {\n keyedOldEntries.set(key, {\n vnode: entry.vnode,\n node: entry.node,\n index: entry.index,\n });\n }\n });\n\n newChildren.forEach((newChild, newIndex) => {\n const key = this.getVNodeKey(newChild);\n const oldEntry = key === undefined ? undefined : keyedOldEntries.get(key);\n let nextNode: Node;\n\n if (oldEntry) {\n nextNode = context.renderer.patch(\n oldEntry.vnode,\n newChild,\n oldEntry.node,\n context\n );\n usedOldIndexes.add(oldEntry.index);\n } else {\n nextNode = context.renderer.mount(newChild, context);\n }\n\n const referenceNode = element.childNodes[newIndex] ?? null;\n if (nextNode !== referenceNode) {\n element.insertBefore(nextNode, referenceNode);\n }\n });\n\n oldEntries.forEach((entry) => {\n if (!entry.node || usedOldIndexes.has(entry.index)) {\n return;\n }\n\n context.renderer.unmount(entry.vnode, entry.node, context);\n if (entry.node.parentNode === element) {\n element.removeChild(entry.node);\n }\n });\n }\n\n private hasOnlyKeyedChildren(\n oldChildren: Array<VNode | string>,\n newChildren: Array<VNode | string>\n ): boolean {\n return [...oldChildren, ...newChildren].every(\n (child) => this.getVNodeKey(child) !== undefined\n );\n }\n\n private assertNoDuplicateKeys(children: Array<VNode | string>): void {\n const keys = new Set<string | number>();\n\n children.forEach((child) => {\n const key = this.getVNodeKey(child);\n if (key === undefined) {\n return;\n }\n\n if (keys.has(key)) {\n throw new Error(`Duplicate key \"${key}\"`);\n }\n\n keys.add(key);\n });\n }\n\n private getVNodeKey(vnode: VNode | string): string | number | undefined {\n if (typeof vnode === 'string') {\n return undefined;\n }\n\n return vnode.key;\n }\n\n private collectListeners(vnode: HTMLNode): EventListeners {\n const listeners: EventListeners = {};\n\n Object.entries(vnode.props ?? {}).forEach(([key, value]) => {\n if (isEventProp(key) && typeof value === 'function') {\n listeners[eventNameFromProp(key)] = value as (event: Event) => void;\n }\n });\n\n return {\n ...listeners,\n ...(vnode.listeners ?? {}),\n };\n }\n\n private updateListeners(\n element: HTMLElement,\n oldListeners: EventListeners,\n newListeners: EventListeners\n ): void {\n const store = this.listeners.get(element) ?? new Map();\n const oldKeys = new Set(Object.keys(oldListeners));\n const newKeys = new Set(Object.keys(newListeners));\n\n oldKeys.forEach((event) => {\n if (!newKeys.has(event) || oldListeners[event] !== newListeners[event]) {\n const stored = store.get(event);\n if (stored) {\n element.removeEventListener(stored.eventName, stored.listener);\n store.delete(event);\n }\n }\n });\n\n newKeys.forEach((event) => {\n if (!oldKeys.has(event) || oldListeners[event] !== newListeners[event]) {\n const { eventName, modifiers } = parseEventName(event);\n const listener = wrapEventHandler(newListeners[event], modifiers);\n element.addEventListener(eventName, listener);\n store.set(event, { eventName, listener });\n }\n });\n\n this.listeners.set(element, store);\n }\n\n private setupReactiveAttribute(\n element: HTMLElement,\n attrName: string,\n attrValue: string,\n context: RenderRuntimeContext\n ): void {\n const effectRef = effect(() => {\n element.setAttribute(\n attrName,\n context.templateEngine.evaluateTemplateValue(attrValue)\n );\n });\n\n this.trackEffect(element, effectRef);\n }\n\n private trackEffect(element: HTMLElement, effectRef: ReactiveEffect): void {\n const effects = this.effects.get(element) ?? new Set();\n effects.add(effectRef);\n this.effects.set(element, effects);\n }\n}\n",
11
+ "import type { TransitionAnimationType, TransitionGroupOptions } from './types';\n\nexport interface ListAnimationRun {\n animation: Animation;\n token: symbol;\n keyframes: Keyframe[];\n options: KeyframeAnimationOptions;\n finished: Promise<'finished' | 'cancelled'>;\n}\n\nconst ENTER_KEYFRAMES: Record<TransitionAnimationType, [Keyframe, Keyframe]> = {\n fade: [{ opacity: 0 }, { opacity: 1 }],\n 'slide-up': [\n { opacity: 0, transform: 'translateY(12px)' },\n { opacity: 1, transform: 'translateY(0)' },\n ],\n 'slide-down': [\n { opacity: 0, transform: 'translateY(-12px)' },\n { opacity: 1, transform: 'translateY(0)' },\n ],\n 'slide-left': [\n { opacity: 0, transform: 'translateX(12px)' },\n { opacity: 1, transform: 'translateX(0)' },\n ],\n 'slide-right': [\n { opacity: 0, transform: 'translateX(-12px)' },\n { opacity: 1, transform: 'translateX(0)' },\n ],\n scale: [\n { opacity: 0, transform: 'scale(0.95)' },\n { opacity: 1, transform: 'scale(1)' },\n ],\n};\n\nexport class ListAnimationController {\n private readonly runs = new WeakMap<HTMLElement, ListAnimationRun>();\n\n public playEnter(\n element: HTMLElement,\n options: TransitionGroupOptions\n ): ListAnimationRun | null {\n return this.play(element, options, 'enter');\n }\n\n public playExit(\n element: HTMLElement,\n options: TransitionGroupOptions\n ): ListAnimationRun | null {\n return this.play(element, options, 'exit');\n }\n\n public cancel(element: HTMLElement): void {\n const current = this.runs.get(element);\n if (!current) {\n return;\n }\n\n this.runs.delete(element);\n current.animation.cancel();\n }\n\n private play(\n element: HTMLElement,\n transition: TransitionGroupOptions,\n phase: 'enter' | 'exit'\n ): ListAnimationRun | null {\n this.cancel(element);\n if (!this.canAnimate(element)) {\n return null;\n }\n\n const enterKeyframes = ENTER_KEYFRAMES[transition.type];\n const keyframes =\n phase === 'enter' ? [...enterKeyframes] : [...enterKeyframes].reverse();\n const options: KeyframeAnimationOptions = {\n duration: transition.duration,\n easing: 'ease',\n fill: 'both',\n };\n const animation = element.animate(keyframes, options);\n const token = Symbol('list-animation');\n const finished = animation.finished.then(\n () => 'finished' as const,\n () => 'cancelled' as const\n );\n const run: ListAnimationRun = {\n animation,\n token,\n keyframes,\n options,\n finished,\n };\n\n this.runs.set(element, run);\n void finished.then((result) => {\n if (this.runs.get(element)?.token !== token) {\n return;\n }\n\n this.runs.delete(element);\n if (phase === 'enter' && result === 'finished') {\n animation.cancel();\n }\n });\n\n return run;\n }\n\n private canAnimate(element: HTMLElement): boolean {\n const reduced =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n return !reduced && typeof element.animate === 'function';\n }\n}\n",
12
+ "import {\n isHTMLNode,\n type EventListeners,\n type HTMLNode,\n type HTMLProps,\n type VNode,\n} from '../vnode';\n\nexport const TRANSITION_ANIMATION_TYPES = [\n 'fade',\n 'slide-up',\n 'slide-down',\n 'slide-left',\n 'slide-right',\n 'scale',\n] as const;\n\nexport type TransitionAnimationType =\n (typeof TRANSITION_ANIMATION_TYPES)[number];\n\nexport interface TransitionGroupOptions {\n type: TransitionAnimationType;\n duration: number;\n}\n\nexport interface TransitionGroupProps {\n tag?: string;\n type?: TransitionAnimationType;\n duration?: number;\n elementProps?: HTMLProps;\n listeners?: EventListeners;\n children?: VNode[];\n}\n\nexport interface TransitionGroupNode extends HTMLNode {\n transitionGroup: TransitionGroupOptions;\n children?: VNode[];\n}\n\nexport type KeyedTransitionChild = VNode & {\n key: string | number;\n};\n\nexport function normalizeTransitionGroupProps(\n props: TransitionGroupProps\n): Required<Pick<TransitionGroupProps, 'tag' | 'type' | 'duration'>> {\n const tag = (props.tag ?? 'div').trim();\n const type = props.type ?? 'fade';\n const duration = props.duration ?? 300;\n\n if (!tag) {\n throw new Error('TransitionGroup tag must not be empty');\n }\n if (!TRANSITION_ANIMATION_TYPES.includes(type)) {\n throw new Error(`Unknown TransitionGroup animation type \"${type}\"`);\n }\n if (!Number.isFinite(duration) || duration < 0) {\n throw new Error(\n 'TransitionGroup duration must be a non-negative finite number'\n );\n }\n\n return { tag, type, duration };\n}\n\nexport function validateTransitionGroupChildren(\n children: Array<VNode | string>\n): KeyedTransitionChild[] {\n const keys = new Set<string | number>();\n\n return children.map((child) => {\n if (\n typeof child === 'string' ||\n child.key === undefined ||\n keys.has(child.key)\n ) {\n throw new Error('TransitionGroup children must have unique keys');\n }\n\n keys.add(child.key);\n return child as KeyedTransitionChild;\n });\n}\n\nexport function isTransitionGroupNode(\n vnode: unknown\n): vnode is TransitionGroupNode {\n return (\n typeof vnode === 'object' &&\n vnode !== null &&\n 'transitionGroup' in vnode &&\n isHTMLNode(vnode as unknown as VNode)\n );\n}\n",
13
+ "import { ElementRenderStrategy } from '../renderer/element-strategy';\nimport type { RenderRuntimeContext, Renderable } from '../renderer/types';\nimport type { VNode } from '../vnode';\nimport { ListAnimationController } from './list-animation-controller';\nimport {\n isTransitionGroupNode,\n validateTransitionGroupChildren,\n type TransitionGroupNode,\n type TransitionGroupOptions,\n} from './types';\n\ninterface TransitionEntry {\n key: string | number;\n vnode: VNode;\n node: Node;\n status: 'active' | 'exiting';\n animationToken?: symbol;\n}\n\nexport class TransitionGroupRenderStrategy extends ElementRenderStrategy<TransitionGroupNode> {\n private readonly entries = new WeakMap<\n HTMLElement,\n Map<string | number, TransitionEntry>\n >();\n private readonly animations = new ListAnimationController();\n\n public matches(vnode: Renderable): vnode is TransitionGroupNode {\n return isTransitionGroupNode(vnode);\n }\n\n protected mountChildren(\n element: HTMLElement,\n groupVNode: TransitionGroupNode,\n context: RenderRuntimeContext\n ): void {\n const keyedChildren = validateTransitionGroupChildren(\n groupVNode.children ?? []\n );\n const entries = new Map<string | number, TransitionEntry>();\n\n keyedChildren.forEach((childVNode) => {\n const node = context.renderer.mount(childVNode, context);\n element.appendChild(node);\n const entry: TransitionEntry = {\n key: childVNode.key,\n vnode: childVNode,\n node,\n status: 'active',\n };\n entries.set(entry.key, entry);\n this.playEnter(entry, node, groupVNode.transitionGroup);\n });\n\n this.entries.set(element, entries);\n }\n\n protected updateChildren(\n element: HTMLElement,\n _oldVNode: TransitionGroupNode,\n newVNode: TransitionGroupNode,\n context: RenderRuntimeContext\n ): void {\n const entries = this.entries.get(element) ?? new Map();\n const nextChildren = validateTransitionGroupChildren(\n newVNode.children ?? []\n );\n const nextKeys = new Set(nextChildren.map((child) => child.key));\n const ordered: TransitionEntry[] = [];\n\n nextChildren.forEach((childVNode) => {\n const key = childVNode.key;\n const current = entries.get(key);\n if (current) {\n const wasExiting = current.status === 'exiting';\n if (wasExiting && current.node instanceof HTMLElement) {\n this.animations.cancel(current.node);\n }\n current.status = 'active';\n current.animationToken = undefined;\n current.node = context.renderer.patch(\n current.vnode,\n childVNode,\n current.node,\n context\n );\n current.vnode = childVNode;\n ordered.push(current);\n if (wasExiting) {\n this.playEnter(current, current.node, newVNode.transitionGroup);\n }\n return;\n }\n\n const node = context.renderer.mount(childVNode, context);\n const entry: TransitionEntry = {\n key,\n vnode: childVNode,\n node,\n status: 'active',\n };\n entries.set(key, entry);\n ordered.push(entry);\n this.playEnter(entry, node, newVNode.transitionGroup);\n });\n\n entries.forEach((entry, key) => {\n if (nextKeys.has(key) || entry.status !== 'active') {\n return;\n }\n\n this.startExit(element, entry, newVNode.transitionGroup, context);\n });\n\n this.placeActiveEntries(element, ordered);\n this.entries.set(element, entries);\n }\n\n protected unmountChildren(\n element: HTMLElement,\n vnode: TransitionGroupNode,\n context: RenderRuntimeContext\n ): void {\n const entries = this.entries.get(element);\n if (!entries) {\n super.unmountChildren(element, vnode, context);\n return;\n }\n\n entries.forEach((entry) => {\n if (entry.node instanceof HTMLElement) {\n this.animations.cancel(entry.node);\n }\n context.renderer.unmount(entry.vnode, entry.node, context);\n if (entry.node.parentNode === element) {\n element.removeChild(entry.node);\n }\n });\n entries.clear();\n this.entries.delete(element);\n }\n\n private playEnter(\n entry: TransitionEntry,\n node: Node,\n options: TransitionGroupOptions\n ): void {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n\n const run = this.animations.playEnter(node, options);\n entry.animationToken = run?.token;\n }\n\n private startExit(\n wrapper: HTMLElement,\n entry: TransitionEntry,\n options: TransitionGroupOptions,\n context: RenderRuntimeContext\n ): void {\n entry.status = 'exiting';\n const run =\n entry.node instanceof HTMLElement\n ? this.animations.playExit(entry.node, options)\n : null;\n\n if (!run) {\n this.finishExit(wrapper, entry, context);\n return;\n }\n\n entry.animationToken = run.token;\n void run.finished.then((result) => {\n if (\n result === 'finished' &&\n entry.status === 'exiting' &&\n entry.animationToken === run.token\n ) {\n this.finishExit(wrapper, entry, context);\n }\n });\n }\n\n private finishExit(\n wrapper: HTMLElement,\n entry: TransitionEntry,\n context: RenderRuntimeContext\n ): void {\n const entries = this.entries.get(wrapper);\n if (entries?.get(entry.key) !== entry) {\n return;\n }\n\n context.renderer.unmount(entry.vnode, entry.node, context);\n if (entry.node.parentNode === wrapper) {\n wrapper.removeChild(entry.node);\n }\n entries.delete(entry.key);\n }\n\n private placeActiveEntries(\n wrapper: HTMLElement,\n ordered: TransitionEntry[]\n ): void {\n let reference: Node | null = null;\n for (let index = ordered.length - 1; index >= 0; index -= 1) {\n wrapper.insertBefore(ordered[index].node, reference);\n reference = ordered[index].node;\n }\n }\n}\n",
14
+ "import type { ComponentEventListener, ComponentProps } from './component/base';\nimport {\n ComponentNode,\n SlotProvider,\n VNode,\n isComponentNode,\n isSlotProvider,\n} from './vnode';\nimport { TransitionGroupRenderStrategy } from './animation/transition-group-strategy';\nimport { ElementRenderStrategy } from './renderer/element-strategy';\nexport { ElementRenderStrategy } from './renderer/element-strategy';\nexport type {\n ComponentInstance,\n RenderRuntimeContext,\n RenderStrategy,\n Renderable,\n RendererHost,\n} from './renderer/types';\nimport type {\n ComponentInstance,\n RenderRuntimeContext,\n RenderStrategy,\n Renderable,\n} from './renderer/types';\n\nexport class RendererContext {\n private readonly strategies: RenderStrategy[];\n\n constructor() {\n this.strategies = [\n new TextRenderStrategy(),\n new ComponentRenderStrategy(),\n new SlotRenderStrategy(),\n new TransitionGroupRenderStrategy(),\n new ElementRenderStrategy(),\n ];\n }\n\n public mount(vnode: Renderable, context: RenderRuntimeContext): Node {\n return this.findStrategy(vnode).mount(vnode as never, context);\n }\n\n public patch(\n oldVNode: Renderable,\n newVNode: Renderable,\n currentNode: Node,\n context: RenderRuntimeContext\n ): Node {\n const oldStrategy = this.findStrategy(oldVNode);\n const newStrategy = this.findStrategy(newVNode);\n\n if (oldStrategy !== newStrategy) {\n const nextNode = newStrategy.mount(newVNode as never, context);\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n oldStrategy.unmount(oldVNode as never, currentNode, context);\n return nextNode;\n }\n\n return oldStrategy.patch(\n oldVNode as never,\n newVNode as never,\n currentNode,\n context\n );\n }\n\n public unmount(\n vnode: Renderable,\n currentNode: Node,\n context: RenderRuntimeContext\n ): void {\n this.findStrategy(vnode).unmount(vnode as never, currentNode, context);\n }\n\n private findStrategy(vnode: Renderable): RenderStrategy {\n const strategy = this.strategies.find((item) => item.matches(vnode));\n if (!strategy) {\n throw new Error('No render strategy found for vnode');\n }\n return strategy;\n }\n}\n\nexport class TextRenderStrategy implements RenderStrategy<string> {\n public matches(vnode: Renderable): vnode is string {\n return typeof vnode === 'string';\n }\n\n public mount(vnode: string, context: RenderRuntimeContext): Node {\n return context.templateEngine.parseTemplate(vnode);\n }\n\n public patch(\n oldVNode: string,\n newVNode: string,\n currentNode: Node,\n context: RenderRuntimeContext\n ): Node {\n if (oldVNode === newVNode) {\n return currentNode;\n }\n\n const nextNode = this.mount(newVNode, context);\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n return nextNode;\n }\n\n public unmount(): void {}\n}\n\nexport class ComponentRenderStrategy implements RenderStrategy<ComponentNode> {\n private readonly instances = new WeakMap<Node, ComponentInstance>();\n private readonly instanceNodes = new Map<ComponentInstance, Set<Node>>();\n private readonly emitterUnsubscribers = new WeakMap<\n ComponentInstance,\n Map<string, { listener: ComponentEventListener; unsubscribe: () => void }>\n >();\n\n public matches(vnode: Renderable): vnode is ComponentNode {\n return (\n typeof vnode === 'object' && vnode !== null && isComponentNode(vnode)\n );\n }\n\n public mount(vnode: ComponentNode, context: RenderRuntimeContext): Node {\n if (vnode.directions?.if === false) {\n return document.createComment('if');\n }\n\n const ComponentClass = vnode.component as new (\n props?: ComponentProps\n ) => ComponentInstance;\n const instance = new ComponentClass(this.createProps(vnode));\n\n if (context.appContext && instance.setAppContext) {\n instance.setAppContext(context.appContext);\n }\n\n this.syncEmitters(instance, vnode.emitters ?? {});\n\n context.registerChild(instance);\n\n const node = instance.mountToNode();\n this.trackInstanceNode(instance, node);\n instance.setElementChangeListener?.((previousNode, nextNode) => {\n this.trackInstanceNode(instance, previousNode);\n this.trackInstanceNode(instance, nextNode);\n });\n return node;\n }\n\n public patch(\n oldVNode: ComponentNode,\n newVNode: ComponentNode,\n currentNode: Node,\n context: RenderRuntimeContext\n ): Node {\n if (currentNode.nodeType === Node.COMMENT_NODE) {\n const nextNode = this.mount(newVNode, context);\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n return nextNode;\n }\n\n if (newVNode.directions?.if === false) {\n const nextNode = document.createComment('if');\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n this.unmount(oldVNode, currentNode, context);\n return nextNode;\n }\n\n const instance = this.instances.get(currentNode);\n\n if (instance && oldVNode.component === newVNode.component) {\n this.syncEmitters(instance, newVNode.emitters ?? {});\n instance.setProps(this.createProps(newVNode));\n const nextNode = instance.getElement() ?? currentNode;\n this.trackInstanceNode(instance, nextNode);\n return nextNode;\n }\n\n const nextNode = this.mount(newVNode, context);\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n this.unmount(oldVNode, currentNode, context);\n return nextNode;\n }\n\n public unmount(\n _vnode: ComponentNode,\n currentNode: Node,\n context: RenderRuntimeContext\n ): void {\n const instance = this.instances.get(currentNode);\n if (instance) {\n this.clearEmitters(instance);\n instance.unmount();\n this.clearInstanceNodes(instance);\n context.unregisterChild(instance);\n }\n }\n\n private createProps(vnode: ComponentNode): ComponentProps {\n return {\n ...(vnode.props ?? {}),\n children: vnode.children ?? [],\n };\n }\n\n private syncEmitters(\n instance: ComponentInstance,\n emitters: NonNullable<ComponentNode['emitters']>\n ): void {\n const current = this.emitterUnsubscribers.get(instance) ?? new Map();\n\n current.forEach(({ listener: currentListener, unsubscribe }, eventName) => {\n const listener = emitters[eventName];\n if (!listener || listener !== currentListener) {\n unsubscribe();\n current.delete(eventName);\n }\n });\n\n Object.entries(emitters).forEach(([eventName, listener]) => {\n if (current.get(eventName)?.listener === listener) {\n return;\n }\n\n current.set(eventName, {\n listener,\n unsubscribe: instance.on(eventName, listener),\n });\n });\n\n this.emitterUnsubscribers.set(instance, current);\n }\n\n private clearEmitters(instance: ComponentInstance): void {\n this.emitterUnsubscribers.get(instance)?.forEach(({ unsubscribe }) => {\n unsubscribe();\n });\n this.emitterUnsubscribers.delete(instance);\n }\n\n private trackInstanceNode(instance: ComponentInstance, node: Node): void {\n this.instances.set(node, instance);\n const nodes = this.instanceNodes.get(instance) ?? new Set<Node>();\n nodes.add(node);\n this.instanceNodes.set(instance, nodes);\n }\n\n private clearInstanceNodes(instance: ComponentInstance): void {\n this.instanceNodes.get(instance)?.forEach((node) => {\n this.instances.delete(node);\n });\n this.instanceNodes.delete(instance);\n }\n}\n\nexport class SlotRenderStrategy implements RenderStrategy<SlotProvider> {\n private readonly renderedChildren = new WeakMap<\n HTMLElement,\n Array<VNode | string>\n >();\n\n public matches(vnode: Renderable): vnode is SlotProvider {\n return typeof vnode === 'object' && vnode !== null && isSlotProvider(vnode);\n }\n\n public mount(vnode: SlotProvider, context: RenderRuntimeContext): Node {\n if (vnode.directions?.if === false) {\n return document.createComment('if');\n }\n\n const slotContainer = document.createElement('div');\n slotContainer.setAttribute('data-slot', vnode.props.name);\n this.mountSlotChildren(\n slotContainer,\n this.resolveChildren(vnode, context),\n context\n );\n return slotContainer;\n }\n\n public patch(\n oldVNode: SlotProvider,\n newVNode: SlotProvider,\n currentNode: Node,\n context: RenderRuntimeContext\n ): Node {\n if (currentNode.nodeType === Node.COMMENT_NODE) {\n const nextNode = this.mount(newVNode, context);\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n return nextNode;\n }\n\n if (newVNode.directions?.if === false) {\n const nextNode = document.createComment('if');\n currentNode.parentNode?.replaceChild(nextNode, currentNode);\n this.unmount(oldVNode, currentNode, context);\n return nextNode;\n }\n\n if (currentNode instanceof HTMLElement) {\n currentNode.setAttribute('data-slot', newVNode.props.name);\n this.replaceSlotChildren(currentNode, oldVNode, newVNode, context);\n }\n return currentNode;\n }\n\n public unmount(\n _vnode: SlotProvider,\n currentNode: Node,\n context: RenderRuntimeContext\n ): void {\n if (!(currentNode instanceof HTMLElement)) {\n return;\n }\n\n this.unmountSlotChildren(currentNode, context);\n this.renderedChildren.delete(currentNode);\n }\n\n private resolveChildren(\n vnode: SlotProvider,\n context: RenderRuntimeContext\n ): Array<VNode | string> {\n return context.slots[vnode.props.name] ?? vnode.children ?? [];\n }\n\n private replaceSlotChildren(\n element: HTMLElement,\n _oldVNode: SlotProvider,\n newVNode: SlotProvider,\n context: RenderRuntimeContext\n ): void {\n this.unmountSlotChildren(element, context);\n element.textContent = '';\n this.mountSlotChildren(\n element,\n this.resolveChildren(newVNode, context),\n context\n );\n }\n\n private mountSlotChildren(\n element: HTMLElement,\n children: Array<VNode | string>,\n context: RenderRuntimeContext\n ): void {\n children.forEach((child) => {\n element.appendChild(context.renderer.mount(child, context));\n });\n this.renderedChildren.set(element, children);\n }\n\n private unmountSlotChildren(\n element: HTMLElement,\n context: RenderRuntimeContext\n ): void {\n const children = this.renderedChildren.get(element) ?? [];\n children.forEach((child, index) => {\n const childNode = element.childNodes[index];\n if (childNode) {\n context.renderer.unmount(child, childNode, context);\n }\n });\n }\n}\n",
15
+ "import { effect, ReactiveEffect, stop } from './reactive';\n\nexport interface TemplateBinding {\n node: Text;\n originalText: string;\n effect: ReactiveEffect;\n}\n\nexport class TemplateEngine {\n private bindings: TemplateBinding[] = [];\n private readonly templateRegex = /{{(.*?)}}/g;\n\n constructor(public state: object) {\n if (!state || typeof state !== 'object') {\n throw new Error('TemplateEngine requires a valid state object');\n }\n }\n\n /**\n * 解析模板字符串,创建响应式的文本节点\n * @param text 包含模板表达式的文本字符串\n * @returns 创建的文本节点\n */\n public parseTemplate(text: string): Text {\n if (typeof text !== 'string') {\n text = String(text);\n }\n\n const textNode = document.createTextNode('');\n this.templateRegex.lastIndex = 0;\n const matches = Array.from(text.matchAll(this.templateRegex));\n\n if (matches && matches.length > 0) {\n this.setupReactiveBindings(textNode, text, matches);\n } else {\n // 如果没有模板表达式,直接设置文本内容\n textNode.textContent = text;\n }\n\n return textNode;\n }\n\n /**\n * 设置响应式绑定\n */\n private setupReactiveBindings(\n node: Text,\n originalText: string,\n matches: RegExpExecArray[]\n ): void {\n // 存储所有需要监控的键\n const keys = new Set<string>();\n\n // 第一次计算并设置文本内容\n const initialText = this.evaluateTemplate(originalText, matches, keys);\n node.textContent = initialText;\n\n // 创建响应式effect,当任何相关的状态变化时更新文本\n const effectFn = effect(() => {\n try {\n const updatedText = this.evaluateTemplate(originalText, matches, keys);\n if (node.textContent !== updatedText) {\n node.textContent = updatedText;\n }\n } catch (error) {\n console.error('Template update error:', error);\n node.textContent = `Error: ${error instanceof Error ? error.message : 'Unknown error'}`;\n }\n });\n\n // 存储绑定关系,以便后续清理\n this.bindings.push({\n node,\n originalText,\n effect: effectFn,\n });\n }\n\n /**\n * 计算模板文本的值\n */\n private evaluateTemplate(\n text: string,\n matches: RegExpExecArray[],\n keys: Set<string>\n ): string {\n let result = text;\n\n matches.forEach((match) => {\n const key = match[1]?.trim();\n if (key) {\n keys.add(key);\n\n // 尝试获取状态值\n const value = this.getValueFromState(key);\n // 将undefined或null转换为空字符串\n const displayValue =\n value === undefined || value === null ? '' : String(value);\n result = result.replace(match[0], displayValue);\n }\n });\n\n return result;\n }\n\n /**\n * 从状态对象中获取值,支持嵌套属性访问\n */\n private getValueFromState(keyPath: string): unknown {\n if (!keyPath) return undefined;\n\n // 支持嵌套属性访问,如 'user.name'\n const keys = keyPath.split('.');\n let value: unknown = this.state;\n\n for (const key of keys) {\n if (!value || typeof value !== 'object') {\n return undefined;\n }\n value = (value as Record<string, unknown>)[key];\n }\n\n return value;\n }\n\n /**\n * 清除所有模板绑定\n */\n public clearBindings(): void {\n // 停止所有effect\n this.bindings.forEach((binding) => {\n stop(binding.effect);\n });\n this.bindings = [];\n }\n\n /**\n * 获取当前的绑定数量\n */\n public getBindingCount(): number {\n return this.bindings.length;\n }\n\n /**\n * 检查模板是否包含表达式\n */\n public hasExpressions(text: string): boolean {\n this.templateRegex.lastIndex = 0;\n return this.templateRegex.test(text);\n }\n\n /**\n * 获取模板中的所有表达式键\n */\n public extractKeys(text: string): string[] {\n const keys: string[] = [];\n let match;\n const regex = new RegExp(this.templateRegex, 'g');\n\n while ((match = regex.exec(text)) !== null) {\n const key = match[1]?.trim();\n if (key) {\n keys.push(key);\n }\n }\n\n return keys;\n }\n\n /**\n * 计算模板值\n */\n public evaluateTemplateValue(text: string): string {\n this.templateRegex.lastIndex = 0;\n const matches = Array.from(text.matchAll(this.templateRegex));\n if (!matches || matches.length === 0) {\n return text;\n }\n\n const keys = new Set<string>();\n return this.evaluateTemplate(text, matches, keys);\n }\n}\n",
16
+ "import { StyleManager } from '../../style/StyleManager';\nimport { ReactiveEffect, effect, reactive, stop } from '../reactive';\nimport {\n ComponentInstance,\n RenderRuntimeContext,\n RendererContext,\n} from '../renderer';\nimport { TemplateEngine } from '../template';\nimport type { VNode } from '../vnode';\n\nexport type ComponentProps = object;\n\nexport type ComponentState = object;\n\nexport type ComponentEventListener = (...args: unknown[]) => void;\n\nexport type InjectionKey<T> = (string | symbol) & {\n readonly __injectionType?: T;\n};\n\nexport interface InjectionResult<T> {\n found: boolean;\n value: T | undefined;\n}\n\nexport type ComponentConstructor<\n TProps extends ComponentProps = ComponentProps,\n TState extends ComponentState = ComponentState,\n> = new (props?: TProps) => Component<TProps, TState>;\n\nexport type AnyComponentConstructor = new (\n props?: never\n) => Component<ComponentProps, ComponentState>;\n\nexport abstract class Component<\n TProps extends ComponentProps = ComponentProps,\n TState extends ComponentState = ComponentState,\n> implements ComponentInstance\n{\n private vnode: VNode | null = null;\n private el: Node | null = null;\n private readonly renderer = new RendererContext();\n private readonly templateEngine: TemplateEngine;\n private readonly childComponents = new Set<ComponentInstance>();\n private readonly eventListeners: Record<string, Set<ComponentEventListener>> =\n {};\n private readonly providers = new Map<string | symbol, unknown>();\n private readonly updateEffect: ReactiveEffect;\n private appContext: unknown = null;\n private parentComponent: ComponentInstance | null = null;\n private elementChangeListener:\n | ((previousElement: Node, nextElement: Node) => void)\n | null = null;\n\n protected styleManager: StyleManager;\n public state: TState;\n public mounted = false;\n\n constructor(protected props: TProps = {} as TProps) {\n this.styleManager = new StyleManager();\n this.state = reactive(this.initState() ?? {});\n this.templateEngine = new TemplateEngine(this.state);\n this.initStyles();\n\n this.updateEffect = effect(\n () => {\n this.trackStateProperties();\n if (this.mounted) {\n this.update();\n }\n },\n { throwOnError: true }\n );\n }\n\n protected abstract initState(): TState;\n protected abstract initStyles(): void;\n protected abstract render(): VNode;\n\n public mount(container: HTMLElement): void {\n if (!container || !(container instanceof HTMLElement)) {\n throw new Error('Invalid container element');\n }\n\n try {\n container.appendChild(this.mountToNode());\n } catch (error) {\n console.error('组件渲染错误:', error);\n throw error;\n }\n }\n\n public mountToNode(): Node {\n if (this.mounted && this.el) {\n return this.el;\n }\n\n this.beforeMount();\n this.vnode = this.render();\n this.el = this.renderer.mount(this.vnode, this.createRenderContext());\n this.mounted = true;\n this.onMounted();\n return this.el;\n }\n\n public update(): void {\n if (!this.el || !this.vnode) {\n return;\n }\n\n this.beforeUpdate();\n const newVNode = this.render();\n const previousElement = this.el;\n this.el = this.renderer.patch(\n this.vnode,\n newVNode,\n this.el,\n this.createRenderContext()\n );\n if (previousElement !== this.el) {\n this.elementChangeListener?.(previousElement, this.el);\n }\n this.vnode = newVNode;\n this.onUpdated();\n }\n\n public unmount(): void {\n if (!this.mounted) {\n return;\n }\n\n this.beforeUnmount();\n\n if (this.vnode && this.el) {\n this.renderer.unmount(this.vnode, this.el, this.createRenderContext());\n }\n\n this.childComponents.clear();\n Object.keys(this.eventListeners).forEach((eventName) => {\n this.eventListeners[eventName].clear();\n delete this.eventListeners[eventName];\n });\n this.providers.clear();\n this.parentComponent = null;\n this.elementChangeListener = null;\n this.templateEngine.clearBindings();\n this.styleManager.destroy();\n stop(this.updateEffect);\n\n if (this.el?.parentNode) {\n this.el.parentNode.removeChild(this.el);\n }\n\n this.el = null;\n this.vnode = null;\n this.mounted = false;\n this.onUnmounted();\n }\n\n public setProps(props: Partial<TProps>): void {\n this.props = {\n ...this.props,\n ...props,\n };\n\n if (this.mounted) {\n this.update();\n }\n }\n\n public setState(state: Partial<TState>): void {\n Object.assign(this.state, state);\n }\n\n public setAppContext(context: unknown): void {\n this.appContext = context;\n this.childComponents.forEach((child) => {\n child.setAppContext?.(context);\n });\n }\n\n public setParentComponent(parent: ComponentInstance | null): void {\n this.parentComponent = parent;\n }\n\n public setElementChangeListener(\n listener: (previousElement: Node, nextElement: Node) => void\n ): void {\n this.elementChangeListener = listener;\n }\n\n public provide<T>(key: InjectionKey<T>, value: T): void {\n this.providers.set(key, value);\n }\n\n public inject<T>(key: InjectionKey<T>): T | undefined;\n public inject<T>(key: InjectionKey<T>, fallback: T): T;\n public inject<T>(key: InjectionKey<T>, fallback?: T): T | undefined {\n const result = this.resolveInjection(key);\n return result.found ? result.value : fallback;\n }\n\n public resolveInjection<T>(key: InjectionKey<T>): InjectionResult<T> {\n if (this.providers.has(key)) {\n return { found: true, value: this.providers.get(key) as T | undefined };\n }\n\n if (this.parentComponent?.resolveInjection) {\n return this.parentComponent.resolveInjection(key);\n }\n\n return this.resolveAppInjection(key);\n }\n\n public getElement(): Node | null {\n return this.el;\n }\n\n protected beforeMount(): void {}\n\n protected onMounted(): void {}\n\n protected beforeUpdate(): void {}\n\n protected onUpdated(): void {}\n\n protected beforeUnmount(): void {}\n\n protected onUnmounted(): void {}\n\n protected getContext(): unknown {\n return this.appContext;\n }\n\n protected get router() {\n return this.getRouterFrom(this.appContext) ?? this.getRouterFromGlobalApp();\n }\n\n protected emit(eventName: string, ...args: unknown[]): void {\n this.eventListeners[eventName]?.forEach((listener) => {\n listener(...args);\n });\n }\n\n public on(eventName: string, listener: ComponentEventListener): () => void {\n if (!this.eventListeners[eventName]) {\n this.eventListeners[eventName] = new Set();\n }\n this.eventListeners[eventName].add(listener);\n\n return () => this.off(eventName, listener);\n }\n\n public off(eventName: string, listener: ComponentEventListener): void {\n this.eventListeners[eventName]?.delete(listener);\n }\n\n private createRenderContext(): RenderRuntimeContext {\n return {\n appContext: this.appContext,\n templateEngine: this.templateEngine,\n renderer: this.renderer,\n slots: this.collectSlots(),\n registerChild: (component) => {\n this.childComponents.add(component);\n component.setParentComponent?.(this);\n component.setAppContext?.(this.appContext);\n },\n unregisterChild: (component) => {\n this.childComponents.delete(component);\n component.setParentComponent?.(null);\n },\n };\n }\n\n private collectSlots(): Record<string, Array<VNode | string>> {\n const slots: Record<string, Array<VNode | string>> = { default: [] };\n const children =\n (this.props as { children?: Array<VNode | string> }).children ?? [];\n\n children.forEach((child) => {\n const slotName = this.getSlotName(child);\n if (!slots[slotName]) {\n slots[slotName] = [];\n }\n slots[slotName].push(this.normalizeSlotChild(child));\n });\n\n return slots;\n }\n\n private getSlotName(child: VNode | string): string {\n if (typeof child === 'string') {\n return 'default';\n }\n\n return 'slot' in child && typeof child.slot === 'string'\n ? child.slot\n : 'default';\n }\n\n private normalizeSlotChild(child: VNode | string): VNode | string {\n if (typeof child === 'string' || !('slot' in child)) {\n return child;\n }\n\n const clone = { ...child };\n delete clone.slot;\n return clone as VNode;\n }\n\n private trackStateProperties(): void {\n this.trackReactiveValue(this.state, new Set<object>());\n }\n\n private getRouterFrom(value: unknown): unknown {\n if (!value || typeof value !== 'object' || !('router' in value)) {\n return undefined;\n }\n\n return (value as { router?: unknown }).router;\n }\n\n private getRouterFromGlobalApp(): unknown {\n const globalApp = (globalThis as { __APP__?: unknown }).__APP__;\n return this.getRouterFrom(globalApp);\n }\n\n private resolveAppInjection<T>(key: InjectionKey<T>): InjectionResult<T> {\n if (!this.appContext || typeof this.appContext !== 'object') {\n return { found: false, value: undefined };\n }\n\n const app = (\n this.appContext as {\n app?: {\n resolveInjection?: (\n injectionKey: InjectionKey<T>\n ) => InjectionResult<T>;\n };\n }\n ).app;\n\n return app?.resolveInjection?.(key) ?? { found: false, value: undefined };\n }\n\n private trackReactiveValue(value: unknown, seen: Set<object>): void {\n if (!value || typeof value !== 'object' || seen.has(value)) {\n return;\n }\n\n seen.add(value);\n\n if (Array.isArray(value)) {\n value.length;\n }\n\n Object.keys(value).forEach((key) => {\n const child = (value as Record<string, unknown>)[key];\n this.trackReactiveValue(child, seen);\n });\n }\n}\n",
17
+ "import { Router } from './index';\n\n// 创建一个全局路由实例\nlet router: Router | null = null;\n\n/**\n * 设置全局路由实例\n * @param r 路由实例\n */\nexport function setRouter(r: Router): void {\n if (!r || !(r instanceof Router)) {\n throw new Error('Invalid router instance');\n }\n router = r;\n}\n\n/**\n * 获取路由实例\n * @returns 路由实例\n * @throws 当路由未初始化时抛出错误\n */\nexport function useRouter(): Router {\n if (!router) {\n throw new Error(\n 'Router is not initialized. Please make sure you have installed the router plugin.'\n );\n }\n return router;\n}\n\n/**\n * 安全地获取路由实例,如果未初始化则返回null\n * @returns 路由实例或null\n */\nexport function getRouter(): Router | null {\n return router;\n}\n\n/**\n * 检查路由是否已初始化\n * @returns 是否已初始化\n */\nexport function hasRouter(): boolean {\n return router !== null;\n}\n\n/**\n * 重置路由实例(主要用于测试)\n */\nexport function resetRouter(): void {\n router = null;\n}\n",
18
+ "import type { RouteRecord } from './index';\n\nexport interface RouteMatch {\n route: RouteRecord;\n params: Record<string, string>;\n}\n\nexport function normalizePath(path: string): string {\n if (!path.startsWith('/')) {\n return `/${path}`;\n }\n return path || '/';\n}\n\nexport function matchRoute(\n routes: RouteRecord[],\n path: string\n): RouteMatch | null {\n const normalizedPath = normalizePath(path.split('?')[0]);\n\n for (const route of routes) {\n const params = matchRoutePath(route.path, normalizedPath);\n if (params) {\n return { route, params };\n }\n }\n\n const fallback = routes.find((route) => route.path === '/');\n return fallback ? { route: fallback, params: {} } : null;\n}\n\nfunction matchRoutePath(\n routePath: string,\n currentPath: string\n): Record<string, string> | null {\n const routeSegments = getPathSegments(routePath);\n const currentSegments = getPathSegments(currentPath);\n\n if (routeSegments.length !== currentSegments.length) {\n return null;\n }\n\n const params: Record<string, string> = {};\n\n for (let index = 0; index < routeSegments.length; index += 1) {\n const routeSegment = routeSegments[index];\n const currentSegment = currentSegments[index];\n\n if (routeSegment.startsWith(':')) {\n const paramName = routeSegment.slice(1);\n if (!paramName) {\n return null;\n }\n params[decodeURIComponent(paramName)] =\n decodeURIComponent(currentSegment);\n continue;\n }\n\n if (routeSegment !== currentSegment) {\n return null;\n }\n }\n\n return params;\n}\n\nfunction getPathSegments(path: string): string[] {\n const normalizedPath = normalizePath(path);\n if (normalizedPath === '/') {\n return [];\n }\n\n return normalizedPath.split('/').filter(Boolean);\n}\n",
19
+ "import type { RouteLocation, RouterOptions } from './index';\nimport { normalizePath } from './matcher';\n\nexport type RouterMode = NonNullable<RouterOptions['mode']>;\n\nexport function createRouterHref(\n path: string,\n mode: RouterMode,\n base: string\n): string {\n const normalizedPath = normalizePath(path);\n const fullPath = base === '/' ? normalizedPath : base + normalizedPath;\n return mode === 'hash' ? `#${fullPath}` : fullPath;\n}\n\nexport function getBrowserLocation(\n mode: RouterMode,\n base: string\n): RouteLocation {\n let path: string;\n let fullPath: string;\n let queryString: string;\n\n if (mode === 'history') {\n fullPath = window.location.pathname + window.location.search;\n path = window.location.pathname;\n queryString = window.location.search;\n } else {\n const hash = window.location.hash;\n fullPath = hash || '#/';\n path = fullPath.startsWith('#') ? fullPath.slice(1) : fullPath;\n const queryStart = path.indexOf('?');\n queryString = queryStart >= 0 ? path.slice(queryStart + 1) : '';\n path = queryStart >= 0 ? path.slice(0, queryStart) : path;\n }\n\n if (path.startsWith(base) && base !== '/' && path !== '/') {\n path = path.slice(base.length);\n }\n\n path = normalizePath(path);\n\n return {\n path,\n fullPath,\n query: parseQuery(queryString),\n params: {},\n };\n}\n\nexport function navigateBrowser(\n path: string,\n replace: boolean,\n mode: RouterMode,\n base: string\n): void {\n const normalizedPath = normalizePath(path);\n const fullPath = base === '/' ? normalizedPath : base + normalizedPath;\n\n if (mode === 'history') {\n if (replace) {\n window.history.replaceState({}, '', fullPath);\n } else {\n window.history.pushState({}, '', fullPath);\n }\n return;\n }\n\n if (replace) {\n const href = window.location.href.split('#')[0];\n window.location.replace(`${href}#${fullPath}`);\n return;\n }\n\n window.location.hash = fullPath;\n}\n\nfunction parseQuery(queryString: string): Record<string, string> {\n const query: Record<string, string> = {};\n const normalizedQuery = queryString.startsWith('?')\n ? queryString.slice(1)\n : queryString;\n\n if (!normalizedQuery) {\n return query;\n }\n\n normalizedQuery.split('&').forEach((param) => {\n const [key, value] = param.split('=');\n if (key) {\n query[decodeURIComponent(key)] = value ? decodeURIComponent(value) : '';\n }\n });\n\n return query;\n}\n",
20
+ "import { AnyComponentConstructor, Component } from '../core/component';\nimport { OneApp } from '../core/app';\nimport type { VNode } from '../core/vnode';\nimport { setRouter } from './instance';\nimport {\n createRouterHref,\n getBrowserLocation,\n navigateBrowser,\n} from './history';\nimport { matchRoute } from './matcher';\n\nexport { useRouter } from './instance';\n\nexport type RouteMeta = Record<string, unknown>;\n\nexport interface RouteRecord {\n path: string;\n component: AnyComponentConstructor;\n name?: string;\n meta?: RouteMeta;\n}\n\nexport interface RouterOptions {\n routes: RouteRecord[];\n mode?: 'history' | 'hash';\n base?: string;\n}\n\nexport interface RouteLocation {\n path: string;\n query: Record<string, string>;\n params: Record<string, string>;\n fullPath: string;\n name?: string;\n meta?: RouteMeta;\n}\n\nexport type RouteChangeListener = (\n to: RouteLocation,\n from: RouteLocation | null\n) => void;\n\nexport class Router {\n protected currentRoute: RouteRecord | null = null;\n protected currentLocation: RouteLocation | null = null;\n private readonly routes: RouteRecord[] = [];\n private app: OneApp | null = null;\n private readonly mode: 'history' | 'hash';\n private readonly base: string;\n private readonly routeChangeListeners: RouteChangeListener[] = [];\n private removeWindowListener?: () => void;\n\n constructor(options: RouterOptions | RouteRecord[]) {\n const resolvedOptions = Array.isArray(options)\n ? { routes: options }\n : options;\n\n this.routes = resolvedOptions.routes || [];\n this.mode = resolvedOptions.mode || 'history';\n this.base = resolvedOptions.base || '/';\n this.validateRoutes();\n this.initEvents();\n this.resolveCurrentRoute();\n }\n\n public install(app: OneApp): void {\n this.app = app;\n app.router = this;\n setRouter(this);\n\n const context = app.getContext() as { router?: Router };\n context.router = this;\n\n this.resolveCurrentRoute();\n }\n\n public push(path: string): void {\n this.navigate(path, false);\n }\n\n public replace(path: string): void {\n this.navigate(path, true);\n }\n\n public forward(): void {\n window.history.forward();\n }\n\n public back(): void {\n window.history.back();\n }\n\n public go(delta: number): void {\n window.history.go(delta);\n }\n\n public getCurrentRoute(): RouteLocation | null {\n if (!this.currentLocation) {\n this.resolveCurrentRoute();\n }\n return this.currentLocation;\n }\n\n public getCurrentRouteRecord(): RouteRecord | null {\n if (!this.currentRoute) {\n this.resolveCurrentRoute();\n }\n return this.currentRoute;\n }\n\n public onRouteChange(listener: RouteChangeListener): () => void {\n this.routeChangeListeners.push(listener);\n\n return () => {\n const index = this.routeChangeListeners.indexOf(listener);\n if (index > -1) {\n this.routeChangeListeners.splice(index, 1);\n }\n };\n }\n\n public getRoutes(): RouteRecord[] {\n return [...this.routes];\n }\n\n public addRoute(route: RouteRecord): void {\n if (this.routes.some((item) => item.path === route.path)) {\n throw new Error(`Route already exists: ${route.path}`);\n }\n\n this.routes.push(route);\n\n const location = this.getCurrentLocation();\n if (location.path === route.path) {\n this.handleRouteChange();\n }\n }\n\n public createHref(path: string): string {\n return createRouterHref(path, this.mode, this.base);\n }\n\n public destroy(): void {\n this.removeWindowListener?.();\n this.removeWindowListener = undefined;\n if (this.app?.router === this) {\n this.app.router = undefined;\n }\n this.app = null;\n }\n\n private navigate(path: string, replace: boolean): void {\n if (!path || typeof path !== 'string') {\n throw new Error('Path must be a non-empty string');\n }\n\n navigateBrowser(path, replace, this.mode, this.base);\n this.handleRouteChange();\n }\n\n private validateRoutes(): void {\n if (!Array.isArray(this.routes)) {\n throw new Error('Router routes must be an array');\n }\n\n const paths = new Set<string>();\n this.routes.forEach((route) => {\n if (paths.has(route.path)) {\n throw new Error(`Duplicate route path: ${route.path}`);\n }\n paths.add(route.path);\n });\n }\n\n private initEvents(): void {\n if (typeof window === 'undefined') {\n return;\n }\n\n const eventName = this.mode === 'history' ? 'popstate' : 'hashchange';\n const listener = (): void => {\n this.handleRouteChange();\n };\n\n window.addEventListener(eventName, listener);\n this.removeWindowListener = () => {\n window.removeEventListener(eventName, listener);\n };\n }\n\n private handleRouteChange(): void {\n const fromLocation = this.currentLocation;\n const nextLocation = this.resolveCurrentRoute();\n\n if (!this.isSameLocation(fromLocation, nextLocation)) {\n this.triggerRouteChangeListeners(nextLocation, fromLocation);\n }\n }\n\n private resolveCurrentRoute(): RouteLocation {\n const location = this.getCurrentLocation();\n const match = matchRoute(this.routes, location.path);\n const route = match?.route ?? null;\n\n this.currentRoute = route;\n this.currentLocation = {\n ...location,\n params: match?.params ?? {},\n name: route?.name,\n meta: route?.meta,\n };\n\n return this.currentLocation;\n }\n\n private getCurrentLocation(): RouteLocation {\n return getBrowserLocation(this.mode, this.base);\n }\n\n private isSameLocation(\n from: RouteLocation | null,\n to: RouteLocation | null\n ): boolean {\n return from?.fullPath === to?.fullPath && from?.name === to?.name;\n }\n\n private triggerRouteChangeListeners(\n to: RouteLocation,\n from: RouteLocation | null\n ): void {\n this.routeChangeListeners.forEach((listener) => {\n try {\n listener(to, from);\n } catch (error) {\n console.error('Route change listener error:', error);\n }\n });\n }\n}\n\nexport interface RouterLinkProps {\n to: string;\n replace?: boolean;\n className?: string;\n activeClass?: string;\n children?: Array<VNode | string>;\n}\n\ninterface RouterLinkState {\n currentPath: string;\n}\n\nexport class RouterLink extends Component<RouterLinkProps, RouterLinkState> {\n private unsubscribe?: () => void;\n\n protected initState(): RouterLinkState {\n const router = this.router as Router | undefined;\n return {\n currentPath: router?.getCurrentRoute()?.path ?? window.location.pathname,\n };\n }\n\n protected initStyles(): void {}\n\n protected onMounted(): void {\n const router = this.router as Router | undefined;\n this.unsubscribe = router?.onRouteChange((to) => {\n this.state.currentPath = to.path;\n });\n }\n\n protected onUnmounted(): void {\n this.unsubscribe?.();\n }\n\n protected render(): VNode {\n const router = this.router as Router | undefined;\n const activeClass = this.props.activeClass ?? 'active';\n const isActive = this.state.currentPath === this.props.to;\n const className = [this.props.className, isActive ? activeClass : undefined]\n .filter(Boolean)\n .join(' ');\n\n return {\n tag: 'a',\n props: {\n href: router?.createHref(this.props.to) ?? this.props.to,\n className,\n },\n listeners: {\n click: (event: Event) => {\n event.preventDefault();\n if (this.props.replace) {\n router?.replace(this.props.to);\n } else {\n router?.push(this.props.to);\n }\n },\n },\n children:\n this.props.children && this.props.children.length > 0\n ? this.props.children\n : [this.props.to],\n };\n }\n}\n\ninterface RouterViewState {\n route: RouteLocation | null;\n record: RouteRecord | null;\n}\n\nexport class RouterView extends Component<object, RouterViewState> {\n private unsubscribe?: () => void;\n\n protected initState(): RouterViewState {\n const router = this.router as Router | undefined;\n return {\n route: router?.getCurrentRoute() ?? null,\n record: router?.getCurrentRouteRecord() ?? null,\n };\n }\n\n protected initStyles(): void {}\n\n protected onMounted(): void {\n const router = this.router as Router | undefined;\n this.unsubscribe = router?.onRouteChange((to) => {\n this.state.route = to;\n this.state.record = router.getCurrentRouteRecord();\n });\n }\n\n protected onUnmounted(): void {\n this.unsubscribe?.();\n }\n\n protected render(): VNode {\n const routeRecord =\n this.state.record ??\n (this.router as Router | undefined)?.getCurrentRouteRecord();\n\n return {\n tag: 'div',\n props: { 'data-router-view': '' },\n children: routeRecord ? [{ component: routeRecord.component }] : [],\n };\n }\n}\n\nexport function createRouter(options: RouterOptions | RouteRecord[]): Router {\n return new Router(options);\n}\n"
21
+ ],
22
+ "mappings": "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",
23
+ "debugId": "91AF0EEFB67A584364756E2164756E21",
24
+ "names": []
25
+ }
package/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { OneApp, AppOptions } from './core/app';
2
+ import type { ComponentProps } from './core/component';
2
3
  export * from './core';
3
4
  export * from './router';
4
- export declare function createApp(options?: AppOptions): OneApp;
5
- export declare const version = "0.0.1";
5
+ export declare function createApp<TState extends object = Record<string, unknown>, TConfig extends object = Record<string, unknown>, TRootProps extends ComponentProps = ComponentProps>(options?: AppOptions<TState, TConfig, TRootProps>): OneApp<TState, TConfig, TRootProps>;
6
+ export declare const version = "0.0.2";
6
7
  export declare const name = "@geektech/tsone";