From e8d0b0e22bb2ad26e67707593c964a8343302cce Mon Sep 17 00:00:00 2001 From: Nowely Date: Sat, 7 Mar 2026 12:13:24 +0300 Subject: [PATCH 1/3] refactor: replace VueStore mapped type with Signal interface augmentation --- packages/common/core/src/features/store/Store.ts | 6 +++--- .../common/core/src/shared/classes/defineState.ts | 11 ++++++----- packages/common/core/src/shared/classes/index.ts | 2 +- .../vue/markput/src/components/BlockContainer.vue | 14 +++++++------- packages/vue/markput/src/components/Container.vue | 12 ++++++------ .../vue/markput/src/components/MarkRenderer.vue | 2 +- .../vue/markput/src/components/OverlayRenderer.vue | 4 ++-- packages/vue/markput/src/components/TextSpan.vue | 8 ++++---- .../vue/markput/src/lib/hooks/createUseHook.ts | 4 ++-- .../vue/markput/src/lib/hooks/useCoreFeatures.ts | 8 ++++---- packages/vue/markput/src/lib/hooks/useMark.ts | 4 ++-- packages/vue/markput/src/lib/hooks/useOverlay.ts | 2 +- packages/vue/markput/src/lib/hooks/useStore.ts | 7 +++++++ 13 files changed, 46 insertions(+), 38 deletions(-) diff --git a/packages/common/core/src/features/store/Store.ts b/packages/common/core/src/features/store/Store.ts index 39cdf5f9..3722e4db 100644 --- a/packages/common/core/src/features/store/Store.ts +++ b/packages/common/core/src/features/store/Store.ts @@ -1,4 +1,4 @@ -import {defineState, defineEvents, type UseHookFactory} from '../../shared/classes' +import {defineState, defineEvents, type UseHookFactory, type StateObject} from '../../shared/classes' import {KeyGenerator} from '../../shared/classes/KeyGenerator' import {NodeProxy} from '../../shared/classes/NodeProxy' import type {MarkputHandler, MarkputState, OverlayMatch} from '../../shared/types' @@ -22,7 +22,7 @@ export class Store { input: new NodeProxy(undefined, this), } - readonly state: ReturnType> + readonly state: StateObject readonly events = defineEvents<{ change: void @@ -49,7 +49,7 @@ export class Store { readonly lifecycle = new Lifecycle(this) constructor(options: StoreOptions) { - this.state = defineState( + this.state = defineState( { tokens: [], parser: undefined, diff --git a/packages/common/core/src/shared/classes/defineState.ts b/packages/common/core/src/shared/classes/defineState.ts index 98400894..c8dbfade 100644 --- a/packages/common/core/src/shared/classes/defineState.ts +++ b/packages/common/core/src/shared/classes/defineState.ts @@ -2,15 +2,16 @@ import {Reactive} from './Reactive' /** * Framework adapters can return any reactive wrapper from `use`. - * React returns plain values, while Vue can return `Ref`. + * The actual return type of `use()` is overridden per-framework via module augmentation. + * React returns plain T, Vue augments Signal so that `use()` returns Ref. */ -export type UseHookFactory = (signal: Signal) => () => any +export type UseHookFactory = (signal: Signal) => () => unknown -export type Signal = { +export interface Signal { get(): T set(value: T): void on(fn: (value: T) => void): () => void - use: () => T + use(): T } function createSignal(reactive: Reactive, createUseHook: UseHookFactory): Signal { @@ -18,7 +19,7 @@ function createSignal(reactive: Reactive, createUseHook: UseHookFactory): signal.get = () => reactive.get() signal.set = (value: T) => reactive.set(value) signal.on = (fn: (value: T) => void) => reactive.on(fn) - signal.use = createUseHook(signal) + signal.use = createUseHook(signal) as Signal['use'] return signal } diff --git a/packages/common/core/src/shared/classes/index.ts b/packages/common/core/src/shared/classes/index.ts index c089e4a8..7f60525a 100644 --- a/packages/common/core/src/shared/classes/index.ts +++ b/packages/common/core/src/shared/classes/index.ts @@ -1,5 +1,5 @@ export {Reactive} from './Reactive' -export type {Signal, UseHookFactory} from './defineState' +export type {Signal, UseHookFactory, StateObject} from './defineState' export {defineState} from './defineState' export type {Emitter} from './defineEvents' export {defineEvents} from './defineEvents' diff --git a/packages/vue/markput/src/components/BlockContainer.vue b/packages/vue/markput/src/components/BlockContainer.vue index 7cb663f4..22742133 100644 --- a/packages/vue/markput/src/components/BlockContainer.vue +++ b/packages/vue/markput/src/components/BlockContainer.vue @@ -1,7 +1,7 @@