@notectl/core 1.0.6 → 1.0.8

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 (233) hide show
  1. package/README.md +78 -56
  2. package/custom-elements.json +344 -0
  3. package/dist/chunks/{AttrRegistry-DTsHyDVA.mjs → AttrRegistry-D-przlzb.mjs} +4 -4
  4. package/dist/chunks/{AttrRegistry-DTsHyDVA.mjs.map → AttrRegistry-D-przlzb.mjs.map} +1 -1
  5. package/dist/chunks/ColorNames-iaWsSZx1.mjs +35 -0
  6. package/dist/chunks/ColorNames-iaWsSZx1.mjs.map +1 -0
  7. package/dist/chunks/ColorValidation-Dyy4Bye8.mjs +140 -0
  8. package/dist/chunks/ColorValidation-Dyy4Bye8.mjs.map +1 -0
  9. package/dist/chunks/{Commands-DLP85Mp5.mjs → Commands-CSpSwGXv.mjs} +13 -13
  10. package/dist/chunks/{Commands-DLP85Mp5.mjs.map → Commands-CSpSwGXv.mjs.map} +1 -1
  11. package/dist/chunks/ToolbarKeyboardNav-B32OMv8r.mjs +46 -0
  12. package/dist/chunks/ToolbarKeyboardNav-B32OMv8r.mjs.map +1 -0
  13. package/dist/chunks/{ToolbarPlugin-sJTiZr-S.mjs → ToolbarPlugin-DY2xaJiu.mjs} +63 -93
  14. package/dist/chunks/ToolbarPlugin-DY2xaJiu.mjs.map +1 -0
  15. package/dist/chunks/index-BAk1EG1x.mjs +541 -0
  16. package/dist/chunks/index-BAk1EG1x.mjs.map +1 -0
  17. package/dist/chunks/index-BRYzYOYC.mjs +63 -0
  18. package/dist/chunks/index-BRYzYOYC.mjs.map +1 -0
  19. package/dist/chunks/index-BSFLNveF.mjs +953 -0
  20. package/dist/chunks/index-BSFLNveF.mjs.map +1 -0
  21. package/dist/chunks/index-BYgspns5.mjs +209 -0
  22. package/dist/chunks/index-BYgspns5.mjs.map +1 -0
  23. package/dist/chunks/index-B_3qDrUN.mjs +64 -0
  24. package/dist/chunks/index-B_3qDrUN.mjs.map +1 -0
  25. package/dist/chunks/index-Bsp4LC5t.mjs +130 -0
  26. package/dist/chunks/index-Bsp4LC5t.mjs.map +1 -0
  27. package/dist/chunks/index-C-YWHOcC.mjs +100 -0
  28. package/dist/chunks/index-C-YWHOcC.mjs.map +1 -0
  29. package/dist/chunks/index-C2GQoHot.mjs +92 -0
  30. package/dist/chunks/index-C2GQoHot.mjs.map +1 -0
  31. package/dist/chunks/index-CT3HGdQt.mjs +39 -0
  32. package/dist/chunks/index-CT3HGdQt.mjs.map +1 -0
  33. package/dist/chunks/index-Ct0ivLhO.mjs +407 -0
  34. package/dist/chunks/index-Ct0ivLhO.mjs.map +1 -0
  35. package/dist/chunks/index-CxiWyUho.mjs +191 -0
  36. package/dist/chunks/index-CxiWyUho.mjs.map +1 -0
  37. package/dist/chunks/index-D3CQWJiw.mjs +200 -0
  38. package/dist/chunks/index-D3CQWJiw.mjs.map +1 -0
  39. package/dist/chunks/index-DC1EK22F.mjs +41 -0
  40. package/dist/chunks/index-DC1EK22F.mjs.map +1 -0
  41. package/dist/chunks/index-Dh76rR13.mjs +196 -0
  42. package/dist/chunks/index-Dh76rR13.mjs.map +1 -0
  43. package/dist/chunks/index-o6hDR07y.mjs +41 -0
  44. package/dist/chunks/index-o6hDR07y.mjs.map +1 -0
  45. package/dist/chunks/index-uTnc9y7M.mjs +62 -0
  46. package/dist/chunks/index-uTnc9y7M.mjs.map +1 -0
  47. package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs +34 -0
  48. package/dist/chunks/resolvePluginLocale-B4w1OkPy.mjs.map +1 -0
  49. package/dist/editor/NotectlEditor.d.ts +10 -0
  50. package/dist/editor/NotectlEditor.d.ts.map +1 -1
  51. package/dist/editor/PaperLayoutController.d.ts +27 -0
  52. package/dist/editor/PaperLayoutController.d.ts.map +1 -0
  53. package/dist/editor/PaperSize.d.ts +35 -0
  54. package/dist/editor/PaperSize.d.ts.map +1 -0
  55. package/dist/editor/styles/color-picker.d.ts +1 -1
  56. package/dist/editor/styles/color-picker.d.ts.map +1 -1
  57. package/dist/editor/styles/paper.d.ts +3 -0
  58. package/dist/editor/styles/paper.d.ts.map +1 -0
  59. package/dist/editor/styles/table.d.ts +1 -1
  60. package/dist/editor/styles/table.d.ts.map +1 -1
  61. package/dist/editor/styles/toolbar.d.ts +1 -1
  62. package/dist/editor/styles/toolbar.d.ts.map +1 -1
  63. package/dist/editor/styles.d.ts.map +1 -1
  64. package/dist/i18n/Locale.d.ts +17 -0
  65. package/dist/i18n/Locale.d.ts.map +1 -0
  66. package/dist/i18n/LocaleService.d.ts +8 -0
  67. package/dist/i18n/LocaleService.d.ts.map +1 -0
  68. package/dist/i18n/index.d.ts +4 -0
  69. package/dist/i18n/index.d.ts.map +1 -0
  70. package/dist/i18n/resolvePluginLocale.d.ts +3 -0
  71. package/dist/i18n/resolvePluginLocale.d.ts.map +1 -0
  72. package/dist/index.d.ts +42 -0
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/input/ClipboardHandler.d.ts.map +1 -1
  75. package/dist/input/InputHandler.d.ts.map +1 -1
  76. package/dist/input/KeyboardHandler.d.ts.map +1 -1
  77. package/dist/input/PasteHandler.d.ts.map +1 -1
  78. package/dist/notectl-core.mjs +2126 -1952
  79. package/dist/notectl-core.mjs.map +1 -1
  80. package/dist/notectl-core.umd.js +2002 -1544
  81. package/dist/notectl-core.umd.js.map +1 -1
  82. package/dist/plugins/PluginManager.d.ts +5 -0
  83. package/dist/plugins/PluginManager.d.ts.map +1 -1
  84. package/dist/plugins/alignment/AlignmentLocale.d.ts +19 -0
  85. package/dist/plugins/alignment/AlignmentLocale.d.ts.map +1 -0
  86. package/dist/plugins/alignment/AlignmentPlugin.d.ts +4 -0
  87. package/dist/plugins/alignment/AlignmentPlugin.d.ts.map +1 -1
  88. package/dist/plugins/alignment.mjs +3 -89
  89. package/dist/plugins/alignment.mjs.map +1 -1
  90. package/dist/plugins/blockquote/BlockquoteLocale.d.ts +17 -0
  91. package/dist/plugins/blockquote/BlockquoteLocale.d.ts.map +1 -0
  92. package/dist/plugins/blockquote/BlockquotePlugin.d.ts +3 -0
  93. package/dist/plugins/blockquote/BlockquotePlugin.d.ts.map +1 -1
  94. package/dist/plugins/blockquote.mjs +2 -55
  95. package/dist/plugins/blockquote.mjs.map +1 -1
  96. package/dist/plugins/code-block/CodeBlockLocale.d.ts +17 -0
  97. package/dist/plugins/code-block/CodeBlockLocale.d.ts.map +1 -0
  98. package/dist/plugins/code-block/CodeBlockPlugin.d.ts +1 -0
  99. package/dist/plugins/code-block/CodeBlockPlugin.d.ts.map +1 -1
  100. package/dist/plugins/code-block/CodeBlockTypes.d.ts +2 -0
  101. package/dist/plugins/code-block/CodeBlockTypes.d.ts.map +1 -1
  102. package/dist/plugins/code-block.mjs +3 -3
  103. package/dist/plugins/font/FontLocale.d.ts +15 -0
  104. package/dist/plugins/font/FontLocale.d.ts.map +1 -0
  105. package/dist/plugins/font/FontPlugin.d.ts +3 -0
  106. package/dist/plugins/font/FontPlugin.d.ts.map +1 -1
  107. package/dist/plugins/font-size/FontSizeLocale.d.ts +17 -0
  108. package/dist/plugins/font-size/FontSizeLocale.d.ts.map +1 -0
  109. package/dist/plugins/font-size/FontSizePlugin.d.ts +3 -0
  110. package/dist/plugins/font-size/FontSizePlugin.d.ts.map +1 -1
  111. package/dist/plugins/font-size/FontSizePopup.d.ts +2 -0
  112. package/dist/plugins/font-size/FontSizePopup.d.ts.map +1 -1
  113. package/dist/plugins/font-size.mjs +2 -201
  114. package/dist/plugins/font-size.mjs.map +1 -1
  115. package/dist/plugins/font.mjs +2 -183
  116. package/dist/plugins/font.mjs.map +1 -1
  117. package/dist/plugins/hard-break.mjs +1 -1
  118. package/dist/plugins/heading/HeadingLocale.d.ts +26 -0
  119. package/dist/plugins/heading/HeadingLocale.d.ts.map +1 -0
  120. package/dist/plugins/heading/HeadingPlugin.d.ts +4 -0
  121. package/dist/plugins/heading/HeadingPlugin.d.ts.map +1 -1
  122. package/dist/plugins/heading.mjs +1 -184
  123. package/dist/plugins/heading.mjs.map +1 -1
  124. package/dist/plugins/highlight/HighlightLocale.d.ts +17 -0
  125. package/dist/plugins/highlight/HighlightLocale.d.ts.map +1 -0
  126. package/dist/plugins/highlight/HighlightPlugin.d.ts +3 -5
  127. package/dist/plugins/highlight/HighlightPlugin.d.ts.map +1 -1
  128. package/dist/plugins/highlight.mjs +2 -123
  129. package/dist/plugins/highlight.mjs.map +1 -1
  130. package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts +15 -0
  131. package/dist/plugins/horizontal-rule/HorizontalRuleLocale.d.ts.map +1 -0
  132. package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts +4 -0
  133. package/dist/plugins/horizontal-rule/HorizontalRulePlugin.d.ts.map +1 -1
  134. package/dist/plugins/horizontal-rule.mjs +2 -56
  135. package/dist/plugins/horizontal-rule.mjs.map +1 -1
  136. package/dist/plugins/image/ImageLocale.d.ts +25 -0
  137. package/dist/plugins/image/ImageLocale.d.ts.map +1 -0
  138. package/dist/plugins/image/ImagePlugin.d.ts +1 -0
  139. package/dist/plugins/image/ImagePlugin.d.ts.map +1 -1
  140. package/dist/plugins/image/ImageUpload.d.ts +3 -0
  141. package/dist/plugins/image/ImageUpload.d.ts.map +1 -1
  142. package/dist/plugins/image.mjs +4 -378
  143. package/dist/plugins/image.mjs.map +1 -1
  144. package/dist/plugins/link/LinkLocale.d.ts +23 -0
  145. package/dist/plugins/link/LinkLocale.d.ts.map +1 -0
  146. package/dist/plugins/link/LinkPlugin.d.ts +3 -0
  147. package/dist/plugins/link/LinkPlugin.d.ts.map +1 -1
  148. package/dist/plugins/link.mjs +2 -124
  149. package/dist/plugins/link.mjs.map +1 -1
  150. package/dist/plugins/list/ListLocale.d.ts +18 -0
  151. package/dist/plugins/list/ListLocale.d.ts.map +1 -0
  152. package/dist/plugins/list/ListPlugin.d.ts +4 -0
  153. package/dist/plugins/list/ListPlugin.d.ts.map +1 -1
  154. package/dist/plugins/list.mjs +2 -190
  155. package/dist/plugins/list.mjs.map +1 -1
  156. package/dist/plugins/print/PrintLocale.d.ts +16 -0
  157. package/dist/plugins/print/PrintLocale.d.ts.map +1 -0
  158. package/dist/plugins/print/PrintPlugin.d.ts +1 -0
  159. package/dist/plugins/print/PrintPlugin.d.ts.map +1 -1
  160. package/dist/plugins/print/PrintStyleCollector.d.ts +7 -0
  161. package/dist/plugins/print/PrintStyleCollector.d.ts.map +1 -1
  162. package/dist/plugins/print/PrintTypes.d.ts +5 -0
  163. package/dist/plugins/print/PrintTypes.d.ts.map +1 -1
  164. package/dist/plugins/shared/ColorMarkOperations.d.ts +28 -0
  165. package/dist/plugins/shared/ColorMarkOperations.d.ts.map +1 -0
  166. package/dist/plugins/shared/ColorNames.d.ts +22 -0
  167. package/dist/plugins/shared/ColorNames.d.ts.map +1 -0
  168. package/dist/plugins/shared/ColorPickerPopup.d.ts +31 -0
  169. package/dist/plugins/shared/ColorPickerPopup.d.ts.map +1 -0
  170. package/dist/plugins/shared/ColorValidation.d.ts +14 -0
  171. package/dist/plugins/shared/ColorValidation.d.ts.map +1 -0
  172. package/dist/plugins/strikethrough/StrikethroughLocale.d.ts +17 -0
  173. package/dist/plugins/strikethrough/StrikethroughLocale.d.ts.map +1 -0
  174. package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts +3 -0
  175. package/dist/plugins/strikethrough/StrikethroughPlugin.d.ts.map +1 -1
  176. package/dist/plugins/strikethrough.mjs +2 -32
  177. package/dist/plugins/strikethrough.mjs.map +1 -1
  178. package/dist/plugins/super-sub/SuperSubLocale.d.ts +19 -0
  179. package/dist/plugins/super-sub/SuperSubLocale.d.ts.map +1 -0
  180. package/dist/plugins/super-sub/SuperSubPlugin.d.ts +3 -0
  181. package/dist/plugins/super-sub/SuperSubPlugin.d.ts.map +1 -1
  182. package/dist/plugins/super-sub.mjs +2 -78
  183. package/dist/plugins/super-sub.mjs.map +1 -1
  184. package/dist/plugins/table/TableBorderColor.d.ts +24 -0
  185. package/dist/plugins/table/TableBorderColor.d.ts.map +1 -0
  186. package/dist/plugins/table/TableCommands.d.ts +9 -8
  187. package/dist/plugins/table/TableCommands.d.ts.map +1 -1
  188. package/dist/plugins/table/TableContextMenu.d.ts +14 -0
  189. package/dist/plugins/table/TableContextMenu.d.ts.map +1 -0
  190. package/dist/plugins/table/TableControls.d.ts +3 -1
  191. package/dist/plugins/table/TableControls.d.ts.map +1 -1
  192. package/dist/plugins/table/TableControlsDOM.d.ts +13 -1
  193. package/dist/plugins/table/TableControlsDOM.d.ts.map +1 -1
  194. package/dist/plugins/table/TableLocale.d.ts +48 -0
  195. package/dist/plugins/table/TableLocale.d.ts.map +1 -0
  196. package/dist/plugins/table/TableNavigation.d.ts +2 -1
  197. package/dist/plugins/table/TableNavigation.d.ts.map +1 -1
  198. package/dist/plugins/table/TableNodeViews.d.ts +3 -1
  199. package/dist/plugins/table/TableNodeViews.d.ts.map +1 -1
  200. package/dist/plugins/table/TablePlugin.d.ts +7 -1
  201. package/dist/plugins/table/TablePlugin.d.ts.map +1 -1
  202. package/dist/plugins/table/index.d.ts +3 -0
  203. package/dist/plugins/table/index.d.ts.map +1 -1
  204. package/dist/plugins/table.mjs +18 -660
  205. package/dist/plugins/table.mjs.map +1 -1
  206. package/dist/plugins/text-color/TextColorLocale.d.ts +17 -0
  207. package/dist/plugins/text-color/TextColorLocale.d.ts.map +1 -0
  208. package/dist/plugins/text-color/TextColorPlugin.d.ts +3 -5
  209. package/dist/plugins/text-color/TextColorPlugin.d.ts.map +1 -1
  210. package/dist/plugins/text-color.mjs +2 -123
  211. package/dist/plugins/text-color.mjs.map +1 -1
  212. package/dist/plugins/text-formatting/TextFormattingLocale.d.ts +18 -0
  213. package/dist/plugins/text-formatting/TextFormattingLocale.d.ts.map +1 -0
  214. package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts +4 -0
  215. package/dist/plugins/text-formatting/TextFormattingPlugin.d.ts.map +1 -1
  216. package/dist/plugins/text-formatting.mjs +2 -49
  217. package/dist/plugins/text-formatting.mjs.map +1 -1
  218. package/dist/plugins/toolbar/ToolbarLocale.d.ts +14 -0
  219. package/dist/plugins/toolbar/ToolbarLocale.d.ts.map +1 -0
  220. package/dist/plugins/toolbar/ToolbarPlugin.d.ts +1 -0
  221. package/dist/plugins/toolbar/ToolbarPlugin.d.ts.map +1 -1
  222. package/dist/plugins/toolbar.mjs +1 -1
  223. package/dist/state/EditorState.d.ts +4 -1
  224. package/dist/state/EditorState.d.ts.map +1 -1
  225. package/dist/view/EditorView.d.ts.map +1 -1
  226. package/package.json +3 -2
  227. package/dist/chunks/Plugin-B9OZ6Y4c.mjs +0 -15
  228. package/dist/chunks/Plugin-B9OZ6Y4c.mjs.map +0 -1
  229. package/dist/chunks/ToolbarPlugin-sJTiZr-S.mjs.map +0 -1
  230. package/dist/chunks/color-picker-Csf0wx5a.mjs +0 -5
  231. package/dist/chunks/color-picker-Csf0wx5a.mjs.map +0 -1
  232. package/dist/chunks/index-QvKiO9_4.mjs +0 -538
  233. package/dist/chunks/index-QvKiO9_4.mjs.map +0 -1
