@portabletext/toolbar 7.0.26 → 8.0.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.d.ts CHANGED
@@ -13,6 +13,7 @@ import {
13
13
  StyleSchemaType,
14
14
  } from '@portabletext/editor'
15
15
  import {InsertPlacement} from '@portabletext/editor/behaviors'
16
+ import {ApplicableSchema} from '@portabletext/editor/selectors'
16
17
  import type {KeyboardShortcut} from '@portabletext/keyboard-shortcuts'
17
18
  import type {RefObject} from 'react'
18
19
 
@@ -136,6 +137,8 @@ export declare type AnnotationPopoverEvent =
136
137
  type: 'close'
137
138
  }
138
139
 
140
+ export {ApplicableSchema}
141
+
139
142
  /**
140
143
  * @beta
141
144
  */
@@ -483,12 +486,12 @@ export declare type ToolbarListSchemaType = ListSchemaType & {
483
486
  * @beta
484
487
  */
485
488
  export declare type ToolbarSchema = {
486
- decorators?: ReadonlyArray<ToolbarDecoratorSchemaType>
487
- annotations?: ReadonlyArray<ToolbarAnnotationSchemaType>
488
- lists?: ReadonlyArray<ToolbarListSchemaType>
489
- blockObjects?: ReadonlyArray<ToolbarBlockObjectSchemaType>
490
- inlineObjects?: ReadonlyArray<ToolbarInlineObjectSchemaType>
491
- styles?: ReadonlyArray<ToolbarStyleSchemaType>
489
+ decorators: ReadonlyArray<ToolbarDecoratorSchemaType>
490
+ annotations: ReadonlyArray<ToolbarAnnotationSchemaType>
491
+ lists: ReadonlyArray<ToolbarListSchemaType>
492
+ blockObjects: ReadonlyArray<ToolbarBlockObjectSchemaType>
493
+ inlineObjects: ReadonlyArray<ToolbarInlineObjectSchemaType>
494
+ styles: ReadonlyArray<ToolbarStyleSchemaType>
492
495
  }
493
496
 
494
497
  /**
@@ -519,6 +522,19 @@ export declare function useAnnotationPopover(props: {
519
522
  schemaTypes: ReadonlyArray<ToolbarAnnotationSchemaType>
520
523
  }): AnnotationPopover
521
524
 
525
+ /**
526
+ * @beta
527
+ *
528
+ * React hook that subscribes to {@link getApplicableSchema} for the active
529
+ * editor and returns a stable reference across editor ticks while the
530
+ * applicable set is unchanged.
531
+ *
532
+ * Pair with {@link useToolbarSchema} to render a static toolbar whose
533
+ * buttons stay stable across selection moves and gate their enabled state
534
+ * on whether the corresponding name is in the relevant set.
535
+ */
536
+ export declare function useApplicableSchema(): ApplicableSchema
537
+
522
538
  /**
523
539
  * @beta
524
540
  * Manages the state, keyboard shortcut and available events for a block
@@ -592,25 +608,26 @@ export declare function useStyleSelector(props: {
592
608
 
593
609
  /**
594
610
  * @beta
595
- * Extend the editor's schema with default values, icons, shortcuts and more.
596
- * This makes it easier to use the schema to render toolbars, forms and other
597
- * UI components.
611
+ *
612
+ * Resolve the editor's full toolbar schema. Returns the union of every
613
+ * decorator, annotation, list, style, block object and inline object declared
614
+ * anywhere in the editor's schema graph that is reachable from a position
615
+ * where text is edited - the root schema merged with the sub-schema of every
616
+ * registered container whose field accepts text blocks. Useful for rendering
617
+ * a static toolbar whose buttons stay stable across selection moves.
618
+ *
619
+ * Re-renders only when the schema graph or the extension callbacks change.
620
+ * Pair with {@link useApplicableSchema} to determine which entries are
621
+ * applicable at the current selection (which buttons should be enabled vs.
622
+ * disabled).
598
623
  */
599
624
  export declare function useToolbarSchema(props: {
600
- extendDecorator?: (
601
- decorator: DecoratorSchemaType,
602
- ) => ToolbarDecoratorSchemaType
603
- extendAnnotation?: (
604
- annotation: AnnotationSchemaType,
605
- ) => ToolbarAnnotationSchemaType
606
- extendList?: (list: ListSchemaType) => ToolbarListSchemaType
607
- extendBlockObject?: (
608
- blockObject: BlockObjectSchemaType,
609
- ) => ToolbarBlockObjectSchemaType
610
- extendInlineObject?: (
611
- inlineObject: InlineObjectSchemaType,
612
- ) => ToolbarInlineObjectSchemaType
613
- extendStyle?: (style: StyleSchemaType) => ToolbarStyleSchemaType
625
+ extendDecorator?: ExtendDecoratorSchemaType
626
+ extendAnnotation?: ExtendAnnotationSchemaType
627
+ extendList?: ExtendListSchemaType
628
+ extendBlockObject?: ExtendBlockObjectSchemaType
629
+ extendInlineObject?: ExtendInlineObjectSchemaType
630
+ extendStyle?: ExtendStyleSchemaType
614
631
  }): ToolbarSchema
615
632
 
616
633
  export {}
package/dist/index.js CHANGED
@@ -1,48 +1,53 @@
1
- import { c } from "react/compiler-runtime";
2
1
  import { useEditor, useEditorSelector } from "@portabletext/editor";
3
- import { defineBehavior, execute, raise, effect, forward } from "@portabletext/editor/behaviors";
4
2
  import * as selectors from "@portabletext/editor/selectors";
5
- import { isActiveAnnotation } from "@portabletext/editor/selectors";
3
+ import { getApplicableSchema, compareApplicableSchema, isActiveAnnotation } from "@portabletext/editor/selectors";
4
+ import { c } from "react/compiler-runtime";
5
+ import { getUnionSchema } from "@portabletext/editor/traversal";
6
+ import { defineBehavior, execute, raise, effect, forward } from "@portabletext/editor/behaviors";
6
7
  import { useActor, useActorRef } from "@xstate/react";
7
8
  import { fromCallback, setup, assign } from "xstate";
8
9
  import * as React from "react";
9
10
  import { useEffect } from "react";
11
+ function useApplicableSchema() {
12
+ const editor = useEditor();
13
+ return useEditorSelector(editor, getApplicableSchema, compareApplicableSchema);
14
+ }
10
15
  function useToolbarSchema(props) {
11
- const $ = c(37), editor = useEditor(), schema = useEditorSelector(editor, _temp$2);
16
+ const $ = c(37), editor = useEditor(), union = useEditorSelector(editor, _temp$2, compareSchemas);
12
17
  let t0;
13
- if ($[0] !== props || $[1] !== schema.decorators) {
18
+ if ($[0] !== props || $[1] !== union.decorators) {
14
19
  let t12;
15
- $[3] !== props ? (t12 = (decorator) => props.extendDecorator?.(decorator) ?? decorator, $[3] = props, $[4] = t12) : t12 = $[4], t0 = schema.decorators.map(t12), $[0] = props, $[1] = schema.decorators, $[2] = t0;
20
+ $[3] !== props ? (t12 = (decorator) => props.extendDecorator?.(decorator) ?? decorator, $[3] = props, $[4] = t12) : t12 = $[4], t0 = union.decorators.map(t12), $[0] = props, $[1] = union.decorators, $[2] = t0;
16
21
  } else
17
22
  t0 = $[2];
18
23
  let t1;
19
- if ($[5] !== props || $[6] !== schema.annotations) {
24
+ if ($[5] !== props || $[6] !== union.annotations) {
20
25
  let t22;
21
- $[8] !== props ? (t22 = (annotation) => props.extendAnnotation?.(annotation) ?? annotation, $[8] = props, $[9] = t22) : t22 = $[9], t1 = schema.annotations.map(t22), $[5] = props, $[6] = schema.annotations, $[7] = t1;
26
+ $[8] !== props ? (t22 = (annotation) => props.extendAnnotation?.(annotation) ?? annotation, $[8] = props, $[9] = t22) : t22 = $[9], t1 = union.annotations.map(t22), $[5] = props, $[6] = union.annotations, $[7] = t1;
22
27
  } else
23
28
  t1 = $[7];
24
29
  let t2;
25
- if ($[10] !== props || $[11] !== schema.lists) {
30
+ if ($[10] !== props || $[11] !== union.lists) {
26
31
  let t32;
27
- $[13] !== props ? (t32 = (list) => props.extendList?.(list) ?? list, $[13] = props, $[14] = t32) : t32 = $[14], t2 = schema.lists.map(t32), $[10] = props, $[11] = schema.lists, $[12] = t2;
32
+ $[13] !== props ? (t32 = (list) => props.extendList?.(list) ?? list, $[13] = props, $[14] = t32) : t32 = $[14], t2 = union.lists.map(t32), $[10] = props, $[11] = union.lists, $[12] = t2;
28
33
  } else
29
34
  t2 = $[12];
30
35
  let t3;
31
- if ($[15] !== props || $[16] !== schema.blockObjects) {
36
+ if ($[15] !== props || $[16] !== union.blockObjects) {
32
37
  let t42;
33
- $[18] !== props ? (t42 = (blockObject) => props.extendBlockObject?.(blockObject) ?? blockObject, $[18] = props, $[19] = t42) : t42 = $[19], t3 = schema.blockObjects.map(t42), $[15] = props, $[16] = schema.blockObjects, $[17] = t3;
38
+ $[18] !== props ? (t42 = (blockObject) => props.extendBlockObject?.(blockObject) ?? blockObject, $[18] = props, $[19] = t42) : t42 = $[19], t3 = union.blockObjects.map(t42), $[15] = props, $[16] = union.blockObjects, $[17] = t3;
34
39
  } else
35
40
  t3 = $[17];
36
41
  let t4;
37
- if ($[20] !== props || $[21] !== schema.inlineObjects) {
42
+ if ($[20] !== props || $[21] !== union.inlineObjects) {
38
43
  let t52;
39
- $[23] !== props ? (t52 = (inlineObject) => props.extendInlineObject?.(inlineObject) ?? inlineObject, $[23] = props, $[24] = t52) : t52 = $[24], t4 = schema.inlineObjects.map(t52), $[20] = props, $[21] = schema.inlineObjects, $[22] = t4;
44
+ $[23] !== props ? (t52 = (inlineObject) => props.extendInlineObject?.(inlineObject) ?? inlineObject, $[23] = props, $[24] = t52) : t52 = $[24], t4 = union.inlineObjects.map(t52), $[20] = props, $[21] = union.inlineObjects, $[22] = t4;
40
45
  } else
41
46
  t4 = $[22];
42
47
  let t5;
43
- if ($[25] !== props || $[26] !== schema.styles) {
48
+ if ($[25] !== props || $[26] !== union.styles) {
44
49
  let t62;
45
- $[28] !== props ? (t62 = (style) => props.extendStyle?.(style) ?? style, $[28] = props, $[29] = t62) : t62 = $[29], t5 = schema.styles.map(t62), $[25] = props, $[26] = schema.styles, $[27] = t5;
50
+ $[28] !== props ? (t62 = (style) => props.extendStyle?.(style) ?? style, $[28] = props, $[29] = t62) : t62 = $[29], t5 = union.styles.map(t62), $[25] = props, $[26] = union.styles, $[27] = t5;
46
51
  } else
47
52
  t5 = $[27];
48
53
  let t6;
@@ -56,7 +61,20 @@ function useToolbarSchema(props) {
56
61
  }, $[30] = t0, $[31] = t1, $[32] = t2, $[33] = t3, $[34] = t4, $[35] = t5, $[36] = t6) : t6 = $[36], t6;
57
62
  }
58
63
  function _temp$2(snapshot) {
59
- return snapshot.context.schema;
64
+ return getUnionSchema(snapshot.context.schema, snapshot.context.containers);
65
+ }
66
+ function compareSchemas(a, b) {
67
+ return a === b ? !0 : compareNamed(a.decorators, b.decorators) && compareNamed(a.annotations, b.annotations) && compareNamed(a.lists, b.lists) && compareNamed(a.styles, b.styles) && compareNamed(a.blockObjects, b.blockObjects) && compareNamed(a.inlineObjects, b.inlineObjects);
68
+ }
69
+ function compareNamed(a, b) {
70
+ if (a === b)
71
+ return !0;
72
+ if (a.length !== b.length)
73
+ return !1;
74
+ for (let i = 0; i < a.length; i++)
75
+ if (a[i].name !== b[i].name)
76
+ return !1;
77
+ return !0;
60
78
  }
61
79
  const disableListener = fromCallback(({
62
80
  input,
@@ -376,9 +394,7 @@ const activeListener$5 = fromCallback(({
376
394
  return schemaType ? {
377
395
  value: annotation,
378
396
  schemaType,
379
- at: [{
380
- _key: focusBlock.node._key
381
- }, "markDefs", {
397
+ at: [...focusBlock.path, "markDefs", {
382
398
  _key: annotation._key
383
399
  }]
384
400
  } : [];
@@ -1993,6 +2009,7 @@ function useStyleSelector(props) {
1993
2009
  export {
1994
2010
  useAnnotationButton,
1995
2011
  useAnnotationPopover,
2012
+ useApplicableSchema,
1996
2013
  useBlockObjectButton,
1997
2014
  useBlockObjectPopover,
1998
2015
  useDecoratorButton,
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-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 // Send back the initial state\n if (input.editor.getSnapshot().context.readOnly) {\n sendBack({type: 'disable'})\n } else {\n sendBack({type: 'enable'})\n }\n\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 // Send back the initial state\n if (\n selectors.isActiveAnnotation(input.schemaType.name)(\n input.editor.getSnapshot(),\n )\n ) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n\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 // Send back the initial state\n if (\n selectors.isActiveDecorator(input.schemaType.name)(\n input.editor.getSnapshot(),\n )\n ) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n\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 // Send back the initial state\n if (\n selectors.isActiveListItem(input.schemaType.name)(\n input.editor.getSnapshot(),\n )\n ) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n\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 // Send back the initial state\n const activeStyle = selectors.getActiveStyle(input.editor.getSnapshot())\n sendBack({type: 'set active style', style: activeStyle})\n\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","getSnapshot","readOnly","type","on","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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"}
1
+ {"version":3,"file":"index.js","sources":["../src/use-applicable-schema.ts","../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 {useEditor, useEditorSelector} from '@portabletext/editor'\nimport {\n compareApplicableSchema,\n getApplicableSchema,\n type ApplicableSchema,\n} from '@portabletext/editor/selectors'\n\nexport type {ApplicableSchema}\n\n/**\n * @beta\n *\n * React hook that subscribes to {@link getApplicableSchema} for the active\n * editor and returns a stable reference across editor ticks while the\n * applicable set is unchanged.\n *\n * Pair with {@link useToolbarSchema} to render a static toolbar whose\n * buttons stay stable across selection moves and gate their enabled state\n * on whether the corresponding name is in the relevant set.\n */\nexport function useApplicableSchema(): ApplicableSchema {\n const editor = useEditor()\n return useEditorSelector(editor, getApplicableSchema, compareApplicableSchema)\n}\n","import {\n useEditor,\n useEditorSelector,\n type AnnotationDefinition,\n type AnnotationSchemaType,\n type BlockObjectSchemaType,\n type DecoratorDefinition,\n type DecoratorSchemaType,\n type EditorSchema,\n type InlineObjectSchemaType,\n type ListSchemaType,\n type StyleSchemaType,\n} from '@portabletext/editor'\nimport {getUnionSchema} from '@portabletext/editor/traversal'\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 *\n * Resolve the editor's full toolbar schema. Returns the union of every\n * decorator, annotation, list, style, block object and inline object declared\n * anywhere in the editor's schema graph that is reachable from a position\n * where text is edited - the root schema merged with the sub-schema of every\n * registered container whose field accepts text blocks. Useful for rendering\n * a static toolbar whose buttons stay stable across selection moves.\n *\n * Re-renders only when the schema graph or the extension callbacks change.\n * Pair with {@link useApplicableSchema} to determine which entries are\n * applicable at the current selection (which buttons should be enabled vs.\n * disabled).\n */\nexport function useToolbarSchema(props: {\n extendDecorator?: ExtendDecoratorSchemaType\n extendAnnotation?: ExtendAnnotationSchemaType\n extendList?: ExtendListSchemaType\n extendBlockObject?: ExtendBlockObjectSchemaType\n extendInlineObject?: ExtendInlineObjectSchemaType\n extendStyle?: ExtendStyleSchemaType\n}): ToolbarSchema {\n const editor = useEditor()\n const union = useEditorSelector(\n editor,\n (snapshot) =>\n getUnionSchema(snapshot.context.schema, snapshot.context.containers),\n compareSchemas,\n )\n\n return {\n decorators: union.decorators.map(\n (decorator) => props.extendDecorator?.(decorator) ?? decorator,\n ),\n annotations: union.annotations.map(\n (annotation) => props.extendAnnotation?.(annotation) ?? annotation,\n ),\n lists: union.lists.map((list) => props.extendList?.(list) ?? list),\n blockObjects: union.blockObjects.map(\n (blockObject) => props.extendBlockObject?.(blockObject) ?? blockObject,\n ),\n inlineObjects: union.inlineObjects.map(\n (inlineObject) =>\n props.extendInlineObject?.(inlineObject) ?? inlineObject,\n ),\n styles: union.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\nfunction compareSchemas(a: EditorSchema, b: EditorSchema) {\n if (a === b) {\n return true\n }\n return (\n compareNamed(a.decorators, b.decorators) &&\n compareNamed(a.annotations, b.annotations) &&\n compareNamed(a.lists, b.lists) &&\n compareNamed(a.styles, b.styles) &&\n compareNamed(a.blockObjects, b.blockObjects) &&\n compareNamed(a.inlineObjects, b.inlineObjects)\n )\n}\n\nfunction compareNamed(\n a: ReadonlyArray<{name: string}>,\n b: ReadonlyArray<{name: string}>,\n) {\n if (a === b) {\n return true\n }\n if (a.length !== b.length) {\n return false\n }\n for (let i = 0; i < a.length; i++) {\n if (a[i]!.name !== b[i]!.name) {\n return false\n }\n }\n return true\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 // Send back the initial state\n if (input.editor.getSnapshot().context.readOnly) {\n sendBack({type: 'disable'})\n } else {\n sendBack({type: 'enable'})\n }\n\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 // Send back the initial state\n if (\n selectors.isActiveAnnotation(input.schemaType.name)(\n input.editor.getSnapshot(),\n )\n ) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n\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: [...focusBlock.path, 'markDefs', {_key: annotation._key}],\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 // Send back the initial state\n if (\n selectors.isActiveDecorator(input.schemaType.name)(\n input.editor.getSnapshot(),\n )\n ) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n\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 // Send back the initial state\n if (\n selectors.isActiveListItem(input.schemaType.name)(\n input.editor.getSnapshot(),\n )\n ) {\n sendBack({type: 'set active'})\n } else {\n sendBack({type: 'set inactive'})\n }\n\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 // Send back the initial state\n const activeStyle = selectors.getActiveStyle(input.editor.getSnapshot())\n sendBack({type: 'set active style', style: activeStyle})\n\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":["useApplicableSchema","editor","useEditor","useEditorSelector","getApplicableSchema","compareApplicableSchema","useToolbarSchema","props","$","_c","union","_temp","compareSchemas","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","getUnionSchema","context","schema","containers","a","b","compareNamed","length","i","name","disableListener","fromCallback","input","sendBack","getSnapshot","readOnly","type","on","unsubscribe","useMutuallyExclusiveAnnotation","schemaType","mutuallyExclusive","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","firstSelectedChild","dom","getChildNodes","at","Element","elementRef","React","createRef","current","flatMap","schemaTypes","find","_type","path","_key","annotationPopoverMachine","reset","assign","remove","entry","useAnnotationPopover","actorSnapshot","keyboardShortcutListener","blockObjectButtonMachine","insert","placement","enable","disable","useBlockObjectButton","isSelectionCollapsed","focusBlockObject","getFocusBlockObject","node","firstSelectedNode","getBlockNodes","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": "7.0.26",
3
+ "version": "8.0.0",
4
4
  "description": "Utilities for building a toolbar for the Portable Text Editor",
5
5
  "keywords": [
6
6
  "portabletext",
@@ -30,25 +30,30 @@
30
30
  ],
31
31
  "dependencies": {
32
32
  "@xstate/react": "^6.1.0",
33
- "xstate": "^5.30.0",
33
+ "xstate": "^5.31.1",
34
34
  "@portabletext/keyboard-shortcuts": "^2.1.2"
35
35
  },
36
36
  "devDependencies": {
37
37
  "@sanity/pkg-utils": "^10.2.1",
38
38
  "@sanity/tsconfig": "^2.1.0",
39
- "@types/react": "^19.2.7",
39
+ "@types/react": "^19.2.14",
40
+ "@vitejs/plugin-react": "^5.2.0",
41
+ "@vitest/browser": "^4.1.4",
42
+ "@vitest/browser-playwright": "^4.1.4",
40
43
  "babel-plugin-react-compiler": "^1.0.0",
41
44
  "eslint": "^9.39.1",
42
45
  "eslint-formatter-gha": "^1.6.0",
43
- "eslint-plugin-react-hooks": "^7.0.1",
44
- "react": "^19.2.3",
46
+ "eslint-plugin-react-hooks": "^7.1.1",
47
+ "react": "^19.2.5",
45
48
  "typescript": "5.9.3",
46
49
  "typescript-eslint": "^8.48.0",
47
- "@portabletext/editor": "^6.6.3"
50
+ "vitest": "^4.1.4",
51
+ "@portabletext/schema": "2.2.0",
52
+ "@portabletext/editor": "^7.0.0"
48
53
  },
49
54
  "peerDependencies": {
50
- "@portabletext/editor": "^6.6.3",
51
- "react": "^19.2.3"
55
+ "@portabletext/editor": "^7.0.0",
56
+ "react": "^19.2.5"
52
57
  },
53
58
  "engines": {
54
59
  "node": ">=20.19 <22 || >=22.12"
@@ -61,6 +66,13 @@
61
66
  "check:types:watch": "tsc --watch",
62
67
  "clean": "del .turbo && del dist && del node_modules",
63
68
  "dev": "pkg-utils watch",
64
- "lint:fix": "biome lint --write ."
69
+ "lint:fix": "biome lint --write .",
70
+ "test:browser": "vitest --run --project browser",
71
+ "test:browser:chromium": "vitest run --project \"browser (chromium)\"",
72
+ "test:browser:chromium:watch": "vitest watch --project \"browser (chromium)\"",
73
+ "test:browser:firefox": "vitest run --project \"browser (firefox)\"",
74
+ "test:browser:firefox:watch": "vitest watch --project \"browser (firefox)\"",
75
+ "test:browser:webkit": "vitest run --project \"browser (webkit)\"",
76
+ "test:browser:webkit:watch": "vitest watch --project \"browser (webkit)\""
65
77
  }
66
78
  }