@portabletext/editor 1.33.5 → 1.34.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.
Files changed (50) hide show
  1. package/lib/_chunks-cjs/behavior.core.cjs +14 -8
  2. package/lib/_chunks-cjs/behavior.core.cjs.map +1 -1
  3. package/lib/_chunks-cjs/behavior.markdown.cjs +20 -12
  4. package/lib/_chunks-cjs/behavior.markdown.cjs.map +1 -1
  5. package/lib/_chunks-cjs/plugin.event-listener.cjs +95 -70
  6. package/lib/_chunks-cjs/plugin.event-listener.cjs.map +1 -1
  7. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs +103 -46
  8. package/lib/_chunks-cjs/util.block-offsets-to-selection.cjs.map +1 -1
  9. package/lib/_chunks-es/behavior.core.js +14 -8
  10. package/lib/_chunks-es/behavior.core.js.map +1 -1
  11. package/lib/_chunks-es/behavior.markdown.js +20 -12
  12. package/lib/_chunks-es/behavior.markdown.js.map +1 -1
  13. package/lib/_chunks-es/plugin.event-listener.js +101 -75
  14. package/lib/_chunks-es/plugin.event-listener.js.map +1 -1
  15. package/lib/_chunks-es/util.block-offsets-to-selection.js +102 -46
  16. package/lib/_chunks-es/util.block-offsets-to-selection.js.map +1 -1
  17. package/lib/behaviors/index.d.cts +5 -34
  18. package/lib/behaviors/index.d.ts +5 -34
  19. package/lib/index.d.cts +300 -1460
  20. package/lib/index.d.ts +300 -1460
  21. package/lib/plugins/index.cjs +60 -43
  22. package/lib/plugins/index.cjs.map +1 -1
  23. package/lib/plugins/index.d.cts +300 -1460
  24. package/lib/plugins/index.d.ts +300 -1460
  25. package/lib/plugins/index.js +63 -45
  26. package/lib/plugins/index.js.map +1 -1
  27. package/lib/selectors/index.d.cts +12 -0
  28. package/lib/selectors/index.d.ts +12 -0
  29. package/lib/utils/index.cjs +23 -1
  30. package/lib/utils/index.cjs.map +1 -1
  31. package/lib/utils/index.d.cts +11 -0
  32. package/lib/utils/index.d.ts +11 -0
  33. package/lib/utils/index.js +25 -2
  34. package/lib/utils/index.js.map +1 -1
  35. package/package.json +6 -6
  36. package/src/behavior-actions/behavior.action.block.set.ts +48 -5
  37. package/src/behavior-actions/behavior.action.block.unset.ts +77 -3
  38. package/src/behavior-actions/behavior.action.decorator.add.ts +30 -8
  39. package/src/behavior-actions/behavior.actions.ts +1 -18
  40. package/src/behaviors/behavior.core.lists.ts +18 -14
  41. package/src/behaviors/behavior.markdown-emphasis.ts +82 -41
  42. package/src/behaviors/behavior.markdown.ts +14 -12
  43. package/src/behaviors/behavior.types.ts +2 -14
  44. package/src/converters/converter.portable-text.deserialize.test.ts +3 -2
  45. package/src/internal-utils/parse-blocks.test.ts +455 -0
  46. package/src/internal-utils/parse-blocks.ts +202 -87
  47. package/src/utils/index.ts +1 -0
  48. package/src/utils/util.child-selection-point-to-block-offset.ts +55 -0
  49. package/src/behavior-actions/behavior.action.text-block.set.ts +0 -25
  50. package/src/behavior-actions/behavior.action.text-block.unset.ts +0 -17
@@ -1,4 +1,3 @@
1
- import { isPortableTextTextBlock, isPortableTextSpan } from "@sanity/types";
2
1
  import { blockOffsetToSpanSelectionPoint } from "./util.slice-blocks.js";
