import { createIdentifier } from '@blocksuite/global/di'; import type { DeepPartial } from '@blocksuite/global/utils'; import type { ExtensionType } from '@blocksuite/store'; import type { Signal } from '@preact/signals-core'; import { z } from 'zod'; import { NodePropsSchema } from '../utils/index.js'; export const GeneralSettingSchema = z .object({ edgelessScrollZoom: z.boolean().default(false), edgelessDisableScheduleUpdate: z.boolean().default(false), docCanvasPreferView: z .enum(['affine:embed-linked-doc', 'affine:embed-synced-doc']) .default('affine:embed-synced-doc'), }) .merge(NodePropsSchema); export type EditorSetting = z.infer; export interface EditorSettingService { setting$: Signal>; set?: ( key: keyof EditorSetting, value: EditorSetting[keyof EditorSetting] ) => void; } export const EditorSettingProvider = createIdentifier( 'AffineEditorSettingProvider' ); export function EditorSettingExtension( service: EditorSettingService ): ExtensionType { return { setup: di => { di.override(EditorSettingProvider, () => service); }, }; }