@react-x11/components 0.8.0 → 0.9.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 (323) hide show
  1. package/README.md +95 -34
  2. package/dist/charts/node.d.ts +1 -1
  3. package/dist/charts/node.d.ts.map +1 -1
  4. package/dist/charts/node.js +6 -2
  5. package/dist/charts/node.js.map +1 -1
  6. package/dist/embed/client.d.ts +48 -3
  7. package/dist/embed/client.d.ts.map +1 -1
  8. package/dist/embed/client.js +79 -5
  9. package/dist/embed/client.js.map +1 -1
  10. package/dist/embed/index.d.ts +1 -1
  11. package/dist/embed/index.d.ts.map +1 -1
  12. package/dist/embed/index.js +1 -1
  13. package/dist/embed/index.js.map +1 -1
  14. package/dist/html/node.d.ts +3 -1
  15. package/dist/html/node.d.ts.map +1 -1
  16. package/dist/html/node.js +7 -5
  17. package/dist/html/node.js.map +1 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +1 -1
  21. package/dist/index.js.map +1 -1
  22. package/dist/{markdown → internal/markdown}/ast.d.ts +12 -0
  23. package/dist/internal/markdown/ast.d.ts.map +1 -0
  24. package/dist/internal/markdown/ast.js +22 -0
  25. package/dist/internal/markdown/ast.js.map +1 -0
  26. package/dist/internal/markdown/parse.d.ts.map +1 -0
  27. package/dist/{markdown → internal/markdown}/parse.js +112 -22
  28. package/dist/internal/markdown/parse.js.map +1 -0
  29. package/dist/internal/markdown/stringify.d.ts +4 -0
  30. package/dist/internal/markdown/stringify.d.ts.map +1 -0
  31. package/dist/internal/markdown/stringify.js +684 -0
  32. package/dist/internal/markdown/stringify.js.map +1 -0
  33. package/dist/internal/markdown/tags.d.ts.map +1 -0
  34. package/dist/internal/markdown/tags.js.map +1 -0
  35. package/dist/internal/scroll.d.ts +3 -2
  36. package/dist/internal/scroll.d.ts.map +1 -1
  37. package/dist/internal/scroll.js +1 -0
  38. package/dist/internal/scroll.js.map +1 -1
  39. package/dist/maps/anchors.d.ts +98 -0
  40. package/dist/maps/anchors.d.ts.map +1 -0
  41. package/dist/maps/anchors.js +531 -0
  42. package/dist/maps/anchors.js.map +1 -0
  43. package/dist/maps/controller.d.ts +283 -0
  44. package/dist/maps/controller.d.ts.map +1 -0
  45. package/dist/maps/controller.js +743 -0
  46. package/dist/maps/controller.js.map +1 -0
  47. package/dist/maps/gl/buckets.d.ts +95 -0
  48. package/dist/maps/gl/buckets.d.ts.map +1 -0
  49. package/dist/maps/gl/buckets.js +362 -0
  50. package/dist/maps/gl/buckets.js.map +1 -0
  51. package/dist/maps/gl/build-worker.d.ts +13 -0
  52. package/dist/maps/gl/build-worker.d.ts.map +1 -0
  53. package/dist/maps/gl/build-worker.js +44 -0
  54. package/dist/maps/gl/build-worker.js.map +1 -0
  55. package/dist/maps/gl/color.d.ts +8 -0
  56. package/dist/maps/gl/color.d.ts.map +1 -0
  57. package/dist/maps/gl/color.js +57 -0
  58. package/dist/maps/gl/color.js.map +1 -0
  59. package/dist/maps/gl/cover.d.ts +51 -0
  60. package/dist/maps/gl/cover.d.ts.map +1 -0
  61. package/dist/maps/gl/cover.js +124 -0
  62. package/dist/maps/gl/cover.js.map +1 -0
  63. package/dist/maps/gl/index.d.ts +3 -0
  64. package/dist/maps/gl/index.d.ts.map +1 -0
  65. package/dist/maps/gl/index.js +20 -0
  66. package/dist/maps/gl/index.js.map +1 -0
  67. package/dist/maps/gl/markers.d.ts +28 -0
  68. package/dist/maps/gl/markers.d.ts.map +1 -0
  69. package/dist/maps/gl/markers.js +60 -0
  70. package/dist/maps/gl/markers.js.map +1 -0
  71. package/dist/maps/gl/overlays.d.ts +68 -0
  72. package/dist/maps/gl/overlays.d.ts.map +1 -0
  73. package/dist/maps/gl/overlays.js +300 -0
  74. package/dist/maps/gl/overlays.js.map +1 -0
  75. package/dist/maps/gl/pane.d.ts +12 -0
  76. package/dist/maps/gl/pane.d.ts.map +1 -0
  77. package/dist/maps/gl/pane.js +37 -0
  78. package/dist/maps/gl/pane.js.map +1 -0
  79. package/dist/maps/gl/placement.d.ts +111 -0
  80. package/dist/maps/gl/placement.d.ts.map +1 -0
  81. package/dist/maps/gl/placement.js +567 -0
  82. package/dist/maps/gl/placement.js.map +1 -0
  83. package/dist/maps/gl/renderer.d.ts +352 -0
  84. package/dist/maps/gl/renderer.d.ts.map +1 -0
  85. package/dist/maps/gl/renderer.js +1127 -0
  86. package/dist/maps/gl/renderer.js.map +1 -0
  87. package/dist/maps/gl/shaders.d.ts +120 -0
  88. package/dist/maps/gl/shaders.d.ts.map +1 -0
  89. package/dist/maps/gl/shaders.js +451 -0
  90. package/dist/maps/gl/shaders.js.map +1 -0
  91. package/dist/maps/gl/store.d.ts +115 -0
  92. package/dist/maps/gl/store.d.ts.map +1 -0
  93. package/dist/maps/gl/store.js +469 -0
  94. package/dist/maps/gl/store.js.map +1 -0
  95. package/dist/maps/gl/text.d.ts +154 -0
  96. package/dist/maps/gl/text.d.ts.map +1 -0
  97. package/dist/maps/gl/text.js +382 -0
  98. package/dist/maps/gl/text.js.map +1 -0
  99. package/dist/maps/gl/view.d.ts +54 -0
  100. package/dist/maps/gl/view.d.ts.map +1 -0
  101. package/dist/maps/gl/view.js +974 -0
  102. package/dist/maps/gl/view.js.map +1 -0
  103. package/dist/maps/index.d.ts +1 -1
  104. package/dist/maps/index.d.ts.map +1 -1
  105. package/dist/maps/index.js +216 -52
  106. package/dist/maps/index.js.map +1 -1
  107. package/dist/maps/labels.d.ts +37 -16
  108. package/dist/maps/labels.d.ts.map +1 -1
  109. package/dist/maps/labels.js +188 -119
  110. package/dist/maps/labels.js.map +1 -1
  111. package/dist/maps/node.d.ts +162 -56
  112. package/dist/maps/node.d.ts.map +1 -1
  113. package/dist/maps/node.js +607 -515
  114. package/dist/maps/node.js.map +1 -1
  115. package/dist/maps/overlay.d.ts +72 -9
  116. package/dist/maps/overlay.d.ts.map +1 -1
  117. package/dist/maps/overlay.js +108 -28
  118. package/dist/maps/overlay.js.map +1 -1
  119. package/dist/maps/paint.d.ts +3 -0
  120. package/dist/maps/paint.d.ts.map +1 -1
  121. package/dist/maps/paint.js.map +1 -1
  122. package/dist/maps/proj.d.ts +14 -0
  123. package/dist/maps/proj.d.ts.map +1 -1
  124. package/dist/maps/proj.js +28 -0
  125. package/dist/maps/proj.js.map +1 -1
  126. package/dist/maps/renderer.d.ts +69 -0
  127. package/dist/maps/renderer.d.ts.map +1 -0
  128. package/dist/maps/renderer.js +66 -0
  129. package/dist/maps/renderer.js.map +1 -0
  130. package/dist/maps/sources.d.ts +25 -3
  131. package/dist/maps/sources.d.ts.map +1 -1
  132. package/dist/maps/sources.js +17 -0
  133. package/dist/maps/sources.js.map +1 -1
  134. package/dist/maps/theme.d.ts +19 -0
  135. package/dist/maps/theme.d.ts.map +1 -0
  136. package/dist/maps/theme.js +44 -0
  137. package/dist/maps/theme.js.map +1 -0
  138. package/dist/maps/tiles.d.ts +117 -17
  139. package/dist/maps/tiles.d.ts.map +1 -1
  140. package/dist/maps/tiles.js +163 -30
  141. package/dist/maps/tiles.js.map +1 -1
  142. package/dist/maps/types.d.ts +188 -20
  143. package/dist/maps/types.d.ts.map +1 -1
  144. package/dist/markdown/expressions.d.ts +1 -1
  145. package/dist/markdown/expressions.d.ts.map +1 -1
  146. package/dist/markdown/expressions.js.map +1 -1
  147. package/dist/markdown/index.d.ts +7 -6
  148. package/dist/markdown/index.d.ts.map +1 -1
  149. package/dist/markdown/index.js +9 -7
  150. package/dist/markdown/index.js.map +1 -1
  151. package/dist/markdown/spans.d.ts +1 -1
  152. package/dist/markdown/spans.d.ts.map +1 -1
  153. package/dist/media-player/index.d.ts +11 -3
  154. package/dist/media-player/index.d.ts.map +1 -1
  155. package/dist/media-player/index.js +13 -2
  156. package/dist/media-player/index.js.map +1 -1
  157. package/dist/rich-text-editor/clipboard.d.ts +23 -0
  158. package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
  159. package/dist/rich-text-editor/clipboard.js +307 -0
  160. package/dist/rich-text-editor/clipboard.js.map +1 -0
  161. package/dist/rich-text-editor/collab.d.ts +32 -0
  162. package/dist/rich-text-editor/collab.d.ts.map +1 -0
  163. package/dist/rich-text-editor/collab.js +55 -0
  164. package/dist/rich-text-editor/collab.js.map +1 -0
  165. package/dist/rich-text-editor/commands.d.ts +50 -0
  166. package/dist/rich-text-editor/commands.d.ts.map +1 -0
  167. package/dist/rich-text-editor/commands.js +376 -0
  168. package/dist/rich-text-editor/commands.js.map +1 -0
  169. package/dist/rich-text-editor/drag.d.ts +68 -0
  170. package/dist/rich-text-editor/drag.d.ts.map +1 -0
  171. package/dist/rich-text-editor/drag.js +148 -0
  172. package/dist/rich-text-editor/drag.js.map +1 -0
  173. package/dist/rich-text-editor/html.d.ts +145 -0
  174. package/dist/rich-text-editor/html.d.ts.map +1 -0
  175. package/dist/rich-text-editor/html.js +516 -0
  176. package/dist/rich-text-editor/html.js.map +1 -0
  177. package/dist/rich-text-editor/index.d.ts +263 -0
  178. package/dist/rich-text-editor/index.d.ts.map +1 -0
  179. package/dist/rich-text-editor/index.js +822 -0
  180. package/dist/rich-text-editor/index.js.map +1 -0
  181. package/dist/rich-text-editor/inline.d.ts +94 -0
  182. package/dist/rich-text-editor/inline.d.ts.map +1 -0
  183. package/dist/rich-text-editor/inline.js +252 -0
  184. package/dist/rich-text-editor/inline.js.map +1 -0
  185. package/dist/rich-text-editor/keymap.d.ts +71 -0
  186. package/dist/rich-text-editor/keymap.d.ts.map +1 -0
  187. package/dist/rich-text-editor/keymap.js +393 -0
  188. package/dist/rich-text-editor/keymap.js.map +1 -0
  189. package/dist/rich-text-editor/keys.d.ts +29 -0
  190. package/dist/rich-text-editor/keys.d.ts.map +1 -0
  191. package/dist/rich-text-editor/keys.js +93 -0
  192. package/dist/rich-text-editor/keys.js.map +1 -0
  193. package/dist/rich-text-editor/look.d.ts +71 -0
  194. package/dist/rich-text-editor/look.d.ts.map +1 -0
  195. package/dist/rich-text-editor/look.js +342 -0
  196. package/dist/rich-text-editor/look.js.map +1 -0
  197. package/dist/rich-text-editor/markdown.d.ts +18 -0
  198. package/dist/rich-text-editor/markdown.d.ts.map +1 -0
  199. package/dist/rich-text-editor/markdown.js +496 -0
  200. package/dist/rich-text-editor/markdown.js.map +1 -0
  201. package/dist/rich-text-editor/nodes.d.ts +135 -0
  202. package/dist/rich-text-editor/nodes.d.ts.map +1 -0
  203. package/dist/rich-text-editor/nodes.js +397 -0
  204. package/dist/rich-text-editor/nodes.js.map +1 -0
  205. package/dist/rich-text-editor/render.d.ts +68 -0
  206. package/dist/rich-text-editor/render.d.ts.map +1 -0
  207. package/dist/rich-text-editor/render.js +500 -0
  208. package/dist/rich-text-editor/render.js.map +1 -0
  209. package/dist/rich-text-editor/schema.d.ts +16 -0
  210. package/dist/rich-text-editor/schema.d.ts.map +1 -0
  211. package/dist/rich-text-editor/schema.js +386 -0
  212. package/dist/rich-text-editor/schema.js.map +1 -0
  213. package/dist/rich-text-editor/store.d.ts +11 -0
  214. package/dist/rich-text-editor/store.d.ts.map +1 -0
  215. package/dist/rich-text-editor/store.js +43 -0
  216. package/dist/rich-text-editor/store.js.map +1 -0
  217. package/dist/rich-text-editor/suggest.d.ts +127 -0
  218. package/dist/rich-text-editor/suggest.d.ts.map +1 -0
  219. package/dist/rich-text-editor/suggest.js +0 -0
  220. package/dist/rich-text-editor/suggest.js.map +1 -0
  221. package/dist/rich-text-editor/tables.d.ts +41 -0
  222. package/dist/rich-text-editor/tables.d.ts.map +1 -0
  223. package/dist/rich-text-editor/tables.js +204 -0
  224. package/dist/rich-text-editor/tables.js.map +1 -0
  225. package/dist/rich-text-editor/toolbar.d.ts +58 -0
  226. package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
  227. package/dist/rich-text-editor/toolbar.js +548 -0
  228. package/dist/rich-text-editor/toolbar.js.map +1 -0
  229. package/dist/rich-text-editor/view.d.ts +368 -0
  230. package/dist/rich-text-editor/view.d.ts.map +1 -0
  231. package/dist/rich-text-editor/view.js +1968 -0
  232. package/dist/rich-text-editor/view.js.map +1 -0
  233. package/dist/rich-text-editor/virtual.d.ts +54 -0
  234. package/dist/rich-text-editor/virtual.d.ts.map +1 -0
  235. package/dist/rich-text-editor/virtual.js +262 -0
  236. package/dist/rich-text-editor/virtual.js.map +1 -0
  237. package/dist/richtext/node.d.ts +25 -2
  238. package/dist/richtext/node.d.ts.map +1 -1
  239. package/dist/richtext/node.js +46 -24
  240. package/dist/richtext/node.js.map +1 -1
  241. package/dist/terminal/backends.d.ts +4 -1
  242. package/dist/terminal/backends.d.ts.map +1 -1
  243. package/dist/terminal/backends.js.map +1 -1
  244. package/dist/terminal/index.d.ts +18 -7
  245. package/dist/terminal/index.d.ts.map +1 -1
  246. package/dist/terminal/index.js +28 -11
  247. package/dist/terminal/index.js.map +1 -1
  248. package/package.json +23 -4
  249. package/src/charts/node.ts +6 -2
  250. package/src/embed/client.ts +102 -8
  251. package/src/embed/index.ts +2 -0
  252. package/src/html/node.ts +7 -5
  253. package/src/index.ts +2 -0
  254. package/src/{markdown → internal/markdown}/ast.ts +24 -7
  255. package/src/{markdown → internal/markdown}/parse.ts +134 -24
  256. package/src/internal/markdown/stringify.ts +772 -0
  257. package/src/internal/scroll.ts +5 -3
  258. package/src/maps/anchors.ts +607 -0
  259. package/src/maps/controller.ts +999 -0
  260. package/src/maps/gl/buckets.ts +457 -0
  261. package/src/maps/gl/build-worker.ts +55 -0
  262. package/src/maps/gl/color.ts +62 -0
  263. package/src/maps/gl/cover.ts +170 -0
  264. package/src/maps/gl/index.ts +23 -0
  265. package/src/maps/gl/markers.ts +83 -0
  266. package/src/maps/gl/overlays.ts +379 -0
  267. package/src/maps/gl/pane.ts +42 -0
  268. package/src/maps/gl/placement.ts +816 -0
  269. package/src/maps/gl/renderer.ts +1576 -0
  270. package/src/maps/gl/shaders.ts +486 -0
  271. package/src/maps/gl/store.ts +566 -0
  272. package/src/maps/gl/text.ts +495 -0
  273. package/src/maps/gl/view.ts +1224 -0
  274. package/src/maps/index.ts +270 -81
  275. package/src/maps/labels.ts +214 -121
  276. package/src/maps/node.ts +763 -629
  277. package/src/maps/overlay.ts +148 -43
  278. package/src/maps/paint.ts +3 -0
  279. package/src/maps/proj.ts +31 -0
  280. package/src/maps/renderer.ts +155 -0
  281. package/src/maps/sources.ts +38 -3
  282. package/src/maps/theme.ts +51 -0
  283. package/src/maps/tiles.ts +191 -33
  284. package/src/maps/types.ts +188 -20
  285. package/src/markdown/expressions.ts +5 -1
  286. package/src/markdown/index.ts +14 -11
  287. package/src/markdown/spans.ts +1 -1
  288. package/src/media-player/index.ts +18 -4
  289. package/src/rich-text-editor/clipboard.ts +439 -0
  290. package/src/rich-text-editor/collab.ts +91 -0
  291. package/src/rich-text-editor/commands.ts +448 -0
  292. package/src/rich-text-editor/dom-globals.d.ts +23 -0
  293. package/src/rich-text-editor/drag.ts +211 -0
  294. package/src/rich-text-editor/html.ts +619 -0
  295. package/src/rich-text-editor/index.ts +1331 -0
  296. package/src/rich-text-editor/inline.ts +345 -0
  297. package/src/rich-text-editor/keymap.ts +510 -0
  298. package/src/rich-text-editor/keys.ts +119 -0
  299. package/src/rich-text-editor/look.ts +427 -0
  300. package/src/rich-text-editor/markdown.ts +653 -0
  301. package/src/rich-text-editor/nodes.ts +497 -0
  302. package/src/rich-text-editor/render.ts +800 -0
  303. package/src/rich-text-editor/schema.ts +431 -0
  304. package/src/rich-text-editor/store.ts +39 -0
  305. package/src/rich-text-editor/suggest.ts +597 -0
  306. package/src/rich-text-editor/tables.ts +272 -0
  307. package/src/rich-text-editor/toolbar.ts +724 -0
  308. package/src/rich-text-editor/view.ts +2287 -0
  309. package/src/rich-text-editor/virtual.ts +347 -0
  310. package/src/richtext/node.ts +59 -30
  311. package/src/terminal/backends.ts +4 -1
  312. package/src/terminal/index.ts +43 -15
  313. package/dist/markdown/ast.d.ts.map +0 -1
  314. package/dist/markdown/ast.js +0 -17
  315. package/dist/markdown/ast.js.map +0 -1
  316. package/dist/markdown/parse.d.ts.map +0 -1
  317. package/dist/markdown/parse.js.map +0 -1
  318. package/dist/markdown/tags.d.ts.map +0 -1
  319. package/dist/markdown/tags.js.map +0 -1
  320. /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
  321. /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
  322. /package/dist/{markdown → internal/markdown}/tags.js +0 -0
  323. /package/src/{markdown → internal/markdown}/tags.ts +0 -0