@@ -1,193 +1,5 @@
1
- import { i as t } from "../chunks/AttrRegistry-DTsHyDVA.mjs";
2
- import { p as e, b as n } from "../chunks/Document-CI3iCwEP.mjs";
3
- import { c as i } from "../chunks/NodeSpec-NZVvcCuH.mjs";
4
- import { i as s, a as r, c as o } from "../chunks/Selection-D5ZjXoB7.mjs";
5
- import { n as c } from "../chunks/TypeBrands-C09nE2qO.mjs";
6
- const l = { types: ["bullet", "ordered", "checklist"], maxIndent: 4 }, a = [{ type: "bullet", label: "Bullet List", icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z"/></svg>', inputPattern: /^[-*] $/, inputPrefix: "- " }, { type: "ordered", label: "Numbered List", icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z"/></svg>', inputPattern: /^\d+\. $/, inputPrefix: "1. " }, { type: "checklist", label: "Checklist", icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M22 7h-9v2h9V7zm0 8h-9v2h9v-2zM5.54 11L2 7.46l1.41-1.41 2.12 2.12 4.24-4.24 1.41 1.41L5.54 11zm0 8L2 15.46l1.41-1.41 2.12 2.12 4.24-4.24 1.41 1.41L5.54 19z"/></svg>', inputPattern: /^\[[ x]] $/, inputPrefix: "[ ] " }];
7
- class d {
8
- id = "list";
9
- name = "List";
10
- priority = 35;
11
- config;
12
- constructor(t2) {
13
- this.config = { ...l, ...t2 };
14
- }
15
- init(t2) {
16
- t2.registerStyleSheet(`
17
- /* List Wrappers — suppress native markers, we use ::before pseudo-elements */
18
- .notectl-list {
19
- list-style: none;
20
- margin: 0;
21
- padding: 0;
22
- }
23
-
24
- /* Ordered List — each <ol> wrapper resets the counter */
25
- .notectl-list--ordered {
26
- counter-reset: notectl-ordered;
27
- }
28
-
29
- /* List Items */
30
- .notectl-list-item {
31
- margin: 0;
32
- padding: 2px 0 2px 24px;
33
- min-height: 1.6em;
34
- position: relative;
35
- }
36
-
37
- .notectl-list-item::before {
38
- position: absolute;
39
- left: 0;
40
- display: inline-block;
41
- width: 24px;
42
- text-align: center;
43
- }
44
-
45
- /* Bullet List */
46
- .notectl-list-item--bullet::before {
47
- content: '\\2022';
48
- color: var(--notectl-fg);
49
- }
50
-
51
- /* Ordered List — counter increment per item */
52
- .notectl-list-item--ordered {
53
- counter-increment: notectl-ordered;
54
- }
55
-
56
- .notectl-list-item--ordered::before {
57
- content: counter(notectl-ordered) '.';
58
- color: var(--notectl-fg);
59
- font-size: 14px;
60
- }
61
-
62
- /* Checklist */
63
- .notectl-list-item--checklist::before {
64
- content: '\\2610';
65
- font-size: 16px;
66
- color: var(--notectl-fg-muted);
67
- cursor: pointer;
68
- }
69
-
70
- .notectl-list-item--checklist[data-checked="true"]::before {
71
- content: '\\2611';
72
- color: var(--notectl-success);
73
- }
74
-
75
- .notectl-list-item--checklist[data-checked="true"] {
76
- color: var(--notectl-fg-muted);
77
- text-decoration: line-through;
78
- }
79
- `), this.registerNodeSpec(t2), this.registerCommands(t2), this.registerKeymaps(t2), this.registerInputRules(t2), this.registerToolbarItems(t2);
80
- }
81
- registerNodeSpec(t2) {
82
- t2.registerNodeSpec({ type: "list_item", group: "block", content: { allow: ["text"] }, attrs: { listType: { default: "bullet" }, indent: { default: 0 }, checked: { default: false } }, toDOM(t3) {
83
- const e2 = t3.attrs?.listType ?? "bullet", n2 = t3.attrs?.indent ?? 0, s2 = t3.attrs?.checked ?? false, r2 = i("li", t3.id);
84
- return r2.setAttribute("role", "listitem"), r2.setAttribute("data-list-type", e2), r2.setAttribute("data-indent", String(n2)), r2.className = `notectl-list-item notectl-list-item--${e2}`, n2 > 0 && (r2.style.marginLeft = 24 * n2 + "px"), "checklist" === e2 && (r2.setAttribute("data-checked", String(s2)), r2.setAttribute("aria-checked", String(s2))), r2.setAttribute("aria-level", String(n2 + 1)), r2;
85
- }, wrapper(t3) {
86
- const e2 = t3.attrs?.listType ?? "bullet";
87
- return { tag: "ordered" === e2 ? "ol" : "ul", key: `list-${e2}`, className: `notectl-list notectl-list--${e2}`, attrs: { role: "list" } };
88
- }, toHTML: (t3, e2) => `<li>${e2 || "<br>"}</li>`, parseHTML: [{ tag: "li" }], sanitize: { tags: ["ul", "ol", "li"] } });
89
- }
90
- registerCommands(t2) {
91
- const e2 = this.getEnabledTypes();
92
- for (const n2 of e2) t2.registerCommand(`toggleList:${n2.type}`, () => this.toggleList(t2, n2.type));
93
- t2.registerCommand("indentListItem", () => this.indent(t2)), t2.registerCommand("outdentListItem", () => this.outdent(t2)), this.config.types.includes("checklist") && t2.registerCommand("toggleChecklistItem", () => this.toggleChecked(t2));
94
- }
95
- registerKeymaps(t2) {
96
- t2.registerKeymap({ Enter: () => this.handleEnter(t2), Backspace: () => this.handleBackspace(t2), Tab: () => this.indent(t2), "Shift-Tab": () => this.outdent(t2) });
97
- }
98
- registerInputRules(t2) {
99
- const e2 = this.getEnabledTypes();
100
- for (const n2 of e2) t2.registerInputRule({ pattern: n2.inputPattern, handler: (t3, e3, i2, l2) => {
101
- const a2 = t3.selection;
102
- if (s(a2)) return null;
103
- if (!r(a2)) return null;
104
- const d2 = t3.getBlock(a2.anchor.blockId);
105
- if (!d2 || "paragraph" !== d2.type) return null;
106
- const p = e3[0] ?? "", h = p.length, u = { listType: n2.type, indent: 0 };
107
- return "checklist" === n2.type && (u.checked = p.includes("[x]")), t3.transaction("input").deleteTextAt(a2.anchor.blockId, i2, i2 + h).setBlockType(a2.anchor.blockId, c("list_item"), u).setSelection(o(a2.anchor.blockId, 0)).build();
108
- } });
109
- }
110
- registerToolbarItems(t2) {
111
- const e2 = this.getEnabledTypes(), n2 = e2.at(-1);
112
- for (const i2 of e2) t2.registerToolbarItem({ id: `list-${i2.type}`, group: "block", icon: i2.icon, label: i2.label, command: `toggleList:${i2.type}`, priority: "bullet" === i2.type ? 70 : "ordered" === i2.type ? 71 : 72, separatorAfter: this.config.separatorAfter && i2 === n2, isActive: (t3) => this.isListActive(t3, i2.type) });
113
- }
114
- toggleList(e2, n2) {
115
- const i2 = e2.getState(), r2 = i2.selection;
116
- if (s(r2)) return false;
117
- const o2 = i2.getBlock(r2.anchor.blockId);
118
- if (!o2) return false;
119
- if ("list_item" === o2.type && o2.attrs?.listType === n2) {
120
- const t2 = i2.transaction("command").setBlockType(r2.anchor.blockId, c("paragraph")).setSelection(r2).build();
121
- return e2.dispatch(t2), true;
122
- }
123
- const l2 = { listType: n2, indent: t(o2, "list_item") ? o2.attrs.indent : 0 };
124
- "checklist" === n2 && (l2.checked = false);
125
- const a2 = i2.transaction("command").setBlockType(r2.anchor.blockId, c("list_item"), l2).setSelection(r2).build();
126
- return e2.dispatch(a2), true;
127
- }
128
- indent(e2) {
129
- const n2 = e2.getState();
130
- if (s(n2.selection)) return false;
131
- const i2 = n2.getBlock(n2.selection.anchor.blockId);
132
- return !(!i2 || !t(i2, "list_item")) && !(i2.attrs.indent >= this.config.maxIndent) && this.setIndent(e2, n2, i2.attrs.indent + 1);
133
- }
134
- outdent(e2) {
135
- const n2 = e2.getState();
136
- if (s(n2.selection)) return false;
137
- const i2 = n2.getBlock(n2.selection.anchor.blockId);
138
- return !(!i2 || !t(i2, "list_item")) && !(i2.attrs.indent <= 0) && this.setIndent(e2, n2, i2.attrs.indent - 1);
139
- }
140
- setIndent(t2, e2, n2) {
141
- const i2 = e2.selection;
142
- if (s(i2)) return false;
143
- const r2 = e2.getBlock(i2.anchor.blockId);
144
- if (!r2) return false;
145
- const o2 = { ...r2.attrs, indent: n2 }, l2 = e2.transaction("command").setBlockType(i2.anchor.blockId, c("list_item"), o2).setSelection(i2).build();
146
- return t2.dispatch(l2), true;
147
- }
148
- toggleChecked(t2) {
149
- const e2 = t2.getState();
150
- if (s(e2.selection)) return false;
151
- const n2 = e2.getBlock(e2.selection.anchor.blockId);
152
- if (!n2 || "list_item" !== n2.type || "checklist" !== n2.attrs?.listType) return false;
153
- const i2 = !n2.attrs?.checked, r2 = { ...n2.attrs, checked: i2 }, o2 = e2.transaction("command").setBlockType(e2.selection.anchor.blockId, c("list_item"), r2).setSelection(e2.selection).build();
154
- return t2.dispatch(o2), true;
155
- }
156
- handleBackspace(t2) {
157
- const e2 = t2.getState(), n2 = e2.selection;
158
- if (s(n2)) return false;
159
- if (!r(n2)) return false;
160
- const i2 = e2.getBlock(n2.anchor.blockId);
161
- if (!i2 || "list_item" !== i2.type) return false;
162
- if (0 !== n2.anchor.offset) return false;
163
- const o2 = e2.transaction("input").setBlockType(n2.anchor.blockId, c("paragraph")).setSelection(n2).build();
164
- return t2.dispatch(o2), true;
165
- }
166
- handleEnter(i2) {
167
- const l2 = i2.getState(), a2 = l2.selection;
168
- if (s(a2)) return false;
169
- if (!r(a2)) return false;
170
- const d2 = l2.getBlock(a2.anchor.blockId);
171
- if (!d2 || "list_item" !== d2.type) return false;
172
- if ("" === e(d2)) {
173
- const t2 = l2.transaction("input").setBlockType(a2.anchor.blockId, c("paragraph")).setSelection(a2).build();
174
- return i2.dispatch(t2), true;
175
- }
176
- const p = n(), h = { listType: t(d2, "list_item") ? d2.attrs.listType : "bullet", indent: t(d2, "list_item") ? d2.attrs.indent : 0 };
177
- "checklist" === h.listType && (h.checked = false);
178
- const u = l2.transaction("input").splitBlock(a2.anchor.blockId, a2.anchor.offset, p).setBlockType(p, c("list_item"), h).setSelection(o(p, 0)).build();
179
- return i2.dispatch(u), true;
180
- }
181
- isListActive(t2, e2) {
182
- if (s(t2.selection)) return false;
183
- const n2 = t2.getBlock(t2.selection.anchor.blockId);
184
- return "list_item" === n2?.type && n2.attrs?.listType === e2;
185
- }
186
- getEnabledTypes() {
187
- return a.filter((t2) => this.config.types.includes(t2.type));
188
- }
189
- }
1
+ import { b } from "../chunks/index-D3CQWJiw.mjs";
190
2
  export {
191
- d as ListPlugin
3
+ b as ListPlugin
192
4
  };
