@olddevs/ui 4.5.0 → 4.6.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 (213) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/editor/RichTextEditor.d.ts +2 -2
  3. package/dist/editor/RichTextEditor.d.ts.map +1 -1
  4. package/dist/editor/RichTextEditor.js +3 -0
  5. package/dist/editor/RichTextEditor.js.map +1 -1
  6. package/dist/editor/core/blockTypes.d.ts +2 -8
  7. package/dist/editor/core/blockTypes.d.ts.map +1 -1
  8. package/dist/editor/core/blockTypes.js +11 -54
  9. package/dist/editor/core/blockTypes.js.map +1 -1
  10. package/dist/editor/core/containers.d.ts.map +1 -1
  11. package/dist/editor/core/containers.js +1 -0
  12. package/dist/editor/core/containers.js.map +1 -1
  13. package/dist/editor/core/customMarkdown.js +1 -1
  14. package/dist/editor/core/customMarkdown.js.map +1 -1
  15. package/dist/editor/core/customTool.d.ts +6 -6
  16. package/dist/editor/core/customTool.d.ts.map +1 -1
  17. package/dist/editor/core/customToolEngine.d.ts +2 -2
  18. package/dist/editor/core/extensions.d.ts +7 -2
  19. package/dist/editor/core/extensions.d.ts.map +1 -1
  20. package/dist/editor/core/extensions.js +96 -64
  21. package/dist/editor/core/extensions.js.map +1 -1
  22. package/dist/editor/core/fieldNotice.d.ts +1 -1
  23. package/dist/editor/core/insertItems.d.ts +5 -28
  24. package/dist/editor/core/insertItems.d.ts.map +1 -1
  25. package/dist/editor/core/insertItems.js +3 -94
  26. package/dist/editor/core/insertItems.js.map +1 -1
  27. package/dist/editor/core/insertMenuTool.d.ts +13 -0
  28. package/dist/editor/core/insertMenuTool.d.ts.map +1 -0
  29. package/dist/editor/core/insertMenuTool.js +20 -0
  30. package/dist/editor/core/insertMenuTool.js.map +1 -0
  31. package/dist/editor/core/schema.d.ts +20 -5
  32. package/dist/editor/core/schema.d.ts.map +1 -1
  33. package/dist/editor/core/schema.js +18 -3
  34. package/dist/editor/core/schema.js.map +1 -1
  35. package/dist/editor/core/shortcuts.d.ts +56 -5
  36. package/dist/editor/core/shortcuts.d.ts.map +1 -1
  37. package/dist/editor/core/shortcuts.js +91 -156
  38. package/dist/editor/core/shortcuts.js.map +1 -1
  39. package/dist/editor/core/skeleton.d.ts +1 -1
  40. package/dist/editor/core/skeleton.d.ts.map +1 -1
  41. package/dist/editor/core/skeleton.js +1 -0
  42. package/dist/editor/core/skeleton.js.map +1 -1
  43. package/dist/editor/core/toolButtons.d.ts +3 -3
  44. package/dist/editor/core/toolDefinition.d.ts +3 -3
  45. package/dist/editor/core/toolDescriptor.d.ts +49 -30
  46. package/dist/editor/core/toolDescriptor.d.ts.map +1 -1
  47. package/dist/editor/core/toolDescriptor.js +2 -5
  48. package/dist/editor/core/toolDescriptor.js.map +1 -1
  49. package/dist/editor/core/toolLoader.d.ts +1 -1
  50. package/dist/editor/core/toolLoader.d.ts.map +1 -1
  51. package/dist/editor/core/toolOptions.d.ts +19 -2
  52. package/dist/editor/core/toolOptions.d.ts.map +1 -1
  53. package/dist/editor/core/toolOptions.js.map +1 -1
  54. package/dist/editor/core/tools.d.ts +10 -2
  55. package/dist/editor/core/tools.d.ts.map +1 -1
  56. package/dist/editor/core/tools.js +1 -0
  57. package/dist/editor/core/tools.js.map +1 -1
  58. package/dist/editor/features/builtins.d.ts +6 -8
  59. package/dist/editor/features/builtins.d.ts.map +1 -1
  60. package/dist/editor/features/builtins.js +48 -21
  61. package/dist/editor/features/builtins.js.map +1 -1
  62. package/dist/editor/features/code/codeBlockTool.d.ts +5 -6
  63. package/dist/editor/features/code/codeBlockTool.d.ts.map +1 -1
  64. package/dist/editor/features/code/codeBlockTool.js +10 -1
  65. package/dist/editor/features/code/codeBlockTool.js.map +1 -1
  66. package/dist/editor/features/color/colorTools.d.ts +14 -0
  67. package/dist/editor/features/color/colorTools.d.ts.map +1 -0
  68. package/dist/editor/features/color/colorTools.js +39 -0
  69. package/dist/editor/features/color/colorTools.js.map +1 -0
  70. package/dist/editor/features/details/details.d.ts +68 -0
  71. package/dist/editor/features/details/details.d.ts.map +1 -0
  72. package/dist/editor/features/details/details.js +237 -0
  73. package/dist/editor/features/details/details.js.map +1 -0
  74. package/dist/editor/features/details/detailsMarkdown.d.ts +17 -0
  75. package/dist/editor/features/details/detailsMarkdown.d.ts.map +1 -0
  76. package/dist/editor/features/details/detailsMarkdown.js +84 -0
  77. package/dist/editor/features/details/detailsMarkdown.js.map +1 -0
  78. package/dist/editor/features/details/detailsTool.d.ts +16 -0
  79. package/dist/editor/features/details/detailsTool.d.ts.map +1 -0
  80. package/dist/editor/features/details/detailsTool.js +39 -0
  81. package/dist/editor/features/details/detailsTool.js.map +1 -0
  82. package/dist/editor/features/emoji/emojiTool.d.ts +1 -1
  83. package/dist/editor/features/heading/headingTool.d.ts +18 -0
  84. package/dist/editor/features/heading/headingTool.d.ts.map +1 -0
  85. package/dist/editor/features/heading/headingTool.js +59 -0
  86. package/dist/editor/features/heading/headingTool.js.map +1 -0
  87. package/dist/editor/features/history/historyTool.d.ts +15 -0
  88. package/dist/editor/features/history/historyTool.d.ts.map +1 -0
  89. package/dist/editor/features/history/historyTool.js +28 -0
  90. package/dist/editor/features/history/historyTool.js.map +1 -0
  91. package/dist/editor/features/image/imageTool.d.ts +19 -0
  92. package/dist/editor/features/image/imageTool.d.ts.map +1 -0
  93. package/dist/editor/features/image/imageTool.js +28 -0
  94. package/dist/editor/features/image/imageTool.js.map +1 -0
  95. package/dist/editor/features/layout/layoutTool.d.ts +11 -0
  96. package/dist/editor/features/layout/layoutTool.d.ts.map +1 -0
  97. package/dist/editor/features/layout/layoutTool.js +20 -0
  98. package/dist/editor/features/layout/layoutTool.js.map +1 -0
  99. package/dist/editor/features/lists/listTools.d.ts +15 -0
  100. package/dist/editor/features/lists/listTools.d.ts.map +1 -0
  101. package/dist/editor/features/lists/listTools.js +78 -0
  102. package/dist/editor/features/lists/listTools.js.map +1 -0
  103. package/dist/editor/features/marks/markTools.d.ts +16 -0
  104. package/dist/editor/features/marks/markTools.d.ts.map +1 -0
  105. package/dist/editor/features/marks/markTools.js +43 -0
  106. package/dist/editor/features/marks/markTools.js.map +1 -0
  107. package/dist/editor/features/search/searchTool.d.ts +1 -1
  108. package/dist/editor/features/table/tableTool.d.ts +3 -3
  109. package/dist/editor/features/toc/RichTextToc.d.ts.map +1 -1
  110. package/dist/editor/features/toc/RichTextToc.js +9 -2
  111. package/dist/editor/features/toc/RichTextToc.js.map +1 -1
  112. package/dist/editor/features/wrapper/wrapperTool.d.ts +11 -0
  113. package/dist/editor/features/wrapper/wrapperTool.d.ts.map +1 -0
  114. package/dist/editor/features/wrapper/wrapperTool.js +32 -0
  115. package/dist/editor/features/wrapper/wrapperTool.js.map +1 -0
  116. package/dist/editor/index.d.ts +1 -1
  117. package/dist/editor/index.d.ts.map +1 -1
  118. package/dist/editor/index.js.map +1 -1
  119. package/dist/editor/schema-entry.d.ts +1 -1
  120. package/dist/editor/styles/prose.d.ts.map +1 -1
  121. package/dist/editor/styles/prose.js +26 -0
  122. package/dist/editor/styles/prose.js.map +1 -1
  123. package/dist/editor/ui/EditorToolbar.d.ts.map +1 -1
  124. package/dist/editor/ui/EditorToolbar.js +5 -38
  125. package/dist/editor/ui/EditorToolbar.js.map +1 -1
  126. package/dist/editor/ui/SelectionBubble.d.ts.map +1 -1
  127. package/dist/editor/ui/SelectionBubble.js +1 -1
  128. package/dist/editor/ui/SelectionBubble.js.map +1 -1
  129. package/dist/editor/ui/ToolButtonView.d.ts.map +1 -1
  130. package/dist/editor/ui/ToolButtonView.js +1 -1
  131. package/dist/editor/ui/ToolButtonView.js.map +1 -1
  132. package/dist/i18n/defaults.d.ts.map +1 -1
  133. package/dist/i18n/defaults.js +3 -0
  134. package/dist/i18n/defaults.js.map +1 -1
  135. package/dist/i18n/messages.d.ts +16 -1
  136. package/dist/i18n/messages.d.ts.map +1 -1
  137. package/dist/icons.d.ts +8 -1
  138. package/dist/icons.d.ts.map +1 -1
  139. package/dist/icons.js +1 -1
  140. package/dist/icons.js.map +1 -1
  141. package/dist/locales/ru.d.ts.map +1 -1
  142. package/dist/locales/ru.js +3 -0
  143. package/dist/locales/ru.js.map +1 -1
  144. package/docs/api/editor-extension.en.md +56 -56
  145. package/docs/api/editor-extension.md +55 -55
  146. package/docs/api/messages.en.md +4 -1
  147. package/docs/api/messages.md +3 -0
  148. package/docs/api/migration-notes.en.md +3 -3
  149. package/docs/api/migration-notes.md +2 -2
  150. package/docs/components/content/rich-text-view.en.md +18 -12
  151. package/docs/components/content/rich-text-view.md +17 -11
  152. package/docs/components/inputs/rich-text-editor.en.md +140 -87
  153. package/docs/components/inputs/rich-text-editor.md +139 -86
  154. package/docs/conventions.en.md +2 -2
  155. package/docs/conventions.md +1 -1
  156. package/docs/getting-started.en.md +9 -9
  157. package/docs/getting-started.md +8 -8
  158. package/docs/glossary.en.md +80 -52
  159. package/docs/glossary.md +79 -51
  160. package/docs/icons.en.md +4 -1
  161. package/docs/icons.md +3 -0
  162. package/package.json +2 -1
  163. package/src/editor/RichTextEditor.tsx +9 -6
  164. package/src/editor/core/atomText.ts +2 -2
  165. package/src/editor/core/blockTypes.ts +19 -83
  166. package/src/editor/core/containers.ts +4 -2
  167. package/src/editor/core/customMarkdown.ts +2 -2
  168. package/src/editor/core/customTool.ts +6 -6
  169. package/src/editor/core/customToolEngine.ts +9 -9
  170. package/src/editor/core/extensions.ts +165 -110
  171. package/src/editor/core/fieldNotice.ts +1 -1
  172. package/src/editor/core/handle.ts +2 -2
  173. package/src/editor/core/insertItems.ts +12 -158
  174. package/src/editor/core/insertMenuTool.ts +32 -0
  175. package/src/editor/core/jsonDocument.ts +1 -1
  176. package/src/editor/core/schema.ts +42 -7
  177. package/src/editor/core/shortcuts.ts +116 -177
  178. package/src/editor/core/skeleton.ts +4 -3
  179. package/src/editor/core/toolButtons.ts +3 -3
  180. package/src/editor/core/toolDefinition.ts +4 -4
  181. package/src/editor/core/toolDescriptor.ts +65 -52
  182. package/src/editor/core/toolLoader.ts +3 -3
  183. package/src/editor/core/toolOptions.ts +21 -2
  184. package/src/editor/core/tools.ts +10 -1
  185. package/src/editor/core/viewIsland.ts +1 -1
  186. package/src/editor/features/builtins.ts +76 -41
  187. package/src/editor/features/code/codeBlockTool.ts +16 -8
  188. package/src/editor/features/color/colorTools.ts +68 -0
  189. package/src/editor/features/details/details.ts +389 -0
  190. package/src/editor/features/details/detailsMarkdown.ts +158 -0
  191. package/src/editor/features/details/detailsTool.ts +69 -0
  192. package/src/editor/features/emoji/emojiTool.tsx +1 -1
  193. package/src/editor/features/heading/headingTool.ts +96 -0
  194. package/src/editor/features/history/historyTool.ts +42 -0
  195. package/src/editor/features/image/imageTool.ts +49 -0
  196. package/src/editor/features/layout/layoutTool.ts +40 -0
  197. package/src/editor/features/lists/listTools.ts +112 -0
  198. package/src/editor/features/marks/markTools.ts +78 -0
  199. package/src/editor/features/search/searchTool.ts +1 -1
  200. package/src/editor/features/table/tableTool.ts +3 -3
  201. package/src/editor/features/toc/RichTextToc.tsx +14 -3
  202. package/src/editor/features/toc/tocTool.ts +1 -1
  203. package/src/editor/features/wrapper/wrapperTool.ts +52 -0
  204. package/src/editor/index.ts +1 -0
  205. package/src/editor/schema-entry.ts +1 -1
  206. package/src/editor/styles/prose.ts +49 -0
  207. package/src/editor/ui/EditorToolbar.tsx +7 -50
  208. package/src/editor/ui/SelectionBubble.tsx +2 -5
  209. package/src/editor/ui/ToolButtonView.tsx +2 -1
  210. package/src/i18n/defaults.ts +3 -0
  211. package/src/i18n/messages.ts +14 -1
  212. package/src/icons.ts +7 -0
  213. package/src/locales/ru.ts +3 -0
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { DetailsIcon, UnwrapIcon } from "../../../icons.js";
3
+ import { DETAILS_CONTENT_NODE, DETAILS_NODE, detailsExtensions, unwrapDetailsAt, } from "./details.js";
4
+ export const DETAILS_DEFAULTS = { persist: false };
5
+ export const DETAILS_TOOL = {
6
+ name: "details",
7
+ defaults: DETAILS_DEFAULTS,
8
+ checks: { persist: (value) => typeof value === "boolean" },
9
+ engine: (context, options) => detailsExtensions({
10
+ persist: options?.persist === true,
11
+ toggleLabel: context.detailsToggle,
12
+ }),
13
+ blocks: { [DETAILS_CONTENT_NODE]: { container: true } },
14
+ kitTags: ["details", "summary"],
15
+ insertItems: [
16
+ {
17
+ id: "details",
18
+ section: "insert",
19
+ label: (m) => m.details,
20
+ icon: DetailsIcon,
21
+ aliases: ["details", "summary", "toggle", "accordion", "spoiler", "collapse"],
22
+ run: (chain) => chain.insertDetails(),
23
+ },
24
+ ],
25
+ blockActions: [
26
+ {
27
+ id: "unwrapDetails",
28
+ label: (messages) => messages.unwrapDetails,
29
+ icon: UnwrapIcon,
30
+ blocks: [DETAILS_NODE, DETAILS_CONTENT_NODE],
31
+ run: (editor, pos) => void editor
32
+ .chain()
33
+ .focus()
34
+ .command(({ tr }) => unwrapDetailsAt(tr, pos))
35
+ .run(),
36
+ },
37
+ ],
38
+ };
39
+ //# sourceMappingURL=detailsTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detailsTool.js","sourceRoot":"","sources":["../../../../src/editor/features/details/detailsTool.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG5D,OAAO,EACL,oBAAoB,EACpB,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,MAAM,CAAC,MAAM,gBAAgB,GAAuB,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAYvE,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,gBAAgB;IAC1B,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,SAAS,EAAE;IAM1D,MAAM,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,CAC3B,iBAAiB,CAAC;QAChB,OAAO,EAAG,OAA0C,EAAE,OAAO,KAAK,IAAI;QACtE,WAAW,EAAE,OAAO,CAAC,aAAa;KACnC,CAAC;IAEJ,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE;IAEvD,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;IAC/B,WAAW,EAAE;QACX;YACE,EAAE,EAAE,SAAS;YACb,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO;YACvB,IAAI,EAAE,WAAW;YACjB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,CAAC;YAC7E,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,EAAE;SACtC;KACF;IACD,YAAY,EAAE;QACZ;YACE,EAAE,EAAE,eAAe;YACnB,KAAK,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,aAAa;YAC3C,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,CAAC,YAAY,EAAE,oBAAoB,CAAC;YAE5C,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CACnB,KAAK,MAAM;iBACR,KAAK,EAAE;iBACP,KAAK,EAAE;iBACP,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;iBAC7C,GAAG,EAAE;SACX;KACF;CACF,CAAC"}
@@ -21,7 +21,7 @@ export declare function insertEmoji(editor: Editor, char: string): boolean;
21
21
  /**
22
22
  * Эмодзи на описании Инструмента (ADR-0058, п. 10.4) — проверка
23
23
  * кнопки с поповером на той же форме, что у своего Инструмента. Своей Схемы и
24
- * Части для движка нет: эмодзи — обычный текст.
24
+ * Extensions нет: эмодзи — обычный текст.
25
25
  *
26
26
  * Поповер — сетка `EmojiGrid` в рамке кита у кнопки. Выбор вставляет эмодзи и
27
27
  * закрывает поповер; фокус возвращается в Документ, а не на кнопку: человек
@@ -0,0 +1,18 @@
1
+ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
+ /**
3
+ * Заголовки на описании Инструмента (ADR-0058, п. 10).
4
+ *
5
+ * Узел и его клавиши даёт StarterKit, поэтому в описании — доля StarterKit, а
6
+ * не `engine`. H1 — только с `heading1`; без него `#` и `<h1>` остаются
7
+ * прежними: правило ввода и разбор HTML строятся по этим уровням. Меню «¶»
8
+ * (`BlockTypeMenu`) — виджет кита и описания не касается.
9
+ */
10
+ export declare const HEADING_TOOL: ToolDescriptor;
11
+ /**
12
+ * `heading1` — надстройка над `heading`: своего узла у неё нет, она добавляет
13
+ * только H1 (уровни заголовка спрашивают `has("heading1")`, пункты H1 лежат в
14
+ * описании `heading`). В описании — строка справочника `⌘⌥1`, которая есть
15
+ * лишь вместе с `heading`.
16
+ */
17
+ export declare const HEADING1_TOOL: ToolDescriptor;
18
+ //# sourceMappingURL=headingTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headingTool.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/heading/headingTool.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAyBnE;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,EAAE,cA8B1B,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,aAAa,EAAE,cAY3B,CAAC"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { Heading1Icon, Heading2Icon, Heading3Icon, Heading4Icon, HeadingIcon, } from "../../../icons.js";
3
+ import { turnIntoTypes } from "../../core/blockTypes.js";
4
+ import { SHORTCUT_KEYS } from "../../core/shortcuts.js";
5
+ const LEVELS = [1, 2, 3, 4];
6
+ const BLOCK_TYPE_ICONS = [Heading1Icon, Heading2Icon, Heading3Icon, Heading4Icon];
7
+ const HEADING_ITEMS = LEVELS.map((level) => ({
8
+ id: `heading${level}`,
9
+ section: "turnInto",
10
+ label: (m) => m.heading({ level }),
11
+ icon: HeadingIcon,
12
+ aliases: [`h${level}`],
13
+ markdown: "#".repeat(level),
14
+ keys: SHORTCUT_KEYS[`h${level}`],
15
+ requires: level === 1 ? "heading1" : undefined,
16
+ run: (chain) => chain.setHeading({ level }),
17
+ }));
18
+ export const HEADING_TOOL = {
19
+ name: "heading",
20
+ starterKit: (context) => ({
21
+ heading: { levels: context.has("heading1") ? [1, 2, 3, 4] : [2, 3, 4] },
22
+ }),
23
+ insertItems: HEADING_ITEMS,
24
+ blockTypes: turnIntoTypes("heading", HEADING_ITEMS).map((item, index) => ({
25
+ ...item,
26
+ icon: BLOCK_TYPE_ICONS[index],
27
+ alsoTool: item.requires,
28
+ })),
29
+ shortcuts: [
30
+ {
31
+ id: "paragraph",
32
+ group: "blockType",
33
+ tool: "heading",
34
+ keys: SHORTCUT_KEYS.paragraph,
35
+ label: (m) => m.textBlock,
36
+ },
37
+ ...[2, 3, 4].map((level) => ({
38
+ id: `h${level}`,
39
+ group: "blockType",
40
+ tool: "heading",
41
+ keys: SHORTCUT_KEYS[`h${level}`],
42
+ label: (m) => m.heading({ level }),
43
+ })),
44
+ ],
45
+ };
46
+ export const HEADING1_TOOL = {
47
+ name: "heading1",
48
+ shortcuts: [
49
+ {
50
+ id: "h1",
51
+ group: "blockType",
52
+ tool: "heading1",
53
+ requires: "heading",
54
+ keys: SHORTCUT_KEYS.h1,
55
+ label: (m) => m.heading({ level: 1 }),
56
+ },
57
+ ],
58
+ };
59
+ //# sourceMappingURL=headingTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headingTool.js","sourceRoot":"","sources":["../../../../src/editor/features/heading/headingTool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
+ /**
3
+ * Отмена и повтор на описании Инструмента.
4
+ *
5
+ * Расширение — доля StarterKit (`undoRedo`): `{}` включает его умолчание так же,
6
+ * как прежний `undefined`. Клавиши `Mod+Z` и `Mod+Shift+Z` вешает оно, а не
7
+ * кнопки: поэтому у кнопок `keys` (подпись для подсказки, `aria-keyshortcuts` и
8
+ * справочника), а не `shortcut` — тот привязал бы клавишу второй раз. Строки
9
+ * справочника — те же кнопки с группой «История» (`shortcutGroup`), отдельных
10
+ * `shortcuts` у Инструмента нет: иначе строка встала бы дважды.
11
+ *
12
+ * Место кнопок — последняя группа Панели (`slot("history")`, `EditorToolbar.tsx`).
13
+ */
14
+ export declare const HISTORY_TOOL: ToolDescriptor;
15
+ //# sourceMappingURL=historyTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyTool.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/history/historyTool.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAEnE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,EAAE,cAuB1B,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { RedoIcon, UndoIcon } from "../../../icons.js";
3
+ import { SHORTCUT_KEYS } from "../../core/shortcuts.js";
4
+ export const HISTORY_TOOL = {
5
+ name: "history",
6
+ starterKit: () => ({ undoRedo: {} }),
7
+ buttons: [
8
+ {
9
+ id: "undo",
10
+ label: ({ messages }) => messages.undo,
11
+ icon: UndoIcon,
12
+ keys: SHORTCUT_KEYS.undo,
13
+ shortcutGroup: "history",
14
+ run: (editor) => void editor.chain().focus().undo().run(),
15
+ can: (editor) => editor.can().undo(),
16
+ },
17
+ {
18
+ id: "redo",
19
+ label: ({ messages }) => messages.redo,
20
+ icon: RedoIcon,
21
+ keys: SHORTCUT_KEYS.redo,
22
+ shortcutGroup: "history",
23
+ run: (editor) => void editor.chain().focus().redo().run(),
24
+ can: (editor) => editor.can().redo(),
25
+ },
26
+ ],
27
+ };
28
+ //# sourceMappingURL=historyTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"historyTool.js","sourceRoot":"","sources":["../../../../src/editor/features/history/historyTool.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAexD,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACpC,OAAO,EAAE;QACP;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;YACtC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,aAAa,EAAE,SAAS;YACxB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;YACzD,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;SACrC;QACD;YACE,EAAE,EAAE,MAAM;YACV,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI;YACtC,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,aAAa,CAAC,IAAI;YACxB,aAAa,EAAE,SAAS;YACxB,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE;YACzD,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE;SACrC;KACF;CACF,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
+ /**
3
+ * Картинка на описании Инструмента (ADR-0058, п. 10).
4
+ *
5
+ * Картинка — `figure` с подписью (`image.ts`). Без Инструмента `<img>` из
6
+ * вставки и `value` отбрасывается, а файлы из буфера не перехватываются:
7
+ * расширения нет в списке, пока нет моста `image` (его даёт `RichTextEditor`
8
+ * только с Инструментом).
9
+ *
10
+ * Картинке нужен адрес, и ни кнопка, ни пункт его не знают: оба готовят пустой
11
+ * абзац и открывают поповер картинки (`ImagePopover`), команда `openImageEditor`
12
+ * — из `image.ts`. Картинка из поповера встаёт на место этого абзаца. Закрытый
13
+ * без адреса поповер оставляет пустой абзац — как Блок, который передумали
14
+ * писать. Сам поповер и панель выделенной картинки (`ImageToolbar`) — виджеты
15
+ * кита, у описания их нет. Форма Блока для Скелета не нужна: его Схеме мост
16
+ * картинки подставлен заглушкой (`skeleton.ts`), и расширение то же.
17
+ */
18
+ export declare const IMAGE_TOOL: ToolDescriptor;
19
+ //# sourceMappingURL=imageTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageTool.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/image/imageTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAGnE;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,UAAU,EAAE,cA0BxB,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use client";
2
+ import { ImageIcon } from "../../../icons.js";
3
+ import { RichImage } from "./image.js";
4
+ export const IMAGE_TOOL = {
5
+ name: "image",
6
+ engine: (context) => (context.image ? [RichImage.configure(context.image)] : []),
7
+ buttons: [
8
+ {
9
+ id: "image",
10
+ label: ({ messages }) => messages.image,
11
+ icon: ImageIcon,
12
+ run: (editor) => editor.commands.openImageEditor(),
13
+ can: (editor) => editor.can().openImageEditor(),
14
+ isActive: (editor) => editor.isActive("image"),
15
+ },
16
+ ],
17
+ insertItems: [
18
+ {
19
+ id: "image",
20
+ section: "insert",
21
+ label: (m) => m.image,
22
+ icon: ImageIcon,
23
+ aliases: ["img", "picture", "photo", "![]()"],
24
+ run: (chain) => chain.openImageEditor(),
25
+ },
26
+ ],
27
+ };
28
+ //# sourceMappingURL=imageTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageTool.js","sourceRoot":"","sources":["../../../../src/editor/features/image/imageTool.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAkBvC,MAAM,CAAC,MAAM,UAAU,GAAmB;IACxC,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChF,OAAO,EAAE;QACP;YACE,EAAE,EAAE,OAAO;YACX,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK;YACvC,IAAI,EAAE,SAAS;YAEf,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;YAClD,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,eAAe,EAAE;YAG/C,QAAQ,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;SAC/C;KACF;IACD,WAAW,EAAE;QACX;YACE,EAAE,EAAE,OAAO;YACX,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK;YACrB,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,CAAC;YAC7C,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,EAAE;SACxC;KACF;CACF,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
+ /**
3
+ * Раскладка на описании Инструмента: узлы колонок и их клавиатура
4
+ * (`layout.ts`), пункт Меню вставки и место в модели содержимого Документа.
5
+ *
6
+ * Варианты раскладки («Добавить › Раскладка ›», «Формат ›», «Раскладка ›» колонки)
7
+ * — меню-виджеты Ручки Блока: своего Инструмента у них нет, и они остаются в
8
+ * `BlockHandle.tsx`, показ — по `has("layout")`.
9
+ */
10
+ export declare const LAYOUT_TOOL: ToolDescriptor;
11
+ //# sourceMappingURL=layoutTool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutTool.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/layout/layoutTool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAInE;;;;;;;GAOG;AACH,eAAO,MAAM,WAAW,EAAE,cAwBzB,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use client";
2
+ import { ColumnLayoutIcon } from "../../../icons.js";
3
+ import { DEFAULT_LAYOUT } from "./columnLayouts.js";
4
+ import { LAYOUT_NODE, layoutExtensions } from "./layout.js";
5
+ export const LAYOUT_TOOL = {
6
+ name: "layout",
7
+ engine: (context) => layoutExtensions({ wrapper: context.has("wrapper") }),
8
+ documentContent: [LAYOUT_NODE],
9
+ insertItems: [
10
+ {
11
+ id: "layout",
12
+ section: "insert",
13
+ label: (m) => m.layout,
14
+ icon: ColumnLayoutIcon,
15
+ aliases: ["columns", "cols"],
16
+ run: (chain) => chain.insertLayout(DEFAULT_LAYOUT),
17
+ },
18
+ ],
19
+ };
20
+ //# sourceMappingURL=layoutTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layoutTool.js","sourceRoot":"","sources":["../../../../src/editor/features/layout/layoutTool.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAU5D,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,QAAQ;IAGd,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,gBAAgB,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;IAE1E,eAAe,EAAE,CAAC,WAAW,CAAC;IAQ9B,WAAW,EAAE;QACX;YACE,EAAE,EAAE,QAAQ;YACZ,OAAO,EAAE,QAAQ;YACjB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM;YACtB,IAAI,EAAE,gBAAgB;YACtB,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;YAC5B,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc,CAAC;SACnD;KACF;CACF,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
+ /**
3
+ * Маркированный список. Расширение — доля StarterKit: `{}` включает его
4
+ * умолчание так же, как прежний `undefined`.
5
+ */
6
+ export declare const BULLET_LIST_TOOL: ToolDescriptor;
7
+ /** Нумерованный список: `start` и `1.` в Markdown — умолчания StarterKit. */
8
+ export declare const ORDERED_LIST_TOOL: ToolDescriptor;
9
+ /**
10
+ * Чек-лист. Подпись флажка пункта — из каталога, читается при каждой
11
+ * перерисовке пункта (`context.taskCheckbox`), поэтому смена локали не
12
+ * пересоздаёт движок.
13
+ */
14
+ export declare const TASK_LIST_TOOL: ToolDescriptor;
15
+ //# sourceMappingURL=listTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTools.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/lists/listTools.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAiEnE;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,cAM9B,CAAC;AAEF,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,EAAE,cAM/B,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,EAAE,cAa5B,CAAC"}
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { TaskItem, TaskList } from "@tiptap/extension-list";
3
+ import { ListIcon, OrderedListIcon, TaskListIcon } from "../../../icons.js";
4
+ import { turnIntoTypes } from "../../core/blockTypes.js";
5
+ import { SHORTCUT_KEYS, shortcutKeys } from "../../core/shortcuts.js";
6
+ function shortcutOf(id) {
7
+ return {
8
+ id,
9
+ group: "lists",
10
+ tool: id,
11
+ keys: SHORTCUT_KEYS[id],
12
+ label: (m) => m[id],
13
+ };
14
+ }
15
+ const BULLET_LIST_ITEMS = [
16
+ {
17
+ id: "bulletList",
18
+ section: "turnInto",
19
+ label: (m) => m.bulletList,
20
+ icon: ListIcon,
21
+ aliases: ["ul", "-"],
22
+ markdown: "-",
23
+ keys: shortcutKeys("bulletList"),
24
+ run: (chain) => chain.toggleBulletList(),
25
+ },
26
+ ];
27
+ const ORDERED_LIST_ITEMS = [
28
+ {
29
+ id: "orderedList",
30
+ section: "turnInto",
31
+ label: (m) => m.orderedList,
32
+ icon: OrderedListIcon,
33
+ aliases: ["ol", "1."],
34
+ markdown: "1.",
35
+ keys: shortcutKeys("orderedList"),
36
+ run: (chain) => chain.toggleOrderedList(),
37
+ },
38
+ ];
39
+ const TASK_LIST_ITEMS = [
40
+ {
41
+ id: "taskList",
42
+ section: "turnInto",
43
+ label: (m) => m.taskList,
44
+ icon: TaskListIcon,
45
+ aliases: ["todo", "[]"],
46
+ markdown: "[ ]",
47
+ keys: shortcutKeys("taskList"),
48
+ run: (chain) => chain.toggleTaskList(),
49
+ },
50
+ ];
51
+ export const BULLET_LIST_TOOL = {
52
+ name: "bulletList",
53
+ starterKit: () => ({ bulletList: {} }),
54
+ insertItems: BULLET_LIST_ITEMS,
55
+ blockTypes: turnIntoTypes("bulletList", BULLET_LIST_ITEMS),
56
+ shortcuts: [shortcutOf("bulletList")],
57
+ };
58
+ export const ORDERED_LIST_TOOL = {
59
+ name: "orderedList",
60
+ starterKit: () => ({ orderedList: {} }),
61
+ insertItems: ORDERED_LIST_ITEMS,
62
+ blockTypes: turnIntoTypes("orderedList", ORDERED_LIST_ITEMS),
63
+ shortcuts: [shortcutOf("orderedList")],
64
+ };
65
+ export const TASK_LIST_TOOL = {
66
+ name: "taskList",
67
+ engine: (context) => [
68
+ TaskList,
69
+ TaskItem.configure({
70
+ nested: true,
71
+ a11y: { checkboxLabel: (node) => context.taskCheckbox(node.textContent) },
72
+ }),
73
+ ],
74
+ insertItems: TASK_LIST_ITEMS,
75
+ blockTypes: turnIntoTypes("taskList", TASK_LIST_ITEMS),
76
+ shortcuts: [shortcutOf("taskList")],
77
+ };
78
+ //# sourceMappingURL=listTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listTools.js","sourceRoot":"","sources":["../../../../src/editor/features/lists/listTools.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAE,YAAY,EAAwB,MAAM,yBAAyB,CAAC;AAiB5F,SAAS,UAAU,CAAC,EAA6C;IAC/D,OAAO;QACL,EAAE;QACF,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC;QACvB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,MAAM,iBAAiB,GAA0B;IAC/C;QACE,EAAE,EAAE,YAAY;QAChB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU;QAC1B,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC;QACpB,QAAQ,EAAE,GAAG;QACb,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC;QAChC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE;KACzC;CACF,CAAC;AAEF,MAAM,kBAAkB,GAA0B;IAChD;QACE,EAAE,EAAE,aAAa;QACjB,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;QAC3B,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC;QACrB,QAAQ,EAAE,IAAI;QACd,IAAI,EAAE,YAAY,CAAC,aAAa,CAAC;QACjC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,iBAAiB,EAAE;KAC1C;CACF,CAAC;AAEF,MAAM,eAAe,GAA0B;IAC7C;QACE,EAAE,EAAE,UAAU;QACd,OAAO,EAAE,UAAU;QACnB,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ;QACxB,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC;QACvB,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,YAAY,CAAC,UAAU,CAAC;QAC9B,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,cAAc,EAAE;KACvC;CACF,CAAC;AAMF,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,YAAY;IAClB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACtC,WAAW,EAAE,iBAAiB;IAC9B,UAAU,EAAE,aAAa,CAAC,YAAY,EAAE,iBAAiB,CAAC;IAC1D,SAAS,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;CACtC,CAAC;AAGF,MAAM,CAAC,MAAM,iBAAiB,GAAmB;IAC/C,IAAI,EAAE,aAAa;IACnB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IACvC,WAAW,EAAE,kBAAkB;IAC/B,UAAU,EAAE,aAAa,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC5D,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;CACvC,CAAC;AAOF,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;QACnB,QAAQ;QACR,QAAQ,CAAC,SAAS,CAAC;YAEjB,MAAM,EAAE,IAAI;YACZ,IAAI,EAAE,EAAE,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE;SAC1E,CAAC;KACH;IACD,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE,eAAe,CAAC;IACtD,SAAS,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;CACpC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
+ /** Жирный: доля StarterKit, `{}` включает его умолчание. */
3
+ export declare const BOLD_TOOL: ToolDescriptor;
4
+ /** Курсив: доля StarterKit. */
5
+ export declare const ITALIC_TOOL: ToolDescriptor;
6
+ /** Подчёркнутый: доля StarterKit. */
7
+ export declare const UNDERLINE_TOOL: ToolDescriptor;
8
+ /** Зачёркнутый: доля StarterKit. */
9
+ export declare const STRIKE_TOOL: ToolDescriptor;
10
+ /** Код в строке: доля StarterKit. */
11
+ export declare const CODE_TOOL: ToolDescriptor;
12
+ /** Верхний индекс: отдельное расширение Tiptap, место в `ENGINE_ORDER` — первое. */
13
+ export declare const SUPERSCRIPT_TOOL: ToolDescriptor;
14
+ /** Нижний индекс: отдельное расширение Tiptap. */
15
+ export declare const SUBSCRIPT_TOOL: ToolDescriptor;
16
+ //# sourceMappingURL=markTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markTools.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/marks/markTools.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAyBnE,4DAA4D;AAC5D,eAAO,MAAM,SAAS,EAAE,cAIvB,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,WAAW,EAAE,cAIzB,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,cAAc,EAAE,cAI5B,CAAC;AAEF,oCAAoC;AACpC,eAAO,MAAM,WAAW,EAAE,cAIzB,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,SAAS,EAAE,cAIvB,CAAC;AAEF,oFAAoF;AACpF,eAAO,MAAM,gBAAgB,EAAE,cAI9B,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,cAAc,EAAE,cAI5B,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use client";
2
+ import { Subscript } from "@tiptap/extension-subscript";
3
+ import { Superscript } from "@tiptap/extension-superscript";
4
+ import { SHORTCUT_KEYS } from "../../core/shortcuts.js";
5
+ function shortcutOf(id) {
6
+ return { id, group: "marks", tool: id, keys: SHORTCUT_KEYS[id], label: (m) => m[id] };
7
+ }
8
+ export const BOLD_TOOL = {
9
+ name: "bold",
10
+ starterKit: () => ({ bold: {} }),
11
+ shortcuts: [shortcutOf("bold")],
12
+ };
13
+ export const ITALIC_TOOL = {
14
+ name: "italic",
15
+ starterKit: () => ({ italic: {} }),
16
+ shortcuts: [shortcutOf("italic")],
17
+ };
18
+ export const UNDERLINE_TOOL = {
19
+ name: "underline",
20
+ starterKit: () => ({ underline: {} }),
21
+ shortcuts: [shortcutOf("underline")],
22
+ };
23
+ export const STRIKE_TOOL = {
24
+ name: "strike",
25
+ starterKit: () => ({ strike: {} }),
26
+ shortcuts: [shortcutOf("strike")],
27
+ };
28
+ export const CODE_TOOL = {
29
+ name: "code",
30
+ starterKit: () => ({ code: {} }),
31
+ shortcuts: [shortcutOf("code")],
32
+ };
33
+ export const SUPERSCRIPT_TOOL = {
34
+ name: "superscript",
35
+ engine: () => [Superscript],
36
+ shortcuts: [shortcutOf("superscript")],
37
+ };
38
+ export const SUBSCRIPT_TOOL = {
39
+ name: "subscript",
40
+ engine: () => [Subscript],
41
+ shortcuts: [shortcutOf("subscript")],
42
+ };
43
+ //# sourceMappingURL=markTools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markTools.js","sourceRoot":"","sources":["../../../../src/editor/features/marks/markTools.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAwB,MAAM,yBAAyB,CAAC;AAoB9E,SAAS,UAAU,CACjB,EAAqF;IAErF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACxF,CAAC;AAGD,MAAM,CAAC,MAAM,SAAS,GAAmB;IACvC,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAChC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClC,SAAS,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;CAClC,CAAC;AAGF,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,WAAW;IACjB,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;IACrC,SAAS,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC;AAGF,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,IAAI,EAAE,QAAQ;IACd,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAClC,SAAS,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;CAClC,CAAC;AAGF,MAAM,CAAC,MAAM,SAAS,GAAmB;IACvC,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAChC,SAAS,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;CAChC,CAAC;AAGF,MAAM,CAAC,MAAM,gBAAgB,GAAmB;IAC9C,IAAI,EAAE,aAAa;IACnB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,CAAC;IAC3B,SAAS,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;CACvC,CAAC;AAGF,MAAM,CAAC,MAAM,cAAc,GAAmB;IAC5C,IAAI,EAAE,WAAW;IACjB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC;IACzB,SAAS,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;CACrC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import type { ToolDescriptor } from "../../core/toolDescriptor.js";
2
2
  import type { SearchToolOptions } from "../../core/toolOptions.js";