@@ -0,0 +1,548 @@
1
+ // The toolbar: a row of formatting buttons over the document — the piece of
2
+ // editor chrome most apps want and few want to build.
3
+ //
4
+ // Three rungs on one prop. `toolbar` gives the default set for whatever the
5
+ // schema can do; an array picks and orders — built-in names, `'|'` for a
6
+ // separator, and items of the app's own beside them; a function renders
7
+ // something else entirely, handed the editor to drive. The buttons run the
8
+ // same public commands an app's own toolbar would (`./commands.ts`,
9
+ // `./tables.ts`), and ask the state whether they are on and whether they can
10
+ // run the same way, so the built-in toolbar is a caller of the API rather
11
+ // than a second one.
12
+ //
13
+ // A press never takes focus: a button is not focusable, and its press is
14
+ // consumed before the editor's own press handler sees it — so the caret stays
15
+ // where the user left it, and the command runs on the selection they can see.
16
+ //
17
+ // Some buttons belong to a place in the document: a table's rows and columns
18
+ // mean something only with the caret in a table. Those say so with
19
+ // `visible`, and the bar leaves them out — and any separator left with
20
+ // nothing beside it — everywhere else.
21
+ //
22
+ // Most buttons are a letter or two in the editor's own face. The rest are
23
+ // pictures — undo, redo, a link, a task, a table and its parts — and those
24
+ // are drawn rather than typed: core's icon set is affordances (a chevron, a
25
+ // check) and these are nouns, and no font a desktop happens to have can be
26
+ // counted on for ↶ or ☐ (AGENTS.md, "Affordance glyphs come from core's set;
27
+ // nouns do not").
28
+ import React from 'react';
29
+ import { tint } from 'react-x11/style';
30
+ import { toggleMark } from 'prosemirror-commands';
31
+ import { redo, redoDepth, undo, undoDepth } from 'prosemirror-history';
32
+ import { hx } from '../internal/hx.js';
33
+ import { RICHTEXT_ELEMENT } from '../richtext/index.js';
34
+ import { insertHorizontalRule, isBlockActive, isMarkActive, toggleBlockType, toggleList, toggleTaskList, toggleWrap, } from './commands.js';
35
+ import { addColumnAfter, addColumnBefore, addRowAfter, addRowBefore, columnAlign, deleteColumn, deleteRow, deleteTable, hasTables, insertTable, isInTable, setColumnAlign, } from './tables.js';
36
+ const h = React.createElement;
37
+ /** `toolbar={true}`. Whatever the schema cannot do is left out, and the
38
+ * table's own group shows only with the caret in a table. The column
39
+ * alignments are there by name, for a bar of an app's own. */
40
+ export const DEFAULT_TOOLBAR = [
41
+ 'undo',
42
+ 'redo',
43
+ '|',
44
+ 'heading1',
45
+ 'heading2',
46
+ 'heading3',
47
+ '|',
48
+ 'bold',
49
+ 'italic',
50
+ 'strike',
51
+ 'code',
52
+ 'link',
53
+ '|',
54
+ 'bulletList',
55
+ 'orderedList',
56
+ 'taskList',
57
+ '|',
58
+ 'blockquote',
59
+ 'codeBlock',
60
+ 'rule',
61
+ 'table',
62
+ '|',
63
+ 'rowBefore',
64
+ 'rowAfter',
65
+ 'columnBefore',
66
+ 'columnAfter',
67
+ 'deleteRow',
68
+ 'deleteColumn',
69
+ 'deleteTable',
70
+ ];
71
+ // --- the drawn glyphs -------------------------------------------------------------
72
+ const GLYPH = { width: 14, height: 14 };
73
+ /** A curved arrow, back (undo) or — mirrored — forward (redo). */
74
+ function HistoryGlyph({ ink, forward, }) {
75
+ return hx('canvas', {
76
+ style: GLYPH,
77
+ onDraw: (ctx, { width }) => {
78
+ const x = (v) => (forward ? width - v : v);
79
+ ctx.strokeStyle = ink;
80
+ ctx.lineWidth = 1.5;
81
+ ctx.lineCap = 'round';
82
+ ctx.lineJoin = 'round';
83
+ ctx.beginPath();
84
+ ctx.moveTo(x(11.5), 11.5);
85
+ ctx.bezierCurveTo(x(11.5), 7.5, x(9), 5.5, x(3.5), 5.5);
86
+ ctx.moveTo(x(6.5), 2.5);
87
+ ctx.lineTo(x(3.5), 5.5);
88
+ ctx.lineTo(x(6.5), 8.5);
89
+ ctx.stroke();
90
+ },
91
+ });
92
+ }
93
+ /** Two links of a chain on the diagonal, and the bar that joins them. */
94
+ function LinkGlyph({ ink }) {
95
+ return hx('canvas', {
96
+ style: GLYPH,
97
+ onDraw: (ctx) => {
98
+ ctx.strokeStyle = ink;
99
+ ctx.lineWidth = 1.5;
100
+ ctx.lineCap = 'round';
101
+ // a pill from one end's centre to the other's
102
+ const pill = (ax, ay, bx, by, r) => {
103
+ const len = Math.hypot(bx - ax, by - ay);
104
+ const nx = -(by - ay) / len;
105
+ const ny = (bx - ax) / len;
106
+ const a = Math.atan2(ny, nx);
107
+ ctx.beginPath();
108
+ ctx.moveTo(ax + nx * r, ay + ny * r);
109
+ ctx.lineTo(bx + nx * r, by + ny * r);
110
+ ctx.arc(bx, by, r, a, a - Math.PI, true);
111
+ ctx.lineTo(ax - nx * r, ay - ny * r);
112
+ ctx.arc(ax, ay, r, a - Math.PI, a - 2 * Math.PI, true);
113
+ ctx.closePath();
114
+ ctx.stroke();
115
+ };
116
+ pill(3, 11, 5.5, 8.5, 2.25);
117
+ pill(8.5, 5.5, 11, 3, 2.25);
118
+ ctx.beginPath();
119
+ ctx.moveTo(5.25, 8.75);
120
+ ctx.lineTo(8.75, 5.25);
121
+ ctx.stroke();
122
+ },
123
+ });
124
+ }
125
+ /** A ticked box. */
126
+ function TaskGlyph({ ink }) {
127
+ return hx('canvas', {
128
+ style: GLYPH,
129
+ onDraw: (ctx, { width, height }) => {
130
+ ctx.strokeStyle = ink;
131
+ ctx.lineWidth = 1.5;
132
+ ctx.lineCap = 'round';
133
+ ctx.lineJoin = 'round';
134
+ ctx.strokeRect(1.75, 1.75, width - 3.5, height - 3.5);
135
+ ctx.beginPath();
136
+ ctx.moveTo(4.5, 7.25);
137
+ ctx.lineTo(6.25, 9);
138
+ ctx.lineTo(9.75, 5);
139
+ ctx.stroke();
140
+ },
141
+ });
142
+ }
143
+ /** A table, or the part of one a button adds or takes away: a grid, and a
144
+ * plus where a row or column goes, or a cross over what goes. */
145
+ function TableGlyph({ ink, part, }) {
146
+ return hx('canvas', {
147
+ style: GLYPH,
148
+ onDraw: (ctx) => {
149
+ ctx.strokeStyle = ink;
150
+ ctx.lineWidth = 1.25;
151
+ ctx.lineCap = 'round';
152
+ const grid = (x, y, w, gh, cols, rows) => {
153
+ ctx.strokeRect(x, y, w, gh);
154
+ ctx.beginPath();
155
+ for (let c = 1; c < cols; c++) {
156
+ ctx.moveTo(x + (w * c) / cols, y);
157
+ ctx.lineTo(x + (w * c) / cols, y + gh);
158
+ }
159
+ for (let r = 1; r < rows; r++) {
160
+ ctx.moveTo(x, y + (gh * r) / rows);
161
+ ctx.lineTo(x + w, y + (gh * r) / rows);
162
+ }
163
+ ctx.stroke();
164
+ };
165
+ const mark = (cx, cy, cross) => {
166
+ ctx.beginPath();
167
+ if (cross) {
168
+ ctx.moveTo(cx - 2, cy - 2);
169
+ ctx.lineTo(cx + 2, cy + 2);
170
+ ctx.moveTo(cx + 2, cy - 2);
171
+ ctx.lineTo(cx - 2, cy + 2);
172
+ }
173
+ else {
174
+ ctx.moveTo(cx - 2.5, cy);
175
+ ctx.lineTo(cx + 2.5, cy);
176
+ ctx.moveTo(cx, cy - 2.5);
177
+ ctx.lineTo(cx, cy + 2.5);
178
+ }
179
+ ctx.stroke();
180
+ };
181
+ switch (part) {
182
+ case 'table':
183
+ grid(1.5, 2.5, 11, 9, 3, 3);
184
+ break;
185
+ case 'rowBefore':
186
+ grid(1.5, 6.5, 11, 6, 3, 2);
187
+ mark(7, 2.5, false);
188
+ break;
189
+ case 'rowAfter':
190
+ grid(1.5, 1.5, 11, 6, 3, 2);
191
+ mark(7, 11.5, false);
192
+ break;
193
+ case 'columnBefore':
194
+ grid(6.5, 1.5, 6, 11, 2, 3);
195
+ mark(2.5, 7, false);
196
+ break;
197
+ case 'columnAfter':
198
+ grid(1.5, 1.5, 6, 11, 2, 3);
199
+ mark(11.5, 7, false);
200
+ break;
201
+ case 'deleteRow':
202
+ ctx.strokeRect(1.5, 4, 11, 6);
203
+ mark(7, 7, true);
204
+ break;
205
+ case 'deleteColumn':
206
+ ctx.strokeRect(4, 1.5, 6, 11);
207
+ mark(7, 7, true);
208
+ break;
209
+ case 'deleteTable':
210
+ grid(1.5, 1.5, 8, 8, 2, 2);
211
+ mark(11, 11, true);
212
+ break;
213
+ }
214
+ },
215
+ });
216
+ }
217
+ /** Four lines set ragged the way a column's text is. */
218
+ function AlignGlyph({ ink, align, }) {
219
+ return hx('canvas', {
220
+ style: GLYPH,
221
+ onDraw: (ctx, { width }) => {
222
+ ctx.strokeStyle = ink;
223
+ ctx.lineWidth = 1.5;
224
+ ctx.lineCap = 'round';
225
+ ctx.beginPath();
226
+ [11, 7, 11, 7].forEach((len, i) => {
227
+ const y = 3 + i * 2.75;
228
+ const x = align === 'left'
229
+ ? 1.5
230
+ : align === 'right'
231
+ ? width - 1.5 - len
232
+ : (width - len) / 2;
233
+ ctx.moveTo(x, y);
234
+ ctx.lineTo(x + len, y);
235
+ });
236
+ ctx.stroke();
237
+ },
238
+ });
239
+ }
240
+ // --- the items ------------------------------------------------------------------
241
+ /**
242
+ * The built-in items for `schema`. `link` is the one that needs the
243
+ * component: a link needs a target to be typed, and the component owns the
244
+ * popup that asks for one.
245
+ */
246
+ export function toolbarItems(schema, options = {}) {
247
+ const { marks, nodes } = schema;
248
+ const out = {
249
+ undo: {
250
+ id: 'undo',
251
+ label: 'Undo',
252
+ icon: (ink) => h(HistoryGlyph, { ink }),
253
+ title: 'Undo',
254
+ run: undo,
255
+ enabled: (state) => undoDepth(state) > 0,
256
+ },
257
+ redo: {
258
+ id: 'redo',
259
+ label: 'Redo',
260
+ icon: (ink) => h(HistoryGlyph, { ink, forward: true }),
261
+ title: 'Redo',
262
+ run: redo,
263
+ enabled: (state) => redoDepth(state) > 0,
264
+ },
265
+ };
266
+ const mark = (id, type, label, title, labelStyle) => {
267
+ if (!type)
268
+ return;
269
+ out[id] = {
270
+ id,
271
+ label,
272
+ title,
273
+ labelStyle,
274
+ run: toggleMark(type),
275
+ active: (state) => isMarkActive(state, type),
276
+ };
277
+ };
278
+ mark('bold', marks.strong, 'B', 'Bold', { weight: 700 });
279
+ mark('italic', marks.em, 'I', 'Italic', { style: 'italic' });
280
+ mark('strike', marks.strike, 'S', 'Strikethrough', {});
281
+ mark('code', marks.code, '</>', 'Inline code', { family: 'monospace' });
282
+ if (marks.link && options.link) {
283
+ const link = marks.link;
284
+ out.link = {
285
+ id: 'link',
286
+ label: 'Link',
287
+ icon: (ink) => h(LinkGlyph, { ink }),
288
+ title: 'Link',
289
+ run: options.link,
290
+ active: (state) => isMarkActive(state, link),
291
+ enabled: () => true,
292
+ };
293
+ }
294
+ if (nodes.paragraph) {
295
+ const para = nodes.paragraph;
296
+ out.paragraph = {
297
+ id: 'paragraph',
298
+ label: '¶',
299
+ title: 'Paragraph',
300
+ run: toggleBlockType(para),
301
+ active: (state) => isBlockActive(state, para) &&
302
+ state.selection.$from.parent.type === para,
303
+ };
304
+ }
305
+ if (nodes.heading) {
306
+ const heading = nodes.heading;
307
+ for (const level of [1, 2, 3]) {
308
+ out[`heading${level}`] = {
309
+ id: `heading${level}`,
310
+ label: `H${level}`,
311
+ title: `Heading ${level}`,
312
+ labelStyle: { weight: 700 },
313
+ run: toggleBlockType(heading, { level }),
314
+ active: (state) => isBlockActive(state, heading, { level }),
315
+ };
316
+ }
317
+ }
318
+ const item = nodes.list_item;
319
+ if (item && nodes.bullet_list) {
320
+ const list = nodes.bullet_list;
321
+ out.bulletList = {
322
+ id: 'bulletList',
323
+ label: '•',
324
+ title: 'Bulleted list',
325
+ labelStyle: { weight: 700 },
326
+ run: toggleList(list, item),
327
+ active: (state) => isBlockActive(state, list) &&
328
+ state.selection.$from.node(Math.max(0, state.selection.$from.depth - 1))
329
+ .attrs.checked == null,
330
+ };
331
+ if ('checked' in (item.spec.attrs ?? {})) {
332
+ out.taskList = {
333
+ id: 'taskList',
334
+ label: '[x]',
335
+ icon: (ink) => h(TaskGlyph, { ink }),
336
+ title: 'Task list',
337
+ run: toggleTaskList(schema),
338
+ active: (state) => {
339
+ const { $from } = state.selection;
340
+ for (let d = $from.depth; d > 0; d--) {
341
+ if ($from.node(d).type === item)
342
+ return $from.node(d).attrs.checked != null;
343
+ }
344
+ return false;
345
+ },
346
+ };
347
+ }
348
+ }
349
+ if (item && nodes.ordered_list) {
350
+ const list = nodes.ordered_list;
351
+ out.orderedList = {
352
+ id: 'orderedList',
353
+ label: '1.',
354
+ title: 'Numbered list',
355
+ run: toggleList(list, item),
356
+ active: (state) => isBlockActive(state, list),
357
+ };
358
+ }
359
+ if (nodes.blockquote) {
360
+ const quote = nodes.blockquote;
361
+ out.blockquote = {
362
+ id: 'blockquote',
363
+ label: '“',
364
+ title: 'Quote',
365
+ labelStyle: { weight: 700 },
366
+ run: toggleWrap(quote),
367
+ active: (state) => isBlockActive(state, quote),
368
+ };
369
+ }
370
+ if (nodes.code_block) {
371
+ const code = nodes.code_block;
372
+ out.codeBlock = {
373
+ id: 'codeBlock',
374
+ label: '{ }',
375
+ title: 'Code block',
376
+ labelStyle: { family: 'monospace' },
377
+ run: toggleBlockType(code),
378
+ active: (state) => isBlockActive(state, code),
379
+ };
380
+ }
381
+ if (nodes.horizontal_rule) {
382
+ out.rule = {
383
+ id: 'rule',
384
+ label: '—',
385
+ title: 'Divider',
386
+ run: insertHorizontalRule(nodes.horizontal_rule),
387
+ };
388
+ }
389
+ if (hasTables(schema)) {
390
+ out.table = {
391
+ id: 'table',
392
+ label: 'Table',
393
+ icon: (ink) => h(TableGlyph, { ink, part: 'table' }),
394
+ title: 'Table',
395
+ run: insertTable(),
396
+ active: isInTable,
397
+ };
398
+ const part = (id, title, run) => ({
399
+ id,
400
+ label: title,
401
+ icon: (ink) => h(TableGlyph, { ink, part: id }),
402
+ title,
403
+ run,
404
+ visible: isInTable,
405
+ });
406
+ out.rowBefore = part('rowBefore', 'Row above', addRowBefore);
407
+ out.rowAfter = part('rowAfter', 'Row below', addRowAfter);
408
+ out.columnBefore = part('columnBefore', 'Column before', addColumnBefore);
409
+ out.columnAfter = part('columnAfter', 'Column after', addColumnAfter);
410
+ out.deleteRow = part('deleteRow', 'Delete row', deleteRow);
411
+ out.deleteColumn = part('deleteColumn', 'Delete column', deleteColumn);
412
+ out.deleteTable = part('deleteTable', 'Delete table', deleteTable);
413
+ for (const [id, align] of [
414
+ ['alignLeft', 'left'],
415
+ ['alignCenter', 'center'],
416
+ ['alignRight', 'right'],
417
+ ]) {
418
+ out[id] = {
419
+ id,
420
+ label: `Align ${align}`,
421
+ icon: (ink) => h(AlignGlyph, { ink, align }),
422
+ title: `Align column ${align}`,
423
+ // pressed again, it takes the alignment off
424
+ run: (state, dispatch) => setColumnAlign(columnAlign(state) === align ? null : align)(state, dispatch),
425
+ active: (state) => columnAlign(state) === align,
426
+ visible: isInTable,
427
+ };
428
+ }
429
+ }
430
+ return out;
431
+ }
432
+ /** Entries as items: names resolved, the ones the schema cannot do dropped,
433
+ * and no separator left leading, trailing or doubled. */
434
+ export function resolveToolbar(entries, items) {
435
+ const out = [];
436
+ for (const entry of entries) {
437
+ const item = typeof entry === 'string' && entry !== '|' ? items[entry] : entry;
438
+ if (!item)
439
+ continue;
440
+ if (item === '|' && (out.length === 0 || out[out.length - 1] === '|'))
441
+ continue;
442
+ out.push(item);
443
+ }
444
+ while (out[out.length - 1] === '|')
445
+ out.pop();
446
+ return out;
447
+ }
448
+ /** The entries in the bar for `state`: the invisible ones out, and the
449
+ * separators that were only between them with them. */
450
+ function shownEntries(entries, state) {
451
+ const out = [];
452
+ for (const entry of entries) {
453
+ if (entry !== '|' && entry.visible && !entry.visible(state))
454
+ continue;
455
+ if (entry === '|' && (out.length === 0 || out[out.length - 1] === '|'))
456
+ continue;
457
+ out.push(entry);
458
+ }
459
+ while (out[out.length - 1] === '|')
460
+ out.pop();
461
+ return out;
462
+ }
463
+ function button(item, props) {
464
+ const { state, look, run, disabled } = props;
465
+ const active = item.active?.(state) ?? false;
466
+ const enabled = !disabled && (item.enabled ? item.enabled(state) : item.run(state));
467
+ // a button that cannot run is drawn in the muted ink — react-x11 styles
468
+ // have no opacity to fade it with
469
+ const ink = !enabled ? look.muted : active ? look.accent : look.text;
470
+ let content;
471
+ if (item.icon != null) {
472
+ content = typeof item.icon === 'function' ? item.icon(ink) : item.icon;
473
+ }
474
+ else {
475
+ const label = {
476
+ text: item.label,
477
+ family: look.family,
478
+ size: look.size,
479
+ color: ink,
480
+ ...item.labelStyle,
481
+ ...(item.id === 'strike' ? { strike: ink } : null),
482
+ };
483
+ if (item.labelStyle?.family === 'monospace')
484
+ label.family = look.mono;
485
+ content = h(RICHTEXT_ELEMENT, { runs: [label], wrap: false });
486
+ }
487
+ return hx('box', {
488
+ key: item.id,
489
+ role: 'button',
490
+ 'aria-label': item.title,
491
+ 'aria-pressed': active,
492
+ focusable: false,
493
+ style: {
494
+ minWidth: 26,
495
+ height: 26,
496
+ paddingLeft: 6,
497
+ paddingRight: 6,
498
+ borderRadius: 5,
499
+ alignItems: 'center',
500
+ justifyContent: 'center',
501
+ backgroundColor: active ? tint(look.accent, 0.16) : 'transparent',
502
+ ...(enabled
503
+ ? { ':hover': { backgroundColor: tint(look.text, 0.08) } }
504
+ : null),
505
+ },
506
+ onMouseDown: (ev) => {
507
+ // the editor's own press handler is on the root, above: stop here,
508
+ // so the caret stays put, and prevent core's default action too
509
+ ev.preventDefault();
510
+ ev.stopPropagation();
511
+ if (enabled)
512
+ run(item.run);
513
+ },
514
+ }, content);
515
+ }
516
+ export function Toolbar(props) {
517
+ const { look } = props;
518
+ const entries = shownEntries(props.entries, props.state);
519
+ return hx('box', {
520
+ role: 'toolbar',
521
+ style: {
522
+ flexDirection: 'row',
523
+ flexWrap: 'wrap',
524
+ alignItems: 'center',
525
+ gap: 2,
526
+ paddingLeft: 6,
527
+ paddingRight: 6,
528
+ paddingTop: 4,
529
+ paddingBottom: 4,
530
+ borderBottomWidth: 1,
531
+ borderBottomColor: look.border,
532
+ backgroundColor: look.surface,
533
+ ...props.style,
534
+ },
535
+ }, ...entries.map((entry, i) => entry === '|'
536
+ ? hx('box', {
537
+ key: `sep${i}`,
538
+ style: {
539
+ width: 1,
540
+ height: 16,
541
+ marginLeft: 4,
542
+ marginRight: 4,
543
+ backgroundColor: look.border,
544
+ },
545
+ })
546
+ : button(entry, props)));
547
+ }
548
+ //# sourceMappingURL=toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar.js","sourceRoot":"","sources":["../../src/rich-text-editor/toolbar.ts"],"names":[],"mappings":"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"}