@coze-editor/core 0.1.0-alpha.f1005d → 0.1.1-alpha.571687

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.js CHANGED
@@ -416,7 +416,7 @@ import { Compartment as Compartment3, Facet } from "@codemirror/state";
416
416
  function last(values) {
417
417
  return values[values.length - 1];
418
418
  }
419
- function asyncOption(name, handler) {
419
+ function asyncOption(name, handler, options) {
420
420
  const facet = Facet.define({
421
421
  combine: last
422
422
  });
@@ -433,10 +433,19 @@ function asyncOption(name, handler) {
433
433
  }
434
434
  apply(view) {
435
435
  const value = view.state.facet(facet);
436
+ if ((options == null ? void 0 : options.reset) === true) {
437
+ queueMicrotask(() => {
438
+ view.dispatch({
439
+ effects: compartment.reconfigure([])
440
+ });
441
+ });
442
+ }
436
443
  handler(value).then((ext) => {
437
444
  if (view.state.facet(facet) === value) {
438
- view.dispatch({
439
- effects: compartment.reconfigure(ext)
445
+ queueMicrotask(() => {
446
+ view.dispatch({
447
+ effects: compartment.reconfigure(ext)
448
+ });
440
449
  });
441
450
  }
442
451
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/editor.ts","../../src/plugins.ts","../../src/spec.ts","../../src/options.ts","../../src/injector.ts","../../src/hook.ts","../../src/disable-edit-context.ts","../../src/async-option.ts"],"sourcesContent":["/* eslint-disable default-case */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport mitt, { type EventType, type Emitter } from 'mitt';\nimport { EditorView } from '@codemirror/view';\nimport { EditorState, type Extension } from '@codemirror/state';\n\nimport {\n type EditorPluginSpec,\n type InferValues,\n type InferEvents,\n type InferAPI,\n} from './spec';\nimport {\n apiPlugin,\n domEventHandlerPlugin,\n eventPlugin,\n extensionPlugin,\n optionPlugin,\n} from './plugins';\nimport { Options } from './options';\nimport { InjectPosition, type Injector, createInjector } from './injector';\nimport { createSyncHook } from './hook';\nimport { disableEditContext } from './disable-edit-context';\n\ndisableEditContext();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface EditorOptions<T, U> {\n parent: HTMLElement;\n root?: Document | ShadowRoot;\n defaultValue?: string;\n options: T;\n extensions?: Extension[];\n}\n\ntype InferOnOff<Events> = <K extends keyof Events>(\n eventName: K,\n handler: (params: Events[K]) => void,\n) => void;\n\ntype InferEventMap<Events> = {\n [K in keyof Events]: (params: Events[K]) => void;\n};\n\ntype InferGet<Values> = <K extends keyof Values>(\n key: K,\n) => Values[K] | undefined;\n\ntype InferSet<Values> = (values: Values) => void;\n\ninterface InitOptionHookParams {\n key: string;\n options: Options;\n}\n\ninterface ExtendAPIHookParams<Values> {\n context: {\n view: EditorView;\n get: (key: keyof Values) => Values[keyof Values];\n set: (values: Values) => void;\n };\n}\n\ninterface AddExtensionHookParams {\n events: Emitter<any>;\n extensions: Extension[];\n}\n\ninterface BuiltinEditorAPI {\n $view: EditorView;\n $on: (name: string, handler: Function) => void;\n $off: (name: string, handler: Function) => void;\n $get: (key: string) => unknown;\n $set: (key: string, value: unknown) => void;\n $destroy: () => void;\n $inject: (extension: Extension, position?: InjectPosition) => () => void;\n}\n\ntype InferEditorAPIFromPlugins<\n T extends EditorPluginSpec<string, any, any>[],\n Events = InferEvents<T[number]>,\n AllValues = InferValues<T[number]>,\n Values = Partial<AllValues>,\n> = InferAPI<T[number]> & { $on: InferOnOff<Events> } & {\n $off: InferOnOff<Events>;\n} & { $get: InferGet<AllValues> } & { $set: InferSet<Values> } & Pick<\n BuiltinEditorAPI,\n '$view' | '$destroy' | '$inject'\n > & { __private_eventmap: InferEventMap<Events> };\n\nfunction create<T extends EditorPluginSpec<string, any, any>[]>({\n plugins,\n injector = createInjector(),\n}: {\n plugins: T;\n injector?: Injector;\n}) {\n type AllValues = InferValues<T[number]>;\n type Values = Partial<AllValues>;\n type Events = InferEvents<T[number]>;\n type API = InferEditorAPIFromPlugins<T>;\n\n const hooks = {\n extendAPI: createSyncHook<ExtendAPIHookParams<Values>>(),\n setupOption: createSyncHook<InitOptionHookParams>(),\n addExtension: createSyncHook<AddExtensionHookParams>(),\n };\n\n const ctx = { hooks };\n\n const optionKeys: string[] = [];\n const eventKeys: string[] = [];\n plugins.forEach(plugin => {\n switch (plugin.type) {\n case 'option':\n optionKeys.push(plugin.name);\n optionPlugin(plugin).apply(ctx);\n break;\n case 'api':\n apiPlugin(plugin).apply(ctx);\n break;\n case 'event':\n eventKeys.push(plugin.name);\n eventPlugin(plugin).apply(ctx);\n break;\n case 'domEventHandler':\n eventKeys.push(plugin.name);\n domEventHandlerPlugin(plugin).apply(ctx);\n break;\n case 'extension':\n extensionPlugin(plugin).apply(ctx);\n break;\n }\n });\n\n function getExtensions(\n values: EditorOptions<Values, Events>['options'],\n {\n options,\n events,\n }: {\n options: Options;\n events: Emitter<Record<string, unknown>>;\n },\n ): Extension[] {\n optionKeys.forEach(key => {\n hooks.setupOption.call({\n key,\n options,\n });\n });\n\n const extensions: Extension[] = [];\n hooks.addExtension.call({\n events,\n extensions,\n });\n\n return [\n injector.getCompartment(InjectPosition.Head),\n ...options.init(values),\n ...extensions,\n injector.getCompartment(InjectPosition.Tail),\n ];\n }\n\n function createOptions() {\n return new Options();\n }\n\n function createEvents() {\n return mitt();\n }\n\n function createAPI({\n view,\n options,\n events,\n }: {\n view: EditorView;\n options: Options;\n events: Emitter<Record<EventType, unknown>>;\n }): API {\n function setOptions(optValues: Values) {\n const effects = options.set(optValues);\n // values unchanged\n if (effects.length === 0) {\n return;\n }\n view.dispatch({ effects });\n }\n\n function getOption<K extends keyof AllValues>(key: K): AllValues[K] {\n return options.get(key);\n }\n\n const context = {\n view,\n set: setOptions,\n get: getOption,\n };\n\n const api: API = Object.create(null);\n\n hooks.extendAPI.call({\n context,\n api,\n });\n\n api.$view = view;\n api.$on = events.on.bind(events);\n api.$off = events.off.bind(events);\n api.$get = getOption;\n api.$set = setOptions;\n api.$inject = injector.inject.bind(injector);\n api.$destroy = () => {\n view.destroy();\n events.off('*');\n };\n\n return api;\n }\n\n function render(opts: EditorOptions<Values, Events>): API {\n const { parent, root, defaultValue } = opts;\n let { extensions: userExtensions } = opts;\n\n if (!Array.isArray(userExtensions)) {\n userExtensions = [];\n }\n\n const options = createOptions();\n const events = createEvents();\n\n const extensions = getExtensions(opts.options, {\n options,\n events,\n });\n\n const view = new EditorView({\n parent,\n root,\n state: EditorState.create({\n doc: defaultValue ?? '',\n extensions: [...extensions, ...userExtensions],\n }),\n });\n\n injector.provideView(view);\n\n const api = createAPI({\n view,\n options,\n events,\n });\n\n return api;\n }\n\n return {\n render,\n getExtensions,\n createAPI,\n createOptions,\n createEvents,\n eventKeys,\n };\n}\n\nexport { create };\n\nexport type {\n EditorOptions,\n BuiltinEditorAPI,\n InferValues,\n InferEditorAPIFromPlugins,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EditorView } from '@codemirror/view';\n\nimport { EVENT_SILENT } from './spec';\nimport type {\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n ExtensionPluginSpec,\n DOMEventHandlerPluginSpec,\n} from './spec';\nimport { OptionHandler } from './options';\n\nconst optionPlugin = (spec: OptionPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.setupOption.tap('option', (params: any) => {\n const { key, options } = params;\n if (key === spec.name) {\n options.add(spec.name, new OptionHandler(spec.handler));\n }\n });\n },\n});\n\nconst apiPlugin = (spec: APIPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.extendAPI.tap('api', (params: any) => {\n const { context, api } = params;\n const method = spec.handler(context);\n api[spec.name] = method;\n });\n },\n});\n\nconst eventPlugin = (spec: EventPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('event', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.updateListener.of(update => {\n const result = spec.handler(update);\n if (result !== EVENT_SILENT) {\n events.emit(spec.name, result);\n }\n }),\n );\n });\n },\n});\n\nconst domEventHandlerPlugin = (spec: DOMEventHandlerPluginSpec<string>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('domEventHandler', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.domEventHandlers({\n [spec.name]: e => {\n events.emit(spec.name, e);\n },\n }),\n );\n });\n },\n});\n\nconst extensionPlugin = (spec: ExtensionPluginSpec) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('extension', (params: any) => {\n const { extensions } = params;\n extensions.push(spec.extension);\n });\n },\n});\n\nexport {\n optionPlugin,\n apiPlugin,\n eventPlugin,\n domEventHandlerPlugin,\n extensionPlugin,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type EditorView, type ViewUpdate } from '@codemirror/view';\nimport { type Extension } from '@codemirror/state';\n\nconst EVENT_SILENT = Symbol('event/silent');\n\ninterface APIContext {\n view: EditorView;\n get: (key: string) => unknown;\n set: (values: Record<string, unknown>) => void;\n}\n\ninterface APIPluginSpec<\n Name extends string,\n Params extends any[],\n ReturnValue = unknown,\n> {\n type: 'api';\n name: Name;\n handler: (context: APIContext) => (...params: Params) => ReturnValue;\n}\n\ninterface OptionPluginSpec<Name extends string, Value = unknown> {\n type: 'option';\n name: Name;\n handler: (value: Value) => Extension | undefined;\n}\n\ninterface EventPluginSpec<Name extends string, Value = unknown> {\n type: 'event';\n name: Name;\n handler: (update: ViewUpdate) => Value | typeof EVENT_SILENT;\n}\n\ninterface DOMEventHandlerPluginSpec<T extends string> {\n type: 'domEventHandler';\n name: T;\n}\n\ninterface ExtensionPluginSpec {\n type: 'extension';\n extension: Extension;\n}\n\ntype EditorPluginSpec<T extends string, U extends any[], V> =\n | APIPluginSpec<T, U, V>\n | OptionPluginSpec<T, U>\n | EventPluginSpec<T, U>\n | DOMEventHandlerPluginSpec<T>\n | ExtensionPluginSpec;\n\nfunction option<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Extension,\n): OptionPluginSpec<Name, Value> {\n return {\n type: 'option',\n name,\n handler,\n };\n}\n\nfunction api<Name extends string, Params extends any[], ReturnValue>(\n name: Name,\n handler: (context: APIContext) => (...params: Params) => ReturnValue,\n): APIPluginSpec<Name, Params, ReturnValue> {\n return {\n type: 'api',\n name,\n handler,\n };\n}\n\nfunction event<Name extends string, Params>(\n name: Name,\n handler: (update: ViewUpdate) => Params | typeof EVENT_SILENT,\n): EventPluginSpec<Name, Params> {\n return {\n type: 'event',\n name,\n handler,\n };\n}\n\nfunction domEventHandler<Name extends keyof HTMLElementEventMap>(\n name: Name,\n): DOMEventHandlerPluginSpec<Name> {\n return {\n type: 'domEventHandler',\n name,\n };\n}\n\nfunction extension(ext: Extension): ExtensionPluginSpec {\n return {\n type: 'extension',\n extension: ext,\n };\n}\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype InferValues<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends OptionPluginSpec<infer Name, infer Value>\n ? { [K in Name]: Value }\n : never\n >;\n\ntype InferAPI<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends APIPluginSpec<infer Name, infer Params, infer ReturnValue>\n ? { [K in Name]: (...params: Params) => ReturnValue }\n : never\n >;\n\ntype InferEvents<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends EventPluginSpec<infer Name, infer Params>\n ? { [K in Name]: Params }\n : Plugin extends DOMEventHandlerPluginSpec<infer Name>\n ? Name extends keyof HTMLElementEventMap\n ? { [K in Name]: HTMLElementEventMap[Name] }\n : { [K in Name]: unknown }\n : never\n >;\n\ninterface Core {\n API: typeof api;\n Extesion: typeof extension;\n Event: typeof event;\n Option: typeof option;\n}\n\nexport { option, api, event, domEventHandler, extension, EVENT_SILENT };\n\nexport type {\n EditorPluginSpec,\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n DOMEventHandlerPluginSpec,\n ExtensionPluginSpec,\n APIContext,\n InferValues,\n InferAPI,\n InferEvents,\n Core,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n Compartment,\n type Extension,\n type StateEffect,\n} from '@codemirror/state';\n\ntype OptionFunction<T = unknown> = (value: T) => Extension | undefined;\n\nclass OptionHandler<Value = unknown> {\n private compartment: Compartment = new Compartment();\n public extension: Extension | undefined;\n public value: Value | undefined;\n\n constructor(public fn: OptionFunction) {}\n\n init(value: Value): Extension {\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.of(extension ?? []);\n }\n\n set(value: Value): StateEffect<unknown> | undefined {\n if (value === this.value) {\n return;\n }\n\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.reconfigure(extension ?? []);\n }\n}\n\nclass Options {\n cachedValues = Object.create(null);\n handlers: Record<string, OptionHandler[]> = Object.create(null);\n\n add(name: string, handler: OptionHandler) {\n this.handlers[name] = this.handlers[name] ?? [];\n this.handlers[name].push(handler);\n }\n\n init(values: Record<string, unknown>): Extension[] {\n const extensions: Extension[] = [];\n\n Object.keys(this.handlers).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const extension = h.init(value);\n if (extension) {\n extensions.push(extension);\n }\n });\n }\n });\n\n return extensions;\n }\n\n get<T = unknown>(key: string | number | symbol): T {\n return this.cachedValues[key];\n }\n\n set(values: Record<string, unknown>): StateEffect<unknown>[] {\n const effects: StateEffect<unknown>[] = [];\n\n Object.keys(values).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const effect = h.set(value);\n if (effect) {\n effects.push(effect);\n }\n });\n }\n });\n\n return effects;\n }\n}\n\nexport { Options, OptionHandler };\n\nexport type { OptionFunction };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { type EditorView } from '@codemirror/view';\nimport { Compartment, type Extension } from '@codemirror/state';\n\nenum InjectPosition {\n Head = 'head',\n Tail = 'tail',\n}\n\n// type Plugin = EditorPluginSpec<string, any, any>[]\n// type TransactionsHandler = (trs: readonly Transaction[], view: EditorView) => void;\ntype Eject = () => void;\ninterface Injector {\n view: EditorView | null;\n provideView: (view: EditorView) => void;\n inject: (extension: Extension, position?: InjectPosition) => Eject;\n getCompartment: (position: InjectPosition) => Extension;\n // exportField: (field: StateField<any>) => ({ as: (name: string) => void });\n // getExportFieldsConfig: () => Record<string, StateField<any>>;\n // setTransactionsHandler(handler: TransactionsHandler): void;\n // getTransactionsHandler(): TransactionsHandler | null;\n}\n\nfunction createInjector(): Injector {\n const headCompartment = new Compartment();\n const tailCompartment = new Compartment();\n\n const headExtensions: Extension[] = [];\n const tailExtensions: Extension[] = [];\n\n // let transactionsHandlers: TransactionsHandler[] = []\n\n return {\n view: null,\n provideView(view: EditorView) {\n this.view = view;\n },\n inject(extension, position = InjectPosition.Tail) {\n const compartment =\n position === InjectPosition.Head ? headCompartment : tailCompartment;\n const extensions =\n position === InjectPosition.Head ? headExtensions : tailExtensions;\n extensions.push(extension);\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n\n // eject\n return () => {\n const index = extensions.indexOf(extension);\n if (~index) {\n extensions.splice(index, 1);\n }\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n };\n },\n\n // @internal\n getCompartment(position: InjectPosition) {\n return position === InjectPosition.Head\n ? headCompartment.of(headExtensions)\n : tailCompartment.of(tailExtensions);\n },\n\n // setTransactionsHandler(handler) {\n // if (typeof handler === 'function') {\n // transactionsHandlers.push(handler)\n // }\n\n // return () => {\n // const index = transactionsHandlers.indexOf(handler)\n // if (~index) {\n // transactionsHandlers.splice(index, 1)\n // }\n // }\n // },\n\n // getTransactionsHandler() {\n // return transactionsHandlers[transactionsHandlers.length - 1]\n // },\n\n // for fields export\n // exportField(field) {\n // return {\n // as(name: string) {\n // toJSONConfig[name] = field;\n // }\n // }\n // },\n // getExportFieldsConfig() {\n // return toJSONConfig;\n // },\n };\n}\n\nexport { createInjector, InjectPosition };\n\nexport type { Injector };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nclass SyncHook<T = unknown> {\n #fns: [string, T][] = [];\n\n tap(id: string, hookFn: T): void {\n this.#fns.push([id, hookFn]);\n }\n\n call(...args: unknown[]): void {\n const fns = this.#fns;\n\n fns.forEach(item => {\n const fn = item[1];\n if (typeof fn === 'function') {\n fn(...args);\n }\n });\n }\n}\n\nfunction createSyncHook<T = unknown>(): SyncHook<T> {\n return new SyncHook<T>();\n}\n\nexport { createSyncHook };\n\nexport type { SyncHook };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { EditorView } from '@codemirror/view';\n\nfunction disableEditContext() {\n (EditorView as any).EDIT_CONTEXT = false;\n}\n\nexport { disableEditContext };\n","import { type EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\nimport { Compartment, Facet, type Extension } from '@codemirror/state';\n\nimport {\n extension,\n type ExtensionPluginSpec,\n option,\n type OptionPluginSpec,\n} from './spec';\n\nfunction last<T>(values: readonly T[]): T {\n return values[values.length - 1];\n}\n\nfunction asyncOption<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Promise<Extension>,\n): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>] {\n const facet = Facet.define<Value, Value>({\n combine: last,\n });\n\n const compartment = new Compartment();\n\n const plugin = ViewPlugin.fromClass(\n class {\n constructor(view: EditorView) {\n this.apply(view);\n }\n\n update(update: ViewUpdate) {\n if (update.state.facet(facet) !== update.startState.facet(facet)) {\n this.apply(update.view);\n }\n }\n\n apply(view: EditorView) {\n const value = view.state.facet(facet);\n handler(value).then(ext => {\n if (view.state.facet(facet) === value) {\n view.dispatch({\n effects: compartment.reconfigure(ext),\n });\n }\n });\n }\n },\n );\n\n return [\n extension([plugin, compartment.of([])]),\n option(name, (value: Value) => facet.of(value)),\n ] as const;\n}\n\nexport { asyncOption };\n"],"mappings":"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","names":["EditorView","extension","api","Compartment","InjectPosition","extension","EditorView","api","EditorView","Compartment","Compartment"]}
1
+ {"version":3,"sources":["../../src/editor.ts","../../src/plugins.ts","../../src/spec.ts","../../src/options.ts","../../src/injector.ts","../../src/hook.ts","../../src/disable-edit-context.ts","../../src/async-option.ts"],"sourcesContent":["/* eslint-disable default-case */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport mitt, { type EventType, type Emitter } from 'mitt';\nimport { EditorView } from '@codemirror/view';\nimport { EditorState, type Extension } from '@codemirror/state';\n\nimport {\n type EditorPluginSpec,\n type InferValues,\n type InferEvents,\n type InferAPI,\n} from './spec';\nimport {\n apiPlugin,\n domEventHandlerPlugin,\n eventPlugin,\n extensionPlugin,\n optionPlugin,\n} from './plugins';\nimport { Options } from './options';\nimport { InjectPosition, type Injector, createInjector } from './injector';\nimport { createSyncHook } from './hook';\nimport { disableEditContext } from './disable-edit-context';\n\ndisableEditContext();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface EditorOptions<T, U> {\n parent: HTMLElement;\n root?: Document | ShadowRoot;\n defaultValue?: string;\n options: T;\n extensions?: Extension[];\n}\n\ntype InferOnOff<Events> = <K extends keyof Events>(\n eventName: K,\n handler: (params: Events[K]) => void,\n) => void;\n\ntype InferEventMap<Events> = {\n [K in keyof Events]: (params: Events[K]) => void;\n};\n\ntype InferGet<Values> = <K extends keyof Values>(\n key: K,\n) => Values[K] | undefined;\n\ntype InferSet<Values> = (values: Values) => void;\n\ninterface InitOptionHookParams {\n key: string;\n options: Options;\n}\n\ninterface ExtendAPIHookParams<Values> {\n context: {\n view: EditorView;\n get: (key: keyof Values) => Values[keyof Values];\n set: (values: Values) => void;\n };\n}\n\ninterface AddExtensionHookParams {\n events: Emitter<any>;\n extensions: Extension[];\n}\n\ninterface BuiltinEditorAPI {\n $view: EditorView;\n $on: (name: string, handler: Function) => void;\n $off: (name: string, handler: Function) => void;\n $get: (key: string) => unknown;\n $set: (key: string, value: unknown) => void;\n $destroy: () => void;\n $inject: (extension: Extension, position?: InjectPosition) => () => void;\n}\n\ntype InferEditorAPIFromPlugins<\n T extends EditorPluginSpec<string, any, any>[],\n Events = InferEvents<T[number]>,\n AllValues = InferValues<T[number]>,\n Values = Partial<AllValues>,\n> = InferAPI<T[number]> & { $on: InferOnOff<Events> } & {\n $off: InferOnOff<Events>;\n} & { $get: InferGet<AllValues> } & { $set: InferSet<Values> } & Pick<\n BuiltinEditorAPI,\n '$view' | '$destroy' | '$inject'\n > & { __private_eventmap: InferEventMap<Events> };\n\nfunction create<T extends EditorPluginSpec<string, any, any>[]>({\n plugins,\n injector = createInjector(),\n}: {\n plugins: T;\n injector?: Injector;\n}) {\n type AllValues = InferValues<T[number]>;\n type Values = Partial<AllValues>;\n type Events = InferEvents<T[number]>;\n type API = InferEditorAPIFromPlugins<T>;\n\n const hooks = {\n extendAPI: createSyncHook<ExtendAPIHookParams<Values>>(),\n setupOption: createSyncHook<InitOptionHookParams>(),\n addExtension: createSyncHook<AddExtensionHookParams>(),\n };\n\n const ctx = { hooks };\n\n const optionKeys: string[] = [];\n const eventKeys: string[] = [];\n plugins.forEach(plugin => {\n switch (plugin.type) {\n case 'option':\n optionKeys.push(plugin.name);\n optionPlugin(plugin).apply(ctx);\n break;\n case 'api':\n apiPlugin(plugin).apply(ctx);\n break;\n case 'event':\n eventKeys.push(plugin.name);\n eventPlugin(plugin).apply(ctx);\n break;\n case 'domEventHandler':\n eventKeys.push(plugin.name);\n domEventHandlerPlugin(plugin).apply(ctx);\n break;\n case 'extension':\n extensionPlugin(plugin).apply(ctx);\n break;\n }\n });\n\n function getExtensions(\n values: EditorOptions<Values, Events>['options'],\n {\n options,\n events,\n }: {\n options: Options;\n events: Emitter<Record<string, unknown>>;\n },\n ): Extension[] {\n optionKeys.forEach(key => {\n hooks.setupOption.call({\n key,\n options,\n });\n });\n\n const extensions: Extension[] = [];\n hooks.addExtension.call({\n events,\n extensions,\n });\n\n return [\n injector.getCompartment(InjectPosition.Head),\n ...options.init(values),\n ...extensions,\n injector.getCompartment(InjectPosition.Tail),\n ];\n }\n\n function createOptions() {\n return new Options();\n }\n\n function createEvents() {\n return mitt();\n }\n\n function createAPI({\n view,\n options,\n events,\n }: {\n view: EditorView;\n options: Options;\n events: Emitter<Record<EventType, unknown>>;\n }): API {\n function setOptions(optValues: Values) {\n const effects = options.set(optValues);\n // values unchanged\n if (effects.length === 0) {\n return;\n }\n view.dispatch({ effects });\n }\n\n function getOption<K extends keyof AllValues>(key: K): AllValues[K] {\n return options.get(key);\n }\n\n const context = {\n view,\n set: setOptions,\n get: getOption,\n };\n\n const api: API = Object.create(null);\n\n hooks.extendAPI.call({\n context,\n api,\n });\n\n api.$view = view;\n api.$on = events.on.bind(events);\n api.$off = events.off.bind(events);\n api.$get = getOption;\n api.$set = setOptions;\n api.$inject = injector.inject.bind(injector);\n api.$destroy = () => {\n view.destroy();\n events.off('*');\n };\n\n return api;\n }\n\n function render(opts: EditorOptions<Values, Events>): API {\n const { parent, root, defaultValue } = opts;\n let { extensions: userExtensions } = opts;\n\n if (!Array.isArray(userExtensions)) {\n userExtensions = [];\n }\n\n const options = createOptions();\n const events = createEvents();\n\n const extensions = getExtensions(opts.options, {\n options,\n events,\n });\n\n const view = new EditorView({\n parent,\n root,\n state: EditorState.create({\n doc: defaultValue ?? '',\n extensions: [...extensions, ...userExtensions],\n }),\n });\n\n injector.provideView(view);\n\n const api = createAPI({\n view,\n options,\n events,\n });\n\n return api;\n }\n\n return {\n render,\n getExtensions,\n createAPI,\n createOptions,\n createEvents,\n eventKeys,\n };\n}\n\nexport { create };\n\nexport type {\n EditorOptions,\n BuiltinEditorAPI,\n InferValues,\n InferEditorAPIFromPlugins,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EditorView } from '@codemirror/view';\n\nimport { EVENT_SILENT } from './spec';\nimport type {\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n ExtensionPluginSpec,\n DOMEventHandlerPluginSpec,\n} from './spec';\nimport { OptionHandler } from './options';\n\nconst optionPlugin = (spec: OptionPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.setupOption.tap('option', (params: any) => {\n const { key, options } = params;\n if (key === spec.name) {\n options.add(spec.name, new OptionHandler(spec.handler));\n }\n });\n },\n});\n\nconst apiPlugin = (spec: APIPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.extendAPI.tap('api', (params: any) => {\n const { context, api } = params;\n const method = spec.handler(context);\n api[spec.name] = method;\n });\n },\n});\n\nconst eventPlugin = (spec: EventPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('event', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.updateListener.of(update => {\n const result = spec.handler(update);\n if (result !== EVENT_SILENT) {\n events.emit(spec.name, result);\n }\n }),\n );\n });\n },\n});\n\nconst domEventHandlerPlugin = (spec: DOMEventHandlerPluginSpec<string>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('domEventHandler', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.domEventHandlers({\n [spec.name]: e => {\n events.emit(spec.name, e);\n },\n }),\n );\n });\n },\n});\n\nconst extensionPlugin = (spec: ExtensionPluginSpec) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('extension', (params: any) => {\n const { extensions } = params;\n extensions.push(spec.extension);\n });\n },\n});\n\nexport {\n optionPlugin,\n apiPlugin,\n eventPlugin,\n domEventHandlerPlugin,\n extensionPlugin,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type EditorView, type ViewUpdate } from '@codemirror/view';\nimport { type Extension } from '@codemirror/state';\n\nconst EVENT_SILENT = Symbol('event/silent');\n\ninterface APIContext {\n view: EditorView;\n get: (key: string) => unknown;\n set: (values: Record<string, unknown>) => void;\n}\n\ninterface APIPluginSpec<\n Name extends string,\n Params extends any[],\n ReturnValue = unknown,\n> {\n type: 'api';\n name: Name;\n handler: (context: APIContext) => (...params: Params) => ReturnValue;\n}\n\ninterface OptionPluginSpec<Name extends string, Value = unknown> {\n type: 'option';\n name: Name;\n handler: (value: Value) => Extension | undefined;\n}\n\ninterface EventPluginSpec<Name extends string, Value = unknown> {\n type: 'event';\n name: Name;\n handler: (update: ViewUpdate) => Value | typeof EVENT_SILENT;\n}\n\ninterface DOMEventHandlerPluginSpec<T extends string> {\n type: 'domEventHandler';\n name: T;\n}\n\ninterface ExtensionPluginSpec {\n type: 'extension';\n extension: Extension;\n}\n\ntype EditorPluginSpec<T extends string, U extends any[], V> =\n | APIPluginSpec<T, U, V>\n | OptionPluginSpec<T, U>\n | EventPluginSpec<T, U>\n | DOMEventHandlerPluginSpec<T>\n | ExtensionPluginSpec;\n\nfunction option<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Extension,\n): OptionPluginSpec<Name, Value> {\n return {\n type: 'option',\n name,\n handler,\n };\n}\n\nfunction api<Name extends string, Params extends any[], ReturnValue>(\n name: Name,\n handler: (context: APIContext) => (...params: Params) => ReturnValue,\n): APIPluginSpec<Name, Params, ReturnValue> {\n return {\n type: 'api',\n name,\n handler,\n };\n}\n\nfunction event<Name extends string, Params>(\n name: Name,\n handler: (update: ViewUpdate) => Params | typeof EVENT_SILENT,\n): EventPluginSpec<Name, Params> {\n return {\n type: 'event',\n name,\n handler,\n };\n}\n\nfunction domEventHandler<Name extends keyof HTMLElementEventMap>(\n name: Name,\n): DOMEventHandlerPluginSpec<Name> {\n return {\n type: 'domEventHandler',\n name,\n };\n}\n\nfunction extension(ext: Extension): ExtensionPluginSpec {\n return {\n type: 'extension',\n extension: ext,\n };\n}\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype InferValues<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends OptionPluginSpec<infer Name, infer Value>\n ? { [K in Name]: Value }\n : never\n >;\n\ntype InferAPI<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends APIPluginSpec<infer Name, infer Params, infer ReturnValue>\n ? { [K in Name]: (...params: Params) => ReturnValue }\n : never\n >;\n\ntype InferEvents<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends EventPluginSpec<infer Name, infer Params>\n ? { [K in Name]: Params }\n : Plugin extends DOMEventHandlerPluginSpec<infer Name>\n ? Name extends keyof HTMLElementEventMap\n ? { [K in Name]: HTMLElementEventMap[Name] }\n : { [K in Name]: unknown }\n : never\n >;\n\ninterface Core {\n API: typeof api;\n Extesion: typeof extension;\n Event: typeof event;\n Option: typeof option;\n}\n\nexport { option, api, event, domEventHandler, extension, EVENT_SILENT };\n\nexport type {\n EditorPluginSpec,\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n DOMEventHandlerPluginSpec,\n ExtensionPluginSpec,\n APIContext,\n InferValues,\n InferAPI,\n InferEvents,\n Core,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n Compartment,\n type Extension,\n type StateEffect,\n} from '@codemirror/state';\n\ntype OptionFunction<T = unknown> = (value: T) => Extension | undefined;\n\nclass OptionHandler<Value = unknown> {\n private compartment: Compartment = new Compartment();\n public extension: Extension | undefined;\n public value: Value | undefined;\n\n constructor(public fn: OptionFunction) {}\n\n init(value: Value): Extension {\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.of(extension ?? []);\n }\n\n set(value: Value): StateEffect<unknown> | undefined {\n if (value === this.value) {\n return;\n }\n\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.reconfigure(extension ?? []);\n }\n}\n\nclass Options {\n cachedValues = Object.create(null);\n handlers: Record<string, OptionHandler[]> = Object.create(null);\n\n add(name: string, handler: OptionHandler) {\n this.handlers[name] = this.handlers[name] ?? [];\n this.handlers[name].push(handler);\n }\n\n init(values: Record<string, unknown>): Extension[] {\n const extensions: Extension[] = [];\n\n Object.keys(this.handlers).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const extension = h.init(value);\n if (extension) {\n extensions.push(extension);\n }\n });\n }\n });\n\n return extensions;\n }\n\n get<T = unknown>(key: string | number | symbol): T {\n return this.cachedValues[key];\n }\n\n set(values: Record<string, unknown>): StateEffect<unknown>[] {\n const effects: StateEffect<unknown>[] = [];\n\n Object.keys(values).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const effect = h.set(value);\n if (effect) {\n effects.push(effect);\n }\n });\n }\n });\n\n return effects;\n }\n}\n\nexport { Options, OptionHandler };\n\nexport type { OptionFunction };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { type EditorView } from '@codemirror/view';\nimport { Compartment, type Extension } from '@codemirror/state';\n\nenum InjectPosition {\n Head = 'head',\n Tail = 'tail',\n}\n\n// type Plugin = EditorPluginSpec<string, any, any>[]\n// type TransactionsHandler = (trs: readonly Transaction[], view: EditorView) => void;\ntype Eject = () => void;\ninterface Injector {\n view: EditorView | null;\n provideView: (view: EditorView) => void;\n inject: (extension: Extension, position?: InjectPosition) => Eject;\n getCompartment: (position: InjectPosition) => Extension;\n // exportField: (field: StateField<any>) => ({ as: (name: string) => void });\n // getExportFieldsConfig: () => Record<string, StateField<any>>;\n // setTransactionsHandler(handler: TransactionsHandler): void;\n // getTransactionsHandler(): TransactionsHandler | null;\n}\n\nfunction createInjector(): Injector {\n const headCompartment = new Compartment();\n const tailCompartment = new Compartment();\n\n const headExtensions: Extension[] = [];\n const tailExtensions: Extension[] = [];\n\n // let transactionsHandlers: TransactionsHandler[] = []\n\n return {\n view: null,\n provideView(view: EditorView) {\n this.view = view;\n },\n inject(extension, position = InjectPosition.Tail) {\n const compartment =\n position === InjectPosition.Head ? headCompartment : tailCompartment;\n const extensions =\n position === InjectPosition.Head ? headExtensions : tailExtensions;\n extensions.push(extension);\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n\n // eject\n return () => {\n const index = extensions.indexOf(extension);\n if (~index) {\n extensions.splice(index, 1);\n }\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n };\n },\n\n // @internal\n getCompartment(position: InjectPosition) {\n return position === InjectPosition.Head\n ? headCompartment.of(headExtensions)\n : tailCompartment.of(tailExtensions);\n },\n\n // setTransactionsHandler(handler) {\n // if (typeof handler === 'function') {\n // transactionsHandlers.push(handler)\n // }\n\n // return () => {\n // const index = transactionsHandlers.indexOf(handler)\n // if (~index) {\n // transactionsHandlers.splice(index, 1)\n // }\n // }\n // },\n\n // getTransactionsHandler() {\n // return transactionsHandlers[transactionsHandlers.length - 1]\n // },\n\n // for fields export\n // exportField(field) {\n // return {\n // as(name: string) {\n // toJSONConfig[name] = field;\n // }\n // }\n // },\n // getExportFieldsConfig() {\n // return toJSONConfig;\n // },\n };\n}\n\nexport { createInjector, InjectPosition };\n\nexport type { Injector };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nclass SyncHook<T = unknown> {\n #fns: [string, T][] = [];\n\n tap(id: string, hookFn: T): void {\n this.#fns.push([id, hookFn]);\n }\n\n call(...args: unknown[]): void {\n const fns = this.#fns;\n\n fns.forEach(item => {\n const fn = item[1];\n if (typeof fn === 'function') {\n fn(...args);\n }\n });\n }\n}\n\nfunction createSyncHook<T = unknown>(): SyncHook<T> {\n return new SyncHook<T>();\n}\n\nexport { createSyncHook };\n\nexport type { SyncHook };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { EditorView } from '@codemirror/view';\n\nfunction disableEditContext() {\n (EditorView as any).EDIT_CONTEXT = false;\n}\n\nexport { disableEditContext };\n","import { type EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\nimport { Compartment, Facet, type Extension } from '@codemirror/state';\n\nimport {\n extension,\n type ExtensionPluginSpec,\n option,\n type OptionPluginSpec,\n} from './spec';\n\nfunction last<T>(values: readonly T[]): T {\n return values[values.length - 1];\n}\n\nfunction asyncOption<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Promise<Extension>,\n options?: { reset?: boolean },\n): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>] {\n const facet = Facet.define<Value, Value>({\n combine: last,\n });\n\n const compartment = new Compartment();\n\n const plugin = ViewPlugin.fromClass(\n class {\n constructor(view: EditorView) {\n this.apply(view);\n }\n\n update(update: ViewUpdate) {\n if (update.state.facet(facet) !== update.startState.facet(facet)) {\n this.apply(update.view);\n }\n }\n\n apply(view: EditorView) {\n const value = view.state.facet(facet);\n if (options?.reset === true) {\n queueMicrotask(() => {\n view.dispatch({\n effects: compartment.reconfigure([]),\n });\n });\n }\n\n handler(value).then(ext => {\n if (view.state.facet(facet) === value) {\n queueMicrotask(() => {\n view.dispatch({\n effects: compartment.reconfigure(ext),\n });\n });\n }\n });\n }\n },\n );\n\n return [\n extension([plugin, compartment.of([])]),\n option(name, (value: Value) => facet.of(value)),\n ] as const;\n}\n\nexport { asyncOption };\n"],"mappings":"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","names":["EditorView","extension","api","Compartment","InjectPosition","extension","EditorView","api","EditorView","Compartment","Compartment"]}
package/dist/index.d.mts CHANGED
@@ -142,6 +142,8 @@ declare function create<T extends EditorPluginSpec<string, any, any>[]>({ plugin
142
142
  eventKeys: string[];
143
143
  };
144
144
 
145
- declare function asyncOption<Name extends string, Value>(name: Name, handler: (value: Value) => Promise<Extension>): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>];
145
+ declare function asyncOption<Name extends string, Value>(name: Name, handler: (value: Value) => Promise<Extension>, options?: {
146
+ reset?: boolean;
147
+ }): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>];
146
148
 
147
149
  export { type APIContext, type APIPluginSpec, type BuiltinEditorAPI, type Core, type DOMEventHandlerPluginSpec, EVENT_SILENT, type EditorOptions, type EditorPluginSpec, type EventPluginSpec, type ExtensionPluginSpec, type InferEditorAPIFromPlugins, type InferEvents, type InferValues, InjectPosition, type Injector, type OptionPluginSpec, api, asyncOption, create, createInjector, domEventHandler, event, extension, option };
package/dist/index.d.ts CHANGED
@@ -142,6 +142,8 @@ declare function create<T extends EditorPluginSpec<string, any, any>[]>({ plugin
142
142
  eventKeys: string[];
143
143
  };
144
144
 
145
- declare function asyncOption<Name extends string, Value>(name: Name, handler: (value: Value) => Promise<Extension>): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>];
145
+ declare function asyncOption<Name extends string, Value>(name: Name, handler: (value: Value) => Promise<Extension>, options?: {
146
+ reset?: boolean;
147
+ }): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>];
146
148
 
147
149
  export { type APIContext, type APIPluginSpec, type BuiltinEditorAPI, type Core, type DOMEventHandlerPluginSpec, EVENT_SILENT, type EditorOptions, type EditorPluginSpec, type EventPluginSpec, type ExtensionPluginSpec, type InferEditorAPIFromPlugins, type InferEvents, type InferValues, InjectPosition, type Injector, type OptionPluginSpec, api, asyncOption, create, createInjector, domEventHandler, event, extension, option };
package/dist/index.js CHANGED
@@ -458,7 +458,7 @@ var import_state4 = require("@codemirror/state");
458
458
  function last(values) {
459
459
  return values[values.length - 1];
460
460
  }
461
- function asyncOption(name, handler) {
461
+ function asyncOption(name, handler, options) {
462
462
  const facet = import_state4.Facet.define({
463
463
  combine: last
464
464
  });
@@ -475,10 +475,19 @@ function asyncOption(name, handler) {
475
475
  }
476
476
  apply(view) {
477
477
  const value = view.state.facet(facet);
478
+ if ((options == null ? void 0 : options.reset) === true) {
479
+ queueMicrotask(() => {
480
+ view.dispatch({
481
+ effects: compartment.reconfigure([])
482
+ });
483
+ });
484
+ }
478
485
  handler(value).then((ext) => {
479
486
  if (view.state.facet(facet) === value) {
480
- view.dispatch({
481
- effects: compartment.reconfigure(ext)
487
+ queueMicrotask(() => {
488
+ view.dispatch({
489
+ effects: compartment.reconfigure(ext)
490
+ });
482
491
  });
483
492
  }
484
493
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/editor.ts","../src/plugins.ts","../src/spec.ts","../src/options.ts","../src/injector.ts","../src/hook.ts","../src/disable-edit-context.ts","../src/async-option.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nexport { create } from './editor';\nexport { createInjector, InjectPosition } from './injector';\nexport {\n option,\n api,\n event,\n domEventHandler,\n extension,\n EVENT_SILENT,\n} from './spec';\n\nexport { asyncOption } from './async-option';\n\nexport type {\n EditorOptions,\n BuiltinEditorAPI,\n InferEditorAPIFromPlugins,\n InferValues,\n} from './editor';\n\nexport type { Injector } from './injector';\n\nexport type {\n APIContext,\n Core,\n EditorPluginSpec,\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n DOMEventHandlerPluginSpec,\n ExtensionPluginSpec,\n InferEvents,\n} from './spec';\n","/* eslint-disable default-case */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport mitt, { type EventType, type Emitter } from 'mitt';\nimport { EditorView } from '@codemirror/view';\nimport { EditorState, type Extension } from '@codemirror/state';\n\nimport {\n type EditorPluginSpec,\n type InferValues,\n type InferEvents,\n type InferAPI,\n} from './spec';\nimport {\n apiPlugin,\n domEventHandlerPlugin,\n eventPlugin,\n extensionPlugin,\n optionPlugin,\n} from './plugins';\nimport { Options } from './options';\nimport { InjectPosition, type Injector, createInjector } from './injector';\nimport { createSyncHook } from './hook';\nimport { disableEditContext } from './disable-edit-context';\n\ndisableEditContext();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface EditorOptions<T, U> {\n parent: HTMLElement;\n root?: Document | ShadowRoot;\n defaultValue?: string;\n options: T;\n extensions?: Extension[];\n}\n\ntype InferOnOff<Events> = <K extends keyof Events>(\n eventName: K,\n handler: (params: Events[K]) => void,\n) => void;\n\ntype InferEventMap<Events> = {\n [K in keyof Events]: (params: Events[K]) => void;\n};\n\ntype InferGet<Values> = <K extends keyof Values>(\n key: K,\n) => Values[K] | undefined;\n\ntype InferSet<Values> = (values: Values) => void;\n\ninterface InitOptionHookParams {\n key: string;\n options: Options;\n}\n\ninterface ExtendAPIHookParams<Values> {\n context: {\n view: EditorView;\n get: (key: keyof Values) => Values[keyof Values];\n set: (values: Values) => void;\n };\n}\n\ninterface AddExtensionHookParams {\n events: Emitter<any>;\n extensions: Extension[];\n}\n\ninterface BuiltinEditorAPI {\n $view: EditorView;\n $on: (name: string, handler: Function) => void;\n $off: (name: string, handler: Function) => void;\n $get: (key: string) => unknown;\n $set: (key: string, value: unknown) => void;\n $destroy: () => void;\n $inject: (extension: Extension, position?: InjectPosition) => () => void;\n}\n\ntype InferEditorAPIFromPlugins<\n T extends EditorPluginSpec<string, any, any>[],\n Events = InferEvents<T[number]>,\n AllValues = InferValues<T[number]>,\n Values = Partial<AllValues>,\n> = InferAPI<T[number]> & { $on: InferOnOff<Events> } & {\n $off: InferOnOff<Events>;\n} & { $get: InferGet<AllValues> } & { $set: InferSet<Values> } & Pick<\n BuiltinEditorAPI,\n '$view' | '$destroy' | '$inject'\n > & { __private_eventmap: InferEventMap<Events> };\n\nfunction create<T extends EditorPluginSpec<string, any, any>[]>({\n plugins,\n injector = createInjector(),\n}: {\n plugins: T;\n injector?: Injector;\n}) {\n type AllValues = InferValues<T[number]>;\n type Values = Partial<AllValues>;\n type Events = InferEvents<T[number]>;\n type API = InferEditorAPIFromPlugins<T>;\n\n const hooks = {\n extendAPI: createSyncHook<ExtendAPIHookParams<Values>>(),\n setupOption: createSyncHook<InitOptionHookParams>(),\n addExtension: createSyncHook<AddExtensionHookParams>(),\n };\n\n const ctx = { hooks };\n\n const optionKeys: string[] = [];\n const eventKeys: string[] = [];\n plugins.forEach(plugin => {\n switch (plugin.type) {\n case 'option':\n optionKeys.push(plugin.name);\n optionPlugin(plugin).apply(ctx);\n break;\n case 'api':\n apiPlugin(plugin).apply(ctx);\n break;\n case 'event':\n eventKeys.push(plugin.name);\n eventPlugin(plugin).apply(ctx);\n break;\n case 'domEventHandler':\n eventKeys.push(plugin.name);\n domEventHandlerPlugin(plugin).apply(ctx);\n break;\n case 'extension':\n extensionPlugin(plugin).apply(ctx);\n break;\n }\n });\n\n function getExtensions(\n values: EditorOptions<Values, Events>['options'],\n {\n options,\n events,\n }: {\n options: Options;\n events: Emitter<Record<string, unknown>>;\n },\n ): Extension[] {\n optionKeys.forEach(key => {\n hooks.setupOption.call({\n key,\n options,\n });\n });\n\n const extensions: Extension[] = [];\n hooks.addExtension.call({\n events,\n extensions,\n });\n\n return [\n injector.getCompartment(InjectPosition.Head),\n ...options.init(values),\n ...extensions,\n injector.getCompartment(InjectPosition.Tail),\n ];\n }\n\n function createOptions() {\n return new Options();\n }\n\n function createEvents() {\n return mitt();\n }\n\n function createAPI({\n view,\n options,\n events,\n }: {\n view: EditorView;\n options: Options;\n events: Emitter<Record<EventType, unknown>>;\n }): API {\n function setOptions(optValues: Values) {\n const effects = options.set(optValues);\n // values unchanged\n if (effects.length === 0) {\n return;\n }\n view.dispatch({ effects });\n }\n\n function getOption<K extends keyof AllValues>(key: K): AllValues[K] {\n return options.get(key);\n }\n\n const context = {\n view,\n set: setOptions,\n get: getOption,\n };\n\n const api: API = Object.create(null);\n\n hooks.extendAPI.call({\n context,\n api,\n });\n\n api.$view = view;\n api.$on = events.on.bind(events);\n api.$off = events.off.bind(events);\n api.$get = getOption;\n api.$set = setOptions;\n api.$inject = injector.inject.bind(injector);\n api.$destroy = () => {\n view.destroy();\n events.off('*');\n };\n\n return api;\n }\n\n function render(opts: EditorOptions<Values, Events>): API {\n const { parent, root, defaultValue } = opts;\n let { extensions: userExtensions } = opts;\n\n if (!Array.isArray(userExtensions)) {\n userExtensions = [];\n }\n\n const options = createOptions();\n const events = createEvents();\n\n const extensions = getExtensions(opts.options, {\n options,\n events,\n });\n\n const view = new EditorView({\n parent,\n root,\n state: EditorState.create({\n doc: defaultValue ?? '',\n extensions: [...extensions, ...userExtensions],\n }),\n });\n\n injector.provideView(view);\n\n const api = createAPI({\n view,\n options,\n events,\n });\n\n return api;\n }\n\n return {\n render,\n getExtensions,\n createAPI,\n createOptions,\n createEvents,\n eventKeys,\n };\n}\n\nexport { create };\n\nexport type {\n EditorOptions,\n BuiltinEditorAPI,\n InferValues,\n InferEditorAPIFromPlugins,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EditorView } from '@codemirror/view';\n\nimport { EVENT_SILENT } from './spec';\nimport type {\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n ExtensionPluginSpec,\n DOMEventHandlerPluginSpec,\n} from './spec';\nimport { OptionHandler } from './options';\n\nconst optionPlugin = (spec: OptionPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.setupOption.tap('option', (params: any) => {\n const { key, options } = params;\n if (key === spec.name) {\n options.add(spec.name, new OptionHandler(spec.handler));\n }\n });\n },\n});\n\nconst apiPlugin = (spec: APIPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.extendAPI.tap('api', (params: any) => {\n const { context, api } = params;\n const method = spec.handler(context);\n api[spec.name] = method;\n });\n },\n});\n\nconst eventPlugin = (spec: EventPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('event', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.updateListener.of(update => {\n const result = spec.handler(update);\n if (result !== EVENT_SILENT) {\n events.emit(spec.name, result);\n }\n }),\n );\n });\n },\n});\n\nconst domEventHandlerPlugin = (spec: DOMEventHandlerPluginSpec<string>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('domEventHandler', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.domEventHandlers({\n [spec.name]: e => {\n events.emit(spec.name, e);\n },\n }),\n );\n });\n },\n});\n\nconst extensionPlugin = (spec: ExtensionPluginSpec) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('extension', (params: any) => {\n const { extensions } = params;\n extensions.push(spec.extension);\n });\n },\n});\n\nexport {\n optionPlugin,\n apiPlugin,\n eventPlugin,\n domEventHandlerPlugin,\n extensionPlugin,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type EditorView, type ViewUpdate } from '@codemirror/view';\nimport { type Extension } from '@codemirror/state';\n\nconst EVENT_SILENT = Symbol('event/silent');\n\ninterface APIContext {\n view: EditorView;\n get: (key: string) => unknown;\n set: (values: Record<string, unknown>) => void;\n}\n\ninterface APIPluginSpec<\n Name extends string,\n Params extends any[],\n ReturnValue = unknown,\n> {\n type: 'api';\n name: Name;\n handler: (context: APIContext) => (...params: Params) => ReturnValue;\n}\n\ninterface OptionPluginSpec<Name extends string, Value = unknown> {\n type: 'option';\n name: Name;\n handler: (value: Value) => Extension | undefined;\n}\n\ninterface EventPluginSpec<Name extends string, Value = unknown> {\n type: 'event';\n name: Name;\n handler: (update: ViewUpdate) => Value | typeof EVENT_SILENT;\n}\n\ninterface DOMEventHandlerPluginSpec<T extends string> {\n type: 'domEventHandler';\n name: T;\n}\n\ninterface ExtensionPluginSpec {\n type: 'extension';\n extension: Extension;\n}\n\ntype EditorPluginSpec<T extends string, U extends any[], V> =\n | APIPluginSpec<T, U, V>\n | OptionPluginSpec<T, U>\n | EventPluginSpec<T, U>\n | DOMEventHandlerPluginSpec<T>\n | ExtensionPluginSpec;\n\nfunction option<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Extension,\n): OptionPluginSpec<Name, Value> {\n return {\n type: 'option',\n name,\n handler,\n };\n}\n\nfunction api<Name extends string, Params extends any[], ReturnValue>(\n name: Name,\n handler: (context: APIContext) => (...params: Params) => ReturnValue,\n): APIPluginSpec<Name, Params, ReturnValue> {\n return {\n type: 'api',\n name,\n handler,\n };\n}\n\nfunction event<Name extends string, Params>(\n name: Name,\n handler: (update: ViewUpdate) => Params | typeof EVENT_SILENT,\n): EventPluginSpec<Name, Params> {\n return {\n type: 'event',\n name,\n handler,\n };\n}\n\nfunction domEventHandler<Name extends keyof HTMLElementEventMap>(\n name: Name,\n): DOMEventHandlerPluginSpec<Name> {\n return {\n type: 'domEventHandler',\n name,\n };\n}\n\nfunction extension(ext: Extension): ExtensionPluginSpec {\n return {\n type: 'extension',\n extension: ext,\n };\n}\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype InferValues<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends OptionPluginSpec<infer Name, infer Value>\n ? { [K in Name]: Value }\n : never\n >;\n\ntype InferAPI<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends APIPluginSpec<infer Name, infer Params, infer ReturnValue>\n ? { [K in Name]: (...params: Params) => ReturnValue }\n : never\n >;\n\ntype InferEvents<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends EventPluginSpec<infer Name, infer Params>\n ? { [K in Name]: Params }\n : Plugin extends DOMEventHandlerPluginSpec<infer Name>\n ? Name extends keyof HTMLElementEventMap\n ? { [K in Name]: HTMLElementEventMap[Name] }\n : { [K in Name]: unknown }\n : never\n >;\n\ninterface Core {\n API: typeof api;\n Extesion: typeof extension;\n Event: typeof event;\n Option: typeof option;\n}\n\nexport { option, api, event, domEventHandler, extension, EVENT_SILENT };\n\nexport type {\n EditorPluginSpec,\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n DOMEventHandlerPluginSpec,\n ExtensionPluginSpec,\n APIContext,\n InferValues,\n InferAPI,\n InferEvents,\n Core,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n Compartment,\n type Extension,\n type StateEffect,\n} from '@codemirror/state';\n\ntype OptionFunction<T = unknown> = (value: T) => Extension | undefined;\n\nclass OptionHandler<Value = unknown> {\n private compartment: Compartment = new Compartment();\n public extension: Extension | undefined;\n public value: Value | undefined;\n\n constructor(public fn: OptionFunction) {}\n\n init(value: Value): Extension {\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.of(extension ?? []);\n }\n\n set(value: Value): StateEffect<unknown> | undefined {\n if (value === this.value) {\n return;\n }\n\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.reconfigure(extension ?? []);\n }\n}\n\nclass Options {\n cachedValues = Object.create(null);\n handlers: Record<string, OptionHandler[]> = Object.create(null);\n\n add(name: string, handler: OptionHandler) {\n this.handlers[name] = this.handlers[name] ?? [];\n this.handlers[name].push(handler);\n }\n\n init(values: Record<string, unknown>): Extension[] {\n const extensions: Extension[] = [];\n\n Object.keys(this.handlers).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const extension = h.init(value);\n if (extension) {\n extensions.push(extension);\n }\n });\n }\n });\n\n return extensions;\n }\n\n get<T = unknown>(key: string | number | symbol): T {\n return this.cachedValues[key];\n }\n\n set(values: Record<string, unknown>): StateEffect<unknown>[] {\n const effects: StateEffect<unknown>[] = [];\n\n Object.keys(values).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const effect = h.set(value);\n if (effect) {\n effects.push(effect);\n }\n });\n }\n });\n\n return effects;\n }\n}\n\nexport { Options, OptionHandler };\n\nexport type { OptionFunction };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { type EditorView } from '@codemirror/view';\nimport { Compartment, type Extension } from '@codemirror/state';\n\nenum InjectPosition {\n Head = 'head',\n Tail = 'tail',\n}\n\n// type Plugin = EditorPluginSpec<string, any, any>[]\n// type TransactionsHandler = (trs: readonly Transaction[], view: EditorView) => void;\ntype Eject = () => void;\ninterface Injector {\n view: EditorView | null;\n provideView: (view: EditorView) => void;\n inject: (extension: Extension, position?: InjectPosition) => Eject;\n getCompartment: (position: InjectPosition) => Extension;\n // exportField: (field: StateField<any>) => ({ as: (name: string) => void });\n // getExportFieldsConfig: () => Record<string, StateField<any>>;\n // setTransactionsHandler(handler: TransactionsHandler): void;\n // getTransactionsHandler(): TransactionsHandler | null;\n}\n\nfunction createInjector(): Injector {\n const headCompartment = new Compartment();\n const tailCompartment = new Compartment();\n\n const headExtensions: Extension[] = [];\n const tailExtensions: Extension[] = [];\n\n // let transactionsHandlers: TransactionsHandler[] = []\n\n return {\n view: null,\n provideView(view: EditorView) {\n this.view = view;\n },\n inject(extension, position = InjectPosition.Tail) {\n const compartment =\n position === InjectPosition.Head ? headCompartment : tailCompartment;\n const extensions =\n position === InjectPosition.Head ? headExtensions : tailExtensions;\n extensions.push(extension);\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n\n // eject\n return () => {\n const index = extensions.indexOf(extension);\n if (~index) {\n extensions.splice(index, 1);\n }\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n };\n },\n\n // @internal\n getCompartment(position: InjectPosition) {\n return position === InjectPosition.Head\n ? headCompartment.of(headExtensions)\n : tailCompartment.of(tailExtensions);\n },\n\n // setTransactionsHandler(handler) {\n // if (typeof handler === 'function') {\n // transactionsHandlers.push(handler)\n // }\n\n // return () => {\n // const index = transactionsHandlers.indexOf(handler)\n // if (~index) {\n // transactionsHandlers.splice(index, 1)\n // }\n // }\n // },\n\n // getTransactionsHandler() {\n // return transactionsHandlers[transactionsHandlers.length - 1]\n // },\n\n // for fields export\n // exportField(field) {\n // return {\n // as(name: string) {\n // toJSONConfig[name] = field;\n // }\n // }\n // },\n // getExportFieldsConfig() {\n // return toJSONConfig;\n // },\n };\n}\n\nexport { createInjector, InjectPosition };\n\nexport type { Injector };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nclass SyncHook<T = unknown> {\n #fns: [string, T][] = [];\n\n tap(id: string, hookFn: T): void {\n this.#fns.push([id, hookFn]);\n }\n\n call(...args: unknown[]): void {\n const fns = this.#fns;\n\n fns.forEach(item => {\n const fn = item[1];\n if (typeof fn === 'function') {\n fn(...args);\n }\n });\n }\n}\n\nfunction createSyncHook<T = unknown>(): SyncHook<T> {\n return new SyncHook<T>();\n}\n\nexport { createSyncHook };\n\nexport type { SyncHook };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { EditorView } from '@codemirror/view';\n\nfunction disableEditContext() {\n (EditorView as any).EDIT_CONTEXT = false;\n}\n\nexport { disableEditContext };\n","import { type EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\nimport { Compartment, Facet, type Extension } from '@codemirror/state';\n\nimport {\n extension,\n type ExtensionPluginSpec,\n option,\n type OptionPluginSpec,\n} from './spec';\n\nfunction last<T>(values: readonly T[]): T {\n return values[values.length - 1];\n}\n\nfunction asyncOption<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Promise<Extension>,\n): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>] {\n const facet = Facet.define<Value, Value>({\n combine: last,\n });\n\n const compartment = new Compartment();\n\n const plugin = ViewPlugin.fromClass(\n class {\n constructor(view: EditorView) {\n this.apply(view);\n }\n\n update(update: ViewUpdate) {\n if (update.state.facet(facet) !== update.startState.facet(facet)) {\n this.apply(update.view);\n }\n }\n\n apply(view: EditorView) {\n const value = view.state.facet(facet);\n handler(value).then(ext => {\n if (view.state.facet(facet) === value) {\n view.dispatch({\n effects: compartment.reconfigure(ext),\n });\n }\n });\n }\n },\n );\n\n return [\n extension([plugin, compartment.of([])]),\n option(name, (value: Value) => facet.of(value)),\n ] as const;\n}\n\nexport { asyncOption };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOA,kBAAmD;AACnD,IAAAA,eAA2B;AAC3B,IAAAC,gBAA4C;;;ACL5C,kBAA2B;;;ACG3B,IAAM,eAAe,OAAO,cAAc;AA+C1C,SAAS,OACP,MACA,SAC+B;AAC/B,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,IACP,MACA,SAC0C;AAC1C,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,MACP,MACA,SAC+B;AAC/B,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,gBACP,MACiC;AACjC,SAAO;AAAA,IACL,MAAM;AAAA,IACN;AAAA,EACF;AACF;AAEA,SAAS,UAAU,KAAqC;AACtD,SAAO;AAAA,IACL,MAAM;AAAA,IACN,WAAW;AAAA,EACb;AACF;;;AClGA,mBAIO;AAIP,IAAM,gBAAN,MAAqC;AAAA,EAKnC,YAAmB,IAAoB;AAApB;AAAA,EAAqB;AAAA,EAJhC,cAA2B,IAAI,yBAAY;AAAA,EAC5C;AAAA,EACA;AAAA,EAIP,KAAK,OAAyB;AAC5B,SAAK,QAAQ;AACb,UAAMC,aAAY,KAAK,GAAG,KAAK;AAC/B,WAAO,KAAK,YAAY,GAAGA,cAAa,CAAC,CAAC;AAAA,EAC5C;AAAA,EAEA,IAAI,OAAgD;AAClD,QAAI,UAAU,KAAK,OAAO;AACxB;AAAA,IACF;AAEA,SAAK,QAAQ;AACb,UAAMA,aAAY,KAAK,GAAG,KAAK;AAC/B,WAAO,KAAK,YAAY,YAAYA,cAAa,CAAC,CAAC;AAAA,EACrD;AACF;AAEA,IAAM,UAAN,MAAc;AAAA,EACZ,eAAe,uBAAO,OAAO,IAAI;AAAA,EACjC,WAA4C,uBAAO,OAAO,IAAI;AAAA,EAE9D,IAAI,MAAc,SAAwB;AACxC,SAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC;AAC9C,SAAK,SAAS,IAAI,EAAE,KAAK,OAAO;AAAA,EAClC;AAAA,EAEA,KAAK,QAA8C;AACjD,UAAM,aAA0B,CAAC;AAEjC,WAAO,KAAK,KAAK,QAAQ,EAAE,IAAI,SAAO;AACpC,YAAM,QAAQ,OAAO,GAAG;AAExB,WAAK,aAAa,GAAG,IAAI;AAEzB,YAAM,KAAK,KAAK,SAAS,GAAG;AAC5B,UAAI,IAAI;AACN,WAAG,QAAQ,OAAK;AACd,gBAAMA,aAAY,EAAE,KAAK,KAAK;AAC9B,cAAIA,YAAW;AACb,uBAAW,KAAKA,UAAS;AAAA,UAC3B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,IAAiB,KAAkC;AACjD,WAAO,KAAK,aAAa,GAAG;AAAA,EAC9B;AAAA,EAEA,IAAI,QAAyD;AAC3D,UAAM,UAAkC,CAAC;AAEzC,WAAO,KAAK,MAAM,EAAE,IAAI,SAAO;AAC7B,YAAM,QAAQ,OAAO,GAAG;AAExB,WAAK,aAAa,GAAG,IAAI;AAEzB,YAAM,KAAK,KAAK,SAAS,GAAG;AAC5B,UAAI,IAAI;AACN,WAAG,QAAQ,OAAK;AACd,gBAAM,SAAS,EAAE,IAAI,KAAK;AAC1B,cAAI,QAAQ;AACV,oBAAQ,KAAK,MAAM;AAAA,UACrB;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;AF3EA,IAAM,eAAe,CAAC,UAAyC;AAAA,EAC7D,MAAM,KAAU;AACd,QAAI,MAAM,YAAY,IAAI,UAAU,CAAC,WAAgB;AACnD,YAAM,EAAE,KAAK,QAAQ,IAAI;AACzB,UAAI,QAAQ,KAAK,MAAM;AACrB,gBAAQ,IAAI,KAAK,MAAM,IAAI,cAAc,KAAK,OAAO,CAAC;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,YAAY,CAAC,UAAsC;AAAA,EACvD,MAAM,KAAU;AACd,QAAI,MAAM,UAAU,IAAI,OAAO,CAAC,WAAgB;AAC9C,YAAM,EAAE,SAAS,KAAAC,KAAI,IAAI;AACzB,YAAM,SAAS,KAAK,QAAQ,OAAO;AACnC,MAAAA,KAAI,KAAK,IAAI,IAAI;AAAA,IACnB,CAAC;AAAA,EACH;AACF;AAEA,IAAM,cAAc,CAAC,UAAwC;AAAA,EAC3D,MAAM,KAAU;AACd,QAAI,MAAM,aAAa,IAAI,SAAS,CAAC,WAAgB;AACnD,YAAM,EAAE,QAAQ,WAAW,IAAI;AAC/B,iBAAW;AAAA,QACT,uBAAW,eAAe,GAAG,YAAU;AACrC,gBAAM,SAAS,KAAK,QAAQ,MAAM;AAClC,cAAI,WAAW,cAAc;AAC3B,mBAAO,KAAK,KAAK,MAAM,MAAM;AAAA,UAC/B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,wBAAwB,CAAC,UAA6C;AAAA,EAC1E,MAAM,KAAU;AACd,QAAI,MAAM,aAAa,IAAI,mBAAmB,CAAC,WAAgB;AAC7D,YAAM,EAAE,QAAQ,WAAW,IAAI;AAC/B,iBAAW;AAAA,QACT,uBAAW,iBAAiB;AAAA,UAC1B,CAAC,KAAK,IAAI,GAAG,OAAK;AAChB,mBAAO,KAAK,KAAK,MAAM,CAAC;AAAA,UAC1B;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,IAAM,kBAAkB,CAAC,UAA+B;AAAA,EACtD,MAAM,KAAU;AACd,QAAI,MAAM,aAAa,IAAI,aAAa,CAAC,WAAgB;AACvD,YAAM,EAAE,WAAW,IAAI;AACvB,iBAAW,KAAK,KAAK,SAAS;AAAA,IAChC,CAAC;AAAA,EACH;AACF;;;AGvEA,IAAAC,gBAA4C;AAE5C,IAAK,iBAAL,kBAAKC,oBAAL;AACE,EAAAA,gBAAA,UAAO;AACP,EAAAA,gBAAA,UAAO;AAFJ,SAAAA;AAAA,GAAA;AAmBL,SAAS,iBAA2B;AAClC,QAAM,kBAAkB,IAAI,0BAAY;AACxC,QAAM,kBAAkB,IAAI,0BAAY;AAExC,QAAM,iBAA8B,CAAC;AACrC,QAAM,iBAA8B,CAAC;AAIrC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,YAAY,MAAkB;AAC5B,WAAK,OAAO;AAAA,IACd;AAAA,IACA,OAAOC,YAAW,WAAW,mBAAqB;AAChD,YAAM,cACJ,aAAa,oBAAsB,kBAAkB;AACvD,YAAM,aACJ,aAAa,oBAAsB,iBAAiB;AACtD,iBAAW,KAAKA,UAAS;AAEzB,qBAAe,MAAM;AACnB,YAAI,KAAK,MAAM;AACb,eAAK,KAAK,SAAS;AAAA,YACjB,SAAS,YAAY,YAAY,UAAU;AAAA,UAC7C,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAGD,aAAO,MAAM;AACX,cAAM,QAAQ,WAAW,QAAQA,UAAS;AAC1C,YAAI,CAAC,OAAO;AACV,qBAAW,OAAO,OAAO,CAAC;AAAA,QAC5B;AAEA,uBAAe,MAAM;AACnB,cAAI,KAAK,MAAM;AACb,iBAAK,KAAK,SAAS;AAAA,cACjB,SAAS,YAAY,YAAY,UAAU;AAAA,YAC7C,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA;AAAA,IAGA,eAAe,UAA0B;AACvC,aAAO,aAAa,oBAChB,gBAAgB,GAAG,cAAc,IACjC,gBAAgB,GAAG,cAAc;AAAA,IACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BF;AACF;;;ACxGA,IAAM,WAAN,MAA4B;AAAA,EAC1B,OAAsB,CAAC;AAAA,EAEvB,IAAI,IAAY,QAAiB;AAC/B,SAAK,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC;AAAA,EAC7B;AAAA,EAEA,QAAQ,MAAuB;AAC7B,UAAM,MAAM,KAAK;AAEjB,QAAI,QAAQ,UAAQ;AAClB,YAAM,KAAK,KAAK,CAAC;AACjB,UAAI,OAAO,OAAO,YAAY;AAC5B,WAAG,GAAG,IAAI;AAAA,MACZ;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAEA,SAAS,iBAA2C;AAClD,SAAO,IAAI,SAAY;AACzB;;;ACrBA,IAAAC,eAA2B;AAE3B,SAAS,qBAAqB;AAC5B,EAAC,wBAAmB,eAAe;AACrC;;;ANsBA,mBAAmB;AAkEnB,SAAS,OAAuD;AAAA,EAC9D;AAAA,EACA,WAAW,eAAe;AAC5B,GAGG;AAMD,QAAM,QAAQ;AAAA,IACZ,WAAW,eAA4C;AAAA,IACvD,aAAa,eAAqC;AAAA,IAClD,cAAc,eAAuC;AAAA,EACvD;AAEA,QAAM,MAAM,EAAE,MAAM;AAEpB,QAAM,aAAuB,CAAC;AAC9B,QAAM,YAAsB,CAAC;AAC7B,UAAQ,QAAQ,YAAU;AACxB,YAAQ,OAAO,MAAM;AAAA,MACnB,KAAK;AACH,mBAAW,KAAK,OAAO,IAAI;AAC3B,qBAAa,MAAM,EAAE,MAAM,GAAG;AAC9B;AAAA,MACF,KAAK;AACH,kBAAU,MAAM,EAAE,MAAM,GAAG;AAC3B;AAAA,MACF,KAAK;AACH,kBAAU,KAAK,OAAO,IAAI;AAC1B,oBAAY,MAAM,EAAE,MAAM,GAAG;AAC7B;AAAA,MACF,KAAK;AACH,kBAAU,KAAK,OAAO,IAAI;AAC1B,8BAAsB,MAAM,EAAE,MAAM,GAAG;AACvC;AAAA,MACF,KAAK;AACH,wBAAgB,MAAM,EAAE,MAAM,GAAG;AACjC;AAAA,IACJ;AAAA,EACF,CAAC;AAED,WAAS,cACP,QACA;AAAA,IACE;AAAA,IACA;AAAA,EACF,GAIa;AACb,eAAW,QAAQ,SAAO;AACxB,YAAM,YAAY,KAAK;AAAA,QACrB;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAED,UAAM,aAA0B,CAAC;AACjC,UAAM,aAAa,KAAK;AAAA,MACtB;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO;AAAA,MACL,SAAS,gCAAkC;AAAA,MAC3C,GAAG,QAAQ,KAAK,MAAM;AAAA,MACtB,GAAG;AAAA,MACH,SAAS,gCAAkC;AAAA,IAC7C;AAAA,EACF;AAEA,WAAS,gBAAgB;AACvB,WAAO,IAAI,QAAQ;AAAA,EACrB;AAEA,WAAS,eAAe;AACtB,eAAO,YAAAC,SAAK;AAAA,EACd;AAEA,WAAS,UAAU;AAAA,IACjB;AAAA,IACA;AAAA,IACA;AAAA,EACF,GAIQ;AACN,aAAS,WAAW,WAAmB;AACrC,YAAM,UAAU,QAAQ,IAAI,SAAS;AAErC,UAAI,QAAQ,WAAW,GAAG;AACxB;AAAA,MACF;AACA,WAAK,SAAS,EAAE,QAAQ,CAAC;AAAA,IAC3B;AAEA,aAAS,UAAqC,KAAsB;AAClE,aAAO,QAAQ,IAAI,GAAG;AAAA,IACxB;AAEA,UAAM,UAAU;AAAA,MACd;AAAA,MACA,KAAK;AAAA,MACL,KAAK;AAAA,IACP;AAEA,UAAMC,OAAW,uBAAO,OAAO,IAAI;AAEnC,UAAM,UAAU,KAAK;AAAA,MACnB;AAAA,MACA,KAAAA;AAAA,IACF,CAAC;AAED,IAAAA,KAAI,QAAQ;AACZ,IAAAA,KAAI,MAAM,OAAO,GAAG,KAAK,MAAM;AAC/B,IAAAA,KAAI,OAAO,OAAO,IAAI,KAAK,MAAM;AACjC,IAAAA,KAAI,OAAO;AACX,IAAAA,KAAI,OAAO;AACX,IAAAA,KAAI,UAAU,SAAS,OAAO,KAAK,QAAQ;AAC3C,IAAAA,KAAI,WAAW,MAAM;AACnB,WAAK,QAAQ;AACb,aAAO,IAAI,GAAG;AAAA,IAChB;AAEA,WAAOA;AAAA,EACT;AAEA,WAAS,OAAO,MAA0C;AACxD,UAAM,EAAE,QAAQ,MAAM,aAAa,IAAI;AACvC,QAAI,EAAE,YAAY,eAAe,IAAI;AAErC,QAAI,CAAC,MAAM,QAAQ,cAAc,GAAG;AAClC,uBAAiB,CAAC;AAAA,IACpB;AAEA,UAAM,UAAU,cAAc;AAC9B,UAAM,SAAS,aAAa;AAE5B,UAAM,aAAa,cAAc,KAAK,SAAS;AAAA,MAC7C;AAAA,MACA;AAAA,IACF,CAAC;AAED,UAAM,OAAO,IAAI,wBAAW;AAAA,MAC1B;AAAA,MACA;AAAA,MACA,OAAO,0BAAY,OAAO;AAAA,QACxB,KAAK,gBAAgB;AAAA,QACrB,YAAY,CAAC,GAAG,YAAY,GAAG,cAAc;AAAA,MAC/C,CAAC;AAAA,IACH,CAAC;AAED,aAAS,YAAY,IAAI;AAEzB,UAAMA,OAAM,UAAU;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAOA;AAAA,EACT;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AOhRA,IAAAC,eAA6D;AAC7D,IAAAC,gBAAmD;AASnD,SAAS,KAAQ,QAAyB;AACxC,SAAO,OAAO,OAAO,SAAS,CAAC;AACjC;AAEA,SAAS,YACP,MACA,SACsD;AACtD,QAAM,QAAQ,oBAAM,OAAqB;AAAA,IACvC,SAAS;AAAA,EACX,CAAC;AAED,QAAM,cAAc,IAAI,0BAAY;AAEpC,QAAM,SAAS,wBAAW;AAAA,IACxB,MAAM;AAAA,MACJ,YAAY,MAAkB;AAC5B,aAAK,MAAM,IAAI;AAAA,MACjB;AAAA,MAEA,OAAO,QAAoB;AACzB,YAAI,OAAO,MAAM,MAAM,KAAK,MAAM,OAAO,WAAW,MAAM,KAAK,GAAG;AAChE,eAAK,MAAM,OAAO,IAAI;AAAA,QACxB;AAAA,MACF;AAAA,MAEA,MAAM,MAAkB;AACtB,cAAM,QAAQ,KAAK,MAAM,MAAM,KAAK;AACpC,gBAAQ,KAAK,EAAE,KAAK,SAAO;AACzB,cAAI,KAAK,MAAM,MAAM,KAAK,MAAM,OAAO;AACrC,iBAAK,SAAS;AAAA,cACZ,SAAS,YAAY,YAAY,GAAG;AAAA,YACtC,CAAC;AAAA,UACH;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,UAAU,CAAC,QAAQ,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;AAAA,IACtC,OAAO,MAAM,CAAC,UAAiB,MAAM,GAAG,KAAK,CAAC;AAAA,EAChD;AACF;","names":["import_view","import_state","extension","api","import_state","InjectPosition","extension","import_view","mitt","api","import_view","import_state"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/editor.ts","../src/plugins.ts","../src/spec.ts","../src/options.ts","../src/injector.ts","../src/hook.ts","../src/disable-edit-context.ts","../src/async-option.ts"],"sourcesContent":["// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nexport { create } from './editor';\nexport { createInjector, InjectPosition } from './injector';\nexport {\n option,\n api,\n event,\n domEventHandler,\n extension,\n EVENT_SILENT,\n} from './spec';\n\nexport { asyncOption } from './async-option';\n\nexport type {\n EditorOptions,\n BuiltinEditorAPI,\n InferEditorAPIFromPlugins,\n InferValues,\n} from './editor';\n\nexport type { Injector } from './injector';\n\nexport type {\n APIContext,\n Core,\n EditorPluginSpec,\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n DOMEventHandlerPluginSpec,\n ExtensionPluginSpec,\n InferEvents,\n} from './spec';\n","/* eslint-disable default-case */\n/* eslint-disable max-lines-per-function */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\n// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport mitt, { type EventType, type Emitter } from 'mitt';\nimport { EditorView } from '@codemirror/view';\nimport { EditorState, type Extension } from '@codemirror/state';\n\nimport {\n type EditorPluginSpec,\n type InferValues,\n type InferEvents,\n type InferAPI,\n} from './spec';\nimport {\n apiPlugin,\n domEventHandlerPlugin,\n eventPlugin,\n extensionPlugin,\n optionPlugin,\n} from './plugins';\nimport { Options } from './options';\nimport { InjectPosition, type Injector, createInjector } from './injector';\nimport { createSyncHook } from './hook';\nimport { disableEditContext } from './disable-edit-context';\n\ndisableEditContext();\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\ninterface EditorOptions<T, U> {\n parent: HTMLElement;\n root?: Document | ShadowRoot;\n defaultValue?: string;\n options: T;\n extensions?: Extension[];\n}\n\ntype InferOnOff<Events> = <K extends keyof Events>(\n eventName: K,\n handler: (params: Events[K]) => void,\n) => void;\n\ntype InferEventMap<Events> = {\n [K in keyof Events]: (params: Events[K]) => void;\n};\n\ntype InferGet<Values> = <K extends keyof Values>(\n key: K,\n) => Values[K] | undefined;\n\ntype InferSet<Values> = (values: Values) => void;\n\ninterface InitOptionHookParams {\n key: string;\n options: Options;\n}\n\ninterface ExtendAPIHookParams<Values> {\n context: {\n view: EditorView;\n get: (key: keyof Values) => Values[keyof Values];\n set: (values: Values) => void;\n };\n}\n\ninterface AddExtensionHookParams {\n events: Emitter<any>;\n extensions: Extension[];\n}\n\ninterface BuiltinEditorAPI {\n $view: EditorView;\n $on: (name: string, handler: Function) => void;\n $off: (name: string, handler: Function) => void;\n $get: (key: string) => unknown;\n $set: (key: string, value: unknown) => void;\n $destroy: () => void;\n $inject: (extension: Extension, position?: InjectPosition) => () => void;\n}\n\ntype InferEditorAPIFromPlugins<\n T extends EditorPluginSpec<string, any, any>[],\n Events = InferEvents<T[number]>,\n AllValues = InferValues<T[number]>,\n Values = Partial<AllValues>,\n> = InferAPI<T[number]> & { $on: InferOnOff<Events> } & {\n $off: InferOnOff<Events>;\n} & { $get: InferGet<AllValues> } & { $set: InferSet<Values> } & Pick<\n BuiltinEditorAPI,\n '$view' | '$destroy' | '$inject'\n > & { __private_eventmap: InferEventMap<Events> };\n\nfunction create<T extends EditorPluginSpec<string, any, any>[]>({\n plugins,\n injector = createInjector(),\n}: {\n plugins: T;\n injector?: Injector;\n}) {\n type AllValues = InferValues<T[number]>;\n type Values = Partial<AllValues>;\n type Events = InferEvents<T[number]>;\n type API = InferEditorAPIFromPlugins<T>;\n\n const hooks = {\n extendAPI: createSyncHook<ExtendAPIHookParams<Values>>(),\n setupOption: createSyncHook<InitOptionHookParams>(),\n addExtension: createSyncHook<AddExtensionHookParams>(),\n };\n\n const ctx = { hooks };\n\n const optionKeys: string[] = [];\n const eventKeys: string[] = [];\n plugins.forEach(plugin => {\n switch (plugin.type) {\n case 'option':\n optionKeys.push(plugin.name);\n optionPlugin(plugin).apply(ctx);\n break;\n case 'api':\n apiPlugin(plugin).apply(ctx);\n break;\n case 'event':\n eventKeys.push(plugin.name);\n eventPlugin(plugin).apply(ctx);\n break;\n case 'domEventHandler':\n eventKeys.push(plugin.name);\n domEventHandlerPlugin(plugin).apply(ctx);\n break;\n case 'extension':\n extensionPlugin(plugin).apply(ctx);\n break;\n }\n });\n\n function getExtensions(\n values: EditorOptions<Values, Events>['options'],\n {\n options,\n events,\n }: {\n options: Options;\n events: Emitter<Record<string, unknown>>;\n },\n ): Extension[] {\n optionKeys.forEach(key => {\n hooks.setupOption.call({\n key,\n options,\n });\n });\n\n const extensions: Extension[] = [];\n hooks.addExtension.call({\n events,\n extensions,\n });\n\n return [\n injector.getCompartment(InjectPosition.Head),\n ...options.init(values),\n ...extensions,\n injector.getCompartment(InjectPosition.Tail),\n ];\n }\n\n function createOptions() {\n return new Options();\n }\n\n function createEvents() {\n return mitt();\n }\n\n function createAPI({\n view,\n options,\n events,\n }: {\n view: EditorView;\n options: Options;\n events: Emitter<Record<EventType, unknown>>;\n }): API {\n function setOptions(optValues: Values) {\n const effects = options.set(optValues);\n // values unchanged\n if (effects.length === 0) {\n return;\n }\n view.dispatch({ effects });\n }\n\n function getOption<K extends keyof AllValues>(key: K): AllValues[K] {\n return options.get(key);\n }\n\n const context = {\n view,\n set: setOptions,\n get: getOption,\n };\n\n const api: API = Object.create(null);\n\n hooks.extendAPI.call({\n context,\n api,\n });\n\n api.$view = view;\n api.$on = events.on.bind(events);\n api.$off = events.off.bind(events);\n api.$get = getOption;\n api.$set = setOptions;\n api.$inject = injector.inject.bind(injector);\n api.$destroy = () => {\n view.destroy();\n events.off('*');\n };\n\n return api;\n }\n\n function render(opts: EditorOptions<Values, Events>): API {\n const { parent, root, defaultValue } = opts;\n let { extensions: userExtensions } = opts;\n\n if (!Array.isArray(userExtensions)) {\n userExtensions = [];\n }\n\n const options = createOptions();\n const events = createEvents();\n\n const extensions = getExtensions(opts.options, {\n options,\n events,\n });\n\n const view = new EditorView({\n parent,\n root,\n state: EditorState.create({\n doc: defaultValue ?? '',\n extensions: [...extensions, ...userExtensions],\n }),\n });\n\n injector.provideView(view);\n\n const api = createAPI({\n view,\n options,\n events,\n });\n\n return api;\n }\n\n return {\n render,\n getExtensions,\n createAPI,\n createOptions,\n createEvents,\n eventKeys,\n };\n}\n\nexport { create };\n\nexport type {\n EditorOptions,\n BuiltinEditorAPI,\n InferValues,\n InferEditorAPIFromPlugins,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EditorView } from '@codemirror/view';\n\nimport { EVENT_SILENT } from './spec';\nimport type {\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n ExtensionPluginSpec,\n DOMEventHandlerPluginSpec,\n} from './spec';\nimport { OptionHandler } from './options';\n\nconst optionPlugin = (spec: OptionPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.setupOption.tap('option', (params: any) => {\n const { key, options } = params;\n if (key === spec.name) {\n options.add(spec.name, new OptionHandler(spec.handler));\n }\n });\n },\n});\n\nconst apiPlugin = (spec: APIPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.extendAPI.tap('api', (params: any) => {\n const { context, api } = params;\n const method = spec.handler(context);\n api[spec.name] = method;\n });\n },\n});\n\nconst eventPlugin = (spec: EventPluginSpec<string, any>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('event', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.updateListener.of(update => {\n const result = spec.handler(update);\n if (result !== EVENT_SILENT) {\n events.emit(spec.name, result);\n }\n }),\n );\n });\n },\n});\n\nconst domEventHandlerPlugin = (spec: DOMEventHandlerPluginSpec<string>) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('domEventHandler', (params: any) => {\n const { events, extensions } = params;\n extensions.push(\n EditorView.domEventHandlers({\n [spec.name]: e => {\n events.emit(spec.name, e);\n },\n }),\n );\n });\n },\n});\n\nconst extensionPlugin = (spec: ExtensionPluginSpec) => ({\n apply(ctx: any) {\n ctx.hooks.addExtension.tap('extension', (params: any) => {\n const { extensions } = params;\n extensions.push(spec.extension);\n });\n },\n});\n\nexport {\n optionPlugin,\n apiPlugin,\n eventPlugin,\n domEventHandlerPlugin,\n extensionPlugin,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { type EditorView, type ViewUpdate } from '@codemirror/view';\nimport { type Extension } from '@codemirror/state';\n\nconst EVENT_SILENT = Symbol('event/silent');\n\ninterface APIContext {\n view: EditorView;\n get: (key: string) => unknown;\n set: (values: Record<string, unknown>) => void;\n}\n\ninterface APIPluginSpec<\n Name extends string,\n Params extends any[],\n ReturnValue = unknown,\n> {\n type: 'api';\n name: Name;\n handler: (context: APIContext) => (...params: Params) => ReturnValue;\n}\n\ninterface OptionPluginSpec<Name extends string, Value = unknown> {\n type: 'option';\n name: Name;\n handler: (value: Value) => Extension | undefined;\n}\n\ninterface EventPluginSpec<Name extends string, Value = unknown> {\n type: 'event';\n name: Name;\n handler: (update: ViewUpdate) => Value | typeof EVENT_SILENT;\n}\n\ninterface DOMEventHandlerPluginSpec<T extends string> {\n type: 'domEventHandler';\n name: T;\n}\n\ninterface ExtensionPluginSpec {\n type: 'extension';\n extension: Extension;\n}\n\ntype EditorPluginSpec<T extends string, U extends any[], V> =\n | APIPluginSpec<T, U, V>\n | OptionPluginSpec<T, U>\n | EventPluginSpec<T, U>\n | DOMEventHandlerPluginSpec<T>\n | ExtensionPluginSpec;\n\nfunction option<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Extension,\n): OptionPluginSpec<Name, Value> {\n return {\n type: 'option',\n name,\n handler,\n };\n}\n\nfunction api<Name extends string, Params extends any[], ReturnValue>(\n name: Name,\n handler: (context: APIContext) => (...params: Params) => ReturnValue,\n): APIPluginSpec<Name, Params, ReturnValue> {\n return {\n type: 'api',\n name,\n handler,\n };\n}\n\nfunction event<Name extends string, Params>(\n name: Name,\n handler: (update: ViewUpdate) => Params | typeof EVENT_SILENT,\n): EventPluginSpec<Name, Params> {\n return {\n type: 'event',\n name,\n handler,\n };\n}\n\nfunction domEventHandler<Name extends keyof HTMLElementEventMap>(\n name: Name,\n): DOMEventHandlerPluginSpec<Name> {\n return {\n type: 'domEventHandler',\n name,\n };\n}\n\nfunction extension(ext: Extension): ExtensionPluginSpec {\n return {\n type: 'extension',\n extension: ext,\n };\n}\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends (\n k: infer I,\n) => void\n ? I\n : never;\n\ntype InferValues<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends OptionPluginSpec<infer Name, infer Value>\n ? { [K in Name]: Value }\n : never\n >;\n\ntype InferAPI<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends APIPluginSpec<infer Name, infer Params, infer ReturnValue>\n ? { [K in Name]: (...params: Params) => ReturnValue }\n : never\n >;\n\ntype InferEvents<Plugin extends EditorPluginSpec<string, any, any>> =\n UnionToIntersection<\n Plugin extends EventPluginSpec<infer Name, infer Params>\n ? { [K in Name]: Params }\n : Plugin extends DOMEventHandlerPluginSpec<infer Name>\n ? Name extends keyof HTMLElementEventMap\n ? { [K in Name]: HTMLElementEventMap[Name] }\n : { [K in Name]: unknown }\n : never\n >;\n\ninterface Core {\n API: typeof api;\n Extesion: typeof extension;\n Event: typeof event;\n Option: typeof option;\n}\n\nexport { option, api, event, domEventHandler, extension, EVENT_SILENT };\n\nexport type {\n EditorPluginSpec,\n OptionPluginSpec,\n APIPluginSpec,\n EventPluginSpec,\n DOMEventHandlerPluginSpec,\n ExtensionPluginSpec,\n APIContext,\n InferValues,\n InferAPI,\n InferEvents,\n Core,\n};\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport {\n Compartment,\n type Extension,\n type StateEffect,\n} from '@codemirror/state';\n\ntype OptionFunction<T = unknown> = (value: T) => Extension | undefined;\n\nclass OptionHandler<Value = unknown> {\n private compartment: Compartment = new Compartment();\n public extension: Extension | undefined;\n public value: Value | undefined;\n\n constructor(public fn: OptionFunction) {}\n\n init(value: Value): Extension {\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.of(extension ?? []);\n }\n\n set(value: Value): StateEffect<unknown> | undefined {\n if (value === this.value) {\n return;\n }\n\n this.value = value;\n const extension = this.fn(value);\n return this.compartment.reconfigure(extension ?? []);\n }\n}\n\nclass Options {\n cachedValues = Object.create(null);\n handlers: Record<string, OptionHandler[]> = Object.create(null);\n\n add(name: string, handler: OptionHandler) {\n this.handlers[name] = this.handlers[name] ?? [];\n this.handlers[name].push(handler);\n }\n\n init(values: Record<string, unknown>): Extension[] {\n const extensions: Extension[] = [];\n\n Object.keys(this.handlers).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const extension = h.init(value);\n if (extension) {\n extensions.push(extension);\n }\n });\n }\n });\n\n return extensions;\n }\n\n get<T = unknown>(key: string | number | symbol): T {\n return this.cachedValues[key];\n }\n\n set(values: Record<string, unknown>): StateEffect<unknown>[] {\n const effects: StateEffect<unknown>[] = [];\n\n Object.keys(values).map(key => {\n const value = values[key];\n\n this.cachedValues[key] = value;\n\n const hs = this.handlers[key];\n if (hs) {\n hs.forEach(h => {\n const effect = h.set(value);\n if (effect) {\n effects.push(effect);\n }\n });\n }\n });\n\n return effects;\n }\n}\n\nexport { Options, OptionHandler };\n\nexport type { OptionFunction };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { type EditorView } from '@codemirror/view';\nimport { Compartment, type Extension } from '@codemirror/state';\n\nenum InjectPosition {\n Head = 'head',\n Tail = 'tail',\n}\n\n// type Plugin = EditorPluginSpec<string, any, any>[]\n// type TransactionsHandler = (trs: readonly Transaction[], view: EditorView) => void;\ntype Eject = () => void;\ninterface Injector {\n view: EditorView | null;\n provideView: (view: EditorView) => void;\n inject: (extension: Extension, position?: InjectPosition) => Eject;\n getCompartment: (position: InjectPosition) => Extension;\n // exportField: (field: StateField<any>) => ({ as: (name: string) => void });\n // getExportFieldsConfig: () => Record<string, StateField<any>>;\n // setTransactionsHandler(handler: TransactionsHandler): void;\n // getTransactionsHandler(): TransactionsHandler | null;\n}\n\nfunction createInjector(): Injector {\n const headCompartment = new Compartment();\n const tailCompartment = new Compartment();\n\n const headExtensions: Extension[] = [];\n const tailExtensions: Extension[] = [];\n\n // let transactionsHandlers: TransactionsHandler[] = []\n\n return {\n view: null,\n provideView(view: EditorView) {\n this.view = view;\n },\n inject(extension, position = InjectPosition.Tail) {\n const compartment =\n position === InjectPosition.Head ? headCompartment : tailCompartment;\n const extensions =\n position === InjectPosition.Head ? headExtensions : tailExtensions;\n extensions.push(extension);\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n\n // eject\n return () => {\n const index = extensions.indexOf(extension);\n if (~index) {\n extensions.splice(index, 1);\n }\n\n queueMicrotask(() => {\n if (this.view) {\n this.view.dispatch({\n effects: compartment.reconfigure(extensions),\n });\n }\n });\n };\n },\n\n // @internal\n getCompartment(position: InjectPosition) {\n return position === InjectPosition.Head\n ? headCompartment.of(headExtensions)\n : tailCompartment.of(tailExtensions);\n },\n\n // setTransactionsHandler(handler) {\n // if (typeof handler === 'function') {\n // transactionsHandlers.push(handler)\n // }\n\n // return () => {\n // const index = transactionsHandlers.indexOf(handler)\n // if (~index) {\n // transactionsHandlers.splice(index, 1)\n // }\n // }\n // },\n\n // getTransactionsHandler() {\n // return transactionsHandlers[transactionsHandlers.length - 1]\n // },\n\n // for fields export\n // exportField(field) {\n // return {\n // as(name: string) {\n // toJSONConfig[name] = field;\n // }\n // }\n // },\n // getExportFieldsConfig() {\n // return toJSONConfig;\n // },\n };\n}\n\nexport { createInjector, InjectPosition };\n\nexport type { Injector };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nclass SyncHook<T = unknown> {\n #fns: [string, T][] = [];\n\n tap(id: string, hookFn: T): void {\n this.#fns.push([id, hookFn]);\n }\n\n call(...args: unknown[]): void {\n const fns = this.#fns;\n\n fns.forEach(item => {\n const fn = item[1];\n if (typeof fn === 'function') {\n fn(...args);\n }\n });\n }\n}\n\nfunction createSyncHook<T = unknown>(): SyncHook<T> {\n return new SyncHook<T>();\n}\n\nexport { createSyncHook };\n\nexport type { SyncHook };\n","// Copyright (c) 2025 coze-dev\n// SPDX-License-Identifier: MIT\n\nimport { EditorView } from '@codemirror/view';\n\nfunction disableEditContext() {\n (EditorView as any).EDIT_CONTEXT = false;\n}\n\nexport { disableEditContext };\n","import { type EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';\nimport { Compartment, Facet, type Extension } from '@codemirror/state';\n\nimport {\n extension,\n type ExtensionPluginSpec,\n option,\n type OptionPluginSpec,\n} from './spec';\n\nfunction last<T>(values: readonly T[]): T {\n return values[values.length - 1];\n}\n\nfunction asyncOption<Name extends string, Value>(\n name: Name,\n handler: (value: Value) => Promise<Extension>,\n options?: { reset?: boolean },\n): [ExtensionPluginSpec, OptionPluginSpec<Name, Value>] {\n const facet = Facet.define<Value, Value>({\n combine: last,\n });\n\n const compartment = new Compartment();\n\n const plugin = ViewPlugin.fromClass(\n class {\n constructor(view: EditorView) {\n this.apply(view);\n }\n\n update(update: ViewUpdate) {\n if (update.state.facet(facet) !== update.startState.facet(facet)) {\n this.apply(update.view);\n }\n }\n\n apply(view: EditorView) {\n const value = view.state.facet(facet);\n if (options?.reset === true) {\n queueMicrotask(() => {\n view.dispatch({\n effects: compartment.reconfigure([]),\n });\n });\n }\n\n handler(value).then(ext => {\n if (view.state.facet(facet) === value) {\n queueMicrotask(() => {\n view.dispatch({\n effects: compartment.reconfigure(ext),\n });\n });\n }\n });\n }\n },\n );\n\n return [\n extension([plugin, compartment.of([])]),\n option(name, (value: Value) => facet.of(value)),\n ] as const;\n}\n\nexport { asyncOption };\n"],"mappings":"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","names":["import_view","import_state","extension","api","import_state","InjectPosition","extension","import_view","mitt","api","import_view","import_state"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coze-editor/core",
3
- "version": "0.1.0-alpha.f1005d",
3
+ "version": "0.1.1-alpha.571687",
4
4
  "description": "core",
5
5
  "license": "MIT",
6
6
  "author": "fengzilong",