193
5
  //# sourceMappingURL=list.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"list.mjs","sources":["../../src/editor/styles/list.ts","../../src/plugins/list/ListPlugin.ts"],"sourcesContent":["/** List styles — bullet, ordered, checklist items. */\nexport const LIST_CSS = `\n/* List Wrappers — suppress native markers, we use ::before pseudo-elements */\n.notectl-list {\n\tlist-style: none;\n\tmargin: 0;\n\tpadding: 0;\n}\n\n/* Ordered List — each <ol> wrapper resets the counter */\n.notectl-list--ordered {\n\tcounter-reset: notectl-ordered;\n}\n\n/* List Items */\n.notectl-list-item {\n\tmargin: 0;\n\tpadding: 2px 0 2px 24px;\n\tmin-height: 1.6em;\n\tposition: relative;\n}\n\n.notectl-list-item::before {\n\tposition: absolute;\n\tleft: 0;\n\tdisplay: inline-block;\n\twidth: 24px;\n\ttext-align: center;\n}\n\n/* Bullet List */\n.notectl-list-item--bullet::before {\n\tcontent: '\\\\2022';\n\tcolor: var(--notectl-fg);\n}\n\n/* Ordered List — counter increment per item */\n.notectl-list-item--ordered {\n\tcounter-increment: notectl-ordered;\n}\n\n.notectl-list-item--ordered::before {\n\tcontent: counter(notectl-ordered) '.';\n\tcolor: var(--notectl-fg);\n\tfont-size: 14px;\n}\n\n/* Checklist */\n.notectl-list-item--checklist::before {\n\tcontent: '\\\\2610';\n\tfont-size: 16px;\n\tcolor: var(--notectl-fg-muted);\n\tcursor: pointer;\n}\n\n.notectl-list-item--checklist[data-checked=\"true\"]::before {\n\tcontent: '\\\\2611';\n\tcolor: var(--notectl-success);\n}\n\n.notectl-list-item--checklist[data-checked=\"true\"] {\n\tcolor: var(--notectl-fg-muted);\n\ttext-decoration: line-through;\n}\n`;\n","/**\n * ListPlugin: registers ordered, unordered, and checklist block types\n * with NodeSpecs, toggle commands, indent/outdent (Tab/Shift-Tab),\n * input rules, and toolbar buttons.\n *\n * List items are modeled as flat blocks with a `listType` and `indent` attribute,\n * allowing simple nesting representation without deep tree structures.\n */\n\nimport { LIST_CSS } from '../../editor/styles/list.js';\nimport { isNodeOfType } from '../../model/AttrRegistry.js';\nimport { generateBlockId, getBlockText } from '../../model/Document.js';\nimport { createBlockElement } from '../../model/NodeSpec.js';\nimport { createCollapsedSelection, isCollapsed, isNodeSelection } from '../../model/Selection.js';\nimport { nodeType } from '../../model/TypeBrands.js';\nimport type { EditorState } from '../../state/EditorState.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\n\n// --- Attribute Registry Augmentation ---\n\nexport type ListType = 'bullet' | 'ordered' | 'checklist';\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface NodeAttrRegistry {\n\t\tlist_item: { listType: ListType; indent: number; checked: boolean };\n\t}\n}\n\n// --- Configuration ---\n\nexport interface ListConfig {\n\t/** Which list types to enable. Defaults to all. */\n\treadonly types: readonly ListType[];\n\t/** Maximum indent depth. Defaults to 4. */\n\treadonly maxIndent: number;\n\t/** When true, a separator is rendered after the last list toolbar item. */\n\treadonly separatorAfter?: boolean;\n}\n\nconst DEFAULT_CONFIG: ListConfig = {\n\ttypes: ['bullet', 'ordered', 'checklist'],\n\tmaxIndent: 4,\n};\n\n// --- List Type Metadata ---\n\ninterface ListTypeDefinition {\n\treadonly type: ListType;\n\treadonly label: string;\n\treadonly icon: string;\n\treadonly inputPattern: RegExp;\n\treadonly inputPrefix: string;\n}\n\nconst BULLET_LIST_ICON =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M4 10.5c-.83 0-1.5.67-1.5 1.5s.67 1.5 1.5 1.5 1.5-.67 1.5-1.5-.67-1.5-1.5-1.5zm0-6c-.83 0-1.5.67-1.5 1.5S3.17 7.5 4 7.5 5.5 6.83 5.5 6 4.83 4.5 4 4.5zm0 12c-.83 0-1.5.68-1.5 1.5s.68 1.5 1.5 1.5 1.5-.68 1.5-1.5-.67-1.5-1.5-1.5zM7 19h14v-2H7v2zm0-6h14v-2H7v2zm0-8v2h14V5H7z\"/></svg>';\nconst NUMBERED_LIST_ICON =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M2 17h2v.5H3v1h1v.5H2v1h3v-4H2v1zm1-9h1V4H2v1h1v3zm-1 3h1.8L2 13.1v.9h3v-1H3.2L5 10.9V10H2v1zm5-6v2h14V5H7zm0 14h14v-2H7v2zm0-6h14v-2H7v2z\"/></svg>';\nconst CHECKLIST_ICON =\n\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M22 7h-9v2h9V7zm0 8h-9v2h9v-2zM5.54 11L2 7.46l1.41-1.41 2.12 2.12 4.24-4.24 1.41 1.41L5.54 11zm0 8L2 15.46l1.41-1.41 2.12 2.12 4.24-4.24 1.41 1.41L5.54 19z\"/></svg>';\n\nconst LIST_TYPE_DEFINITIONS: readonly ListTypeDefinition[] = [\n\t{\n\t\ttype: 'bullet',\n\t\tlabel: 'Bullet List',\n\t\ticon: BULLET_LIST_ICON,\n\t\tinputPattern: /^[-*] $/,\n\t\tinputPrefix: '- ',\n\t},\n\t{\n\t\ttype: 'ordered',\n\t\tlabel: 'Numbered List',\n\t\ticon: NUMBERED_LIST_ICON,\n\t\tinputPattern: /^\\d+\\. $/,\n\t\tinputPrefix: '1. ',\n\t},\n\t{\n\t\ttype: 'checklist',\n\t\tlabel: 'Checklist',\n\t\ticon: CHECKLIST_ICON,\n\t\tinputPattern: /^\\[[ x]] $/,\n\t\tinputPrefix: '[ ] ',\n\t},\n];\n\n// --- Plugin ---\n\nexport class ListPlugin implements Plugin {\n\treadonly id = 'list';\n\treadonly name = 'List';\n\treadonly priority = 35;\n\n\tprivate readonly config: ListConfig;\n\n\tconstructor(config?: Partial<ListConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tcontext.registerStyleSheet(LIST_CSS);\n\t\tthis.registerNodeSpec(context);\n\t\tthis.registerCommands(context);\n\t\tthis.registerKeymaps(context);\n\t\tthis.registerInputRules(context);\n\t\tthis.registerToolbarItems(context);\n\t}\n\n\tprivate registerNodeSpec(context: PluginContext): void {\n\t\tcontext.registerNodeSpec({\n\t\t\ttype: 'list_item',\n\t\t\tgroup: 'block',\n\t\t\tcontent: { allow: ['text'] },\n\t\t\tattrs: {\n\t\t\t\tlistType: { default: 'bullet' },\n\t\t\t\tindent: { default: 0 },\n\t\t\t\tchecked: { default: false },\n\t\t\t},\n\t\t\ttoDOM(node) {\n\t\t\t\tconst listType = node.attrs?.listType ?? 'bullet';\n\t\t\t\tconst indent = node.attrs?.indent ?? 0;\n\t\t\t\tconst checked = node.attrs?.checked ?? false;\n\n\t\t\t\tconst li = createBlockElement('li', node.id);\n\t\t\t\tli.setAttribute('role', 'listitem');\n\t\t\t\tli.setAttribute('data-list-type', listType);\n\t\t\t\tli.setAttribute('data-indent', String(indent));\n\t\t\t\tli.className = `notectl-list-item notectl-list-item--${listType}`;\n\n\t\t\t\tif (indent > 0) {\n\t\t\t\t\tli.style.marginLeft = `${indent * 24}px`;\n\t\t\t\t}\n\n\t\t\t\tif (listType === 'checklist') {\n\t\t\t\t\tli.setAttribute('data-checked', String(checked));\n\t\t\t\t\tli.setAttribute('aria-checked', String(checked));\n\t\t\t\t}\n\t\t\t\tli.setAttribute('aria-level', String(indent + 1));\n\n\t\t\t\treturn li;\n\t\t\t},\n\t\t\twrapper(node) {\n\t\t\t\tconst listType = node.attrs?.listType ?? 'bullet';\n\t\t\t\tconst tag = listType === 'ordered' ? 'ol' : 'ul';\n\t\t\t\treturn {\n\t\t\t\t\ttag,\n\t\t\t\t\tkey: `list-${listType}`,\n\t\t\t\t\tclassName: `notectl-list notectl-list--${listType}`,\n\t\t\t\t\tattrs: { role: 'list' },\n\t\t\t\t};\n\t\t\t},\n\t\t\ttoHTML(_node, content) {\n\t\t\t\treturn `<li>${content || '<br>'}</li>`;\n\t\t\t},\n\t\t\tparseHTML: [{ tag: 'li' }],\n\t\t\tsanitize: { tags: ['ul', 'ol', 'li'] },\n\t\t});\n\t}\n\n\tprivate registerCommands(context: PluginContext): void {\n\t\tconst enabledTypes = this.getEnabledTypes();\n\n\t\tfor (const def of enabledTypes) {\n\t\t\tcontext.registerCommand(`toggleList:${def.type}`, () => {\n\t\t\t\treturn this.toggleList(context, def.type);\n\t\t\t});\n\t\t}\n\n\t\tcontext.registerCommand('indentListItem', () => {\n\t\t\treturn this.indent(context);\n\t\t});\n\n\t\tcontext.registerCommand('outdentListItem', () => {\n\t\t\treturn this.outdent(context);\n\t\t});\n\n\t\tif (this.config.types.includes('checklist')) {\n\t\t\tcontext.registerCommand('toggleChecklistItem', () => {\n\t\t\t\treturn this.toggleChecked(context);\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate registerKeymaps(context: PluginContext): void {\n\t\tcontext.registerKeymap({\n\t\t\tEnter: () => this.handleEnter(context),\n\t\t\tBackspace: () => this.handleBackspace(context),\n\t\t\tTab: () => this.indent(context),\n\t\t\t'Shift-Tab': () => this.outdent(context),\n\t\t});\n\t}\n\n\tprivate registerInputRules(context: PluginContext): void {\n\t\tconst enabledTypes = this.getEnabledTypes();\n\n\t\tfor (const def of enabledTypes) {\n\t\t\tcontext.registerInputRule({\n\t\t\t\tpattern: def.inputPattern,\n\t\t\t\thandler: (state, match, start, _end) => {\n\t\t\t\t\tconst sel = state.selection;\n\t\t\t\t\tif (isNodeSelection(sel)) return null;\n\t\t\t\t\tif (!isCollapsed(sel)) return null;\n\n\t\t\t\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\t\t\t\tif (!block || block.type !== 'paragraph') return null;\n\n\t\t\t\t\tconst matchStr = match[0] ?? '';\n\t\t\t\t\tconst matchLen = matchStr.length;\n\t\t\t\t\tconst attrs: Record<string, string | number | boolean> = {\n\t\t\t\t\t\tlistType: def.type,\n\t\t\t\t\t\tindent: 0,\n\t\t\t\t\t};\n\t\t\t\t\tif (def.type === 'checklist') {\n\t\t\t\t\t\tattrs.checked = matchStr.includes('[x]');\n\t\t\t\t\t}\n\n\t\t\t\t\treturn state\n\t\t\t\t\t\t.transaction('input')\n\t\t\t\t\t\t.deleteTextAt(sel.anchor.blockId, start, start + matchLen)\n\t\t\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('list_item'), attrs)\n\t\t\t\t\t\t.setSelection(createCollapsedSelection(sel.anchor.blockId, 0))\n\t\t\t\t\t\t.build();\n\t\t\t\t},\n\t\t\t});\n\t\t}\n\t}\n\n\tprivate registerToolbarItems(context: PluginContext): void {\n\t\tconst enabledTypes = this.getEnabledTypes();\n\t\tconst lastType = enabledTypes.at(-1);\n\n\t\tfor (const def of enabledTypes) {\n\t\t\tcontext.registerToolbarItem({\n\t\t\t\tid: `list-${def.type}`,\n\t\t\t\tgroup: 'block',\n\t\t\t\ticon: def.icon,\n\t\t\t\tlabel: def.label,\n\t\t\t\tcommand: `toggleList:${def.type}`,\n\t\t\t\tpriority: def.type === 'bullet' ? 70 : def.type === 'ordered' ? 71 : 72,\n\t\t\t\tseparatorAfter: this.config.separatorAfter && def === lastType,\n\t\t\t\tisActive: (state) => this.isListActive(state, def.type),\n\t\t\t});\n\t\t}\n\t}\n\n\t// --- Command Implementations ---\n\n\tprivate toggleList(context: PluginContext, listType: ListType): boolean {\n\t\tconst state = context.getState();\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel)) return false;\n\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\tif (!block) return false;\n\n\t\t// If already this list type, convert back to paragraph\n\t\tif (block.type === 'list_item' && block.attrs?.listType === listType) {\n\t\t\tconst tr = state\n\t\t\t\t.transaction('command')\n\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('paragraph'))\n\t\t\t\t.setSelection(sel)\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\t// Convert to list item\n\t\tconst attrs: Record<string, string | number | boolean> = {\n\t\t\tlistType,\n\t\t\tindent: isNodeOfType(block, 'list_item') ? block.attrs.indent : 0,\n\t\t};\n\t\tif (listType === 'checklist') {\n\t\t\tattrs.checked = false;\n\t\t}\n\n\t\tconst tr = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(sel.anchor.blockId, nodeType('list_item'), attrs)\n\t\t\t.setSelection(sel)\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n\n\tprivate indent(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tif (isNodeSelection(state.selection)) return false;\n\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\tif (!block || !isNodeOfType(block, 'list_item')) return false;\n\n\t\tif (block.attrs.indent >= this.config.maxIndent) return false;\n\n\t\treturn this.setIndent(context, state, block.attrs.indent + 1);\n\t}\n\n\tprivate outdent(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tif (isNodeSelection(state.selection)) return false;\n\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\tif (!block || !isNodeOfType(block, 'list_item')) return false;\n\n\t\tif (block.attrs.indent <= 0) return false;\n\n\t\treturn this.setIndent(context, state, block.attrs.indent - 1);\n\t}\n\n\tprivate setIndent(context: PluginContext, state: EditorState, indent: number): boolean {\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel)) return false;\n\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\tif (!block) return false;\n\n\t\tconst attrs = { ...block.attrs, indent } as Record<string, string | number | boolean>;\n\n\t\tconst tr = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(sel.anchor.blockId, nodeType('list_item'), attrs)\n\t\t\t.setSelection(sel)\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n\n\tprivate toggleChecked(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tif (isNodeSelection(state.selection)) return false;\n\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\tif (!block || block.type !== 'list_item' || block.attrs?.listType !== 'checklist') {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst checked = !block.attrs?.checked;\n\t\tconst attrs = { ...block.attrs, checked } as Record<string, string | number | boolean>;\n\n\t\tconst tr = state\n\t\t\t.transaction('command')\n\t\t\t.setBlockType(state.selection.anchor.blockId, nodeType('list_item'), attrs)\n\t\t\t.setSelection(state.selection)\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n\n\t/**\n\t * Handles Backspace at the start of a list item.\n\t * Converts the list item back to a paragraph, preserving text.\n\t */\n\tprivate handleBackspace(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel)) return false;\n\t\tif (!isCollapsed(sel)) return false;\n\n\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\tif (!block || block.type !== 'list_item') return false;\n\t\tif (sel.anchor.offset !== 0) return false;\n\n\t\tconst tr = state\n\t\t\t.transaction('input')\n\t\t\t.setBlockType(sel.anchor.blockId, nodeType('paragraph'))\n\t\t\t.setSelection(sel)\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n\n\t/**\n\t * Handles Enter inside a list item.\n\t * Empty item → exit list (convert to paragraph).\n\t * Non-empty item → split and create a new list item with the same type.\n\t */\n\tprivate handleEnter(context: PluginContext): boolean {\n\t\tconst state = context.getState();\n\t\tconst sel = state.selection;\n\t\tif (isNodeSelection(sel)) return false;\n\t\tif (!isCollapsed(sel)) return false;\n\n\t\tconst block = state.getBlock(sel.anchor.blockId);\n\t\tif (!block || block.type !== 'list_item') return false;\n\n\t\tconst text = getBlockText(block);\n\n\t\tif (text === '') {\n\t\t\t// Empty list item → convert to paragraph (exit list)\n\t\t\tconst tr = state\n\t\t\t\t.transaction('input')\n\t\t\t\t.setBlockType(sel.anchor.blockId, nodeType('paragraph'))\n\t\t\t\t.setSelection(sel)\n\t\t\t\t.build();\n\t\t\tcontext.dispatch(tr);\n\t\t\treturn true;\n\t\t}\n\n\t\t// Non-empty → split block and set new block to same list type\n\t\tconst newBlockId = generateBlockId();\n\t\tconst attrs: Record<string, string | number | boolean> = {\n\t\t\tlistType: isNodeOfType(block, 'list_item') ? block.attrs.listType : 'bullet',\n\t\t\tindent: isNodeOfType(block, 'list_item') ? block.attrs.indent : 0,\n\t\t};\n\t\tif (attrs.listType === 'checklist') {\n\t\t\tattrs.checked = false;\n\t\t}\n\n\t\tconst tr = state\n\t\t\t.transaction('input')\n\t\t\t.splitBlock(sel.anchor.blockId, sel.anchor.offset, newBlockId)\n\t\t\t.setBlockType(newBlockId, nodeType('list_item'), attrs)\n\t\t\t.setSelection(createCollapsedSelection(newBlockId, 0))\n\t\t\t.build();\n\t\tcontext.dispatch(tr);\n\t\treturn true;\n\t}\n\n\t// --- Helpers ---\n\n\tprivate isListActive(state: EditorState, listType: ListType): boolean {\n\t\tif (isNodeSelection(state.selection)) return false;\n\t\tconst block = state.getBlock(state.selection.anchor.blockId);\n\t\treturn block?.type === 'list_item' && block.attrs?.listType === listType;\n\t}\n\n\tprivate getEnabledTypes(): readonly ListTypeDefinition[] {\n\t\treturn LIST_TYPE_DEFINITIONS.filter((def) => this.config.types.includes(def.type));\n\t}\n}\n"],"names":["DEFAULT_CONFIG","types","maxIndent","LIST_TYPE_DEFINITIONS","type","label","icon","inputPattern","inputPrefix","ListPlugin","id","name","priority","config","this","context","registerStyleSheet","registerNodeSpec","registerCommands","registerKeymaps","registerInputRules","registerToolbarItems","group","content","allow","attrs","listType","default","indent","checked","node","li","createBlockElement","setAttribute","String","className","style","marginLeft","tag","key","role","toHTML","_node","parseHTML","sanitize","tags","enabledTypes","getEnabledTypes","def","registerCommand","toggleList","outdent","includes","toggleChecked","registerKeymap","Enter","handleEnter","Backspace","handleBackspace","Tab","registerInputRule","pattern","handler","state","match","start","_end","sel","selection","isNodeSelection","isCollapsed","block","getBlock","anchor","blockId","matchStr","matchLen","length","transaction","deleteTextAt","setBlockType","nodeType","setSelection","createCollapsedSelection","build","lastType","at","registerToolbarItem","command","separatorAfter","isActive","isListActive","getState","tr","dispatch","isNodeOfType","setIndent","offset","getBlockText","newBlockId","generateBlockId","splitBlock","filter"],"mappings":"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"}
