@portabletext/toolbar 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/use-toolbar-schema.ts","../src/disable-listener.ts","../src/use-annotation-button.ts","../src/use-annotation-popover.ts","../src/use-block-object-button.ts","../src/use-block-object-popover.ts","../src/use-decorator-keyboard-shortcut.ts","../src/use-mutually-exclusive-decorator.ts","../src/use-decorator-button.ts","../src/use-history-buttons.ts","../src/use-inline-object-button.ts","../src/use-inline-object-popover.ts","../src/use-list-button.ts","../src/use-style-keyboard-shortcuts.ts","../src/use-style-selector.ts"],"sourcesContent":["import {\n useEditor,\n useEditorSelector,\n type AnnotationSchemaType,\n type BlockObjectSchemaType,\n type DecoratorDefinition,\n type DecoratorSchemaType,\n type InlineObjectSchemaType,\n type ListSchemaType,\n type StyleSchemaType,\n} from '@portabletext/editor'\nimport type {KeyboardShortcut} from '@portabletext/keyboard-shortcuts'\n\n/**\n * @beta\n */\nexport type ExtendDecoratorSchemaType = (\n decorator: DecoratorSchemaType,\n) => ToolbarDecoratorSchemaType\n\n/**\n * @beta\n */\nexport type ExtendAnnotationSchemaType = (\n annotation: AnnotationSchemaType,\n) => ToolbarAnnotationSchemaType\n\n/**\n * @beta\n */\nexport type ExtendListSchemaType = (\n list: ListSchemaType,\n) => ToolbarListSchemaType\n\n/**\n * @beta\n */\nexport type ExtendBlockObjectSchemaType = (\n blockObject: BlockObjectSchemaType,\n) => ToolbarBlockObjectSchemaType\n\n/**\n * @beta\n */\nexport type ExtendInlineObjectSchemaType = (\n inlineObject: InlineObjectSchemaType,\n) => ToolbarInlineObjectSchemaType\n\n/**\n * @beta\n */\nexport type ExtendStyleSchemaType = (\n style: StyleSchemaType,\n) => ToolbarStyleSchemaType\n\n/**\n * @beta\n * Extend the editor's schema with default values, icons, shortcuts and more.\n * This makes it easier to use the schema to render toolbars, forms and other\n * UI components.\n */\nexport function useToolbarSchema(props: {\n extendDecorator?: (\n decorator: DecoratorSchemaType,\n ) => ToolbarDecoratorSchemaType\n extendAnnotation?: (\n annotation: AnnotationSchemaType,\n ) => ToolbarAnnotationSchemaType\n extendList?: (list: ListSchemaType) => ToolbarListSchemaType\n extendBlockObject?: (\n blockObject: BlockObjectSchemaType,\n ) => ToolbarBlockObjectSchemaType\n extendInlineObject?: (\n inlineObject: InlineObjectSchemaType,\n ) => ToolbarInlineObjectSchemaType\n extendStyle?: (style: StyleSchemaType) => ToolbarStyleSchemaType\n}): ToolbarSchema {\n const editor = useEditor()\n const schema = useEditorSelector(\n editor,\n (snapshot) => snapshot.context.schema,\n )\n\n return {\n decorators: schema.decorators.map(\n (decorator) => props.extendDecorator?.(decorator) ?? decorator,\n ),\n annotations: schema.annotations.map(\n (annotation) => props.extendAnnotation?.(annotation) ?? annotation,\n ),\n lists: schema.lists.map((list) => props.extendList?.(list) ?? list),\n blockObjects: schema.blockObjects.map(\n (blockObject) => props.extendBlockObject?.(blockObject) ?? blockObject,\n ),\n inlineObjects: schema.inlineObjects.map(\n (inlineObject) =>\n props.extendInlineObject?.(inlineObject) ?? inlineObject,\n ),\n styles: schema.styles.map((style) => props.extendStyle?.(style) ?? style),\n }\n}\n\n/**\n * @beta\n */\nexport type ToolbarSchema = {\n decorators?: ReadonlyArray<ToolbarDecoratorSchemaType>\n annotations?: ReadonlyArray<ToolbarAnnotationSchemaType>\n lists?: ReadonlyArray<ToolbarListSchemaType>\n blockObjects?: ReadonlyArray<ToolbarBlockObjectSchemaType>\n inlineObjects?: ReadonlyArray<ToolbarInlineObjectSchemaType>\n styles?: ReadonlyArray<ToolbarStyleSchemaType>\n}\n\n/**\n * @beta\n */\nexport type ToolbarDecoratorSchemaType = DecoratorSchemaType & {\n icon?: React.ComponentType\n shortcut?: KeyboardShortcut\n mutuallyExclusive?: ReadonlyArray<DecoratorDefinition['name']>\n}\n\n/**\n * @beta\n */\nexport type ToolbarAnnotationSchemaType = AnnotationSchemaType & {\n icon?: React.ComponentType\n defaultValues?: Record<string, unknown>\n shortcut?: KeyboardShortcut\n}\n\n/**\n * @beta\n */\nexport type ToolbarListSchemaType = ListSchemaType & {\n icon?: React.ComponentType\n}\n\n/**\n * @beta\n */\nexport type ToolbarBlockObjectSchemaType = BlockObjectSchemaType & {\n icon?: React.ComponentType\n defaultValues?: Record<string, unknown>\n shortcut?: KeyboardShortcut\n}\n\n/**\n * @beta\n */\nexport type ToolbarInlineObjectSchemaType = InlineObjectSchemaType & {\n icon?: React.ComponentType\n defaultValues?: Record<string, unknown>\n shortcut?: KeyboardShortcut\n}\n\n/**\n * @beta\n */\nexport type ToolbarStyleSchemaType = StyleSchemaType & {\n icon?: React.ComponentType\n shortcut?: KeyboardShortcut\n}\n","import type {Editor} from '@portabletext/editor'\nimport {fromCallback, type AnyEventObject} from 'xstate'\n\nexport type DisableListenerEvent = {type: 'enable'} | {type: 'disable'}\n\nexport const disableListener = fromCallback<\n AnyEventObject,\n {editor: Editor},\n DisableListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n if (input.editor.getSnapshot().context.readOnly) {\n sendBack({type: 'disable'})\n } else {\n sendBack({type: 'enable'})\n }\n }).unsubscribe\n})\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, effect, raise} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarAnnotationSchemaType} from './use-toolbar-schema'\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarAnnotationSchemaType},\n {type: 'set active'} | {type: 'set inactive'}\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (selectors.isActiveAnnotation(input.schemaType.name)(snapshot)) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n }).unsubscribe\n})\n\nconst keyboardShortcutRemove = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarAnnotationSchemaType}\n>(({input}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n raise({\n type: 'annotation.remove',\n annotation: {\n name: input.schemaType.name,\n },\n }),\n effect(() => {\n input.editor.send({type: 'focus'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst keyboardShortcutShowInsertDialog = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarAnnotationSchemaType},\n {type: 'open dialog'}\n>(({input, sendBack}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n effect(() => {\n sendBack({type: 'open dialog'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst annotationButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarAnnotationSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarAnnotationSchemaType\n },\n events: {} as\n | AnnotationButtonEvent\n | DisableListenerEvent\n | {type: 'set active'}\n | {type: 'set inactive'},\n },\n actions: {\n 'add annotation': ({context, event}) => {\n if (event.type !== 'add') {\n return\n }\n\n context.editor.send({\n type: 'annotation.add',\n annotation: {\n name: context.schemaType.name,\n value: event.annotation.value,\n },\n })\n context.editor.send({type: 'focus'})\n },\n 'remove annotation': ({context}) => {\n context.editor.send({\n type: 'annotation.remove',\n annotation: {\n name: context.schemaType.name,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'active listener': activeListener,\n 'disable listener': disableListener,\n 'keyboard shortcut.remove': keyboardShortcutRemove,\n 'keyboard shortcut.show insert dialog': keyboardShortcutShowInsertDialog,\n },\n}).createMachine({\n id: 'annotation button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n {\n src: 'disable listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'enable': {\n target: '#annotation button.enabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'enable': {\n target: '#annotation button.enabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n enabled: {\n initial: 'inactive',\n states: {\n inactive: {\n initial: 'idle',\n on: {\n 'disable': {\n target: '#annotation button.disabled.inactive',\n },\n 'set active': {\n target: '#annotation button.enabled.active',\n },\n 'add': {\n actions: 'add annotation',\n },\n },\n states: {\n 'idle': {\n invoke: {\n src: 'keyboard shortcut.show insert dialog',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n on: {\n 'open dialog': {\n target: 'showing dialog',\n },\n },\n },\n 'showing dialog': {\n on: {\n 'close dialog': {\n target: 'idle',\n },\n },\n },\n },\n },\n active: {\n invoke: {\n src: 'keyboard shortcut.remove',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n on: {\n 'set inactive': {\n target: '#annotation button.enabled.inactive',\n },\n 'disable': {\n target: '#annotation button.disabled.active',\n },\n 'remove': {\n actions: 'remove annotation',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type AnnotationButtonEvent =\n | {type: 'close dialog'}\n | {type: 'open dialog'}\n | {\n type: 'add'\n annotation: {\n value: Record<string, unknown>\n }\n }\n | {type: 'remove'}\n\n/**\n * @beta\n */\nexport type AnnotationButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {disabled: 'inactive'}\n | {disabled: 'active'}\n | {enabled: 'inactive'}\n | {enabled: {inactive: 'idle'}}\n | {enabled: {inactive: 'showing dialog'}}\n | {enabled: 'active'},\n ) => boolean\n }\n send: (event: AnnotationButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcut and available events for an annotation\n * button.\n *\n * Note: This hook assumes that the button triggers a dialog for inputting\n * the annotation value.\n */\nexport function useAnnotationButton(props: {\n schemaType: ToolbarAnnotationSchemaType\n}): AnnotationButton {\n const editor = useEditor()\n const [snapshot, send] = useActor(annotationButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => snapshot.matches(state),\n },\n send,\n }\n}\n","import {\n useEditor,\n type AnnotationPath,\n type AnnotationSchemaType,\n type Editor,\n type PortableTextObject,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport * as React from 'react'\nimport type {RefObject} from 'react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarAnnotationSchemaType} from './use-toolbar-schema'\n\ntype ActiveContext = {\n annotations: Array<{\n value: PortableTextObject\n schemaType: ToolbarAnnotationSchemaType\n at: AnnotationPath\n }>\n elementRef: RefObject<Element | null>\n}\n\ntype ActiveListenerEvent =\n | ({\n type: 'set active'\n } & ActiveContext)\n | {\n type: 'set inactive'\n }\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>},\n ActiveListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n const activeAnnotations = selectors.getActiveAnnotations(snapshot)\n const focusBlock = selectors.getFocusBlock(snapshot)\n\n if (activeAnnotations.length === 0 || !focusBlock) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const selectedChildren = input.editor.dom.getChildNodes(snapshot)\n const firstSelectedChild = selectedChildren.at(0)\n\n if (!firstSelectedChild || !(firstSelectedChild instanceof Element)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const elementRef = React.createRef<Element>()\n elementRef.current = firstSelectedChild\n\n sendBack({\n type: 'set active',\n annotations: activeAnnotations.flatMap((annotation) => {\n const schemaType = input.schemaTypes.find(\n (schemaType) => schemaType.name === annotation._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n return {\n value: annotation,\n schemaType,\n at: [\n {_key: focusBlock.node._key},\n 'markDefs',\n {_key: annotation._key},\n ],\n }\n }),\n elementRef,\n })\n }).unsubscribe\n})\n\nconst annotationPopoverMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>\n } & ActiveContext,\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>\n },\n events: {} as\n | DisableListenerEvent\n | ActiveListenerEvent\n | AnnotationPopoverEvent,\n },\n actions: {\n reset: assign({\n annotations: [],\n elementRef: React.createRef<Element>(),\n }),\n remove: ({context, event}) => {\n if (event.type !== 'remove') {\n return\n }\n\n context.editor.send({\n type: 'annotation.remove',\n annotation: {\n name: event.schemaType.name,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'annotation popover',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n annotations: [],\n elementRef: React.createRef<Element>(),\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n actions: assign({\n annotations: ({event}) => event.annotations,\n elementRef: ({event}) => event.elementRef,\n }),\n target: 'active',\n },\n 'enable': {\n target: '#annotation popover.enabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'enable': {\n target: '#annotation popover.enabled.active',\n },\n },\n },\n },\n },\n enabled: {\n invoke: [\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n ],\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n target: 'active',\n actions: assign({\n annotations: ({event}) => event.annotations,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'disable': {\n target: '#annotation popover.disabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'disable': {\n target: '#annotation popover.disabled.active',\n },\n 'set active': {\n actions: assign({\n annotations: ({event}) => event.annotations,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'edit': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'annotation.set',\n at: event.at,\n props: event.props,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'remove': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'annotation.remove',\n annotation: {\n name: event.schemaType.name,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'close': {\n actions: ({context}) => {\n context.editor.send({type: 'focus'})\n },\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type AnnotationPopoverEvent =\n | {\n type: 'remove'\n schemaType: AnnotationSchemaType\n }\n | {\n type: 'edit'\n at: AnnotationPath\n props: {[key: string]: unknown}\n }\n | {\n type: 'close'\n }\n\n/**\n * @beta\n */\nexport type AnnotationPopover = {\n snapshot: {\n context: ActiveContext\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {\n enabled: 'inactive' | 'active'\n },\n ) => boolean\n }\n send: (event: AnnotationPopoverEvent) => void\n}\n\n/**\n * @beta\n * Manages the state and available events for an annotation popover.\n */\nexport function useAnnotationPopover(props: {\n schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>\n}): AnnotationPopover {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(annotationPopoverMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n\n return {\n snapshot: {\n context: {\n annotations: actorSnapshot.context.annotations,\n elementRef: actorSnapshot.context.elementRef,\n },\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {\n defineBehavior,\n effect,\n type InsertPlacement,\n} from '@portabletext/editor/behaviors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarBlockObjectSchemaType} from './use-toolbar-schema'\n\nconst keyboardShortcutListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarBlockObjectSchemaType},\n BlockObjectButtonEvent\n>(({input, sendBack}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n effect(() => {\n sendBack({type: 'open dialog'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst blockObjectButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarBlockObjectSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarBlockObjectSchemaType\n },\n events: {} as DisableListenerEvent | BlockObjectButtonEvent,\n },\n actions: {\n insert: ({context, event}) => {\n if (event.type !== 'insert') {\n return\n }\n\n context.editor.send({\n type: 'insert.block object',\n blockObject: {\n name: context.schemaType.name,\n value: event.value,\n },\n placement: event.placement ?? 'auto',\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'keyboard shortcut listener': keyboardShortcutListener,\n },\n}).createMachine({\n id: 'block object button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n disable: {\n target: 'disabled',\n },\n },\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'keyboard shortcut listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n on: {\n 'open dialog': {\n target: 'showing dialog',\n },\n },\n },\n 'showing dialog': {\n on: {\n 'close dialog': {\n target: 'idle',\n },\n 'insert': {\n actions: ['insert'],\n target: 'idle',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type BlockObjectButtonEvent =\n | {\n type: 'close dialog'\n }\n | {\n type: 'open dialog'\n }\n | {\n type: 'insert'\n value: {[key: string]: unknown}\n placement: InsertPlacement | undefined\n }\n\n/**\n * @beta\n */\nexport type BlockObjectButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {enabled: 'idle'}\n | {enabled: 'showing dialog'},\n ) => boolean\n }\n send: (event: BlockObjectButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcut and available events for a block\n * object button.\n *\n * Note: This hook assumes that the button triggers a dialog for inputting\n * the block object value.\n */\nexport function useBlockObjectButton(props: {\n schemaType: ToolbarBlockObjectSchemaType\n}): BlockObjectButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(blockObjectButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {\n useEditor,\n type BlockPath,\n type Editor,\n type PortableTextObject,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport * as React from 'react'\nimport type {RefObject} from 'react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarBlockObjectSchemaType} from './use-toolbar-schema'\n\ntype ActiveContext = {\n blockObjects: Array<{\n value: PortableTextObject\n schemaType: ToolbarBlockObjectSchemaType\n at: BlockPath\n }>\n elementRef: RefObject<Element | null>\n}\n\ntype ActiveListenerEvent =\n | ({\n type: 'set active'\n } & ActiveContext)\n | {\n type: 'set inactive'\n }\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>},\n ActiveListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('selection', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (!selectors.isSelectionCollapsed(snapshot)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n\n if (!focusBlockObject) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const schemaType = input.schemaTypes.find(\n (schemaType) => schemaType.name === focusBlockObject.node._type,\n )\n\n if (!schemaType) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const selectedNodes = input.editor.dom.getBlockNodes(snapshot)\n const firstSelectedNode = selectedNodes.at(0)\n\n if (!firstSelectedNode || !(firstSelectedNode instanceof Element)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const elementRef = React.createRef<Element>()\n elementRef.current = firstSelectedNode\n\n sendBack({\n type: 'set active',\n blockObjects: [\n {\n value: focusBlockObject.node,\n schemaType,\n at: focusBlockObject.path,\n },\n ],\n elementRef,\n })\n }).unsubscribe\n})\n\nconst blockObjectPopoverMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>\n } & ActiveContext,\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>\n },\n events: {} as\n | DisableListenerEvent\n | ActiveListenerEvent\n | BlockObjectPopoverEvent,\n },\n actions: {\n reset: assign({\n blockObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'block object popover',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n blockObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n actions: assign({\n blockObjects: ({event}) => event.blockObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n target: 'active',\n },\n 'enable': {\n target: '#block object popover.enabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'enable': {\n target: '#block object popover.enabled.active',\n },\n },\n },\n },\n },\n enabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n target: 'active',\n actions: assign({\n blockObjects: ({event}) => event.blockObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'disable': {\n target: '#block object popover.disabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'disable': {\n target: '#block object popover.disabled.active',\n },\n 'set active': {\n actions: assign({\n blockObjects: ({event}) => event.blockObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'edit': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'block.set',\n at: event.at,\n props: event.props,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'remove': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'delete.block',\n at: event.at,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'close': {\n actions: ({context}) => {\n context.editor.send({type: 'focus'})\n },\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type BlockObjectPopoverEvent =\n | {\n type: 'remove'\n at: BlockPath\n }\n | {\n type: 'edit'\n at: BlockPath\n props: {[key: string]: unknown}\n }\n | {\n type: 'close'\n }\n\n/**\n * @beta\n */\nexport type BlockObjectPopover = {\n snapshot: {\n context: ActiveContext\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {\n enabled: 'inactive' | 'active'\n },\n ) => boolean\n }\n send: (event: BlockObjectPopoverEvent) => void\n}\n\n/**\n * @beta\n * Manages the state and available events for a block object popover.\n */\nexport function useBlockObjectPopover(props: {\n schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>\n}): BlockObjectPopover {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(blockObjectPopoverMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n\n return {\n snapshot: {\n context: {\n blockObjects: actorSnapshot.context.blockObjects,\n elementRef: actorSnapshot.context.elementRef,\n },\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, raise} from '@portabletext/editor/behaviors'\nimport {useActorRef} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarDecoratorSchemaType} from './use-toolbar-schema'\n\nconst keyboardShortcutListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarDecoratorSchemaType}\n>(({input}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n raise({\n type: 'decorator.toggle',\n decorator: input.schemaType.name,\n }),\n ],\n ],\n }),\n })\n})\n\nconst decoratorKeyboardShortcutMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarDecoratorSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarDecoratorSchemaType\n },\n events: {} as DisableListenerEvent | {type: 'decorator.toggle'},\n },\n actors: {\n 'disable listener': disableListener,\n 'keyboard shortcut listener': keyboardShortcutListener,\n },\n}).createMachine({\n id: 'decorator keyboard shortcut',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n invoke: {\n src: 'keyboard shortcut listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n on: {\n disable: {\n target: 'disabled',\n },\n },\n },\n },\n})\n\nexport function useDecoratorKeyboardShortcut(props: {\n schemaType: ToolbarDecoratorSchemaType\n}) {\n const editor = useEditor()\n useActorRef(decoratorKeyboardShortcutMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n}\n","import {useEditor} from '@portabletext/editor'\nimport {defineBehavior, forward, raise} from '@portabletext/editor/behaviors'\nimport {useEffect} from 'react'\nimport type {ToolbarDecoratorSchemaType} from './use-toolbar-schema'\n\nexport function useMutuallyExclusiveDecorator(props: {\n schemaType: ToolbarDecoratorSchemaType\n}) {\n const editor = useEditor()\n\n useEffect(() => {\n const mutuallyExclusive = props.schemaType.mutuallyExclusive\n\n if (!mutuallyExclusive) {\n return\n }\n\n return editor.registerBehavior({\n behavior: defineBehavior({\n on: 'decorator.add',\n guard: ({event}) => event.decorator === props.schemaType.name,\n actions: [\n ({event}) => [\n forward(event),\n ...mutuallyExclusive.map((decorator) =>\n raise({\n type: 'decorator.remove',\n decorator,\n }),\n ),\n ],\n ],\n }),\n })\n }, [editor, props.schemaType.name, props.schemaType.mutuallyExclusive])\n}\n","import {\n useEditor,\n type DecoratorSchemaType,\n type Editor,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport {useDecoratorKeyboardShortcut} from './use-decorator-keyboard-shortcut'\nimport {useMutuallyExclusiveDecorator} from './use-mutually-exclusive-decorator'\nimport type {ToolbarDecoratorSchemaType} from './use-toolbar-schema'\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: DecoratorSchemaType},\n {type: 'set active'} | {type: 'set inactive'}\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (selectors.isActiveDecorator(input.schemaType.name)(snapshot)) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n }).unsubscribe\n})\n\nconst decoratorButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: DecoratorSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: DecoratorSchemaType\n },\n events: {} as DisableListenerEvent | DecoratorButtonEvent,\n },\n actions: {\n toggle: ({context, event}) => {\n if (event.type !== 'toggle') {\n return\n }\n\n context.editor.send({\n type: 'decorator.toggle',\n decorator: context.schemaType.name,\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'decorator button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'enable': {\n target: '#decorator button.enabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'enable': {\n target: '#decorator button.enabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n enabled: {\n on: {\n toggle: {\n actions: ['toggle'],\n },\n },\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'disable': {\n target: '#decorator button.disabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'disable': {\n target: '#decorator button.disabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type DecoratorButtonEvent = {\n type: 'toggle'\n}\n\n/**\n * @beta\n */\nexport type DecoratorButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {disabled: 'inactive'}\n | {disabled: 'active'}\n | {enabled: 'inactive'}\n | {enabled: 'active'},\n ) => boolean\n }\n send: (event: DecoratorButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcuts and available events for a decorator\n * button and sets up mutually exclusive decorator behaviors.\n */\nexport function useDecoratorButton(props: {\n schemaType: ToolbarDecoratorSchemaType\n}): DecoratorButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(decoratorButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n useDecoratorKeyboardShortcut(props)\n useMutuallyExclusiveDecorator(props)\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {useActor} from '@xstate/react'\nimport {setup} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\n\nconst historyButtonsMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n },\n input: {} as {\n editor: Editor\n },\n events: {} as DisableListenerEvent | HistoryButtonsEvent,\n },\n actors: {\n 'disable listener': disableListener,\n },\n}).createMachine({\n id: 'history buttons',\n context: ({input}) => ({\n editor: input.editor,\n }),\n invoke: {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n 'disable': {\n target: 'disabled',\n },\n 'history.undo': {\n actions: ({context}) => {\n context.editor.send({type: 'history.undo'})\n context.editor.send({type: 'focus'})\n },\n },\n 'history.redo': {\n actions: ({context}) => {\n context.editor.send({type: 'history.redo'})\n context.editor.send({type: 'focus'})\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type HistoryButtonsEvent =\n | {\n type: 'history.undo'\n }\n | {\n type: 'history.redo'\n }\n\n/**\n * @beta\n */\nexport type HistoryButtons = {\n snapshot: {\n matches: (state: 'disabled' | 'enabled') => boolean\n }\n send: (event: HistoryButtonsEvent) => void\n}\n\n/**\n * @beta\n */\nexport function useHistoryButtons(): HistoryButtons {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(historyButtonsMachine, {\n input: {\n editor,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, effect} from '@portabletext/editor/behaviors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarInlineObjectSchemaType} from './use-toolbar-schema'\n\nconst keyboardShortcutListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarInlineObjectSchemaType},\n InlineObjectButtonEvent\n>(({input, sendBack}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n effect(() => {\n sendBack({type: 'open dialog'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst inlineObjectButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarInlineObjectSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarInlineObjectSchemaType\n },\n events: {} as DisableListenerEvent | InlineObjectButtonEvent,\n },\n actions: {\n insert: ({context, event}) => {\n if (event.type !== 'insert') {\n return\n }\n\n context.editor.send({\n type: 'insert.inline object',\n inlineObject: {\n name: context.schemaType.name,\n value: event.value,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'keyboard shortcut listener': keyboardShortcutListener,\n },\n}).createMachine({\n id: 'inline object button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n disable: {\n target: 'disabled',\n },\n },\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'keyboard shortcut listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n on: {\n 'open dialog': {\n target: 'showing dialog',\n },\n },\n },\n 'showing dialog': {\n on: {\n 'close dialog': {\n target: 'idle',\n },\n 'insert': {\n actions: ['insert'],\n target: 'idle',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type InlineObjectButtonEvent =\n | {\n type: 'close dialog'\n }\n | {\n type: 'open dialog'\n }\n | {\n type: 'insert'\n value: {[key: string]: unknown}\n }\n\n/**\n * @beta\n */\nexport type InlineObjectButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {enabled: 'idle'}\n | {enabled: 'showing dialog'},\n ) => boolean\n }\n send: (event: InlineObjectButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcut and available events for an inline\n * object button.\n *\n * Note: This hook assumes that the button triggers a dialog for inputting\n * the inline object value.\n */\nexport function useInlineObjectButton(props: {\n schemaType: ToolbarInlineObjectSchemaType\n}): InlineObjectButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(inlineObjectButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {\n useEditor,\n type ChildPath,\n type Editor,\n type PortableTextObject,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport * as React from 'react'\nimport type {RefObject} from 'react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarInlineObjectSchemaType} from './use-toolbar-schema'\n\ntype ActiveContext = {\n inlineObjects: Array<{\n value: PortableTextObject\n schemaType: ToolbarInlineObjectSchemaType\n at: ChildPath\n }>\n elementRef: RefObject<Element | null>\n}\n\ntype ActiveListenerEvent =\n | ({\n type: 'set active'\n } & ActiveContext)\n | {\n type: 'set inactive'\n }\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>},\n ActiveListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('selection', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (!selectors.isSelectionCollapsed(snapshot)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const focusInlineObject = selectors.getFocusInlineObject(snapshot)\n\n if (!focusInlineObject) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const schemaType = input.schemaTypes.find(\n (schemaType) => schemaType.name === focusInlineObject.node._type,\n )\n\n if (!schemaType) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const selectedNodes = input.editor.dom.getChildNodes(snapshot)\n const firstSelectedNode = selectedNodes.at(0)\n\n if (!firstSelectedNode || !(firstSelectedNode instanceof Element)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const elementRef = React.createRef<Element>()\n elementRef.current = firstSelectedNode\n\n sendBack({\n type: 'set active',\n inlineObjects: [\n {\n value: focusInlineObject.node,\n schemaType,\n at: focusInlineObject.path,\n },\n ],\n elementRef,\n })\n }).unsubscribe\n})\n\nconst inlineObjectPopoverMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>\n } & ActiveContext,\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>\n },\n events: {} as\n | DisableListenerEvent\n | ActiveListenerEvent\n | InlineObjectPopoverEvent,\n },\n actions: {\n reset: assign({\n inlineObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'inline object popover',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n inlineObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n actions: assign({\n inlineObjects: ({event}) => event.inlineObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n target: 'active',\n },\n 'enable': {\n target: '#inline object popover.enabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'enable': {\n target: '#inline object popover.enabled.active',\n },\n },\n },\n },\n },\n enabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n target: 'active',\n actions: assign({\n inlineObjects: ({event}) => event.inlineObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'disable': {\n target: '#inline object popover.disabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'disable': {\n target: '#inline object popover.disabled.active',\n },\n 'set active': {\n actions: assign({\n inlineObjects: ({event}) => event.inlineObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'edit': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'child.set',\n at: event.at,\n props: event.props,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'remove': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'delete.child',\n at: event.at,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'close': {\n actions: ({context}) => {\n context.editor.send({type: 'focus'})\n },\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type InlineObjectPopoverEvent =\n | {\n type: 'remove'\n at: ChildPath\n }\n | {\n type: 'edit'\n at: ChildPath\n props: {[key: string]: unknown}\n }\n | {\n type: 'close'\n }\n\n/**\n * @beta\n */\nexport type InlineObjectPopover = {\n snapshot: {\n context: ActiveContext\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {\n enabled: 'inactive' | 'active'\n },\n ) => boolean\n }\n send: (event: InlineObjectPopoverEvent) => void\n}\n\n/**\n * @beta\n * Manages the state and available events for an inline object popover.\n */\nexport function useInlineObjectPopover(props: {\n schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>\n}): InlineObjectPopover {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(inlineObjectPopoverMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n\n return {\n snapshot: {\n context: {\n inlineObjects: actorSnapshot.context.inlineObjects,\n elementRef: actorSnapshot.context.elementRef,\n },\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor, type ListSchemaType} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarListSchemaType} from './use-toolbar-schema'\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ListSchemaType},\n {type: 'set active'} | {type: 'set inactive'}\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (selectors.isActiveListItem(input.schemaType.name)(snapshot)) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n }).unsubscribe\n})\n\nconst listButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ListSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ListSchemaType\n },\n events: {} as DisableListenerEvent | ListButtonEvent,\n },\n actions: {\n toggle: ({context, event}) => {\n if (event.type !== 'toggle') {\n return\n }\n\n context.editor.send({\n type: 'list item.toggle',\n listItem: context.schemaType.name,\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'list button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'enable': {\n target: '#list button.enabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'enable': {\n target: '#list button.enabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n enabled: {\n on: {\n toggle: {\n actions: ['toggle'],\n },\n },\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'disable': {\n target: '#list button.disabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'disable': {\n target: '#list button.disabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type ListButtonEvent = {\n type: 'toggle'\n}\n\n/**\n * @beta\n */\nexport type ListButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {disabled: 'inactive'}\n | {disabled: 'active'}\n | {enabled: 'inactive'}\n | {enabled: 'active'},\n ) => boolean\n }\n send: (event: ListButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcuts and available events for a list button.\n */\nexport function useListButton(props: {\n schemaType: ToolbarListSchemaType\n}): ListButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(listButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, raise} from '@portabletext/editor/behaviors'\nimport {useActorRef} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarStyleSchemaType} from './use-toolbar-schema'\n\nconst styleKeyboardShortcutsListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>}\n>(({input}) => {\n const unregisterBehaviors = input.schemaTypes.flatMap((schemaType) => {\n const shortcut = schemaType.shortcut\n\n if (!shortcut) {\n return []\n }\n\n return [\n input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [raise({type: 'style.toggle', style: schemaType.name})],\n ],\n }),\n }),\n ]\n })\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n})\n\nconst styleKeyboardShortcutsMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n },\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n },\n events: {} as DisableListenerEvent | {type: 'style.toggle'},\n },\n actors: {\n 'disable listener': disableListener,\n 'style keyboard shortcuts listener': styleKeyboardShortcutsListener,\n },\n}).createMachine({\n id: 'style keyboard shortcuts',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n }),\n invoke: {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n invoke: {\n src: 'style keyboard shortcuts listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n on: {\n disable: {\n target: 'disabled',\n },\n },\n },\n },\n})\n\n/**\n * @beta\n * Registers keyboard shortcuts for a set of style schema types.\n */\nexport function useStyleKeyboardShortcuts(props: {\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n}) {\n const editor = useEditor()\n useActorRef(styleKeyboardShortcutsMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n}\n","import {\n useEditor,\n type Editor,\n type StyleSchemaType,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport {useStyleKeyboardShortcuts} from './use-style-keyboard-shortcuts'\nimport type {ToolbarStyleSchemaType} from './use-toolbar-schema'\n\ntype ActiveStyleListenerEvent = {\n type: 'set active style'\n style: StyleSchemaType['name'] | undefined\n}\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor},\n ActiveStyleListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n const activeStyle = selectors.getActiveStyle(snapshot)\n\n sendBack({type: 'set active style', style: activeStyle})\n }).unsubscribe\n})\n\nconst styleSelectorMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n activeStyle: StyleSchemaType['name'] | undefined\n },\n input: {} as {\n editor: Editor\n },\n events: {} as\n | StyleSelectorEvent\n | DisableListenerEvent\n | ActiveStyleListenerEvent,\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'style selector',\n context: ({input}) => ({\n editor: input.editor,\n activeStyle: undefined,\n }),\n invoke: [\n {\n src: 'disable listener',\n input: ({context}) => ({\n editor: context.editor,\n }),\n },\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n }),\n },\n ],\n on: {\n 'set active style': {\n guard: ({context, event}) => context.activeStyle !== event.style,\n actions: assign({\n activeStyle: ({event}) => event.style,\n }),\n },\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n disable: {\n target: 'disabled',\n },\n toggle: {\n actions: [\n ({context, event}) => {\n context.editor.send({type: 'style.toggle', style: event.style})\n context.editor.send({type: 'focus'})\n },\n ],\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type StyleSelectorEvent = {\n type: 'toggle'\n style: StyleSchemaType['name']\n}\n\n/**\n * @beta\n */\nexport type StyleSelector = {\n snapshot: {\n matches: (state: 'disabled' | 'enabled') => boolean\n context: {\n activeStyle: StyleSchemaType['name'] | undefined\n }\n }\n send: (event: StyleSelectorEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcuts and available events for a style\n * selector.\n */\nexport function useStyleSelector(props: {\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n}): StyleSelector {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(styleSelectorMachine, {\n input: {\n editor,\n },\n })\n useStyleKeyboardShortcuts(props)\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n context: {\n activeStyle: actorSnapshot.context.activeStyle,\n },\n },\n send,\n }\n}\n"],"names":["useToolbarSchema","props","$","_c","editor","useEditor","schema","useEditorSelector","_temp","t0","decorators","t1","decorator","extendDecorator","map","annotations","t2","annotation","extendAnnotation","lists","t3","list","extendList","blockObjects","t4","blockObject","extendBlockObject","inlineObjects","t5","inlineObject","extendInlineObject","styles","t6","style","extendStyle","snapshot","context","disableListener","fromCallback","input","sendBack","on","getSnapshot","readOnly","type","unsubscribe","activeListener","selectors","isActiveAnnotation","schemaType","name","keyboardShortcutRemove","shortcut","registerBehavior","behavior","defineBehavior","guard","event","originEvent","actions","raise","effect","send","keyboardShortcutShowInsertDialog","annotationButtonMachine","setup","types","events","add annotation","value","remove annotation","actors","createMachine","id","invoke","src","initial","states","disabled","inactive","target","active","enabled","useAnnotationButton","useActor","matches","state","activeAnnotations","getActiveAnnotations","focusBlock","getFocusBlock","length","firstSelectedChild","dom","getChildNodes","at","Element","elementRef","React","createRef","current","flatMap","schemaTypes","find","_type","_key","node","annotationPopoverMachine","reset","assign","remove","entry","useAnnotationPopover","actorSnapshot","keyboardShortcutListener","blockObjectButtonMachine","insert","placement","enable","disable","useBlockObjectButton","isSelectionCollapsed","focusBlockObject","getFocusBlockObject","firstSelectedNode","getBlockNodes","path","blockObjectPopoverMachine","useBlockObjectPopover","decoratorKeyboardShortcutMachine","useDecoratorKeyboardShortcut","useActorRef","useMutuallyExclusiveDecorator","mutuallyExclusive","event_0","forward","useEffect","isActiveDecorator","decoratorButtonMachine","toggle","useDecoratorButton","historyButtonsMachine","useHistoryButtons","inlineObjectButtonMachine","useInlineObjectButton","focusInlineObject","getFocusInlineObject","inlineObjectPopoverMachine","useInlineObjectPopover","isActiveListItem","listButtonMachine","listItem","useListButton","styleKeyboardShortcutsListener","unregisterBehaviors","unregisterBehavior","styleKeyboardShortcutsMachine","useStyleKeyboardShortcuts","activeStyle","getActiveStyle","styleSelectorMachine","undefined","useStyleSelector"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/use-toolbar-schema.ts","../src/disable-listener.ts","../src/use-mutually-exclusive-annotation.ts","../src/use-annotation-button.ts","../src/use-annotation-popover.ts","../src/use-block-object-button.ts","../src/use-block-object-popover.ts","../src/use-decorator-keyboard-shortcut.ts","../src/use-mutually-exclusive-decorator.ts","../src/use-decorator-button.ts","../src/use-history-buttons.ts","../src/use-inline-object-button.ts","../src/use-inline-object-popover.ts","../src/use-list-button.ts","../src/use-style-keyboard-shortcuts.ts","../src/use-style-selector.ts"],"sourcesContent":["import {\n useEditor,\n useEditorSelector,\n type AnnotationDefinition,\n type AnnotationSchemaType,\n type BlockObjectSchemaType,\n type DecoratorDefinition,\n type DecoratorSchemaType,\n type InlineObjectSchemaType,\n type ListSchemaType,\n type StyleSchemaType,\n} from '@portabletext/editor'\nimport type {KeyboardShortcut} from '@portabletext/keyboard-shortcuts'\n\n/**\n * @beta\n */\nexport type ExtendDecoratorSchemaType = (\n decorator: DecoratorSchemaType,\n) => ToolbarDecoratorSchemaType\n\n/**\n * @beta\n */\nexport type ExtendAnnotationSchemaType = (\n annotation: AnnotationSchemaType,\n) => ToolbarAnnotationSchemaType\n\n/**\n * @beta\n */\nexport type ExtendListSchemaType = (\n list: ListSchemaType,\n) => ToolbarListSchemaType\n\n/**\n * @beta\n */\nexport type ExtendBlockObjectSchemaType = (\n blockObject: BlockObjectSchemaType,\n) => ToolbarBlockObjectSchemaType\n\n/**\n * @beta\n */\nexport type ExtendInlineObjectSchemaType = (\n inlineObject: InlineObjectSchemaType,\n) => ToolbarInlineObjectSchemaType\n\n/**\n * @beta\n */\nexport type ExtendStyleSchemaType = (\n style: StyleSchemaType,\n) => ToolbarStyleSchemaType\n\n/**\n * @beta\n * Extend the editor's schema with default values, icons, shortcuts and more.\n * This makes it easier to use the schema to render toolbars, forms and other\n * UI components.\n */\nexport function useToolbarSchema(props: {\n extendDecorator?: (\n decorator: DecoratorSchemaType,\n ) => ToolbarDecoratorSchemaType\n extendAnnotation?: (\n annotation: AnnotationSchemaType,\n ) => ToolbarAnnotationSchemaType\n extendList?: (list: ListSchemaType) => ToolbarListSchemaType\n extendBlockObject?: (\n blockObject: BlockObjectSchemaType,\n ) => ToolbarBlockObjectSchemaType\n extendInlineObject?: (\n inlineObject: InlineObjectSchemaType,\n ) => ToolbarInlineObjectSchemaType\n extendStyle?: (style: StyleSchemaType) => ToolbarStyleSchemaType\n}): ToolbarSchema {\n const editor = useEditor()\n const schema = useEditorSelector(\n editor,\n (snapshot) => snapshot.context.schema,\n )\n\n return {\n decorators: schema.decorators.map(\n (decorator) => props.extendDecorator?.(decorator) ?? decorator,\n ),\n annotations: schema.annotations.map(\n (annotation) => props.extendAnnotation?.(annotation) ?? annotation,\n ),\n lists: schema.lists.map((list) => props.extendList?.(list) ?? list),\n blockObjects: schema.blockObjects.map(\n (blockObject) => props.extendBlockObject?.(blockObject) ?? blockObject,\n ),\n inlineObjects: schema.inlineObjects.map(\n (inlineObject) =>\n props.extendInlineObject?.(inlineObject) ?? inlineObject,\n ),\n styles: schema.styles.map((style) => props.extendStyle?.(style) ?? style),\n }\n}\n\n/**\n * @beta\n */\nexport type ToolbarSchema = {\n decorators?: ReadonlyArray<ToolbarDecoratorSchemaType>\n annotations?: ReadonlyArray<ToolbarAnnotationSchemaType>\n lists?: ReadonlyArray<ToolbarListSchemaType>\n blockObjects?: ReadonlyArray<ToolbarBlockObjectSchemaType>\n inlineObjects?: ReadonlyArray<ToolbarInlineObjectSchemaType>\n styles?: ReadonlyArray<ToolbarStyleSchemaType>\n}\n\n/**\n * @beta\n */\nexport type ToolbarDecoratorSchemaType = DecoratorSchemaType & {\n icon?: React.ComponentType\n shortcut?: KeyboardShortcut\n mutuallyExclusive?: ReadonlyArray<DecoratorDefinition['name']>\n}\n\n/**\n * @beta\n */\nexport type ToolbarAnnotationSchemaType = AnnotationSchemaType & {\n icon?: React.ComponentType\n defaultValues?: Record<string, unknown>\n shortcut?: KeyboardShortcut\n mutuallyExclusive?: ReadonlyArray<AnnotationDefinition['name']>\n}\n\n/**\n * @beta\n */\nexport type ToolbarListSchemaType = ListSchemaType & {\n icon?: React.ComponentType\n}\n\n/**\n * @beta\n */\nexport type ToolbarBlockObjectSchemaType = BlockObjectSchemaType & {\n icon?: React.ComponentType\n defaultValues?: Record<string, unknown>\n shortcut?: KeyboardShortcut\n}\n\n/**\n * @beta\n */\nexport type ToolbarInlineObjectSchemaType = InlineObjectSchemaType & {\n icon?: React.ComponentType\n defaultValues?: Record<string, unknown>\n shortcut?: KeyboardShortcut\n}\n\n/**\n * @beta\n */\nexport type ToolbarStyleSchemaType = StyleSchemaType & {\n icon?: React.ComponentType\n shortcut?: KeyboardShortcut\n}\n","import type {Editor} from '@portabletext/editor'\nimport {fromCallback, type AnyEventObject} from 'xstate'\n\nexport type DisableListenerEvent = {type: 'enable'} | {type: 'disable'}\n\nexport const disableListener = fromCallback<\n AnyEventObject,\n {editor: Editor},\n DisableListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n if (input.editor.getSnapshot().context.readOnly) {\n sendBack({type: 'disable'})\n } else {\n sendBack({type: 'enable'})\n }\n }).unsubscribe\n})\n","import {useEditor} from '@portabletext/editor'\nimport {defineBehavior, execute, raise} from '@portabletext/editor/behaviors'\nimport {isActiveAnnotation} from '@portabletext/editor/selectors'\nimport {useEffect} from 'react'\nimport type {ToolbarAnnotationSchemaType} from './use-toolbar-schema'\n\nexport function useMutuallyExclusiveAnnotation(props: {\n schemaType: ToolbarAnnotationSchemaType\n}) {\n const editor = useEditor()\n\n useEffect(() => {\n const mutuallyExclusive = props.schemaType.mutuallyExclusive\n\n if (!mutuallyExclusive) {\n return\n }\n\n return editor.registerBehavior({\n behavior: defineBehavior({\n on: 'annotation.add',\n guard: ({snapshot, event}) => {\n if (event.annotation.name !== props.schemaType.name) {\n return false\n }\n\n const activeMutuallyExclusive = mutuallyExclusive.filter(\n (annotation) =>\n isActiveAnnotation(annotation, {mode: 'partial'})(snapshot),\n )\n\n return {activeMutuallyExclusive}\n },\n actions: [\n ({event}, {activeMutuallyExclusive}) => [\n ...activeMutuallyExclusive.map((annotation) =>\n raise({\n type: 'annotation.remove',\n annotation: {name: annotation},\n }),\n ),\n execute(event),\n ],\n ],\n }),\n })\n }, [editor, props.schemaType.name, props.schemaType.mutuallyExclusive])\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, effect, raise} from '@portabletext/editor/behaviors'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport {useMutuallyExclusiveAnnotation} from './use-mutually-exclusive-annotation'\nimport type {ToolbarAnnotationSchemaType} from './use-toolbar-schema'\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarAnnotationSchemaType},\n {type: 'set active'} | {type: 'set inactive'}\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (selectors.isActiveAnnotation(input.schemaType.name)(snapshot)) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n }).unsubscribe\n})\n\nconst keyboardShortcutRemove = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarAnnotationSchemaType}\n>(({input}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n raise({\n type: 'annotation.remove',\n annotation: {\n name: input.schemaType.name,\n },\n }),\n effect(() => {\n input.editor.send({type: 'focus'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst keyboardShortcutShowInsertDialog = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarAnnotationSchemaType},\n {type: 'open dialog'}\n>(({input, sendBack}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n effect(() => {\n sendBack({type: 'open dialog'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst annotationButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarAnnotationSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarAnnotationSchemaType\n },\n events: {} as\n | AnnotationButtonEvent\n | DisableListenerEvent\n | {type: 'set active'}\n | {type: 'set inactive'},\n },\n actions: {\n 'add annotation': ({context, event}) => {\n if (event.type !== 'add') {\n return\n }\n\n context.editor.send({\n type: 'annotation.add',\n annotation: {\n name: context.schemaType.name,\n value: event.annotation.value,\n },\n })\n context.editor.send({type: 'focus'})\n },\n 'remove annotation': ({context}) => {\n context.editor.send({\n type: 'annotation.remove',\n annotation: {\n name: context.schemaType.name,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'active listener': activeListener,\n 'disable listener': disableListener,\n 'keyboard shortcut.remove': keyboardShortcutRemove,\n 'keyboard shortcut.show insert dialog': keyboardShortcutShowInsertDialog,\n },\n}).createMachine({\n id: 'annotation button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n {\n src: 'disable listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'enable': {\n target: '#annotation button.enabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'enable': {\n target: '#annotation button.enabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n enabled: {\n initial: 'inactive',\n states: {\n inactive: {\n initial: 'idle',\n on: {\n 'disable': {\n target: '#annotation button.disabled.inactive',\n },\n 'set active': {\n target: '#annotation button.enabled.active',\n },\n 'add': {\n actions: 'add annotation',\n },\n },\n states: {\n 'idle': {\n invoke: {\n src: 'keyboard shortcut.show insert dialog',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n on: {\n 'open dialog': {\n target: 'showing dialog',\n },\n },\n },\n 'showing dialog': {\n on: {\n 'close dialog': {\n target: 'idle',\n },\n },\n },\n },\n },\n active: {\n invoke: {\n src: 'keyboard shortcut.remove',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n on: {\n 'set inactive': {\n target: '#annotation button.enabled.inactive',\n },\n 'disable': {\n target: '#annotation button.disabled.active',\n },\n 'remove': {\n actions: 'remove annotation',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type AnnotationButtonEvent =\n | {type: 'close dialog'}\n | {type: 'open dialog'}\n | {\n type: 'add'\n annotation: {\n value: Record<string, unknown>\n }\n }\n | {type: 'remove'}\n\n/**\n * @beta\n */\nexport type AnnotationButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {disabled: 'inactive'}\n | {disabled: 'active'}\n | {enabled: 'inactive'}\n | {enabled: {inactive: 'idle'}}\n | {enabled: {inactive: 'showing dialog'}}\n | {enabled: 'active'},\n ) => boolean\n }\n send: (event: AnnotationButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcut and available events for an annotation\n * button.\n *\n * Note: This hook assumes that the button triggers a dialog for inputting\n * the annotation value.\n */\nexport function useAnnotationButton(props: {\n schemaType: ToolbarAnnotationSchemaType\n}): AnnotationButton {\n const editor = useEditor()\n const [snapshot, send] = useActor(annotationButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n useMutuallyExclusiveAnnotation(props)\n\n return {\n snapshot: {\n matches: (state) => snapshot.matches(state),\n },\n send,\n }\n}\n","import {\n useEditor,\n type AnnotationPath,\n type AnnotationSchemaType,\n type Editor,\n type PortableTextObject,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport * as React from 'react'\nimport type {RefObject} from 'react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarAnnotationSchemaType} from './use-toolbar-schema'\n\ntype ActiveContext = {\n annotations: Array<{\n value: PortableTextObject\n schemaType: ToolbarAnnotationSchemaType\n at: AnnotationPath\n }>\n elementRef: RefObject<Element | null>\n}\n\ntype ActiveListenerEvent =\n | ({\n type: 'set active'\n } & ActiveContext)\n | {\n type: 'set inactive'\n }\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>},\n ActiveListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n const activeAnnotations = selectors.getActiveAnnotations(snapshot)\n const focusBlock = selectors.getFocusBlock(snapshot)\n\n if (activeAnnotations.length === 0 || !focusBlock) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const selectedChildren = input.editor.dom.getChildNodes(snapshot)\n const firstSelectedChild = selectedChildren.at(0)\n\n if (!firstSelectedChild || !(firstSelectedChild instanceof Element)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const elementRef = React.createRef<Element>()\n elementRef.current = firstSelectedChild\n\n sendBack({\n type: 'set active',\n annotations: activeAnnotations.flatMap((annotation) => {\n const schemaType = input.schemaTypes.find(\n (schemaType) => schemaType.name === annotation._type,\n )\n\n if (!schemaType) {\n return []\n }\n\n return {\n value: annotation,\n schemaType,\n at: [\n {_key: focusBlock.node._key},\n 'markDefs',\n {_key: annotation._key},\n ],\n }\n }),\n elementRef,\n })\n }).unsubscribe\n})\n\nconst annotationPopoverMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>\n } & ActiveContext,\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>\n },\n events: {} as\n | DisableListenerEvent\n | ActiveListenerEvent\n | AnnotationPopoverEvent,\n },\n actions: {\n reset: assign({\n annotations: [],\n elementRef: React.createRef<Element>(),\n }),\n remove: ({context, event}) => {\n if (event.type !== 'remove') {\n return\n }\n\n context.editor.send({\n type: 'annotation.remove',\n annotation: {\n name: event.schemaType.name,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'annotation popover',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n annotations: [],\n elementRef: React.createRef<Element>(),\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n actions: assign({\n annotations: ({event}) => event.annotations,\n elementRef: ({event}) => event.elementRef,\n }),\n target: 'active',\n },\n 'enable': {\n target: '#annotation popover.enabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'enable': {\n target: '#annotation popover.enabled.active',\n },\n },\n },\n },\n },\n enabled: {\n invoke: [\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n ],\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n target: 'active',\n actions: assign({\n annotations: ({event}) => event.annotations,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'disable': {\n target: '#annotation popover.disabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'disable': {\n target: '#annotation popover.disabled.active',\n },\n 'set active': {\n actions: assign({\n annotations: ({event}) => event.annotations,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'edit': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'annotation.set',\n at: event.at,\n props: event.props,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'remove': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'annotation.remove',\n annotation: {\n name: event.schemaType.name,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'close': {\n actions: ({context}) => {\n context.editor.send({type: 'focus'})\n },\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type AnnotationPopoverEvent =\n | {\n type: 'remove'\n schemaType: AnnotationSchemaType\n }\n | {\n type: 'edit'\n at: AnnotationPath\n props: {[key: string]: unknown}\n }\n | {\n type: 'close'\n }\n\n/**\n * @beta\n */\nexport type AnnotationPopover = {\n snapshot: {\n context: ActiveContext\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {\n enabled: 'inactive' | 'active'\n },\n ) => boolean\n }\n send: (event: AnnotationPopoverEvent) => void\n}\n\n/**\n * @beta\n * Manages the state and available events for an annotation popover.\n */\nexport function useAnnotationPopover(props: {\n schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>\n}): AnnotationPopover {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(annotationPopoverMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n\n return {\n snapshot: {\n context: {\n annotations: actorSnapshot.context.annotations,\n elementRef: actorSnapshot.context.elementRef,\n },\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {\n defineBehavior,\n effect,\n type InsertPlacement,\n} from '@portabletext/editor/behaviors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarBlockObjectSchemaType} from './use-toolbar-schema'\n\nconst keyboardShortcutListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarBlockObjectSchemaType},\n BlockObjectButtonEvent\n>(({input, sendBack}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n effect(() => {\n sendBack({type: 'open dialog'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst blockObjectButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarBlockObjectSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarBlockObjectSchemaType\n },\n events: {} as DisableListenerEvent | BlockObjectButtonEvent,\n },\n actions: {\n insert: ({context, event}) => {\n if (event.type !== 'insert') {\n return\n }\n\n context.editor.send({\n type: 'insert.block object',\n blockObject: {\n name: context.schemaType.name,\n value: event.value,\n },\n placement: event.placement ?? 'auto',\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'keyboard shortcut listener': keyboardShortcutListener,\n },\n}).createMachine({\n id: 'block object button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n disable: {\n target: 'disabled',\n },\n },\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'keyboard shortcut listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n on: {\n 'open dialog': {\n target: 'showing dialog',\n },\n },\n },\n 'showing dialog': {\n on: {\n 'close dialog': {\n target: 'idle',\n },\n 'insert': {\n actions: ['insert'],\n target: 'idle',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type BlockObjectButtonEvent =\n | {\n type: 'close dialog'\n }\n | {\n type: 'open dialog'\n }\n | {\n type: 'insert'\n value: {[key: string]: unknown}\n placement: InsertPlacement | undefined\n }\n\n/**\n * @beta\n */\nexport type BlockObjectButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {enabled: 'idle'}\n | {enabled: 'showing dialog'},\n ) => boolean\n }\n send: (event: BlockObjectButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcut and available events for a block\n * object button.\n *\n * Note: This hook assumes that the button triggers a dialog for inputting\n * the block object value.\n */\nexport function useBlockObjectButton(props: {\n schemaType: ToolbarBlockObjectSchemaType\n}): BlockObjectButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(blockObjectButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {\n useEditor,\n type BlockPath,\n type Editor,\n type PortableTextObject,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport * as React from 'react'\nimport type {RefObject} from 'react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarBlockObjectSchemaType} from './use-toolbar-schema'\n\ntype ActiveContext = {\n blockObjects: Array<{\n value: PortableTextObject\n schemaType: ToolbarBlockObjectSchemaType\n at: BlockPath\n }>\n elementRef: RefObject<Element | null>\n}\n\ntype ActiveListenerEvent =\n | ({\n type: 'set active'\n } & ActiveContext)\n | {\n type: 'set inactive'\n }\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>},\n ActiveListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('selection', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (!selectors.isSelectionCollapsed(snapshot)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const focusBlockObject = selectors.getFocusBlockObject(snapshot)\n\n if (!focusBlockObject) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const schemaType = input.schemaTypes.find(\n (schemaType) => schemaType.name === focusBlockObject.node._type,\n )\n\n if (!schemaType) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const selectedNodes = input.editor.dom.getBlockNodes(snapshot)\n const firstSelectedNode = selectedNodes.at(0)\n\n if (!firstSelectedNode || !(firstSelectedNode instanceof Element)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const elementRef = React.createRef<Element>()\n elementRef.current = firstSelectedNode\n\n sendBack({\n type: 'set active',\n blockObjects: [\n {\n value: focusBlockObject.node,\n schemaType,\n at: focusBlockObject.path,\n },\n ],\n elementRef,\n })\n }).unsubscribe\n})\n\nconst blockObjectPopoverMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>\n } & ActiveContext,\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>\n },\n events: {} as\n | DisableListenerEvent\n | ActiveListenerEvent\n | BlockObjectPopoverEvent,\n },\n actions: {\n reset: assign({\n blockObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'block object popover',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n blockObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n actions: assign({\n blockObjects: ({event}) => event.blockObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n target: 'active',\n },\n 'enable': {\n target: '#block object popover.enabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'enable': {\n target: '#block object popover.enabled.active',\n },\n },\n },\n },\n },\n enabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n target: 'active',\n actions: assign({\n blockObjects: ({event}) => event.blockObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'disable': {\n target: '#block object popover.disabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'disable': {\n target: '#block object popover.disabled.active',\n },\n 'set active': {\n actions: assign({\n blockObjects: ({event}) => event.blockObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'edit': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'block.set',\n at: event.at,\n props: event.props,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'remove': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'delete.block',\n at: event.at,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'close': {\n actions: ({context}) => {\n context.editor.send({type: 'focus'})\n },\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type BlockObjectPopoverEvent =\n | {\n type: 'remove'\n at: BlockPath\n }\n | {\n type: 'edit'\n at: BlockPath\n props: {[key: string]: unknown}\n }\n | {\n type: 'close'\n }\n\n/**\n * @beta\n */\nexport type BlockObjectPopover = {\n snapshot: {\n context: ActiveContext\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {\n enabled: 'inactive' | 'active'\n },\n ) => boolean\n }\n send: (event: BlockObjectPopoverEvent) => void\n}\n\n/**\n * @beta\n * Manages the state and available events for a block object popover.\n */\nexport function useBlockObjectPopover(props: {\n schemaTypes: ReadonlyArray<ToolbarBlockObjectSchemaType>\n}): BlockObjectPopover {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(blockObjectPopoverMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n\n return {\n snapshot: {\n context: {\n blockObjects: actorSnapshot.context.blockObjects,\n elementRef: actorSnapshot.context.elementRef,\n },\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, raise} from '@portabletext/editor/behaviors'\nimport {useActorRef} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarDecoratorSchemaType} from './use-toolbar-schema'\n\nconst keyboardShortcutListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarDecoratorSchemaType}\n>(({input}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n raise({\n type: 'decorator.toggle',\n decorator: input.schemaType.name,\n }),\n ],\n ],\n }),\n })\n})\n\nconst decoratorKeyboardShortcutMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarDecoratorSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarDecoratorSchemaType\n },\n events: {} as DisableListenerEvent | {type: 'decorator.toggle'},\n },\n actors: {\n 'disable listener': disableListener,\n 'keyboard shortcut listener': keyboardShortcutListener,\n },\n}).createMachine({\n id: 'decorator keyboard shortcut',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n invoke: {\n src: 'keyboard shortcut listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n on: {\n disable: {\n target: 'disabled',\n },\n },\n },\n },\n})\n\nexport function useDecoratorKeyboardShortcut(props: {\n schemaType: ToolbarDecoratorSchemaType\n}) {\n const editor = useEditor()\n useActorRef(decoratorKeyboardShortcutMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n}\n","import {useEditor} from '@portabletext/editor'\nimport {defineBehavior, forward, raise} from '@portabletext/editor/behaviors'\nimport {useEffect} from 'react'\nimport type {ToolbarDecoratorSchemaType} from './use-toolbar-schema'\n\nexport function useMutuallyExclusiveDecorator(props: {\n schemaType: ToolbarDecoratorSchemaType\n}) {\n const editor = useEditor()\n\n useEffect(() => {\n const mutuallyExclusive = props.schemaType.mutuallyExclusive\n\n if (!mutuallyExclusive) {\n return\n }\n\n return editor.registerBehavior({\n behavior: defineBehavior({\n on: 'decorator.add',\n guard: ({event}) => event.decorator === props.schemaType.name,\n actions: [\n ({event}) => [\n forward(event),\n ...mutuallyExclusive.map((decorator) =>\n raise({\n type: 'decorator.remove',\n decorator,\n }),\n ),\n ],\n ],\n }),\n })\n }, [editor, props.schemaType.name, props.schemaType.mutuallyExclusive])\n}\n","import {\n useEditor,\n type DecoratorSchemaType,\n type Editor,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport {useDecoratorKeyboardShortcut} from './use-decorator-keyboard-shortcut'\nimport {useMutuallyExclusiveDecorator} from './use-mutually-exclusive-decorator'\nimport type {ToolbarDecoratorSchemaType} from './use-toolbar-schema'\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: DecoratorSchemaType},\n {type: 'set active'} | {type: 'set inactive'}\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (selectors.isActiveDecorator(input.schemaType.name)(snapshot)) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n }).unsubscribe\n})\n\nconst decoratorButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: DecoratorSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: DecoratorSchemaType\n },\n events: {} as DisableListenerEvent | DecoratorButtonEvent,\n },\n actions: {\n toggle: ({context, event}) => {\n if (event.type !== 'toggle') {\n return\n }\n\n context.editor.send({\n type: 'decorator.toggle',\n decorator: context.schemaType.name,\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'decorator button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'enable': {\n target: '#decorator button.enabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'enable': {\n target: '#decorator button.enabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n enabled: {\n on: {\n toggle: {\n actions: ['toggle'],\n },\n },\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'disable': {\n target: '#decorator button.disabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'disable': {\n target: '#decorator button.disabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type DecoratorButtonEvent = {\n type: 'toggle'\n}\n\n/**\n * @beta\n */\nexport type DecoratorButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {disabled: 'inactive'}\n | {disabled: 'active'}\n | {enabled: 'inactive'}\n | {enabled: 'active'},\n ) => boolean\n }\n send: (event: DecoratorButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcuts and available events for a decorator\n * button and sets up mutually exclusive decorator behaviors.\n */\nexport function useDecoratorButton(props: {\n schemaType: ToolbarDecoratorSchemaType\n}): DecoratorButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(decoratorButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n useDecoratorKeyboardShortcut(props)\n useMutuallyExclusiveDecorator(props)\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {useActor} from '@xstate/react'\nimport {setup} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\n\nconst historyButtonsMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n },\n input: {} as {\n editor: Editor\n },\n events: {} as DisableListenerEvent | HistoryButtonsEvent,\n },\n actors: {\n 'disable listener': disableListener,\n },\n}).createMachine({\n id: 'history buttons',\n context: ({input}) => ({\n editor: input.editor,\n }),\n invoke: {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n 'disable': {\n target: 'disabled',\n },\n 'history.undo': {\n actions: ({context}) => {\n context.editor.send({type: 'history.undo'})\n context.editor.send({type: 'focus'})\n },\n },\n 'history.redo': {\n actions: ({context}) => {\n context.editor.send({type: 'history.redo'})\n context.editor.send({type: 'focus'})\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type HistoryButtonsEvent =\n | {\n type: 'history.undo'\n }\n | {\n type: 'history.redo'\n }\n\n/**\n * @beta\n */\nexport type HistoryButtons = {\n snapshot: {\n matches: (state: 'disabled' | 'enabled') => boolean\n }\n send: (event: HistoryButtonsEvent) => void\n}\n\n/**\n * @beta\n */\nexport function useHistoryButtons(): HistoryButtons {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(historyButtonsMachine, {\n input: {\n editor,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, effect} from '@portabletext/editor/behaviors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarInlineObjectSchemaType} from './use-toolbar-schema'\n\nconst keyboardShortcutListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ToolbarInlineObjectSchemaType},\n InlineObjectButtonEvent\n>(({input, sendBack}) => {\n const shortcut = input.schemaType.shortcut\n\n if (!shortcut) {\n return\n }\n\n return input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [\n effect(() => {\n sendBack({type: 'open dialog'})\n }),\n ],\n ],\n }),\n })\n})\n\nconst inlineObjectButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ToolbarInlineObjectSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ToolbarInlineObjectSchemaType\n },\n events: {} as DisableListenerEvent | InlineObjectButtonEvent,\n },\n actions: {\n insert: ({context, event}) => {\n if (event.type !== 'insert') {\n return\n }\n\n context.editor.send({\n type: 'insert.inline object',\n inlineObject: {\n name: context.schemaType.name,\n value: event.value,\n },\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'keyboard shortcut listener': keyboardShortcutListener,\n },\n}).createMachine({\n id: 'inline object button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n disable: {\n target: 'disabled',\n },\n },\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'keyboard shortcut listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n on: {\n 'open dialog': {\n target: 'showing dialog',\n },\n },\n },\n 'showing dialog': {\n on: {\n 'close dialog': {\n target: 'idle',\n },\n 'insert': {\n actions: ['insert'],\n target: 'idle',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type InlineObjectButtonEvent =\n | {\n type: 'close dialog'\n }\n | {\n type: 'open dialog'\n }\n | {\n type: 'insert'\n value: {[key: string]: unknown}\n }\n\n/**\n * @beta\n */\nexport type InlineObjectButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {enabled: 'idle'}\n | {enabled: 'showing dialog'},\n ) => boolean\n }\n send: (event: InlineObjectButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcut and available events for an inline\n * object button.\n *\n * Note: This hook assumes that the button triggers a dialog for inputting\n * the inline object value.\n */\nexport function useInlineObjectButton(props: {\n schemaType: ToolbarInlineObjectSchemaType\n}): InlineObjectButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(inlineObjectButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {\n useEditor,\n type ChildPath,\n type Editor,\n type PortableTextObject,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport * as React from 'react'\nimport type {RefObject} from 'react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarInlineObjectSchemaType} from './use-toolbar-schema'\n\ntype ActiveContext = {\n inlineObjects: Array<{\n value: PortableTextObject\n schemaType: ToolbarInlineObjectSchemaType\n at: ChildPath\n }>\n elementRef: RefObject<Element | null>\n}\n\ntype ActiveListenerEvent =\n | ({\n type: 'set active'\n } & ActiveContext)\n | {\n type: 'set inactive'\n }\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>},\n ActiveListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('selection', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (!selectors.isSelectionCollapsed(snapshot)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const focusInlineObject = selectors.getFocusInlineObject(snapshot)\n\n if (!focusInlineObject) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const schemaType = input.schemaTypes.find(\n (schemaType) => schemaType.name === focusInlineObject.node._type,\n )\n\n if (!schemaType) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const selectedNodes = input.editor.dom.getChildNodes(snapshot)\n const firstSelectedNode = selectedNodes.at(0)\n\n if (!firstSelectedNode || !(firstSelectedNode instanceof Element)) {\n sendBack({type: 'set inactive'})\n return\n }\n\n const elementRef = React.createRef<Element>()\n elementRef.current = firstSelectedNode\n\n sendBack({\n type: 'set active',\n inlineObjects: [\n {\n value: focusInlineObject.node,\n schemaType,\n at: focusInlineObject.path,\n },\n ],\n elementRef,\n })\n }).unsubscribe\n})\n\nconst inlineObjectPopoverMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>\n } & ActiveContext,\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>\n },\n events: {} as\n | DisableListenerEvent\n | ActiveListenerEvent\n | InlineObjectPopoverEvent,\n },\n actions: {\n reset: assign({\n inlineObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'inline object popover',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n inlineObjects: [],\n elementRef: React.createRef<Element>(),\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n actions: assign({\n inlineObjects: ({event}) => event.inlineObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n target: 'active',\n },\n 'enable': {\n target: '#inline object popover.enabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'enable': {\n target: '#inline object popover.enabled.active',\n },\n },\n },\n },\n },\n enabled: {\n initial: 'inactive',\n states: {\n inactive: {\n entry: ['reset'],\n on: {\n 'set active': {\n target: 'active',\n actions: assign({\n inlineObjects: ({event}) => event.inlineObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'disable': {\n target: '#inline object popover.disabled.inactive',\n },\n },\n },\n active: {\n on: {\n 'set inactive': {\n target: 'inactive',\n },\n 'disable': {\n target: '#inline object popover.disabled.active',\n },\n 'set active': {\n actions: assign({\n inlineObjects: ({event}) => event.inlineObjects,\n elementRef: ({event}) => event.elementRef,\n }),\n },\n 'edit': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'child.set',\n at: event.at,\n props: event.props,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'remove': {\n actions: ({context, event}) => {\n context.editor.send({\n type: 'delete.child',\n at: event.at,\n })\n context.editor.send({type: 'focus'})\n },\n },\n 'close': {\n actions: ({context}) => {\n context.editor.send({type: 'focus'})\n },\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type InlineObjectPopoverEvent =\n | {\n type: 'remove'\n at: ChildPath\n }\n | {\n type: 'edit'\n at: ChildPath\n props: {[key: string]: unknown}\n }\n | {\n type: 'close'\n }\n\n/**\n * @beta\n */\nexport type InlineObjectPopover = {\n snapshot: {\n context: ActiveContext\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {\n enabled: 'inactive' | 'active'\n },\n ) => boolean\n }\n send: (event: InlineObjectPopoverEvent) => void\n}\n\n/**\n * @beta\n * Manages the state and available events for an inline object popover.\n */\nexport function useInlineObjectPopover(props: {\n schemaTypes: ReadonlyArray<ToolbarInlineObjectSchemaType>\n}): InlineObjectPopover {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(inlineObjectPopoverMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n\n return {\n snapshot: {\n context: {\n inlineObjects: actorSnapshot.context.inlineObjects,\n elementRef: actorSnapshot.context.elementRef,\n },\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor, type ListSchemaType} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarListSchemaType} from './use-toolbar-schema'\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaType: ListSchemaType},\n {type: 'set active'} | {type: 'set inactive'}\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n\n if (selectors.isActiveListItem(input.schemaType.name)(snapshot)) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n }).unsubscribe\n})\n\nconst listButtonMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaType: ListSchemaType\n },\n input: {} as {\n editor: Editor\n schemaType: ListSchemaType\n },\n events: {} as DisableListenerEvent | ListButtonEvent,\n },\n actions: {\n toggle: ({context, event}) => {\n if (event.type !== 'toggle') {\n return\n }\n\n context.editor.send({\n type: 'list item.toggle',\n listItem: context.schemaType.name,\n })\n context.editor.send({type: 'focus'})\n },\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'list button',\n context: ({input}) => ({\n editor: input.editor,\n schemaType: input.schemaType,\n }),\n invoke: [\n {src: 'disable listener', input: ({context}) => ({editor: context.editor})},\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaType: context.schemaType,\n }),\n },\n ],\n initial: 'disabled',\n states: {\n disabled: {\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'enable': {\n target: '#list button.enabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'enable': {\n target: '#list button.enabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n enabled: {\n on: {\n toggle: {\n actions: ['toggle'],\n },\n },\n initial: 'inactive',\n states: {\n inactive: {\n on: {\n 'disable': {\n target: '#list button.disabled.inactive',\n },\n 'set active': {\n target: 'active',\n },\n },\n },\n active: {\n on: {\n 'disable': {\n target: '#list button.disabled.active',\n },\n 'set inactive': {\n target: 'inactive',\n },\n },\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type ListButtonEvent = {\n type: 'toggle'\n}\n\n/**\n * @beta\n */\nexport type ListButton = {\n snapshot: {\n matches: (\n state:\n | 'disabled'\n | 'enabled'\n | {disabled: 'inactive'}\n | {disabled: 'active'}\n | {enabled: 'inactive'}\n | {enabled: 'active'},\n ) => boolean\n }\n send: (event: ListButtonEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcuts and available events for a list button.\n */\nexport function useListButton(props: {\n schemaType: ToolbarListSchemaType\n}): ListButton {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(listButtonMachine, {\n input: {\n editor,\n schemaType: props.schemaType,\n },\n })\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n },\n send,\n }\n}\n","import {useEditor, type Editor} from '@portabletext/editor'\nimport {defineBehavior, raise} from '@portabletext/editor/behaviors'\nimport {useActorRef} from '@xstate/react'\nimport {fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport type {ToolbarStyleSchemaType} from './use-toolbar-schema'\n\nconst styleKeyboardShortcutsListener = fromCallback<\n AnyEventObject,\n {editor: Editor; schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>}\n>(({input}) => {\n const unregisterBehaviors = input.schemaTypes.flatMap((schemaType) => {\n const shortcut = schemaType.shortcut\n\n if (!shortcut) {\n return []\n }\n\n return [\n input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'keyboard.keydown',\n guard: ({event}) => shortcut.guard(event.originEvent),\n actions: [\n () => [raise({type: 'style.toggle', style: schemaType.name})],\n ],\n }),\n }),\n ]\n })\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n})\n\nconst styleKeyboardShortcutsMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n },\n input: {} as {\n editor: Editor\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n },\n events: {} as DisableListenerEvent | {type: 'style.toggle'},\n },\n actors: {\n 'disable listener': disableListener,\n 'style keyboard shortcuts listener': styleKeyboardShortcutsListener,\n },\n}).createMachine({\n id: 'style keyboard shortcuts',\n context: ({input}) => ({\n editor: input.editor,\n schemaTypes: input.schemaTypes,\n }),\n invoke: {\n src: 'disable listener',\n input: ({context}) => ({editor: context.editor}),\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n invoke: {\n src: 'style keyboard shortcuts listener',\n input: ({context}) => ({\n editor: context.editor,\n schemaTypes: context.schemaTypes,\n }),\n },\n on: {\n disable: {\n target: 'disabled',\n },\n },\n },\n },\n})\n\n/**\n * @beta\n * Registers keyboard shortcuts for a set of style schema types.\n */\nexport function useStyleKeyboardShortcuts(props: {\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n}) {\n const editor = useEditor()\n useActorRef(styleKeyboardShortcutsMachine, {\n input: {\n editor,\n schemaTypes: props.schemaTypes,\n },\n })\n}\n","import {\n useEditor,\n type Editor,\n type StyleSchemaType,\n} from '@portabletext/editor'\nimport * as selectors from '@portabletext/editor/selectors'\nimport {useActor} from '@xstate/react'\nimport {assign, fromCallback, setup, type AnyEventObject} from 'xstate'\nimport {disableListener, type DisableListenerEvent} from './disable-listener'\nimport {useStyleKeyboardShortcuts} from './use-style-keyboard-shortcuts'\nimport type {ToolbarStyleSchemaType} from './use-toolbar-schema'\n\ntype ActiveStyleListenerEvent = {\n type: 'set active style'\n style: StyleSchemaType['name'] | undefined\n}\n\nconst activeListener = fromCallback<\n AnyEventObject,\n {editor: Editor},\n ActiveStyleListenerEvent\n>(({input, sendBack}) => {\n return input.editor.on('*', () => {\n const snapshot = input.editor.getSnapshot()\n const activeStyle = selectors.getActiveStyle(snapshot)\n\n sendBack({type: 'set active style', style: activeStyle})\n }).unsubscribe\n})\n\nconst styleSelectorMachine = setup({\n types: {\n context: {} as {\n editor: Editor\n activeStyle: StyleSchemaType['name'] | undefined\n },\n input: {} as {\n editor: Editor\n },\n events: {} as\n | StyleSelectorEvent\n | DisableListenerEvent\n | ActiveStyleListenerEvent,\n },\n actors: {\n 'disable listener': disableListener,\n 'active listener': activeListener,\n },\n}).createMachine({\n id: 'style selector',\n context: ({input}) => ({\n editor: input.editor,\n activeStyle: undefined,\n }),\n invoke: [\n {\n src: 'disable listener',\n input: ({context}) => ({\n editor: context.editor,\n }),\n },\n {\n src: 'active listener',\n input: ({context}) => ({\n editor: context.editor,\n }),\n },\n ],\n on: {\n 'set active style': {\n guard: ({context, event}) => context.activeStyle !== event.style,\n actions: assign({\n activeStyle: ({event}) => event.style,\n }),\n },\n },\n initial: 'disabled',\n states: {\n disabled: {\n on: {\n enable: {\n target: 'enabled',\n },\n },\n },\n enabled: {\n on: {\n disable: {\n target: 'disabled',\n },\n toggle: {\n actions: [\n ({context, event}) => {\n context.editor.send({type: 'style.toggle', style: event.style})\n context.editor.send({type: 'focus'})\n },\n ],\n },\n },\n },\n },\n})\n\n/**\n * @beta\n */\nexport type StyleSelectorEvent = {\n type: 'toggle'\n style: StyleSchemaType['name']\n}\n\n/**\n * @beta\n */\nexport type StyleSelector = {\n snapshot: {\n matches: (state: 'disabled' | 'enabled') => boolean\n context: {\n activeStyle: StyleSchemaType['name'] | undefined\n }\n }\n send: (event: StyleSelectorEvent) => void\n}\n\n/**\n * @beta\n * Manages the state, keyboard shortcuts and available events for a style\n * selector.\n */\nexport function useStyleSelector(props: {\n schemaTypes: ReadonlyArray<ToolbarStyleSchemaType>\n}): StyleSelector {\n const editor = useEditor()\n const [actorSnapshot, send] = useActor(styleSelectorMachine, {\n input: {\n editor,\n },\n })\n useStyleKeyboardShortcuts(props)\n\n return {\n snapshot: {\n matches: (state) => actorSnapshot.matches(state),\n context: {\n activeStyle: actorSnapshot.context.activeStyle,\n },\n },\n send,\n }\n}\n"],"names":["useToolbarSchema","props","$","_c","editor","useEditor","schema","useEditorSelector","_temp","t0","decorators","t1","decorator","extendDecorator","map","annotations","t2","annotation","extendAnnotation","lists","t3","list","extendList","blockObjects","t4","blockObject","extendBlockObject","inlineObjects","t5","inlineObject","extendInlineObject","styles","t6","style","extendStyle","snapshot","context","disableListener","fromCallback","input","sendBack","on","getSnapshot","readOnly","type","unsubscribe","useMutuallyExclusiveAnnotation","schemaType","mutuallyExclusive","name","registerBehavior","behavior","defineBehavior","guard","event","activeMutuallyExclusive","filter","isActiveAnnotation","mode","actions","_temp2","useEffect","event_0","activeMutuallyExclusive_0","execute","annotation_0","raise","activeListener","selectors","keyboardShortcutRemove","shortcut","originEvent","effect","send","keyboardShortcutShowInsertDialog","annotationButtonMachine","setup","types","events","add annotation","value","remove annotation","actors","createMachine","id","invoke","src","initial","states","disabled","inactive","target","active","enabled","useAnnotationButton","useActor","matches","state","activeAnnotations","getActiveAnnotations","focusBlock","getFocusBlock","length","firstSelectedChild","dom","getChildNodes","at","Element","elementRef","React","createRef","current","flatMap","schemaTypes","find","_type","_key","node","annotationPopoverMachine","reset","assign","remove","entry","useAnnotationPopover","actorSnapshot","keyboardShortcutListener","blockObjectButtonMachine","insert","placement","enable","disable","useBlockObjectButton","isSelectionCollapsed","focusBlockObject","getFocusBlockObject","firstSelectedNode","getBlockNodes","path","blockObjectPopoverMachine","useBlockObjectPopover","decoratorKeyboardShortcutMachine","useDecoratorKeyboardShortcut","useActorRef","useMutuallyExclusiveDecorator","forward","isActiveDecorator","decoratorButtonMachine","toggle","useDecoratorButton","historyButtonsMachine","useHistoryButtons","inlineObjectButtonMachine","useInlineObjectButton","focusInlineObject","getFocusInlineObject","inlineObjectPopoverMachine","useInlineObjectPopover","isActiveListItem","listButtonMachine","listItem","useListButton","styleKeyboardShortcutsListener","unregisterBehaviors","unregisterBehavior","styleKeyboardShortcutsMachine","useStyleKeyboardShortcuts","activeStyle","getActiveStyle","styleSelectorMachine","undefined","useStyleSelector"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@portabletext/toolbar",
3
- "version": "2.1.1",
3
+ "version": "2.2.0",
4
4
  "description": "Utilities for building a toolbar for the Portable Text Editor",
5
5
  "keywords": [
6
6
  "portabletext",
@@ -51,10 +51,10 @@
51
51
  "react": "^19.1.1",
52
52
  "typescript": "5.9.2",
53
53
  "typescript-eslint": "^8.41.0",
54
- "@portabletext/editor": "2.7.1"
54
+ "@portabletext/editor": "2.8.0"
55
55
  },
56
56
  "peerDependencies": {
57
- "@portabletext/editor": "^2.7.1",
57
+ "@portabletext/editor": "^2.8.0",
58
58
  "react": "^19.1.1"
59
59
  },
60
60
  "scripts": {
@@ -4,6 +4,7 @@ import * as selectors from '@portabletext/editor/selectors'
4
4
  import {useActor} from '@xstate/react'
5
5
  import {fromCallback, setup, type AnyEventObject} from 'xstate'
6
6
  import {disableListener, type DisableListenerEvent} from './disable-listener'
7
+ import {useMutuallyExclusiveAnnotation} from './use-mutually-exclusive-annotation'
7
8
  import type {ToolbarAnnotationSchemaType} from './use-toolbar-schema'
8
9
 
9
10
  const activeListener = fromCallback<
@@ -293,6 +294,8 @@ export function useAnnotationButton(props: {
293
294
  },
294
295
  })
295
296
 
297
+ useMutuallyExclusiveAnnotation(props)
298
+
296
299
  return {
297
300
  snapshot: {
298
301
  matches: (state) => snapshot.matches(state),