3
3
  /**
4
- * Поиск и замена на описании Инструмента. Часть для движка —
4
+ * Поиск и замена на описании Инструмента. Extensions —
5
5
  * плагин состояния и подсветки с сочетаниями `Mod+F` и `Mod+Alt+F`; панель
6
6
  * держит `RichTextEditor` и открывает её мостом `openSearch`. Кнопка «Поиск» —
7
7
  * виджет фиксированной Панели у правого края (`EditorToolbar.tsx`), как
@@ -9,11 +9,11 @@ type TableChunk = typeof TableChunkModule;
9
9
  export declare const tableChunk: () => TableChunk | undefined;
10
10
  /**
11
11
  * Таблица на описании Инструмента (ADR-0058, п. 11.1): её нет в
12
- * `basic`, а Часть для движка с `prosemirror-tables` тяжелее 10 кБ, поэтому она
13
- * грузится тем же загрузчиком, что у своего Инструмента. В том же чанке — меню
12
+ * `basic`, а Extensions с `prosemirror-tables` тяжелее 10 кБ, поэтому они
13
+ * грузятся тем же загрузчиком, что у своего Инструмента. В том же чанке — меню
14
14
  * «Таблица» и окно «Вставить таблицу»: код кита меряется и статическим графом.
15
15
  *
16
- * Переехали Часть для движка и пункт Меню вставки. Меню «Таблица» — виджет
16
+ * Переехали Extensions и пункт Меню вставки. Меню «Таблица» — виджет
17
17
  * Панели и остаётся её местом (`EditorToolbar.tsx`), только компонент берёт из
18
18
  * чанка.
19
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"RichTextToc.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/toc/RichTextToc.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAML,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAKpE,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxF;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,oBAAoB,GAAG,IAAI,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;CACrC;AA+OD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,6GAIvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAChC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,OAAO,yGAoclB,CAAC"}
1
+ {"version":3,"file":"RichTextToc.d.ts","sourceRoot":"","sources":["../../../../src/editor/features/toc/RichTextToc.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAML,KAAK,cAAc,EAEnB,KAAK,gBAAgB,EACrB,KAAK,SAAS,EACf,MAAM,OAAO,CAAC;AASf,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAKpE,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,UAAU,CAAC;IACxF;;;;;;;;;;;OAWG;IACH,MAAM,EAAE,SAAS,CAAC,WAAW,GAAG,oBAAoB,GAAG,IAAI,CAAC,CAAC;IAC7D;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;CACrC;AA0PD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,6GAIvB,CAAC;AAEF;;;;GAIG;AACH,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IAChC,+DAA+D;IAC/D,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;IACjD;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,OAAO,CAAC,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;CACjE;AAED,eAAO,MAAM,OAAO,yGAoclB,CAAC"}
@@ -64,11 +64,18 @@ function jumpTo(heading, offset, focusHeading) {
64
64
  }
65
65
  flash(heading);
66
66
  const behavior = prefersReducedMotion() ? "auto" : "smooth";
67
+ const scroller = scrollParent(heading);
67
68
  if (offset === null) {
68
- heading.scrollIntoView({ behavior, block: "start" });
69
+ if (!scroller) {
70
+ heading.scrollIntoView({ behavior, block: "start" });
71
+ return;
72
+ }
73
+ const margin = parseFloat(getComputedStyle(heading).scrollMarginTop) || 0;
74
+ const edge = scroller.getBoundingClientRect().top;
75
+ const top = heading.getBoundingClientRect().top;
76
+ scroller.scrollTo({ top: scroller.scrollTop + top - edge - margin, behavior });
69
77
  return;
70
78
  }
71
- const scroller = scrollParent(heading);
72
79
  const top = heading.getBoundingClientRect().top;
73
80
  if (scroller) {
74
81
  const edge = scroller.getBoundingClientRect().top;