@portabletext/editor 1.33.3 → 1.33.4

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.
Files changed (67) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +11 -204
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/behavior.markdown.cjs +7 -7
  4. package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
  5. package/lib/_chunks-cjs/plugin.event-listener.cjs +196 -25
  6. package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
  7. package/lib/_chunks-cjs/selector.get-text-before.cjs +3 -3
  8. package/lib/_chunks-cjs/selector.get-text-before.cjs.map +1 -1
  9. package/lib/_chunks-cjs/selector.is-active-style.cjs +246 -0
  10. package/lib/_chunks-cjs/selector.is-active-style.cjs.map +1 -0
  11. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs +23 -198
  12. package/lib/_chunks-cjs/selector.is-at-the-start-of-block.cjs.map +1 -1
  13. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs +3 -3
  14. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
  15. package/lib/_chunks-cjs/util.reverse-selection.cjs +0 -135
  16. package/lib/_chunks-cjs/util.reverse-selection.cjs.map +1 -1
  17. package/lib/_chunks-cjs/util.slice-blocks.cjs +138 -1
  18. package/lib/_chunks-cjs/util.slice-blocks.cjs.map +1 -1
  19. package/lib/_chunks-es/behavior.core.js +9 -202
  20. package/lib/_chunks-es/behavior.core.js.map +1 -1
  21. package/lib/_chunks-es/behavior.markdown.js +1 -1
  22. package/lib/_chunks-es/plugin.event-listener.js +193 -23
  23. package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
  24. package/lib/_chunks-es/selector.get-text-before.js +2 -1
  25. package/lib/_chunks-es/selector.get-text-before.js.map +1 -1
  26. package/lib/_chunks-es/selector.is-active-style.js +249 -0
  27. package/lib/_chunks-es/selector.is-active-style.js.map +1 -0
  28. package/lib/_chunks-es/selector.is-at-the-start-of-block.js +12 -187
  29. package/lib/_chunks-es/selector.is-at-the-start-of-block.js.map +1 -1
  30. package/lib/_chunks-es/util.block-offsets-to-selection.js +1 -1
  31. package/lib/_chunks-es/util.reverse-selection.js +1 -136
  32. package/lib/_chunks-es/util.reverse-selection.js.map +1 -1
  33. package/lib/_chunks-es/util.slice-blocks.js +140 -3
  34. package/lib/_chunks-es/util.slice-blocks.js.map +1 -1
  35. package/lib/index.d.cts +1 -115
  36. package/lib/index.d.ts +1 -115
  37. package/lib/plugins/index.cjs +11 -11
  38. package/lib/plugins/index.cjs.map +1 -1
  39. package/lib/plugins/index.d.cts +1 -115
  40. package/lib/plugins/index.d.ts +1 -115
  41. package/lib/plugins/index.js +1 -1
  42. package/lib/selectors/index.cjs +16 -21
  43. package/lib/selectors/index.cjs.map +1 -1
  44. package/lib/selectors/index.js +7 -11
  45. package/lib/selectors/index.js.map +1 -1
  46. package/lib/utils/index.cjs +13 -13
  47. package/lib/utils/index.cjs.map +1 -1
  48. package/lib/utils/index.js +3 -3
  49. package/package.json +1 -1
  50. package/src/behaviors/behavior.core.annotations.ts +0 -24
  51. package/src/behaviors/behavior.core.decorators.ts +0 -19
  52. package/src/behaviors/behavior.core.insert-break.ts +4 -4
  53. package/src/behaviors/behavior.core.lists.ts +0 -30
  54. package/src/behaviors/behavior.core.ts +2 -17
  55. package/src/behaviors/behavior.default.ts +198 -0
  56. package/src/behaviors/behavior.foundational.ts +12 -12
  57. package/src/converters/converter.text-html.serialize.test.ts +1 -1
  58. package/src/editor/editor-machine.ts +8 -8
  59. package/src/selectors/selector.get-selection-text.ts +14 -89
  60. package/src/utils/util.slice-blocks.ts +12 -1
  61. package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs +0 -97
  62. package/lib/_chunks-cjs/selector.get-trimmed-selection.cjs.map +0 -1
  63. package/lib/_chunks-es/selector.get-trimmed-selection.js +0 -100
  64. package/lib/_chunks-es/selector.get-trimmed-selection.js.map +0 -1
  65. package/src/behaviors/behavior.core.deserialize.ts +0 -60
  66. package/src/behaviors/behavior.core.serialize.ts +0 -44
  67. package/src/behaviors/behavior.core.style.ts +0 -19
package/lib/index.d.cts CHANGED
@@ -65,12 +65,10 @@ import {
65
65
  } from 'xstate'
66
66
  import {GuardArgs} from 'xstate/guards'
67
67
  import {
68
- BehaviorEvent as BehaviorEvent_2,
69
68
  BlockOffset as BlockOffset_2,
70
69
  PortableTextMemberSchemaTypes as PortableTextMemberSchemaTypes_2,
71
70
  } from '..'
72
71
  import {MIMEType as MIMEType_2} from '../internal-utils/mime-type'
73
- import {PickFromUnion as PickFromUnion_2} from '../type-utils'
74
72
 