1
+ {"version":3,"file":"list.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,16 @@
1
+ /** Locale interface and default English locale for the PrintPlugin. */
2
+ export interface PrintLocale {
3
+ readonly label: string;
4
+ readonly tooltip: (shortcut: string) => string;
5
+ readonly printingAnnouncement: string;
6
+ }
7
+ export declare const PRINT_LOCALE_EN: PrintLocale;
8
+ export declare const PRINT_LOCALE_DE: PrintLocale;
9
+ export declare const PRINT_LOCALE_ES: PrintLocale;
10
+ export declare const PRINT_LOCALE_FR: PrintLocale;
11
+ export declare const PRINT_LOCALE_ZH: PrintLocale;
12
+ export declare const PRINT_LOCALE_RU: PrintLocale;
13
+ export declare const PRINT_LOCALE_AR: PrintLocale;
14
+ export declare const PRINT_LOCALE_HI: PrintLocale;
15
+ export declare const PRINT_LOCALES: Record<string, PrintLocale>;
16
+ //# sourceMappingURL=PrintLocale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PrintLocale.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintLocale.ts"],"names":[],"mappings":"AAAA,uEAAuE;AAIvE,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/C,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;CACtC;AAID,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,eAAe,EAAE,WAI7B,CAAC;AAIF,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CASrD,CAAC"}
@@ -5,6 +5,7 @@ export declare class PrintPlugin implements Plugin {
5
5
  readonly name = "Print";
6
6
  private readonly config;
7
7
  private service;
8
+ private locale;
8
9
  constructor(config?: PrintPluginConfig);
9
10
  init(context: PluginContext): void;
10
11
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"PrintPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintPlugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAG1D,OAAO,KAAK,EAAgB,iBAAiB,EAAgB,MAAM,iBAAiB,CAAC;AAiBrF,qBAAa,WAAY,YAAW,MAAM;IACzC,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,OAAO,CAA6B;gBAEhC,MAAM,CAAC,EAAE,iBAAiB;IAItC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IA6ClC,OAAO,IAAI,IAAI;CAGf"}
1
+ {"version":3,"file":"PrintPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintPlugin.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAI1D,OAAO,KAAK,EAAgB,iBAAiB,EAAgB,MAAM,iBAAiB,CAAC;AAiBrF,qBAAa,WAAY,YAAW,MAAM;IACzC,QAAQ,CAAC,EAAE,WAAW;IACtB,QAAQ,CAAC,IAAI,WAAW;IAExB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,OAAO,CAA6B;IAC5C,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,CAAC,EAAE,iBAAiB;IAItC,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IA+ClC,OAAO,IAAI,IAAI;CAGf"}
@@ -3,6 +3,13 @@ import { PrintOptions } from './PrintTypes.js';
3
3
  export declare function extractAdoptedStyles(shadowRoot: ShadowRoot): string;
4
4
  /** Snapshots --notectl-* CSS custom properties from the host element into a :root block. */
5
5
  export declare function snapshotThemeTokens(host: HTMLElement): string;
6
+ /**
7
+ * Snapshots computed typography from the host element into a `body` rule.
8
+ * In the editor, typography is inherited from `:host` (shadow DOM).
9
+ * The print iframe is a regular document where `:host` doesn't match,
10
+ * so we must apply the same font/line-height explicitly.
11
+ */
12
+ export declare function snapshotTypography(host: HTMLElement): string;
6
13
  /** Generates print-specific CSS rules based on PrintOptions. */
7
14
  export declare function generatePrintCSS(options: PrintOptions): string;
8
15
  /** Collects all CSS needed for print: adopted styles, theme tokens, print CSS, and custom CSS. */
@@ -1 +1 @@
1
- {"version":3,"file":"PrintStyleCollector.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintStyleCollector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAQnE;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAgB7D;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CA4C9D;AAED,kGAAkG;AAClG,wBAAgB,UAAU,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,YAAY,GACnB,MAAM,CAiBR"}
1
+ {"version":3,"file":"PrintStyleCollector.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintStyleCollector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAQnE;AAED,4FAA4F;AAC5F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAgB7D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAmB5D;AAED,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CA4D9D;AAED,kGAAkG;AAClG,wBAAgB,UAAU,CACzB,UAAU,EAAE,UAAU,EACtB,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,YAAY,GACnB,MAAM,CAwBR"}
@@ -1,3 +1,4 @@
1
+ import { PaperSize } from '../../editor/PaperSize.js';
1
2
  import { NodeTypeName } from '../../model/TypeBrands.js';
2
3
  import { EventKey, ServiceKey } from '../Plugin.js';
3
4
  export interface PrintOptions {
@@ -25,6 +26,8 @@ export interface PrintOptions {
25
26
  readonly printBackground?: boolean;
26
27
  /** Page orientation. */
27
28
  readonly orientation?: 'portrait' | 'landscape';
29
+ /** Paper size for @page CSS rule. When set, overrides the default A4 page size. */
30
+ readonly paperSize?: PaperSize;
28
31
  }
29
32
  export interface PrintPluginConfig {
30
33
  /** Default options applied to every print() call. */
@@ -33,6 +36,8 @@ export interface PrintPluginConfig {
33
36
  readonly keyBinding?: string;
34
37
  /** Show toolbar button (default: true). */
35
38
  readonly showToolbarItem?: boolean;
39
+ /** Locale override for user-facing strings. */
40
+ readonly locale?: import('./PrintLocale.js').PrintLocale;
36
41
  }
37
42
  export interface PrintService {
38
43
  /** Prints the editor content with optional configuration. */
@@ -1 +1 @@
1
- {"version":3,"file":"PrintTypes.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,YAAY;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAE1C,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,iDAAiD;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAEnD,mDAAmD;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAErD,0CAA0C;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAEnC,wBAAwB;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;CAChD;AAID,MAAM,WAAW,iBAAiB;IACjC,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAEjC,4CAA4C;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;CACnC;AAID,MAAM,WAAW,YAAY;IAC5B,6DAA6D;IAC7D,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAEpC,gEAAgE;IAChE,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACvC;AAID,eAAO,MAAM,iBAAiB,EAAE,UAAU,CAAC,YAAY,CAAyC,CAAC;AAEjG,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAEnD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAgD,CAAC;AAInG,MAAM,WAAW,gBAAgB;IAChC,6DAA6D;IAC7D,OAAO,EAAE,YAAY,CAAC;IACtB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB"}
1
+ {"version":3,"file":"PrintTypes.d.ts","sourceRoot":"","sources":["../../../src/plugins/print/PrintTypes.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAIpD,MAAM,WAAW,YAAY;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,uDAAuD;IACvD,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAE5B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAE1C;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,CAAC,CAAC;IAE1C,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAEzB,iDAAiD;IACjD,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAEnD,mDAAmD;IACnD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,SAAS,YAAY,EAAE,CAAC;IAErD,0CAA0C;IAC1C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAEnC,wBAAwB;IACxB,QAAQ,CAAC,WAAW,CAAC,EAAE,UAAU,GAAG,WAAW,CAAC;IAEhD,mFAAmF;IACnF,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAC/B;AAID,MAAM,WAAW,iBAAiB;IACjC,qDAAqD;IACrD,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;IAEjC,4CAA4C;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B,2CAA2C;IAC3C,QAAQ,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC;IAEnC,+CAA+C;IAC/C,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,kBAAkB,EAAE,WAAW,CAAC;CACzD;AAID,MAAM,WAAW,YAAY;IAC5B,6DAA6D;IAC7D,KAAK,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAEpC,gEAAgE;IAChE,MAAM,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC;CACvC;AAID,eAAO,MAAM,iBAAiB,EAAE,UAAU,CAAC,YAAY,CAAyC,CAAC;AAEjG,eAAO,MAAM,YAAY,EAAE,QAAQ,CAAC,gBAAgB,CAEnD,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,QAAQ,CAAC,eAAe,CAAgD,CAAC;AAInG,MAAM,WAAW,gBAAgB;IAChC,6DAA6D;IAC7D,OAAO,EAAE,YAAY,CAAC;IACtB,uCAAuC;IACvC,SAAS,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC/B,sCAAsC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB"}
@@ -0,0 +1,28 @@
1
+ import { MarkAttrRegistry } from '../../model/AttrRegistry.js';
2
+ import { EditorState } from '../../state/EditorState.js';
3
+ import { PluginContext } from '../Plugin.js';
4
+ /** Color mark type names that have `{ color: string }` attrs. */
5
+ type ColorMarkType = {
6
+ [K in keyof MarkAttrRegistry]: MarkAttrRegistry[K] extends {
7
+ color: string;
8
+ } ? K : never;
9
+ }[keyof MarkAttrRegistry];
10
+ /**
11
+ * Returns the active color value for the given mark type at the current
12
+ * selection, or `null` if the mark is not present.
13
+ */
14
+ export declare function getActiveColor(state: EditorState, markTypeName: ColorMarkType): string | null;
15
+ /** Returns `true` when the given color mark is active at the current selection. */
16
+ export declare function isColorMarkActive(state: EditorState, markTypeName: ColorMarkType): boolean;
17
+ /**
18
+ * Applies the given color to the selection. For collapsed selections,
19
+ * sets stored marks. For range selections, removes then re-adds the mark.
20
+ */
21
+ export declare function applyColorMark(context: PluginContext, state: EditorState, markTypeName: ColorMarkType, color: string): boolean;
22
+ /**
23
+ * Removes the given color mark from the selection.
24
+ * Returns `false` when the mark was not present.
25
+ */
26
+ export declare function removeColorMark(context: PluginContext, state: EditorState, markTypeName: ColorMarkType): boolean;
27
+ export {};
28
+ //# sourceMappingURL=ColorMarkOperations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorMarkOperations.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/ColorMarkOperations.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,gBAAgB,EAAgB,MAAM,6BAA6B,CAAC;AAKlF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAElD,iEAAiE;AACjE,KAAK,aAAa,GAAG;KACnB,CAAC,IAAI,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK;CACxF,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAE1B;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAqB7F;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,GAAG,OAAO,CAE1F;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC7B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,WAAW,EAClB,YAAY,EAAE,aAAa,EAC3B,KAAK,EAAE,MAAM,GACX,OAAO,CAkCT;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC9B,OAAO,EAAE,aAAa,EACtB,KAAK,EAAE,WAAW,EAClB,YAAY,EAAE,aAAa,GACzB,OAAO,CAgCT"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Human-readable color name lookup for accessibility.
3
+ *
4
+ * Provides descriptive names for color swatches so screen readers
5
+ * announce "Red" instead of "#ff0000". Covers all default palette
6
+ * colors with a fallback algorithm for custom hex values.
7
+ */
8
+ /**
9
+ * Returns a human-readable name for a hex color.
10
+ *
11
+ * Checks the static map first, then falls back to a computed
12
+ * description based on hue, saturation, and lightness.
13
+ */
14
+ export declare function getColorName(hex: string): string;
15
+ /**
16
+ * Determines whether a color is light enough to need a visible
17
+ * border when rendered on a white background (WCAG 1.4.11).
18
+ *
19
+ * Uses a contrast-ratio threshold of 3:1 against white.
20
+ */
21
+ export declare function isLightColor(hex: string): boolean;
22
+ //# sourceMappingURL=ColorNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorNames.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/ColorNames.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAgKH;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAMjD"}
@@ -0,0 +1,31 @@
1
+ import { MarkAttrRegistry } from '../../model/AttrRegistry.js';
2
+ import { PluginContext } from '../Plugin.js';
3
+ /** Color mark type names that have `{ color: string }` attrs. */
4
+ type ColorMarkType = {
5
+ [K in keyof MarkAttrRegistry]: MarkAttrRegistry[K] extends {
6
+ color: string;
7
+ } ? K : never;
8
+ }[keyof MarkAttrRegistry];
9
+ /** Configuration for `renderColorPickerPopup`. */
10
+ export interface ColorPickerConfig {
11
+ readonly markType: ColorMarkType;
12
+ readonly colors: readonly string[];
13
+ readonly columns: number;
14
+ readonly resetLabel: string;
15
+ readonly resetCommand: string;
16
+ readonly ariaLabelPrefix: string;
17
+ readonly onClose: () => void;
18
+ }
19
+ /**
20
+ * Renders an accessible color picker popup into `container`.
21
+ *
22
+ * Features:
23
+ * - WAI-ARIA `role="grid"` with row/gridcell structure
24
+ * - Arrow key navigation (wraps around, clamps on partial last row)
25
+ * - Enter/Space selects color and closes popup
26
+ * - Escape closes popup
27
+ * - Roving tabindex on swatches
28
+ */
29
+ export declare function renderColorPickerPopup(container: HTMLElement, context: PluginContext, config: ColorPickerConfig): void;
30
+ export {};
31
+ //# sourceMappingURL=ColorPickerPopup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorPickerPopup.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/ColorPickerPopup.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAKlD,iEAAiE;AACjE,KAAK,aAAa,GAAG;KACnB,CAAC,IAAI,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,CAAC,CAAC,SAAS;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,CAAC,GAAG,KAAK;CACxF,CAAC,MAAM,gBAAgB,CAAC,CAAC;AAE1B,kDAAkD;AAClD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAC7B;AAOD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CACrC,SAAS,EAAE,WAAW,EACtB,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,iBAAiB,GACvB,IAAI,CAuJN"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Shared color validation and normalization utilities
3
+ * for color-based mark plugins (TextColor, Highlight).
4
+ */
5
+ /** Returns `true` when the value is a valid `#RGB` or `#RRGGBB` hex color. */
6
+ export declare function isValidHexColor(value: string): boolean;
7
+ /**
8
+ * Validates, deduplicates, and normalizes a user-supplied color list.
9
+ * Returns `fallbackPalette` when no custom colors are provided.
10
+ *
11
+ * @throws {Error} if any value is not a valid hex color code.
12
+ */
13
+ export declare function resolveColors(colors: readonly string[] | undefined, fallbackPalette: readonly string[], pluginName: string): readonly string[];
14
+ //# sourceMappingURL=ColorValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ColorValidation.d.ts","sourceRoot":"","sources":["../../../src/plugins/shared/ColorValidation.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EACrC,eAAe,EAAE,SAAS,MAAM,EAAE,EAClC,UAAU,EAAE,MAAM,GAChB,SAAS,MAAM,EAAE,CAoBnB"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Locale interface and default English locale for the StrikethroughPlugin.
3
+ */
4
+ export interface StrikethroughLocale {
5
+ readonly label: string;
6
+ readonly tooltip: (shortcut: string) => string;
7
+ }
8
+ export declare const STRIKETHROUGH_LOCALE_EN: StrikethroughLocale;
9
+ export declare const STRIKETHROUGH_LOCALE_DE: StrikethroughLocale;
10
+ export declare const STRIKETHROUGH_LOCALE_ES: StrikethroughLocale;
11
+ export declare const STRIKETHROUGH_LOCALE_FR: StrikethroughLocale;
12
+ export declare const STRIKETHROUGH_LOCALE_ZH: StrikethroughLocale;
13
+ export declare const STRIKETHROUGH_LOCALE_RU: StrikethroughLocale;
14
+ export declare const STRIKETHROUGH_LOCALE_AR: StrikethroughLocale;
15
+ export declare const STRIKETHROUGH_LOCALE_HI: StrikethroughLocale;
16
+ export declare const STRIKETHROUGH_LOCALES: Record<string, StrikethroughLocale>;
17
+ //# sourceMappingURL=StrikethroughLocale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StrikethroughLocale.d.ts","sourceRoot":"","sources":["../../../src/plugins/strikethrough/StrikethroughLocale.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CAC/C;AAID,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,mBAGrC,CAAC;AAIF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CASrE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Plugin, PluginContext } from '../Plugin.js';
2
+ import { StrikethroughLocale } from './StrikethroughLocale.js';
2
3
  declare module '../../model/AttrRegistry.js' {
3
4
  interface MarkAttrRegistry {
4
5
  strikethrough: Record<string, never>;
@@ -7,12 +8,14 @@ declare module '../../model/AttrRegistry.js' {
7
8
  export interface StrikethroughConfig {
8
9
  /** When true, a separator is rendered after the strikethrough toolbar item. */
9
10
  readonly separatorAfter?: boolean;
11
+ readonly locale?: StrikethroughLocale;
10
12
  }
11
13
  export declare class StrikethroughPlugin implements Plugin {
12
14
  readonly id = "strikethrough";
13
15
  readonly name = "Strikethrough";
14
16
  readonly priority = 22;
15
17
  private readonly config;
18
+ private locale;
16
19
  constructor(config?: Partial<StrikethroughConfig>);
17
20
  init(context: PluginContext): void;
18
21
  private registerMarkSpec;
@@ -1 +1 @@
1
- {"version":3,"file":"StrikethroughPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/strikethrough/StrikethroughPlugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAK1D,OAAO,QAAQ,6BAA6B,CAAC;IAC5C,UAAU,gBAAgB;QACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACrC;CACD;AAID,MAAM,WAAW,mBAAmB;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;CAClC;AAMD,qBAAa,mBAAoB,YAAW,MAAM;IACjD,QAAQ,CAAC,EAAE,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;gBAEjC,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAIjD,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAOlC,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,mBAAmB;CAgB3B"}
1
+ {"version":3,"file":"StrikethroughPlugin.d.ts","sourceRoot":"","sources":["../../../src/plugins/strikethrough/StrikethroughPlugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAyB,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAI3F,OAAO,QAAQ,6BAA6B,CAAC;IAC5C,UAAU,gBAAgB;QACzB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACrC;CACD;AAID,MAAM,WAAW,mBAAmB;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IAClC,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC;CACtC;AAMD,qBAAa,mBAAoB,YAAW,MAAM;IACjD,QAAQ,CAAC,EAAE,mBAAmB;IAC9B,QAAQ,CAAC,IAAI,mBAAmB;IAChC,QAAQ,CAAC,QAAQ,MAAM;IAEvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,MAAM,CAAuB;gBAEzB,MAAM,CAAC,EAAE,OAAO,CAAC,mBAAmB,CAAC;IAIjD,IAAI,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI;IAQlC,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,mBAAmB;CAgB3B"}
@@ -1,35 +1,5 @@
1
- import { A as t, r } from "../chunks/Commands-DLP85Mp5.mjs";
2
- import { m as e } from "../chunks/TypeBrands-C09nE2qO.mjs";
3
- import { f as o } from "../chunks/ToolbarItem-ugDymuXi.mjs";
4
- const s = {};
5
- class i {
6
- id = "strikethrough";
7
- name = "Strikethrough";
8
- priority = 22;
9
- config;
10
- constructor(t2) {
11
- this.config = { ...s, ...t2 };
12
- }
13
- init(t2) {
14
- this.registerMarkSpec(t2), this.registerCommand(t2), this.registerKeymap(t2), this.registerToolbarItem(t2);
15
- }
16
- registerMarkSpec(t2) {
17
- t2.registerMarkSpec({ type: "strikethrough", rank: 3, toDOM: () => document.createElement("s"), toHTMLString: (t3, r2) => `<s>${r2}</s>`, parseHTML: [{ tag: "s" }, { tag: "strike" }, { tag: "del" }], sanitize: { tags: ["s"] } });
18
- }
19
- registerCommand(r2) {
20
- r2.registerCommand("toggleStrikethrough", () => {
21
- const o2 = t(r2.getState(), e("strikethrough"));
22
- return !!o2 && (r2.dispatch(o2), true);
23
- });
24
- }
25
- registerKeymap(t2) {
26
- t2.registerKeymap({ "Mod-Shift-X": () => t2.executeCommand("toggleStrikethrough") });
27
- }
28
- registerToolbarItem(t2) {
29
- t2.registerToolbarItem({ id: "strikethrough", group: "format", icon: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z"/></svg>', label: "Strikethrough", tooltip: `Strikethrough (${o("Mod-Shift-X")})`, command: "toggleStrikethrough", priority: 40, separatorAfter: this.config.separatorAfter, isActive: (t3) => r(t3, e("strikethrough")) });
30
- }
31
- }
1
+ import { b } from "../chunks/index-CT3HGdQt.mjs";
32
2
  export {
33
- i as StrikethroughPlugin
3
+ b as StrikethroughPlugin
34
4
  };
35
5
  //# sourceMappingURL=strikethrough.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"strikethrough.mjs","sources":["../../src/plugins/strikethrough/StrikethroughPlugin.ts"],"sourcesContent":["/**\n * StrikethroughPlugin: registers a strikethrough inline mark with MarkSpec,\n * toggle command, keyboard shortcut (Mod-Shift-X), and a toolbar button.\n */\n\nimport { isMarkActive, toggleMark } from '../../commands/Commands.js';\nimport { markType } from '../../model/TypeBrands.js';\nimport type { Plugin, PluginContext } from '../Plugin.js';\nimport { formatShortcut } from '../toolbar/ToolbarItem.js';\n\n// --- Attribute Registry Augmentation ---\n\ndeclare module '../../model/AttrRegistry.js' {\n\tinterface MarkAttrRegistry {\n\t\tstrikethrough: Record<string, never>;\n\t}\n}\n\n// --- Configuration ---\n\nexport interface StrikethroughConfig {\n\t/** When true, a separator is rendered after the strikethrough toolbar item. */\n\treadonly separatorAfter?: boolean;\n}\n\nconst DEFAULT_CONFIG: StrikethroughConfig = {};\n\n// --- Plugin ---\n\nexport class StrikethroughPlugin implements Plugin {\n\treadonly id = 'strikethrough';\n\treadonly name = 'Strikethrough';\n\treadonly priority = 22;\n\n\tprivate readonly config: StrikethroughConfig;\n\n\tconstructor(config?: Partial<StrikethroughConfig>) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config };\n\t}\n\n\tinit(context: PluginContext): void {\n\t\tthis.registerMarkSpec(context);\n\t\tthis.registerCommand(context);\n\t\tthis.registerKeymap(context);\n\t\tthis.registerToolbarItem(context);\n\t}\n\n\tprivate registerMarkSpec(context: PluginContext): void {\n\t\tcontext.registerMarkSpec({\n\t\t\ttype: 'strikethrough',\n\t\t\trank: 3,\n\t\t\ttoDOM() {\n\t\t\t\treturn document.createElement('s');\n\t\t\t},\n\t\t\ttoHTMLString: (_mark, content) => `<s>${content}</s>`,\n\t\t\tparseHTML: [{ tag: 's' }, { tag: 'strike' }, { tag: 'del' }],\n\t\t\tsanitize: { tags: ['s'] },\n\t\t});\n\t}\n\n\tprivate registerCommand(context: PluginContext): void {\n\t\tcontext.registerCommand('toggleStrikethrough', () => {\n\t\t\tconst tr = toggleMark(context.getState(), markType('strikethrough'));\n\t\t\tif (tr) {\n\t\t\t\tcontext.dispatch(tr);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t});\n\t}\n\n\tprivate registerKeymap(context: PluginContext): void {\n\t\tcontext.registerKeymap({\n\t\t\t'Mod-Shift-X': () => context.executeCommand('toggleStrikethrough'),\n\t\t});\n\t}\n\n\tprivate registerToolbarItem(context: PluginContext): void {\n\t\tconst icon =\n\t\t\t'<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M10 19h4v-3h-4v3zM5 4v3h5v3h4V7h5V4H5zM3 14h18v-2H3v2z\"/></svg>';\n\n\t\tcontext.registerToolbarItem({\n\t\t\tid: 'strikethrough',\n\t\t\tgroup: 'format',\n\t\t\ticon,\n\t\t\tlabel: 'Strikethrough',\n\t\t\ttooltip: `Strikethrough (${formatShortcut('Mod-Shift-X')})`,\n\t\t\tcommand: 'toggleStrikethrough',\n\t\t\tpriority: 40,\n\t\t\tseparatorAfter: this.config.separatorAfter,\n\t\t\tisActive: (state) => isMarkActive(state, markType('strikethrough')),\n\t\t});\n\t}\n}\n"],"names":["DEFAULT_CONFIG","StrikethroughPlugin","id","name","priority","config","this","context","registerMarkSpec","registerCommand","registerKeymap","registerToolbarItem","type","rank","toDOM","document","createElement","toHTMLString","_mark","content","parseHTML","tag","sanitize","tags","tr","toggleMark","getState","markType","dispatch","executeCommand","group","icon","label","tooltip","formatShortcut","command","separatorAfter","isActive","state","isMarkActive"],"mappings":";;;AAyBA,MAAMA,IAAsC,CAAA;AAIrC,MAAMC,EAAAA;AAAAA,EACHC,KAAK;AAAA,EACLC,OAAO;AAAA,EACPC,WAAW;AAAA,EAEHC;AAAAA,EAEjB,YAAYA,IAAAA;AACXC,SAAKD,SAAS,EAAA,GAAKL,GAAAA,GAAmBK,GAAAA;AAAAA,EACvC;AAAA,EAEA,KAAKE,IAAAA;AACJD,SAAKE,iBAAiBD,EAAAA,GACtBD,KAAKG,gBAAgBF,EAAAA,GACrBD,KAAKI,eAAeH,EAAAA,GACpBD,KAAKK,oBAAoBJ,EAAAA;AAAAA,EAC1B;AAAA,EAEQ,iBAAiBA;AACxBA,IAAAA,GAAQC,iBAAiB,EACxBI,MAAM,iBACNC,MAAM,GACNC,OAAA,MACQC,SAASC,cAAc,GAAA,GAE/BC,cAAc,CAACC,IAAOC,OAAY,MAAMA,EAAAA,QACxCC,WAAW,CAAC,EAAEC,KAAK,IAAA,GAAO,EAAEA,KAAK,SAAA,GAAY,EAAEA,KAAK,MAAA,CAAA,GACpDC,UAAU,EAAEC,MAAM,CAAC,GAAA,EAAA,EAAA,CAAA;AAAA,EAErB;AAAA,EAEQ,gBAAgBhB;AACvBA,IAAAA,GAAQE,gBAAgB,uBAAuB,MAAA;AAC9C,YAAMe,KAAKC,EAAWlB,GAAQmB,SAAAA,GAAYC,EAAS,eAAA,CAAA;AACnD,aAAA,CAAA,CAAIH,OACHjB,GAAQqB,SAASJ,EAAAA,GAAAA;AAAAA,IACV,CAAA;AAAA,EAIV;AAAA,EAEQ,eAAejB,IAAAA;AACtBA,IAAAA,GAAQG,eAAe,EACtB,eAAe,MAAMH,GAAQsB,eAAe,qBAAA,EAAA,CAAA;AAAA,EAE9C;AAAA,EAEQ,oBAAoBtB;AAI3BA,IAAAA,GAAQI,oBAAoB,EAC3BT,IAAI,iBACJ4B,OAAO,UACPC,MALA,wIAMAC,OAAO,iBACPC,SAAS,kBAAkBC,EAAe,aAAA,CAAA,KAC1CC,SAAS,uBACT/B,UAAU,IACVgC,gBAAgB9B,KAAKD,OAAO+B,gBAC5BC,UAAWC,CAAAA,OAAUC,EAAaD,IAAOX,EAAS;EAEpD;AAAA;"}
1
+ {"version":3,"file":"strikethrough.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Locale interface and default English locale for the SuperSubPlugin.
3
+ */
4
+ export interface SuperSubLocale {
5
+ readonly superscriptLabel: string;
6
+ readonly superscriptTooltip: (shortcut: string) => string;
7
+ readonly subscriptLabel: string;
8
+ readonly subscriptTooltip: (shortcut: string) => string;
9
+ }
10
+ export declare const SUPER_SUB_LOCALE_EN: SuperSubLocale;
11
+ export declare const SUPER_SUB_LOCALE_DE: SuperSubLocale;
12
+ export declare const SUPER_SUB_LOCALE_ES: SuperSubLocale;
13
+ export declare const SUPER_SUB_LOCALE_FR: SuperSubLocale;
14
+ export declare const SUPER_SUB_LOCALE_ZH: SuperSubLocale;
15
+ export declare const SUPER_SUB_LOCALE_RU: SuperSubLocale;
16
+ export declare const SUPER_SUB_LOCALE_AR: SuperSubLocale;
17
+ export declare const SUPER_SUB_LOCALE_HI: SuperSubLocale;
18
+ export declare const SUPER_SUB_LOCALES: Record<string, SuperSubLocale>;
19
+ //# sourceMappingURL=SuperSubLocale.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SuperSubLocale.d.ts","sourceRoot":"","sources":["../../../src/plugins/super-sub/SuperSubLocale.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,kBAAkB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1D,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,gBAAgB,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;CACxD;AAID,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,cAKjC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAS5D,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { Plugin, PluginContext } from '../Plugin.js';
2
+ import { SuperSubLocale } from './SuperSubLocale.js';
2
3
  declare module '../../model/AttrRegistry.js' {
3
4
  interface MarkAttrRegistry {
4
5
  superscript: Record<string, never>;
@@ -17,12 +18,14 @@ export interface SuperSubConfig {
17
18
  readonly toolbar?: SuperSubToolbarConfig;
18
19
  /** When true, a separator is rendered after the last toolbar item. */
19
20
  readonly separatorAfter?: boolean;
21
+ readonly locale?: SuperSubLocale;
20
22
  }
21
23
  export declare class SuperSubPlugin implements Plugin {
22
24
  readonly id = "super-sub";
23
25
  readonly name = "Superscript & Subscript";
24
26
  readonly priority = 23;
25
27
  private readonly config;
28
+ private locale;
26
29
  constructor(config?: Partial<SuperSubConfig>);
27
30
  init(context: PluginContext): void;
28
31
  private registerMark;