3
2
  function isTypedObject(object) {
4
3
  return isRecord(object) && typeof object._type == "string";
@@ -11,56 +10,74 @@ function parseBlock({
11
10
  block,
12
11
  options
13
12
  }) {
14
- if (!isTypedObject(block) || block._type !== context.schema.block.name && !context.schema.blockObjects.some((blockObject) => blockObject.name === block._type))
15
- return;
16
- if (block._type !== context.schema.block.name) {
17
- const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator();
18
- return {
19
- ...block,
20
- _key
21
- };
22
- }
23
- if (!isPortableTextTextBlock(block))
13
+ return parseTextBlock({
14
+ block,
15
+ context,
16
+ options
17
+ }) ?? parseBlockObject({
18
+ blockObject: block,
19
+ context,
20
+ options
21
+ });
22
+ }
23
+ function parseBlockObject({
24
+ blockObject,
25
+ context,
26
+ options
27
+ }) {
28
+ if (isTypedObject(blockObject) && !(blockObject._type === context.schema.block.name || blockObject._type === "block" || !context.schema.blockObjects.some(({
29
+ name
30
+ }) => name === blockObject._type)))
24
31
  return {
25
- _type: context.schema.block.name,
26
- _key: options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(),
27
- children: [{
28
- _key: context.keyGenerator(),
29
- _type: context.schema.span.name,
30
- text: "",
31
- marks: []
32
- }],
33
- markDefs: [],
34
- style: context.schema.styles[0].value
32
+ ...blockObject,
33
+ _key: options.refreshKeys ? context.keyGenerator() : typeof blockObject._key == "string" ? blockObject._key : context.keyGenerator()
35
34
  };
36
- const markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = (block.markDefs ?? []).flatMap((markDef) => {
35
+ }
36
+ function isTextBlock(schema, block) {
37
+ return parseTextBlock({
38
+ block,
39
+ context: {
40
+ schema,
41
+ keyGenerator: () => ""
42
+ },
43
+ options: {
44
+ refreshKeys: !1
45
+ }
46
+ }) !== void 0;
47
+ }
48
+ function parseTextBlock({
49
+ block,
50
+ context,
51
+ options
52
+ }) {
53
+ if (!isTypedObject(block) || block._type !== context.schema.block.name)
54
+ return;
55
+ const _key = options.refreshKeys ? context.keyGenerator() : typeof block._key == "string" ? block._key : context.keyGenerator(), unparsedMarkDefs = Array.isArray(block.markDefs) ? block.markDefs : [], markDefKeyMap = /* @__PURE__ */ new Map(), markDefs = unparsedMarkDefs.flatMap((markDef) => {
56
+ if (!isTypedObject(markDef))
57
+ return [];
58
+ if (typeof markDef._key != "string")
59
+ return [];
37
60
  if (context.schema.annotations.some((annotation) => annotation.name === markDef._type)) {
38
- const _key = options.refreshKeys ? context.keyGenerator() : markDef._key;
39
- return markDefKeyMap.set(markDef._key, _key), [{
61
+ const _key2 = options.refreshKeys ? context.keyGenerator() : markDef._key;
62
+ return markDefKeyMap.set(markDef._key, _key2), [{
40
63
  ...markDef,
41
- _key
64
+ _key: _key2
42
65
  }];
43
66
  }
44
67
  return [];
45
- }), children = block.children.flatMap((child) => {
46
- if (!isTypedObject(child))
47
- return [];
48
- if (child._type !== context.schema.span.name && !context.schema.inlineObjects.some((inlineObject) => inlineObject.name === child._type))
49
- return [];
50
- if (!isPortableTextSpan(child))
51
- return [{
52
- ...child,
53
- _key: options.refreshKeys ? context.keyGenerator() : child._key
54
- }];
55
- const marks = (child.marks ?? []).flatMap((mark) => markDefKeyMap.has(mark) ? [markDefKeyMap.get(mark)] : context.schema.decorators.some((decorator) => decorator.value === mark) ? [mark] : []);
56
- return [{
57
- ...child,
58
- _key: options.refreshKeys ? context.keyGenerator() : child._key,
59
- marks
60
- }];
61
- }), parsedBlock = {
68
+ }), children = (Array.isArray(block.children) ? block.children : []).map((child) => parseSpan({
69
+ span: child,
70
+ context,
71
+ markDefKeyMap,
72
+ options
73
+ }) ?? parseInlineObject({
74
+ inlineObject: child,
75
+ context,
76
+ options
77
+ })).filter((child) => child !== void 0), parsedBlock = {
78
+ // Spread the entire block to allow custom properties on it
62
79
  ...block,
63
- _key: options.refreshKeys ? context.keyGenerator() : block._key,
80
+ _key,
64
81
  children: children.length > 0 ? children : [{
65
82
  _key: context.keyGenerator(),
66
83
  _type: context.schema.span.name,
@@ -69,11 +86,49 @@ function parseBlock({
69
86
  }],
70
87
  markDefs
71
88
  };
72
- if (!context.schema.styles.find((style) => style.value === block.style)) {
73
- const defaultStyle = context.schema.styles[0].value;
89
+ if (typeof parsedBlock.style != "string" || !context.schema.styles.find((style) => style.value === block.style)) {
90
+ const defaultStyle = context.schema.styles.at(0)?.value;
74
91
  defaultStyle !== void 0 ? parsedBlock.style = defaultStyle : delete parsedBlock.style;
75
92
  }
76
- return context.schema.lists.find((list) => list.value === block.listItem) || (delete parsedBlock.listItem, delete parsedBlock.level), parsedBlock;
93
+ return (typeof parsedBlock.listItem != "string" || !context.schema.lists.find((list) => list.value === block.listItem)) && delete parsedBlock.listItem, typeof parsedBlock.level != "number" && delete parsedBlock.level, parsedBlock;
94
+ }
95
+ function parseSpan({
96
+ span,
97
+ context,
98
+ markDefKeyMap,
99
+ options
100
+ }) {
101
+ if (!isTypedObject(span) || span._type !== context.schema.span.name || span._type !== "span")
102
+ return;
103
+ const marks = (Array.isArray(span.marks) ? span.marks : []).flatMap((mark) => {
104
+ if (typeof mark != "string")
105
+ return [];
106
+ const markDefKey = markDefKeyMap.get(mark);
107
+ return markDefKey !== void 0 ? [markDefKey] : context.schema.decorators.some((decorator) => decorator.value === mark) ? [mark] : [];
108
+ });
109
+ return {
110
+ // Spread the entire span to allow custom properties on it
111
+ ...span,
112
+ _type: "span",
113
+ _key: options.refreshKeys ? context.keyGenerator() : typeof span._key == "string" ? span._key : context.keyGenerator(),
114
+ text: typeof span.text == "string" ? span.text : "",
115
+ marks
116
+ };
117
+ }
118
+ function parseInlineObject({
119
+ inlineObject,
120
+ context,
121
+ options
122
+ }) {
123
+ if (isTypedObject(inlineObject) && !(inlineObject._type === context.schema.span.name || inlineObject._type === "span" || // Respect the schema definition and don't parse inline objects that are not defined
124
+ !context.schema.inlineObjects.some(({
125
+ name
126
+ }) => name === inlineObject._type)))
127
+ return {
128
+ // Spread the entire inline object to allow custom properties on it
129
+ ...inlineObject,
130
+ _key: options.refreshKeys ? context.keyGenerator() : typeof inlineObject._key == "string" ? inlineObject._key : context.keyGenerator()
131
+ };
77
132
  }
78
133
  function blockOffsetsToSelection({
79
134
  value,
@@ -97,6 +152,7 @@ function blockOffsetsToSelection({
97
152
  }
98
153
  export {
99
154
  blockOffsetsToSelection,
155
+ isTextBlock,
100
156
  parseBlock
101
157
  };
102
158
  //# sourceMappingURL=util.block-offsets-to-selection.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.block-offsets-to-selection.js","sources":["../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/utils/util.block-offsets-to-selection.ts"],"sourcesContent":["import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import {\n isPortableTextSpan,\n isPortableTextTextBlock,\n type PortableTextBlock,\n} from '@sanity/types'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n refreshKeys: boolean\n }\n}): PortableTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (\n block._type !== context.schema.block.name &&\n !context.schema.blockObjects.some(\n (blockObject) => blockObject.name === block._type,\n )\n ) {\n return undefined\n }\n\n if (block._type !== context.schema.block.name) {\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator()\n return {\n ...block,\n _key,\n }\n }\n\n if (!isPortableTextTextBlock(block)) {\n return {\n _type: context.schema.block.name,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator(),\n children: [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs: [],\n style: context.schema.styles[0].value,\n }\n }\n\n const markDefKeyMap = new Map<string, string>()\n const markDefs = (block.markDefs ?? []).flatMap((markDef) => {\n if (\n context.schema.annotations.some(\n (annotation) => annotation.name === markDef._type,\n )\n ) {\n const _key = options.refreshKeys ? context.keyGenerator() : markDef._key\n markDefKeyMap.set(markDef._key, _key)\n\n return [\n {\n ...markDef,\n _key,\n },\n ]\n }\n\n return []\n })\n\n const children = block.children.flatMap((child) => {\n if (!isTypedObject(child)) {\n return []\n }\n\n if (\n child._type !== context.schema.span.name &&\n !context.schema.inlineObjects.some(\n (inlineObject) => inlineObject.name === child._type,\n )\n ) {\n return []\n }\n\n if (!isPortableTextSpan(child)) {\n return [\n {\n ...child,\n _key: options.refreshKeys ? context.keyGenerator() : child._key,\n },\n ]\n }\n\n const marks = (child.marks ?? []).flatMap((mark) => {\n if (markDefKeyMap.has(mark)) {\n return [markDefKeyMap.get(mark)]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.value === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return [\n {\n ...child,\n _key: options.refreshKeys ? context.keyGenerator() : child._key,\n marks,\n },\n ]\n })\n\n const parsedBlock = {\n ...block,\n _key: options.refreshKeys ? context.keyGenerator() : block._key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs,\n }\n\n if (!context.schema.styles.find((style) => style.value === block.style)) {\n const defaultStyle = context.schema.styles[0].value\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n delete parsedBlock.style\n }\n }\n\n if (!context.schema.lists.find((list) => list.value === block.listItem)) {\n delete parsedBlock.listItem\n delete parsedBlock.level\n }\n\n return parsedBlock\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {BlockOffset} from '../behaviors'\nimport type {EditorSelection} from '../selectors'\nimport {blockOffsetToSpanSelectionPoint} from './util.block-offset'\n\n/**\n * @public\n */\nexport function blockOffsetsToSelection({\n value,\n offsets,\n backward,\n}: {\n value: Array<PortableTextBlock>\n offsets: {anchor: BlockOffset; focus: BlockOffset}\n backward?: boolean\n}): EditorSelection {\n const anchor = blockOffsetToSpanSelectionPoint({\n value,\n blockOffset: offsets.anchor,\n direction: backward ? 'backward' : 'forward',\n })\n const focus = blockOffsetToSpanSelectionPoint({\n value,\n blockOffset: offsets.focus,\n direction: backward ? 'forward' : 'backward',\n })\n\n if (!anchor || !focus) {\n return null\n }\n\n return {\n anchor,\n focus,\n backward,\n }\n}\n"],"names":["isTypedObject","object","isRecord","_type","value","parseBlock","context","block","options","schema","name","blockObjects","some","blockObject","_key","refreshKeys","keyGenerator","isPortableTextTextBlock","children","span","text","marks","markDefs","style","styles","markDefKeyMap","Map","flatMap","markDef","annotations","annotation","set","child","inlineObjects","inlineObject","isPortableTextSpan","mark","has","get","decorators","decorator","parsedBlock","length","find","defaultStyle","undefined","lists","list","listItem","level","blockOffsetsToSelection","offsets","backward","anchor","blockOffsetToSpanSelectionPoint","blockOffset","direction","focus"],"mappings":"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"}
1
+ {"version":3,"file":"util.block-offsets-to-selection.js","sources":["../../src/internal-utils/asserters.ts","../../src/internal-utils/parse-blocks.ts","../../src/utils/util.block-offsets-to-selection.ts"],"sourcesContent":["import type {TypedObject} from '@sanity/types'\n\nexport function isTypedObject(object: unknown): object is TypedObject {\n return isRecord(object) && typeof object._type === 'string'\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return !!value && (typeof value === 'object' || typeof value === 'function')\n}\n","import type {\n PortableTextBlock,\n PortableTextObject,\n PortableTextSpan,\n PortableTextTextBlock,\n} from '@sanity/types'\nimport type {EditorSchema} from '../editor/define-schema'\nimport type {EditorContext} from '../editor/editor-snapshot'\nimport {isTypedObject} from './asserters'\n\nexport function parseBlock({\n context,\n block,\n options,\n}: {\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n block: unknown\n options: {\n refreshKeys: boolean\n }\n}): PortableTextBlock | undefined {\n return (\n parseTextBlock({block, context, options}) ??\n parseBlockObject({blockObject: block, context, options})\n )\n}\n\nfunction parseBlockObject({\n blockObject,\n context,\n options,\n}: {\n blockObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(blockObject)) {\n return undefined\n }\n\n if (\n blockObject._type === context.schema.block.name ||\n blockObject._type === 'block' ||\n !context.schema.blockObjects.some(({name}) => name === blockObject._type)\n ) {\n return undefined\n }\n\n return {\n ...blockObject,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof blockObject._key === 'string'\n ? blockObject._key\n : context.keyGenerator(),\n }\n}\n\nexport function isTextBlock(\n schema: EditorSchema,\n block: unknown,\n): block is PortableTextTextBlock {\n return (\n parseTextBlock({\n block,\n context: {schema, keyGenerator: () => ''},\n options: {refreshKeys: false},\n }) !== undefined\n )\n}\n\nfunction parseTextBlock({\n block,\n context,\n options,\n}: {\n block: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextTextBlock | undefined {\n if (!isTypedObject(block)) {\n return undefined\n }\n\n if (block._type !== context.schema.block.name) {\n return undefined\n }\n\n const _key = options.refreshKeys\n ? context.keyGenerator()\n : typeof block._key === 'string'\n ? block._key\n : context.keyGenerator()\n\n const unparsedMarkDefs: Array<unknown> = Array.isArray(block.markDefs)\n ? block.markDefs\n : []\n const markDefKeyMap = new Map<string, string>()\n const markDefs = unparsedMarkDefs.flatMap((markDef) => {\n if (!isTypedObject(markDef)) {\n return []\n }\n\n if (typeof markDef._key !== 'string') {\n return []\n }\n\n if (\n context.schema.annotations.some(\n (annotation) => annotation.name === markDef._type,\n )\n ) {\n const _key = options.refreshKeys ? context.keyGenerator() : markDef._key\n markDefKeyMap.set(markDef._key, _key)\n\n return [\n {\n ...markDef,\n _key,\n },\n ]\n }\n\n return []\n })\n\n const unparsedChildren: Array<unknown> = Array.isArray(block.children)\n ? block.children\n : []\n\n const children = unparsedChildren\n .map(\n (child) =>\n parseSpan({span: child, context, markDefKeyMap, options}) ??\n parseInlineObject({inlineObject: child, context, options}),\n )\n .filter((child) => child !== undefined)\n\n const parsedBlock: PortableTextTextBlock = {\n // Spread the entire block to allow custom properties on it\n ...block,\n _key,\n children:\n children.length > 0\n ? children\n : [\n {\n _key: context.keyGenerator(),\n _type: context.schema.span.name,\n text: '',\n marks: [],\n },\n ],\n markDefs,\n }\n\n /**\n * Reset text block .style if it's somehow set to an invalid type\n */\n if (\n typeof parsedBlock.style !== 'string' ||\n !context.schema.styles.find((style) => style.value === block.style)\n ) {\n const defaultStyle = context.schema.styles.at(0)?.value\n\n if (defaultStyle !== undefined) {\n parsedBlock.style = defaultStyle\n } else {\n delete parsedBlock.style\n }\n }\n\n /**\n * Reset text block .listItem if it's somehow set to an invalid type\n */\n if (\n typeof parsedBlock.listItem !== 'string' ||\n !context.schema.lists.find((list) => list.value === block.listItem)\n ) {\n delete parsedBlock.listItem\n }\n\n /**\n * Reset text block .level if it's somehow set to an invalid type\n */\n if (typeof parsedBlock.level !== 'number') {\n delete parsedBlock.level\n }\n\n return parsedBlock\n}\n\nexport function parseSpan({\n span,\n context,\n markDefKeyMap,\n options,\n}: {\n span: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n markDefKeyMap: Map<string, string>\n options: {refreshKeys: boolean}\n}): PortableTextSpan | undefined {\n if (!isTypedObject(span)) {\n return undefined\n }\n\n // In reality, the span schema name is always 'span', but we only the check here anyway\n if (span._type !== context.schema.span.name || span._type !== 'span') {\n return undefined\n }\n\n const unparsedMarks: Array<unknown> = Array.isArray(span.marks)\n ? span.marks\n : []\n const marks = unparsedMarks.flatMap((mark) => {\n if (typeof mark !== 'string') {\n return []\n }\n\n const markDefKey = markDefKeyMap.get(mark)\n\n if (markDefKey !== undefined) {\n return [markDefKey]\n }\n\n if (\n context.schema.decorators.some((decorator) => decorator.value === mark)\n ) {\n return [mark]\n }\n\n return []\n })\n\n return {\n // Spread the entire span to allow custom properties on it\n ...span,\n _type: 'span',\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof span._key === 'string'\n ? span._key\n : context.keyGenerator(),\n text: typeof span.text === 'string' ? span.text : '',\n marks,\n }\n}\n\nfunction parseInlineObject({\n inlineObject,\n context,\n options,\n}: {\n inlineObject: unknown\n context: Pick<EditorContext, 'keyGenerator' | 'schema'>\n options: {refreshKeys: boolean}\n}): PortableTextObject | undefined {\n if (!isTypedObject(inlineObject)) {\n return undefined\n }\n\n if (\n inlineObject._type === context.schema.span.name ||\n inlineObject._type === 'span' ||\n // Respect the schema definition and don't parse inline objects that are not defined\n !context.schema.inlineObjects.some(({name}) => name === inlineObject._type)\n ) {\n return undefined\n }\n\n return {\n // Spread the entire inline object to allow custom properties on it\n ...inlineObject,\n _key: options.refreshKeys\n ? context.keyGenerator()\n : typeof inlineObject._key === 'string'\n ? inlineObject._key\n : context.keyGenerator(),\n }\n}\n","import type {PortableTextBlock} from '@sanity/types'\nimport type {BlockOffset} from '../behaviors'\nimport type {EditorSelection} from '../selectors'\nimport {blockOffsetToSpanSelectionPoint} from './util.block-offset'\n\n/**\n * @public\n */\nexport function blockOffsetsToSelection({\n value,\n offsets,\n backward,\n}: {\n value: Array<PortableTextBlock>\n offsets: {anchor: BlockOffset; focus: BlockOffset}\n backward?: boolean\n}): EditorSelection {\n const anchor = blockOffsetToSpanSelectionPoint({\n value,\n blockOffset: offsets.anchor,\n direction: backward ? 'backward' : 'forward',\n })\n const focus = blockOffsetToSpanSelectionPoint({\n value,\n blockOffset: offsets.focus,\n direction: backward ? 'forward' : 'backward',\n })\n\n if (!anchor || !focus) {\n return null\n }\n\n return {\n anchor,\n focus,\n backward,\n }\n}\n"],"names":["isTypedObject","object","isRecord","_type","value","parseBlock","context","block","options","parseTextBlock","parseBlockObject","blockObject","schema","name","blockObjects","some","_key","refreshKeys","keyGenerator","isTextBlock","undefined","unparsedMarkDefs","Array","isArray","markDefs","markDefKeyMap","Map","flatMap","markDef","annotations","annotation","set","children","map","child","parseSpan","span","parseInlineObject","inlineObject","filter","parsedBlock","length","text","marks","style","styles","find","defaultStyle","at","listItem","lists","list","level","mark","markDefKey","get","decorators","decorator","inlineObjects","blockOffsetsToSelection","offsets","backward","anchor","blockOffsetToSpanSelectionPoint","blockOffset","direction","focus"],"mappings":"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"}
@@ -198,8 +198,6 @@ export declare const coreBehaviors: Behavior_2<
198
198
  | 'style.add'
199
199
  | 'style.remove'
200
200
  | 'style.toggle'
201
- | 'text block.set'
202
- | 'text block.unset'
203
201
  | 'key.down'
204
202
  | 'key.up'
205
203
  | 'paste'
@@ -254,8 +252,6 @@ export declare const coreBehaviors: Behavior_2<
254
252
  | 'style.add'
255
253
  | 'style.remove'
256
254
  | 'style.toggle'
257
- | 'text block.set'
258
- | 'text block.unset'
259
255
  | 'key.down'
260
256
  | 'key.up'
261
257
  | 'paste'
@@ -315,8 +311,6 @@ export declare function createCodeEditorBehaviors(
315
311
  | 'style.add'
316
312
  | 'style.remove'
317
313
  | 'style.toggle'
318
- | 'text block.set'
319
- | 'text block.unset'
320
314
  | 'key.down'
321
315
  | 'key.up'
322
316
  | 'paste'
@@ -371,8 +365,6 @@ export declare function createCodeEditorBehaviors(
371
365
  | 'style.add'
372
366
  | 'style.remove'
373
367
  | 'style.toggle'
374
- | 'text block.set'
375
- | 'text block.unset'
376
368
  | 'key.down'
377
369
  | 'key.up'
378
370
  | 'paste'
@@ -432,8 +424,6 @@ export declare function createEmojiPickerBehaviors<TEmojiMatch>(
432
424
  | 'style.add'
433
425
  | 'style.remove'
434
426
  | 'style.toggle'
435
- | 'text block.set'
436
- | 'text block.unset'
437
427
  | 'key.down'
438
428
  | 'key.up'
439
429
  | 'paste'
@@ -488,8 +478,6 @@ export declare function createEmojiPickerBehaviors<TEmojiMatch>(
488
478
  | 'style.add'
489
479
  | 'style.remove'
490
480
  | 'style.toggle'
491
- | 'text block.set'
492
- | 'text block.unset'
493
481
  | 'key.down'
494
482
  | 'key.up'
495
483
  | 'paste'
@@ -549,8 +537,6 @@ export declare function createLinkBehaviors(
549
537
  | 'style.add'
550
538
  | 'style.remove'
551
539
  | 'style.toggle'
552
- | 'text block.set'
553
- | 'text block.unset'
554
540
  | 'key.down'
555
541
  | 'key.up'
556
542
  | 'paste'
@@ -605,8 +591,6 @@ export declare function createLinkBehaviors(
605
591
  | 'style.add'
606
592
  | 'style.remove'
607
593
  | 'style.toggle'
608
- | 'text block.set'
609
- | 'text block.unset'
610
594
  | 'key.down'
611
595
  | 'key.up'
612
596
  | 'paste'
@@ -708,8 +692,6 @@ export declare function createMarkdownBehaviors(
708
692
  | 'style.add'
709
693
  | 'style.remove'
710
694
  | 'style.toggle'
711
- | 'text block.set'
712
- | 'text block.unset'
713
695
  | 'key.down'
714
696
  | 'key.up'
715
697
  | 'paste'
@@ -764,8 +746,6 @@ export declare function createMarkdownBehaviors(
764
746
  | 'style.add'
765
747
  | 'style.remove'
766
748
  | 'style.toggle'
767
- | 'text block.set'
768
- | 'text block.unset'
769
749
  | 'key.down'
770
750
  | 'key.up'
771
751
  | 'paste'
@@ -1023,7 +1003,7 @@ export declare type SyntheticBehaviorEvent =
1023
1003
  | {
1024
1004
  type: 'block.set'
1025
1005
  at: [KeyedSegment]
1026
- [props: string]: unknown
1006
+ props: Record<string, unknown>
1027
1007
  }
1028
1008
  | {
1029
1009
  type: 'block.unset'
@@ -1042,7 +1022,10 @@ export declare type SyntheticBehaviorEvent =
1042
1022
  | {
1043
1023
  type: 'decorator.add'
1044
1024
  decorator: string
1045
- selection?: NonNullable<EditorSelection>
1025
+ offsets?: {
1026
+ anchor: BlockOffset
1027
+ focus: BlockOffset
1028
+ }
1046
1029
  }
1047
1030
  | {
1048
1031
  type: 'decorator.remove'
@@ -1186,18 +1169,6 @@ export declare type SyntheticBehaviorEvent =
1186
1169
  type: 'style.toggle'
1187
1170
  style: string
1188
1171
  }
1189
- | {
1190
- type: 'text block.set'
1191
- at: [KeyedSegment]
1192
- level?: number
1193
- listItem?: string
1194
- style?: string
1195
- }
1196
- | {
1197
- type: 'text block.unset'
1198
- at: [KeyedSegment]
1199
- props: Array<'level' | 'listItem' | 'style'>
1200
- }
1201
1172
  | (PickFromUnion<
1202
1173
  ConverterEvent,
1203
1174
  'type',
@@ -198,8 +198,6 @@ export declare const coreBehaviors: Behavior_2<
198
198
  | 'style.add'
199
199
  | 'style.remove'
200
200
  | 'style.toggle'
201
- | 'text block.set'
202
- | 'text block.unset'
203
201
  | 'key.down'
204
202
  | 'key.up'
205
203
  | 'paste'
@@ -254,8 +252,6 @@ export declare const coreBehaviors: Behavior_2<
254
252
  | 'style.add'
255
253
  | 'style.remove'
256
254
  | 'style.toggle'
257
- | 'text block.set'
258
- | 'text block.unset'
259
255
  | 'key.down'
260
256
  | 'key.up'
261
257
  | 'paste'
@@ -315,8 +311,6 @@ export declare function createCodeEditorBehaviors(
315
311
  | 'style.add'
316
312
  | 'style.remove'
317
313
  | 'style.toggle'
318
- | 'text block.set'
319
- | 'text block.unset'
320
314
  | 'key.down'
321
315
  | 'key.up'
322
316
  | 'paste'
@@ -371,8 +365,6 @@ export declare function createCodeEditorBehaviors(
371
365
  | 'style.add'
372
366
  | 'style.remove'
373
367
  | 'style.toggle'
374
- | 'text block.set'
375
- | 'text block.unset'
376
368
  | 'key.down'
377
369
  | 'key.up'
378
370
  | 'paste'
@@ -432,8 +424,6 @@ export declare function createEmojiPickerBehaviors<TEmojiMatch>(
432
424
  | 'style.add'
433
425
  | 'style.remove'
434
426
  | 'style.toggle'
435
- | 'text block.set'
436
- | 'text block.unset'
437
427
  | 'key.down'
438
428
  | 'key.up'
439
429
  | 'paste'
@@ -488,8 +478,6 @@ export declare function createEmojiPickerBehaviors<TEmojiMatch>(
488
478
  | 'style.add'
489
479
  | 'style.remove'
490
480
  | 'style.toggle'
491
- | 'text block.set'
492
- | 'text block.unset'
493
481
  | 'key.down'
494
482
  | 'key.up'
495
483
  | 'paste'
@@ -549,8 +537,6 @@ export declare function createLinkBehaviors(
549
537
  | 'style.add'
550
538
  | 'style.remove'
551
539
  | 'style.toggle'
552
- | 'text block.set'
553
- | 'text block.unset'
554
540
  | 'key.down'
555
541
  | 'key.up'
556
542
  | 'paste'
@@ -605,8 +591,6 @@ export declare function createLinkBehaviors(
605
591
  | 'style.add'
606
592
  | 'style.remove'
607
593
  | 'style.toggle'
608
- | 'text block.set'
609
- | 'text block.unset'
610
594
  | 'key.down'
611
595
  | 'key.up'
612
596
  | 'paste'
@@ -708,8 +692,6 @@ export declare function createMarkdownBehaviors(
708
692
  | 'style.add'
709
693
  | 'style.remove'
710
694
  | 'style.toggle'
711
- | 'text block.set'
712
- | 'text block.unset'
713
695
  | 'key.down'
714
696
  | 'key.up'
715
697
  | 'paste'
@@ -764,8 +746,6 @@ export declare function createMarkdownBehaviors(
764
746
  | 'style.add'
765
747
  | 'style.remove'
766
748
  | 'style.toggle'
767
- | 'text block.set'
768
- | 'text block.unset'
769
749
  | 'key.down'
770
750
  | 'key.up'
771
751
  | 'paste'
@@ -1023,7 +1003,7 @@ export declare type SyntheticBehaviorEvent =
1023
1003
  | {
1024
1004
  type: 'block.set'
1025
1005
  at: [KeyedSegment]
1026
- [props: string]: unknown
1006
+ props: Record<string, unknown>
1027
1007
  }
1028
1008
  | {
1029
1009
  type: 'block.unset'
@@ -1042,7 +1022,10 @@ export declare type SyntheticBehaviorEvent =
1042
1022
  | {
1043
1023
  type: 'decorator.add'
1044
1024
  decorator: string
1045
- selection?: NonNullable<EditorSelection>
1025
+ offsets?: {
1026
+ anchor: BlockOffset
1027
+ focus: BlockOffset
1028
+ }
1046
1029
  }
1047
1030
  | {
1048
1031
  type: 'decorator.remove'
@@ -1186,18 +1169,6 @@ export declare type SyntheticBehaviorEvent =
1186
1169
  type: 'style.toggle'
1187
1170
  style: string
1188
1171
  }
1189
- | {
1190
- type: 'text block.set'
1191
- at: [KeyedSegment]
1192
- level?: number
1193
- listItem?: string
1194
- style?: string
1195
- }
1196
- | {
1197
- type: 'text block.unset'
1198
- at: [KeyedSegment]
1199
- props: Array<'level' | 'listItem' | 'style'>
1200
- }
1201
1172
  | (PickFromUnion<
1202
1173
  ConverterEvent,
1203
1174
  'type',