75
73
  /**
76
74
  * @public
@@ -2139,119 +2137,7 @@ declare const editorMachine: StateMachine<
2139
2137
  AnyEventObject
2140
2138
  >
2141
2139
  }) => {
2142
- behaviors: Set<
2143
- Behavior<
2144
- | 'focus'
2145
- | 'delete'
2146
- | 'select'
2147
- | 'serialize'
2148
- | 'copy'
2149
- | 'serialization.failure'
2150
- | 'serialization.success'
2151
- | 'deserialize'
2152
- | 'deserialization.failure'
2153
- | 'deserialization.success'
2154
- | 'annotation.add'
2155
- | 'annotation.remove'
2156
- | 'annotation.toggle'
2157
- | 'block.set'
2158
- | 'block.unset'
2159
- | 'blur'
2160
- | 'data transfer.set'
2161
- | 'decorator.add'
2162
- | 'decorator.remove'
2163
- | 'decorator.toggle'
2164
- | 'delete.backward'
2165
- | 'delete.block'
2166
- | 'delete.forward'
2167
- | 'delete.text'
2168
- | 'history.redo'
2169
- | 'history.undo'
2170
- | 'insert.blocks'
2171
- | 'insert.block object'
2172
- | 'insert.inline object'
2173
- | 'insert.break'
2174
- | 'insert.soft break'
2175
- | 'insert.block'
2176
- | 'insert.span'
2177
- | 'insert.text'
2178
- | 'insert.text block'
2179
- | 'list item.add'
2180
- | 'list item.remove'
2181
- | 'list item.toggle'
2182
- | 'move.block'
2183
- | 'move.block down'
2184
- | 'move.block up'
2185
- | 'select.previous block'
2186
- | 'select.next block'
2187
- | 'style.add'
2188
- | 'style.remove'
2189
- | 'style.toggle'
2190
- | 'text block.set'
2191
- | 'text block.unset'
2192
- | 'key.down'
2193
- | 'key.up'
2194
- | 'paste'
2195
- | `custom.${string}`,
2196
- true,
2197
- PickFromUnion_2<
2198
- BehaviorEvent_2,
2199
- 'type',
2200
- | 'focus'
2201
- | 'delete'
2202
- | 'select'
2203
- | 'serialize'
2204
- | 'copy'
2205
- | 'serialization.failure'
2206
- | 'serialization.success'
2207
- | 'deserialize'
2208
- | 'deserialization.failure'
2209
- | 'deserialization.success'
2210
- | 'annotation.add'
2211
- | 'annotation.remove'
2212
- | 'annotation.toggle'
2213
- | 'block.set'
2214
- | 'block.unset'
2215
- | 'blur'
2216
- | 'data transfer.set'
2217
- | 'decorator.add'
2218
- | 'decorator.remove'
2219
- | 'decorator.toggle'
2220
- | 'delete.backward'
2221
- | 'delete.block'
2222
- | 'delete.forward'
2223
- | 'delete.text'
2224
- | 'history.redo'
2225
- | 'history.undo'
2226
- | 'insert.blocks'
2227
- | 'insert.block object'
2228
- | 'insert.inline object'
2229
- | 'insert.break'
2230
- | 'insert.soft break'
2231
- | 'insert.block'
2232
- | 'insert.span'
2233
- | 'insert.text'
2234
- | 'insert.text block'
2235
- | 'list item.add'
2236
- | 'list item.remove'
2237
- | 'list item.toggle'
2238
- | 'move.block'
2239
- | 'move.block down'
2240
- | 'move.block up'
2241
- | 'select.previous block'
2242
- | 'select.next block'
2243
- | 'style.add'
2244
- | 'style.remove'
2245
- | 'style.toggle'
2246
- | 'text block.set'
2247
- | 'text block.unset'
2248
- | 'key.down'
2249
- | 'key.up'
2250
- | 'paste'
2251
- | `custom.${string}`
2252
- >
2253
- >
2254
- >
2140
+ behaviors: Set<Behavior>
2255
2141
  converters: Set<Converter>
2256
2142
  keyGenerator: () => string
2257
2143
  pendingEvents: never[]
package/lib/index.d.ts CHANGED
@@ -65,12 +65,10 @@ import {
65
65
  } from 'xstate'
66
66
  import {GuardArgs} from 'xstate/guards'
67
67
  import {
68
- BehaviorEvent as BehaviorEvent_2,
69
68
  BlockOffset as BlockOffset_2,
70
69
  PortableTextMemberSchemaTypes as PortableTextMemberSchemaTypes_2,
71
70
  } from '..'
72
71
  import {MIMEType as MIMEType_2} from '../internal-utils/mime-type'
73
- import {PickFromUnion as PickFromUnion_2} from '../type-utils'
74
72
 
75
73
  /**
76
74
  * @public
@@ -2139,119 +2137,7 @@ declare const editorMachine: StateMachine<
2139
2137
  AnyEventObject
2140
2138
  >
2141
2139
  }) => {
2142
- behaviors: Set<
2143
- Behavior<
2144
- | 'focus'
2145
- | 'delete'
2146
- | 'select'
2147
- | 'serialize'
2148
- | 'copy'
2149
- | 'serialization.failure'
2150
- | 'serialization.success'
2151
- | 'deserialize'
2152
- | 'deserialization.failure'
2153
- | 'deserialization.success'
2154
- | 'annotation.add'
2155
- | 'annotation.remove'
2156
- | 'annotation.toggle'
2157
- | 'block.set'
2158
- | 'block.unset'
2159
- | 'blur'
2160
- | 'data transfer.set'
2161
- | 'decorator.add'
2162
- | 'decorator.remove'
2163
- | 'decorator.toggle'
2164
- | 'delete.backward'
2165
- | 'delete.block'
2166
- | 'delete.forward'
2167
- | 'delete.text'
2168
- | 'history.redo'
2169
- | 'history.undo'
2170
- | 'insert.blocks'
2171
- | 'insert.block object'
2172
- | 'insert.inline object'
2173
- | 'insert.break'
2174
- | 'insert.soft break'
2175
- | 'insert.block'
2176
- | 'insert.span'
2177
- | 'insert.text'
2178
- | 'insert.text block'
2179
- | 'list item.add'
2180
- | 'list item.remove'
2181
- | 'list item.toggle'
2182
- | 'move.block'
2183
- | 'move.block down'
2184
- | 'move.block up'
2185
- | 'select.previous block'
2186
- | 'select.next block'
2187
- | 'style.add'
2188
- | 'style.remove'
2189
- | 'style.toggle'
2190
- | 'text block.set'
2191
- | 'text block.unset'
2192
- | 'key.down'
2193
- | 'key.up'
2194
- | 'paste'
2195
- | `custom.${string}`,
2196
- true,
2197
- PickFromUnion_2<
2198
- BehaviorEvent_2,
2199
- 'type',
2200
- | 'focus'
2201
- | 'delete'
2202
- | 'select'
2203
- | 'serialize'
2204
- | 'copy'
2205
- | 'serialization.failure'
2206
- | 'serialization.success'
2207
- | 'deserialize'
2208
- | 'deserialization.failure'
2209
- | 'deserialization.success'
2210
- | 'annotation.add'
2211
- | 'annotation.remove'
2212
- | 'annotation.toggle'
2213
- | 'block.set'
2214
- | 'block.unset'
2215
- | 'blur'
2216
- | 'data transfer.set'
2217
- | 'decorator.add'
2218
- | 'decorator.remove'
2219
- | 'decorator.toggle'
2220
- | 'delete.backward'
2221
- | 'delete.block'
2222
- | 'delete.forward'
2223
- | 'delete.text'
2224
- | 'history.redo'
2225
- | 'history.undo'
2226
- | 'insert.blocks'
2227
- | 'insert.block object'
2228
- | 'insert.inline object'
2229
- | 'insert.break'
2230
- | 'insert.soft break'
2231
- | 'insert.block'
2232
- | 'insert.span'
2233
- | 'insert.text'
2234
- | 'insert.text block'
2235
- | 'list item.add'
2236
- | 'list item.remove'
2237
- | 'list item.toggle'
2238
- | 'move.block'
2239
- | 'move.block down'
2240
- | 'move.block up'
2241
- | 'select.previous block'
2242
- | 'select.next block'
2243
- | 'style.add'
2244
- | 'style.remove'
2245
- | 'style.toggle'
2246
- | 'text block.set'
2247
- | 'text block.unset'
2248
- | 'key.down'
2249
- | 'key.up'
2250
- | 'paste'
2251
- | `custom.${string}`
2252
- >
2253
- >
2254
- >
2140
+ behaviors: Set<Behavior>
2255
2141
  converters: Set<Converter>
2256
2142
  keyGenerator: () => string
2257
2143
  pendingEvents: never[]
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: !0 });
3
- var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), plugin_eventListener = require("../_chunks-cjs/plugin.event-listener.cjs"), behavior_markdown = require("../_chunks-cjs/behavior.markdown.cjs"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), xstate = require("xstate"), selector_isAtTheStartOfBlock = require("../_chunks-cjs/selector.is-at-the-start-of-block.cjs"), util_reverseSelection = require("../_chunks-cjs/util.reverse-selection.cjs"), selector_getTextBefore = require("../_chunks-cjs/selector.get-text-before.cjs"), behavior_core = require("../_chunks-cjs/behavior.core.cjs"), jsxRuntime = require("react/jsx-runtime"), utils_index = require("../utils/index.cjs");
3
+ var reactCompilerRuntime = require("react-compiler-runtime"), React = require("react"), plugin_eventListener = require("../_chunks-cjs/plugin.event-listener.cjs"), behavior_markdown = require("../_chunks-cjs/behavior.markdown.cjs"), react = require("@xstate/react"), isEqual = require("lodash/isEqual.js"), xstate = require("xstate"), selector_isAtTheStartOfBlock = require("../_chunks-cjs/selector.is-at-the-start-of-block.cjs"), util_sliceBlocks = require("../_chunks-cjs/util.slice-blocks.cjs"), selector_getTextBefore = require("../_chunks-cjs/selector.get-text-before.cjs"), behavior_core = require("../_chunks-cjs/behavior.core.cjs"), jsxRuntime = require("react/jsx-runtime"), utils_index = require("../utils/index.cjs");
4
4
  function _interopDefaultCompat(e) {
5
5
  return e && typeof e == "object" && "default" in e ? e : { default: e };
6
6
  }
@@ -69,7 +69,7 @@ const emphasisListener = ({
69
69
  context
70
70
  }), selectionStartPoint = selector_isAtTheStartOfBlock.getSelectionStartPoint({
71
71
  context
72
- }), selectionStartOffset = selectionStartPoint ? util_reverseSelection.spanSelectionPointToBlockOffset({
72
+ }), selectionStartOffset = selectionStartPoint ? util_sliceBlocks.spanSelectionPointToBlockOffset({
73
73
  value: context.value,
74
74
  selectionPoint: selectionStartPoint
75
75
  }) : void 0;
@@ -97,11 +97,11 @@ const emphasisListener = ({
97
97
  path: focusTextBlock.path,
98
98
  offset: selectionStartOffset.offset + 1
99
99
  }
100
- }, anchor = util_reverseSelection.blockOffsetToSpanSelectionPoint({
100
+ }, anchor = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
101
101
  value: context.value,
102
102
  blockOffset: prefixOffsets.focus,
103
103
  direction: "backward"
104
- }), focus = util_reverseSelection.blockOffsetToSpanSelectionPoint({
104
+ }), focus = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
105
105
  value: context.value,
106
106
  blockOffset: suffixOffsets.anchor,
107
107
  direction: "forward"
@@ -136,11 +136,11 @@ const emphasisListener = ({
136
136
  path: focusTextBlock.path,
137
137
  offset: selectionStartOffset.offset + 1
138
138
  }
139
- }, anchor = util_reverseSelection.blockOffsetToSpanSelectionPoint({
139
+ }, anchor = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
140
140
  value: context.value,
141
141
  blockOffset: prefixOffsets.focus,
142
142
  direction: "backward"
143
- }), focus = util_reverseSelection.blockOffsetToSpanSelectionPoint({
143
+ }), focus = util_sliceBlocks.blockOffsetToSpanSelectionPoint({
144
144
  value: context.value,
145
145
  blockOffset: suffixOffsets.anchor,
146
146
  direction: "forward"
@@ -201,10 +201,10 @@ const emphasisListener = ({
201
201
  return {
202
202
  blockOffsets: void 0
203
203
  };
204
- const anchor = util_reverseSelection.spanSelectionPointToBlockOffset({
204
+ const anchor = util_sliceBlocks.spanSelectionPointToBlockOffset({
205
205
  value: context.value,
206
206
  selectionPoint: event.selection.anchor
207
- }), focus = util_reverseSelection.spanSelectionPointToBlockOffset({
207
+ }), focus = util_sliceBlocks.spanSelectionPointToBlockOffset({
208
208
  value: context.value,
209
209
  selectionPoint: event.selection.focus
210
210
  });
@@ -404,13 +404,13 @@ const oneLineBehaviors = [
404
404
  });
405
405
  if (!focusTextBlock || !utils_index.isTextBlock(context, event.block) || !selectionStartPoint || !selectionEndPoint)
406
406
  return !1;
407
- const blockStartPoint = util_reverseSelection.getBlockStartPoint(focusTextBlock), blockEndPoint = util_reverseSelection.getBlockEndPoint(focusTextBlock), newFocus = util_reverseSelection.getBlockEndPoint({
407
+ const blockStartPoint = util_sliceBlocks.getBlockStartPoint(focusTextBlock), blockEndPoint = util_sliceBlocks.getBlockEndPoint(focusTextBlock), newFocus = util_sliceBlocks.getBlockEndPoint({
408
408
  node: event.block,
409
409
  path: [{
410
410
  _key: event.block._key
411
411
  }]
412
412
  });
413
- return util_reverseSelection.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) && util_reverseSelection.isEqualSelectionPoints(blockEndPoint, selectionEndPoint) ? {
413
+ return util_sliceBlocks.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) && util_sliceBlocks.isEqualSelectionPoints(blockEndPoint, selectionEndPoint) ? {
414
414
  focusTextBlock,
415
415
  newFocus
416
416
  } : !1;
@@ -469,7 +469,7 @@ const oneLineBehaviors = [
469
469
  context,
470
470
  targetBlock: blockBeforeStartPoint,
471
471
  incomingBlock: event.block
472
- }), newFocus = util_reverseSelection.getBlockEndPoint({
472
+ }), newFocus = util_sliceBlocks.getBlockEndPoint({
473
473
  node: targetBlock,
474
474
  path: [{
475
475
  _key: targetBlock._key
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.editor-ref.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.markdown-emphasis.ts","../../src/plugins/plugin.markdown.tsx","../../src/plugins/plugin.one-line.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {Behavior} from '../behaviors'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport function BehaviorPlugin(props: {behaviors: Array<Behavior>}) {\n const editor = useEditor()\n\n useEffect(() => {\n const unregisterBehaviors = props.behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n unregisterBehaviors.forEach((unregister) => unregister())\n }\n }, [editor, props.behaviors])\n\n return null\n}\n","import React from 'react'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport const EditorRefPlugin = React.forwardRef<Editor | null>((_, ref) => {\n const editor = useEditor()\n\n const portableTextEditorRef = React.useRef(editor)\n\n React.useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n","const asteriskPairRegex = '(?<!\\\\*)\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*(?!\\\\*)'\nconst underscorePairRegex = '(?<!_)_(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)_(?!_)'\nconst italicRegex = new RegExp(`(${asteriskPairRegex}|${underscorePairRegex})$`)\n\nconst doubleAsteriskPairRegex =\n '(?<!\\\\*)\\\\*\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*\\\\*(?!\\\\*)'\nconst doubleUnderscorePairRegex = '(?<!_)__(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)__(?!_)'\nconst boldRegex = new RegExp(\n `(${doubleAsteriskPairRegex}|${doubleUnderscorePairRegex})$`,\n)\n\nexport function getTextToItalic(text: string) {\n return text.match(italicRegex)?.at(0)\n}\n\nexport function getTextToBold(text: string) {\n return text.match(boldRegex)?.at(0)\n}\n","import {useActorRef} from '@xstate/react'\nimport {isEqual} from 'lodash'\nimport {\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport {\n getTextToBold,\n getTextToItalic,\n} from '../internal-utils/get-text-to-emphasize'\nimport type {EditorSchema} from '../selectors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownEmphasisBehaviorsConfig = {\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n */\nexport function useMarkdownEmphasisBehaviors(props: {\n config: MarkdownEmphasisBehaviorsConfig\n}) {\n const editor = useEditor()\n\n useActorRef(emphasisMachine, {\n input: {\n editor,\n boldDecorator: props.config.boldDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n italicDecorator: props.config.italicDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n },\n })\n}\n\ntype MarkdownEmphasisEvent =\n | {\n type: 'emphasis.add'\n blockOffset: utils.BlockOffset\n }\n | {\n type: 'selection'\n blockOffsets?: {\n anchor: utils.BlockOffset\n focus: utils.BlockOffset\n }\n }\n | {\n type: 'delete.backward'\n }\n\nconst emphasisListener: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor; boldDecorator?: string; italicDecorator?: string}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const boldDecorator = input.boldDecorator\n const italicDecorator = input.italicDecorator\n\n if (boldDecorator === undefined && italicDecorator === undefined) {\n return false\n }\n\n if (event.text !== '*' && event.text !== '_') {\n return false\n }\n\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionStartOffset = selectionStartPoint\n ? utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartOffset) {\n return false\n }\n\n const textBefore = selectors.getBlockTextBefore({context})\n\n const textToItalic = getTextToItalic(`${textBefore}${event.text}`)\n\n if (textToItalic !== undefined && italicDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1 + 1,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: italicDecorator,\n selection: {anchor, focus},\n }\n }\n\n const textToBold = getTextToBold(`${textBefore}${event.text}`)\n\n if (textToBold !== undefined && boldDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1 + 2,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset - 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: boldDecorator,\n selection: {anchor, focus},\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {prefixOffsets, suffixOffsets, decorator, selection}) => [\n {\n type: 'decorator.add',\n decorator,\n selection,\n },\n {\n type: 'delete.text',\n ...suffixOffsets,\n },\n {\n type: 'delete.text',\n ...prefixOffsets,\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({\n type: 'emphasis.add',\n blockOffset: {\n ...suffixOffsets.anchor,\n offset:\n suffixOffsets.anchor.offset -\n (prefixOffsets.focus.offset - prefixOffsets.anchor.offset),\n },\n })\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst selectionListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'select',\n guard: ({context, event}) => {\n if (!event.selection) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.focus,\n })\n\n if (!anchor || !focus) {\n return {blockOffsets: undefined}\n }\n\n return {\n blockOffsets: {\n anchor,\n focus,\n },\n }\n },\n actions: [\n (_, {blockOffsets}) => [\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'selection', blockOffsets})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst deleteBackwardListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'delete.backward',\n actions: [\n () => [\n {\n type: 'history.undo',\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'delete.backward'})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst emphasisMachine = setup({\n types: {\n context: {} as {\n boldDecorator?: string\n italicDecorator?: string\n offsetAfterEmphasis?: utils.BlockOffset\n editor: Editor\n },\n input: {} as {\n boldDecorator?: string\n italicDecorator?: string\n editor: Editor\n },\n events: {} as MarkdownEmphasisEvent,\n },\n actors: {\n 'emphasis listener': fromCallback(emphasisListener),\n 'delete.backward listener': fromCallback(deleteBackwardListenerCallback),\n 'selection listener': fromCallback(selectionListenerCallback),\n },\n}).createMachine({\n id: 'emphasis',\n context: ({input}) => ({\n boldDecorator: input.boldDecorator,\n italicDecorator: input.italicDecorator,\n editor: input.editor,\n }),\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'emphasis listener',\n input: ({context}) => ({\n editor: context.editor,\n boldDecorator: context.boldDecorator,\n italicDecorator: context.italicDecorator,\n }),\n },\n ],\n on: {\n 'emphasis.add': {\n target: 'emphasis added',\n actions: assign({\n offsetAfterEmphasis: ({event}) => event.blockOffset,\n }),\n },\n },\n },\n 'emphasis added': {\n exit: [\n assign({\n offsetAfterEmphasis: undefined,\n }),\n ],\n invoke: [\n {\n src: 'selection listener',\n input: ({context}) => ({editor: context.editor}),\n },\n {\n src: 'delete.backward listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n on: {\n 'selection': {\n target: 'idle',\n guard: ({context, event}) => {\n const selectionChanged = !isEqual(\n {\n anchor: context.offsetAfterEmphasis,\n focus: context.offsetAfterEmphasis,\n },\n event.blockOffsets,\n )\n\n return selectionChanged\n },\n },\n 'delete.backward': {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {\n useMarkdownEmphasisBehaviors,\n type MarkdownEmphasisBehaviorsConfig,\n} from '../behaviors/behavior.markdown-emphasis'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport type MarkdownPluginConfig = MarkdownBehaviorsConfig &\n MarkdownEmphasisBehaviorsConfig\n\n/**\n * @beta\n * Add markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.\n *\n * @example\n * Configure the bundled markdown behaviors\n * ```ts\n * import {EditorProvider} from '@portabletext/editor'\n * import {MarkdownPlugin} from '@portabletext/editor/plugins'\n *\n * function App() {\n * return (\n * <EditorProvider>\n * <MarkdownPlugin\n * config={{\n * boldDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n * italicDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'em')?.value,\n * horizontalRuleObject: ({schema}) => {\n * const name = schema.blockObjects.find(\n * (object) => object.name === 'break',\n * )?.name\n * return name ? {name} : undefined\n * },\n * defaultStyle: ({schema}) => schema.styles[0].value,\n * headingStyle: ({schema, level}) =>\n * schema.styles.find((style) => style.value === `h${level}`)\n * ?.value,\n * blockquoteStyle: ({schema}) =>\n * schema.styles.find((style) => style.value === 'blockquote')\n * ?.value,\n * unorderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'bullet')?.value,\n * orderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'number')?.value,\n * }}\n * />\n * {...}\n * </EditorProvider>\n * )\n * }\n */\nexport function MarkdownPlugin(props: {config: MarkdownPluginConfig}) {\n const editor = useEditor()\n useMarkdownEmphasisBehaviors({config: props.config})\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props.config)\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [editor, props.config])\n\n return null\n}\n","import {defineBehavior, raise} from '../behaviors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {BehaviorPlugin} from './plugin.behavior'\n\nconst oneLineBehaviors = [\n /**\n * Hitting Enter on an expanded selection should just delete that selection\n * without causing a line break.\n */\n defineBehavior({\n on: 'insert.break',\n guard: ({context}) =>\n context.selection && selectors.isSelectionExpanded({context})\n ? {selection: context.selection}\n : false,\n actions: [(_, {selection}) => [{type: 'delete', selection}]],\n }),\n /**\n * All other cases of `insert.break` should be aborted.\n */\n defineBehavior({\n on: 'insert.break',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.block` `before` or `after` is not allowed in a one-line editor.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({event}) =>\n event.placement === 'before' || event.placement === 'after',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * Other cases of `insert.block` are allowed.\n *\n * If a text block is inserted and the focus block is fully selected, then\n * the focus block can be replaced with the inserted block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n const newFocus = utils.getBlockEndPoint({\n node: event.block,\n path: [{_key: event.block._key}],\n })\n\n if (\n utils.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(blockEndPoint, selectionEndPoint)\n ) {\n return {focusTextBlock, newFocus}\n }\n\n return false\n },\n actions: [\n ({event}, {focusTextBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: event.block, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * An ordinary `insert.block` is acceptable if it's a text block. In that\n * case it will get merged into the existing text block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockBeforeStartPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionStartPoint,\n })?.before\n const blockAfterEndPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionEndPoint,\n })?.after\n\n if (!blockBeforeStartPoint || !blockAfterEndPoint) {\n return false\n }\n\n const targetBlock = utils.mergeTextBlocks({\n context,\n targetBlock: blockBeforeStartPoint,\n incomingBlock: event.block,\n })\n\n const newFocus = utils.getBlockEndPoint({\n node: targetBlock,\n path: [{_key: targetBlock._key}],\n })\n\n const mergedBlock = utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock: blockAfterEndPoint,\n })\n\n return {focusTextBlock, mergedBlock, newFocus}\n },\n actions: [\n (_, {focusTextBlock, mergedBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: mergedBlock, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * Fallback Behavior to avoid `insert.block` in case the Behaviors above all\n * end up with a falsy guard.\n */\n defineBehavior({\n on: 'insert.block',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * If multiple blocks are inserted, then the non-text blocks are filtered out\n * and the text blocks are merged into one block\n */\n defineBehavior({\n on: 'insert.blocks',\n guard: ({context, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n })\n })\n },\n actions: [\n // `insert.block` is raised so the Behavior above can handle the\n // insertion\n (_, block) => [raise({type: 'insert.block', block, placement: 'auto'})],\n ],\n }),\n /**\n * Block objects do not fit in a one-line editor\n */\n defineBehavior({\n on: 'insert.block object',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.text block` is raised as an `insert.block` so it can be handled\n * by the Behaviors above.\n */\n defineBehavior({\n on: 'insert.text block',\n actions: [\n ({context, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: event.textBlock?.children ?? [],\n },\n placement: event.placement,\n }),\n ],\n ],\n }),\n]\n\n/**\n * @beta\n * Restrict the editor to one line. The plugin takes care of blocking\n * `insert.break` events and smart handling of other `insert.*` events.\n *\n * Place it with as high priority as possible to make sure other plugins don't\n * overwrite `insert.*` events before this plugin gets a chance to do so.\n */\nexport function OneLinePlugin() {\n return <BehaviorPlugin behaviors={oneLineBehaviors} />\n}\n"],"names":["BehaviorPlugin","props","$","_c","editor","useEditor","t0","t1","behaviors","unregisterBehaviors","map","behavior","registerBehavior","forEach","_temp","useEffect","unregister","EditorRefPlugin","React","forwardRef","_","ref","portableTextEditorRef","useRef","Symbol","for","current","useImperativeHandle","displayName","asteriskPairRegex","underscorePairRegex","italicRegex","RegExp","doubleAsteriskPairRegex","doubleUnderscorePairRegex","boldRegex","getTextToItalic","text","match","at","getTextToBold","useMarkdownEmphasisBehaviors","config","boldDecorator","schema","getSnapshot","context","italicDecorator","t2","input","useActorRef","emphasisMachine","emphasisListener","sendBack","defineBehavior","on","guard","event","undefined","focusTextBlock","selectors","selectionStartPoint","selectionStartOffset","utils","value","selectionPoint","textBefore","textToItalic","prefixOffsets","anchor","path","offset","length","focus","suffixOffsets","blockOffset","direction","decorator","selection","textToBold","actions","type","effect","selectionListenerCallback","blockOffsets","deleteBackwardListenerCallback","setup","types","events","actors","fromCallback","createMachine","id","initial","states","invoke","src","target","assign","offsetAfterEmphasis","exit","isEqual","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","oneLineBehaviors","placement","selectionEndPoint","block","blockStartPoint","blockEndPoint","newFocus","node","_key","blockPath","blockBeforeStartPoint","point","before","blockAfterEndPoint","after","targetBlock","incomingBlock","mergedBlock","blocks","filter","reduce","raise","keyGenerator","_type","name","children","textBlock","OneLinePlugin","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../src/plugins/plugin.behavior.tsx","../../src/plugins/plugin.editor-ref.tsx","../../src/internal-utils/get-text-to-emphasize.ts","../../src/behaviors/behavior.markdown-emphasis.ts","../../src/plugins/plugin.markdown.tsx","../../src/plugins/plugin.one-line.tsx"],"sourcesContent":["import {useEffect} from 'react'\nimport type {Behavior} from '../behaviors'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport function BehaviorPlugin(props: {behaviors: Array<Behavior>}) {\n const editor = useEditor()\n\n useEffect(() => {\n const unregisterBehaviors = props.behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n unregisterBehaviors.forEach((unregister) => unregister())\n }\n }, [editor, props.behaviors])\n\n return null\n}\n","import React from 'react'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport const EditorRefPlugin = React.forwardRef<Editor | null>((_, ref) => {\n const editor = useEditor()\n\n const portableTextEditorRef = React.useRef(editor)\n\n React.useImperativeHandle(ref, () => portableTextEditorRef.current, [])\n\n return null\n})\nEditorRefPlugin.displayName = 'EditorRefPlugin'\n","const asteriskPairRegex = '(?<!\\\\*)\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*(?!\\\\*)'\nconst underscorePairRegex = '(?<!_)_(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)_(?!_)'\nconst italicRegex = new RegExp(`(${asteriskPairRegex}|${underscorePairRegex})$`)\n\nconst doubleAsteriskPairRegex =\n '(?<!\\\\*)\\\\*\\\\*(?!\\\\s)([^*\\\\n]+?)(?<!\\\\s)\\\\*\\\\*(?!\\\\*)'\nconst doubleUnderscorePairRegex = '(?<!_)__(?!\\\\s)([^_\\\\n]+?)(?<!\\\\s)__(?!_)'\nconst boldRegex = new RegExp(\n `(${doubleAsteriskPairRegex}|${doubleUnderscorePairRegex})$`,\n)\n\nexport function getTextToItalic(text: string) {\n return text.match(italicRegex)?.at(0)\n}\n\nexport function getTextToBold(text: string) {\n return text.match(boldRegex)?.at(0)\n}\n","import {useActorRef} from '@xstate/react'\nimport {isEqual} from 'lodash'\nimport {\n assign,\n fromCallback,\n setup,\n type AnyEventObject,\n type CallbackLogicFunction,\n} from 'xstate'\nimport type {Editor} from '../editor/create-editor'\nimport {useEditor} from '../editor/editor-provider'\nimport {\n getTextToBold,\n getTextToItalic,\n} from '../internal-utils/get-text-to-emphasize'\nimport type {EditorSchema} from '../selectors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {defineBehavior} from './behavior.types'\n\n/**\n * @beta\n */\nexport type MarkdownEmphasisBehaviorsConfig = {\n boldDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n italicDecorator?: ({schema}: {schema: EditorSchema}) => string | undefined\n}\n\n/**\n * @beta\n */\nexport function useMarkdownEmphasisBehaviors(props: {\n config: MarkdownEmphasisBehaviorsConfig\n}) {\n const editor = useEditor()\n\n useActorRef(emphasisMachine, {\n input: {\n editor,\n boldDecorator: props.config.boldDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n italicDecorator: props.config.italicDecorator?.({\n schema: editor.getSnapshot().context.schema,\n }),\n },\n })\n}\n\ntype MarkdownEmphasisEvent =\n | {\n type: 'emphasis.add'\n blockOffset: utils.BlockOffset\n }\n | {\n type: 'selection'\n blockOffsets?: {\n anchor: utils.BlockOffset\n focus: utils.BlockOffset\n }\n }\n | {\n type: 'delete.backward'\n }\n\nconst emphasisListener: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor; boldDecorator?: string; italicDecorator?: string}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'insert.text',\n guard: ({context, event}) => {\n const boldDecorator = input.boldDecorator\n const italicDecorator = input.italicDecorator\n\n if (boldDecorator === undefined && italicDecorator === undefined) {\n return false\n }\n\n if (event.text !== '*' && event.text !== '_') {\n return false\n }\n\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionStartOffset = selectionStartPoint\n ? utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: selectionStartPoint,\n })\n : undefined\n\n if (!focusTextBlock || !selectionStartOffset) {\n return false\n }\n\n const textBefore = selectors.getBlockTextBefore({context})\n\n const textToItalic = getTextToItalic(`${textBefore}${event.text}`)\n\n if (textToItalic !== undefined && italicDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToItalic.length + 1 + 1,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: italicDecorator,\n selection: {anchor, focus},\n }\n }\n\n const textToBold = getTextToBold(`${textBefore}${event.text}`)\n\n if (textToBold !== undefined && boldDecorator !== undefined) {\n const prefixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: textBefore.length - textToBold.length + 1 + 2,\n },\n }\n const suffixOffsets = {\n anchor: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset - 1,\n },\n focus: {\n path: focusTextBlock.path,\n offset: selectionStartOffset.offset + 1,\n },\n }\n const anchor = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: prefixOffsets.focus,\n direction: 'backward',\n })\n const focus = utils.blockOffsetToSpanSelectionPoint({\n value: context.value,\n blockOffset: suffixOffsets.anchor,\n direction: 'forward',\n })\n\n if (!anchor || !focus) {\n return false\n }\n\n return {\n prefixOffsets,\n suffixOffsets,\n decorator: boldDecorator,\n selection: {anchor, focus},\n }\n }\n\n return false\n },\n actions: [\n ({event}) => [event],\n (_, {prefixOffsets, suffixOffsets, decorator, selection}) => [\n {\n type: 'decorator.add',\n decorator,\n selection,\n },\n {\n type: 'delete.text',\n ...suffixOffsets,\n },\n {\n type: 'delete.text',\n ...prefixOffsets,\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({\n type: 'emphasis.add',\n blockOffset: {\n ...suffixOffsets.anchor,\n offset:\n suffixOffsets.anchor.offset -\n (prefixOffsets.focus.offset - prefixOffsets.anchor.offset),\n },\n })\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst selectionListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'select',\n guard: ({context, event}) => {\n if (!event.selection) {\n return {blockOffsets: undefined}\n }\n\n const anchor = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.anchor,\n })\n const focus = utils.spanSelectionPointToBlockOffset({\n value: context.value,\n selectionPoint: event.selection.focus,\n })\n\n if (!anchor || !focus) {\n return {blockOffsets: undefined}\n }\n\n return {\n blockOffsets: {\n anchor,\n focus,\n },\n }\n },\n actions: [\n (_, {blockOffsets}) => [\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'selection', blockOffsets})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst deleteBackwardListenerCallback: CallbackLogicFunction<\n AnyEventObject,\n MarkdownEmphasisEvent,\n {editor: Editor}\n> = ({sendBack, input}) => {\n const unregister = input.editor.registerBehavior({\n behavior: defineBehavior({\n on: 'delete.backward',\n actions: [\n () => [\n {\n type: 'history.undo',\n },\n {\n type: 'effect',\n effect: () => {\n sendBack({type: 'delete.backward'})\n },\n },\n ],\n ],\n }),\n })\n\n return unregister\n}\n\nconst emphasisMachine = setup({\n types: {\n context: {} as {\n boldDecorator?: string\n italicDecorator?: string\n offsetAfterEmphasis?: utils.BlockOffset\n editor: Editor\n },\n input: {} as {\n boldDecorator?: string\n italicDecorator?: string\n editor: Editor\n },\n events: {} as MarkdownEmphasisEvent,\n },\n actors: {\n 'emphasis listener': fromCallback(emphasisListener),\n 'delete.backward listener': fromCallback(deleteBackwardListenerCallback),\n 'selection listener': fromCallback(selectionListenerCallback),\n },\n}).createMachine({\n id: 'emphasis',\n context: ({input}) => ({\n boldDecorator: input.boldDecorator,\n italicDecorator: input.italicDecorator,\n editor: input.editor,\n }),\n initial: 'idle',\n states: {\n 'idle': {\n invoke: [\n {\n src: 'emphasis listener',\n input: ({context}) => ({\n editor: context.editor,\n boldDecorator: context.boldDecorator,\n italicDecorator: context.italicDecorator,\n }),\n },\n ],\n on: {\n 'emphasis.add': {\n target: 'emphasis added',\n actions: assign({\n offsetAfterEmphasis: ({event}) => event.blockOffset,\n }),\n },\n },\n },\n 'emphasis added': {\n exit: [\n assign({\n offsetAfterEmphasis: undefined,\n }),\n ],\n invoke: [\n {\n src: 'selection listener',\n input: ({context}) => ({editor: context.editor}),\n },\n {\n src: 'delete.backward listener',\n input: ({context}) => ({editor: context.editor}),\n },\n ],\n on: {\n 'selection': {\n target: 'idle',\n guard: ({context, event}) => {\n const selectionChanged = !isEqual(\n {\n anchor: context.offsetAfterEmphasis,\n focus: context.offsetAfterEmphasis,\n },\n event.blockOffsets,\n )\n\n return selectionChanged\n },\n },\n 'delete.backward': {\n target: 'idle',\n },\n },\n },\n },\n})\n","import {useEffect} from 'react'\nimport {\n createMarkdownBehaviors,\n type MarkdownBehaviorsConfig,\n} from '../behaviors/behavior.markdown'\nimport {\n useMarkdownEmphasisBehaviors,\n type MarkdownEmphasisBehaviorsConfig,\n} from '../behaviors/behavior.markdown-emphasis'\nimport {useEditor} from '../editor/editor-provider'\n\n/**\n * @beta\n */\nexport type MarkdownPluginConfig = MarkdownBehaviorsConfig &\n MarkdownEmphasisBehaviorsConfig\n\n/**\n * @beta\n * Add markdown behaviors for common markdown actions such as converting ### to headings, --- to HRs, and more.\n *\n * @example\n * Configure the bundled markdown behaviors\n * ```ts\n * import {EditorProvider} from '@portabletext/editor'\n * import {MarkdownPlugin} from '@portabletext/editor/plugins'\n *\n * function App() {\n * return (\n * <EditorProvider>\n * <MarkdownPlugin\n * config={{\n * boldDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'strong')?.value,\n * italicDecorator: ({schema}) =>\n * schema.decorators.find((decorator) => decorator.value === 'em')?.value,\n * horizontalRuleObject: ({schema}) => {\n * const name = schema.blockObjects.find(\n * (object) => object.name === 'break',\n * )?.name\n * return name ? {name} : undefined\n * },\n * defaultStyle: ({schema}) => schema.styles[0].value,\n * headingStyle: ({schema, level}) =>\n * schema.styles.find((style) => style.value === `h${level}`)\n * ?.value,\n * blockquoteStyle: ({schema}) =>\n * schema.styles.find((style) => style.value === 'blockquote')\n * ?.value,\n * unorderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'bullet')?.value,\n * orderedListStyle: ({schema}) =>\n * schema.lists.find((list) => list.value === 'number')?.value,\n * }}\n * />\n * {...}\n * </EditorProvider>\n * )\n * }\n */\nexport function MarkdownPlugin(props: {config: MarkdownPluginConfig}) {\n const editor = useEditor()\n useMarkdownEmphasisBehaviors({config: props.config})\n\n useEffect(() => {\n const behaviors = createMarkdownBehaviors(props.config)\n\n const unregisterBehaviors = behaviors.map((behavior) =>\n editor.registerBehavior({behavior}),\n )\n\n return () => {\n for (const unregisterBehavior of unregisterBehaviors) {\n unregisterBehavior()\n }\n }\n }, [editor, props.config])\n\n return null\n}\n","import {defineBehavior, raise} from '../behaviors'\nimport * as selectors from '../selectors'\nimport * as utils from '../utils'\nimport {BehaviorPlugin} from './plugin.behavior'\n\nconst oneLineBehaviors = [\n /**\n * Hitting Enter on an expanded selection should just delete that selection\n * without causing a line break.\n */\n defineBehavior({\n on: 'insert.break',\n guard: ({context}) =>\n context.selection && selectors.isSelectionExpanded({context})\n ? {selection: context.selection}\n : false,\n actions: [(_, {selection}) => [{type: 'delete', selection}]],\n }),\n /**\n * All other cases of `insert.break` should be aborted.\n */\n defineBehavior({\n on: 'insert.break',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.block` `before` or `after` is not allowed in a one-line editor.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({event}) =>\n event.placement === 'before' || event.placement === 'after',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * Other cases of `insert.block` are allowed.\n *\n * If a text block is inserted and the focus block is fully selected, then\n * the focus block can be replaced with the inserted block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockStartPoint = utils.getBlockStartPoint(focusTextBlock)\n const blockEndPoint = utils.getBlockEndPoint(focusTextBlock)\n const newFocus = utils.getBlockEndPoint({\n node: event.block,\n path: [{_key: event.block._key}],\n })\n\n if (\n utils.isEqualSelectionPoints(blockStartPoint, selectionStartPoint) &&\n utils.isEqualSelectionPoints(blockEndPoint, selectionEndPoint)\n ) {\n return {focusTextBlock, newFocus}\n }\n\n return false\n },\n actions: [\n ({event}, {focusTextBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: event.block, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * An ordinary `insert.block` is acceptable if it's a text block. In that\n * case it will get merged into the existing text block.\n */\n defineBehavior({\n on: 'insert.block',\n guard: ({context, event}) => {\n const focusTextBlock = selectors.getFocusTextBlock({context})\n const selectionStartPoint = selectors.getSelectionStartPoint({context})\n const selectionEndPoint = selectors.getSelectionEndPoint({context})\n\n if (\n !focusTextBlock ||\n !utils.isTextBlock(context, event.block) ||\n !selectionStartPoint ||\n !selectionEndPoint\n ) {\n return false\n }\n\n const blockBeforeStartPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionStartPoint,\n })?.before\n const blockAfterEndPoint = utils.splitTextBlock({\n context,\n block: focusTextBlock.node,\n point: selectionEndPoint,\n })?.after\n\n if (!blockBeforeStartPoint || !blockAfterEndPoint) {\n return false\n }\n\n const targetBlock = utils.mergeTextBlocks({\n context,\n targetBlock: blockBeforeStartPoint,\n incomingBlock: event.block,\n })\n\n const newFocus = utils.getBlockEndPoint({\n node: targetBlock,\n path: [{_key: targetBlock._key}],\n })\n\n const mergedBlock = utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock: blockAfterEndPoint,\n })\n\n return {focusTextBlock, mergedBlock, newFocus}\n },\n actions: [\n (_, {focusTextBlock, mergedBlock, newFocus}) => [\n {type: 'delete.block', blockPath: focusTextBlock.path},\n {type: 'insert.block', block: mergedBlock, placement: 'auto'},\n {\n type: 'select',\n selection: {\n anchor: newFocus,\n focus: newFocus,\n },\n },\n ],\n ],\n }),\n /**\n * Fallback Behavior to avoid `insert.block` in case the Behaviors above all\n * end up with a falsy guard.\n */\n defineBehavior({\n on: 'insert.block',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * If multiple blocks are inserted, then the non-text blocks are filtered out\n * and the text blocks are merged into one block\n */\n defineBehavior({\n on: 'insert.blocks',\n guard: ({context, event}) => {\n return event.blocks\n .filter((block) => utils.isTextBlock(context, block))\n .reduce((targetBlock, incomingBlock) => {\n return utils.mergeTextBlocks({\n context,\n targetBlock,\n incomingBlock,\n })\n })\n },\n actions: [\n // `insert.block` is raised so the Behavior above can handle the\n // insertion\n (_, block) => [raise({type: 'insert.block', block, placement: 'auto'})],\n ],\n }),\n /**\n * Block objects do not fit in a one-line editor\n */\n defineBehavior({\n on: 'insert.block object',\n actions: [() => [{type: 'noop'}]],\n }),\n /**\n * `insert.text block` is raised as an `insert.block` so it can be handled\n * by the Behaviors above.\n */\n defineBehavior({\n on: 'insert.text block',\n actions: [\n ({context, event}) => [\n raise({\n type: 'insert.block',\n block: {\n _key: context.keyGenerator(),\n _type: context.schema.block.name,\n children: event.textBlock?.children ?? [],\n },\n placement: event.placement,\n }),\n ],\n ],\n }),\n]\n\n/**\n * @beta\n * Restrict the editor to one line. The plugin takes care of blocking\n * `insert.break` events and smart handling of other `insert.*` events.\n *\n * Place it with as high priority as possible to make sure other plugins don't\n * overwrite `insert.*` events before this plugin gets a chance to do so.\n */\nexport function OneLinePlugin() {\n return <BehaviorPlugin behaviors={oneLineBehaviors} />\n}\n"],"names":["BehaviorPlugin","props","$","_c","editor","useEditor","t0","t1","behaviors","unregisterBehaviors","map","behavior","registerBehavior","forEach","_temp","useEffect","unregister","EditorRefPlugin","React","forwardRef","_","ref","portableTextEditorRef","useRef","Symbol","for","current","useImperativeHandle","displayName","asteriskPairRegex","underscorePairRegex","italicRegex","RegExp","doubleAsteriskPairRegex","doubleUnderscorePairRegex","boldRegex","getTextToItalic","text","match","at","getTextToBold","useMarkdownEmphasisBehaviors","config","boldDecorator","schema","getSnapshot","context","italicDecorator","t2","input","useActorRef","emphasisMachine","emphasisListener","sendBack","defineBehavior","on","guard","event","undefined","focusTextBlock","selectors","selectionStartPoint","selectionStartOffset","utils","value","selectionPoint","textBefore","textToItalic","prefixOffsets","anchor","path","offset","length","focus","suffixOffsets","blockOffset","direction","decorator","selection","textToBold","actions","type","effect","selectionListenerCallback","blockOffsets","deleteBackwardListenerCallback","setup","types","events","actors","fromCallback","createMachine","id","initial","states","invoke","src","target","assign","offsetAfterEmphasis","exit","isEqual","MarkdownPlugin","createMarkdownBehaviors","unregisterBehavior","oneLineBehaviors","placement","selectionEndPoint","block","blockStartPoint","blockEndPoint","newFocus","node","_key","blockPath","blockBeforeStartPoint","point","before","blockAfterEndPoint","after","targetBlock","incomingBlock","mergedBlock","blocks","filter","reduce","raise","keyGenerator","_type","name","children","textBlock","OneLinePlugin","jsx"],"mappings":"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"}