myrole-docx-editor 0.4.0 → 0.5.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 (254) hide show
  1. package/dist/assistant-mcp.mjs +1 -1
  2. package/dist/chunks/{sdk-BIAG7DE-.js → sdk-DdtgYtTx.js} +10063 -9290
  3. package/dist/chunks/sdk-DdtgYtTx.js.map +1 -0
  4. package/dist/chunks/{vars-blockly-CMA3qyLP.js → vars-blockly-BSiNa0Vb.js} +4 -4
  5. package/dist/chunks/{vars-blockly-CMA3qyLP.js.map → vars-blockly-BSiNa0Vb.js.map} +1 -1
  6. package/dist/index.js +23 -25
  7. package/dist/index.js.map +1 -1
  8. package/dist/react.js +2 -2
  9. package/dist/types/packages/docx-editor/src/chrome.d.ts +2 -0
  10. package/dist/types/packages/docx-editor/src/editor.d.ts +11 -3
  11. package/dist/types/packages/docx-editor/src/fonts.d.ts +62 -4
  12. package/dist/types/packages/docx-editor/src/index.d.ts +1 -0
  13. package/dist/types/packages/docx-editor/src/sdk.d.ts +9 -0
  14. package/dist/types/packages/docx-editor/src/ui/icons.d.ts +6 -0
  15. package/dist/types/packages/docx-editor/src/ui/perf-hud.d.ts +13 -0
  16. package/dist/types/packages/docx-editor/src/vars-complete.d.ts +9 -3
  17. package/dist/types/packages/docx-model/src/editor.d.ts +28 -0
  18. package/dist/types/packages/docx-render/src/canvas-page.d.ts +2 -0
  19. package/dist/types/packages/docx-render/src/render-output.d.ts +1 -1
  20. package/dist/types/packages/docx-render/src/types.d.ts +2 -0
  21. package/dist/types/packages/docx-vars/src/icons.d.ts +36 -0
  22. package/dist/types/packages/docx-vars/src/target-canvas.d.ts +1 -0
  23. package/dist/types/packages/fonts/src/aliases.d.ts +14 -0
  24. package/dist/types/packages/fonts/src/metrics.d.ts +1 -1
  25. package/package.json +5 -7
  26. package/dist/chunks/sdk-BIAG7DE-.js.map +0 -1
  27. package/fonts/ttf/abadi-mt-condensed-extra-bold-400-normal.ttf +0 -0
  28. package/fonts/ttf/abadi-mt-condensed-light-400-normal.ttf +0 -0
  29. package/fonts/ttf/angsana-new-400-italic.ttf +0 -0
  30. package/fonts/ttf/angsana-new-400-normal.ttf +0 -0
  31. package/fonts/ttf/angsana-new-700-italic.ttf +0 -0
  32. package/fonts/ttf/angsana-new-700-normal.ttf +0 -0
  33. package/fonts/ttf/apple-color-emoji-400-normal.ttf +0 -0
  34. package/fonts/ttf/apple-symbols-400-normal.ttf +0 -0
  35. package/fonts/ttf/aptos-400-italic.ttf +0 -0
  36. package/fonts/ttf/aptos-400-normal.ttf +0 -0
  37. package/fonts/ttf/aptos-700-italic.ttf +0 -0
  38. package/fonts/ttf/aptos-700-normal.ttf +0 -0
  39. package/fonts/ttf/aptos-narrow-400-italic.ttf +0 -0
  40. package/fonts/ttf/aptos-narrow-400-normal.ttf +0 -0
  41. package/fonts/ttf/aptos-narrow-700-italic.ttf +0 -0
  42. package/fonts/ttf/aptos-narrow-700-normal.ttf +0 -0
  43. package/fonts/ttf/arial-400-italic.ttf +0 -0
  44. package/fonts/ttf/arial-400-normal.ttf +0 -0
  45. package/fonts/ttf/arial-700-italic.ttf +0 -0
  46. package/fonts/ttf/arial-700-normal.ttf +0 -0
  47. package/fonts/ttf/arial-black-700-normal.ttf +0 -0
  48. package/fonts/ttf/arial-hebrew-400-normal.ttf +0 -0
  49. package/fonts/ttf/arial-hebrew-700-normal.ttf +0 -0
  50. package/fonts/ttf/arial-narrow-400-italic.ttf +0 -0
  51. package/fonts/ttf/arial-narrow-400-normal.ttf +0 -0
  52. package/fonts/ttf/arial-narrow-700-italic.ttf +0 -0
  53. package/fonts/ttf/arial-narrow-700-normal.ttf +0 -0
  54. package/fonts/ttf/arial-rounded-mt-bold-400-normal.ttf +0 -0
  55. package/fonts/ttf/arial-unicode-ms-400-normal.ttf +0 -0
  56. package/fonts/ttf/avenir-400-italic.ttf +0 -0
  57. package/fonts/ttf/avenir-400-normal.ttf +0 -0
  58. package/fonts/ttf/avenir-700-normal.ttf +0 -0
  59. package/fonts/ttf/avenir-black-700-normal.ttf +0 -0
  60. package/fonts/ttf/avenir-book-400-normal.ttf +0 -0
  61. package/fonts/ttf/avenir-heavy-700-italic.ttf +0 -0
  62. package/fonts/ttf/avenir-heavy-700-normal.ttf +0 -0
  63. package/fonts/ttf/avenir-light-400-italic.ttf +0 -0
  64. package/fonts/ttf/avenir-light-400-normal.ttf +0 -0
  65. package/fonts/ttf/avenir-next-400-italic.ttf +0 -0
  66. package/fonts/ttf/avenir-next-400-normal.ttf +0 -0
  67. package/fonts/ttf/avenir-next-700-italic.ttf +0 -0
  68. package/fonts/ttf/avenir-next-700-normal.ttf +0 -0
  69. package/fonts/ttf/baskerville-old-face-400-normal.ttf +0 -0
  70. package/fonts/ttf/batang-400-normal.ttf +0 -0
  71. package/fonts/ttf/bauhaus-93-400-normal.ttf +0 -0
  72. package/fonts/ttf/big-caslon-400-normal.ttf +0 -0
  73. package/fonts/ttf/bookman-old-style-400-italic.ttf +0 -0
  74. package/fonts/ttf/bookman-old-style-400-normal.ttf +0 -0
  75. package/fonts/ttf/bookman-old-style-700-italic.ttf +0 -0
  76. package/fonts/ttf/bookman-old-style-700-normal.ttf +0 -0
  77. package/fonts/ttf/calibri-400-italic.ttf +0 -0
  78. package/fonts/ttf/calibri-400-normal.ttf +0 -0
  79. package/fonts/ttf/calibri-700-italic.ttf +0 -0
  80. package/fonts/ttf/calibri-700-normal.ttf +0 -0
  81. package/fonts/ttf/calibri-light-400-italic.ttf +0 -0
  82. package/fonts/ttf/calibri-light-400-normal.ttf +0 -0
  83. package/fonts/ttf/cambria-400-italic.ttf +0 -0
  84. package/fonts/ttf/cambria-400-normal.ttf +0 -0
  85. package/fonts/ttf/cambria-700-italic.ttf +0 -0
  86. package/fonts/ttf/cambria-700-normal.ttf +0 -0
  87. package/fonts/ttf/cambria-math-400-normal.ttf +0 -0
  88. package/fonts/ttf/candara-400-italic.ttf +0 -0
  89. package/fonts/ttf/candara-400-normal.ttf +0 -0
  90. package/fonts/ttf/candara-700-italic.ttf +0 -0
  91. package/fonts/ttf/candara-700-normal.ttf +0 -0
  92. package/fonts/ttf/century-400-normal.ttf +0 -0
  93. package/fonts/ttf/century-gothic-400-italic.ttf +0 -0
  94. package/fonts/ttf/century-gothic-400-normal.ttf +0 -0
  95. package/fonts/ttf/century-gothic-700-italic.ttf +0 -0
  96. package/fonts/ttf/century-gothic-700-normal.ttf +0 -0
  97. package/fonts/ttf/century-schoolbook-400-italic.ttf +0 -0
  98. package/fonts/ttf/century-schoolbook-400-normal.ttf +0 -0
  99. package/fonts/ttf/century-schoolbook-700-italic.ttf +0 -0
  100. package/fonts/ttf/century-schoolbook-700-normal.ttf +0 -0
  101. package/fonts/ttf/comic-sans-ms-400-normal.ttf +0 -0
  102. package/fonts/ttf/comic-sans-ms-700-normal.ttf +0 -0
  103. package/fonts/ttf/consolas-400-italic.ttf +0 -0
  104. package/fonts/ttf/consolas-400-normal.ttf +0 -0
  105. package/fonts/ttf/consolas-700-normal.ttf +0 -0
  106. package/fonts/ttf/corbel-400-italic.ttf +0 -0
  107. package/fonts/ttf/corbel-400-normal.ttf +0 -0
  108. package/fonts/ttf/corbel-700-italic.ttf +0 -0
  109. package/fonts/ttf/corbel-700-normal.ttf +0 -0
  110. package/fonts/ttf/cordia-new-400-italic.ttf +0 -0
  111. package/fonts/ttf/cordia-new-400-normal.ttf +0 -0
  112. package/fonts/ttf/cordia-new-700-italic.ttf +0 -0
  113. package/fonts/ttf/cordia-new-700-normal.ttf +0 -0
  114. package/fonts/ttf/courier-400-normal.ttf +0 -0
  115. package/fonts/ttf/courier-new-400-italic.ttf +0 -0
  116. package/fonts/ttf/courier-new-400-normal.ttf +0 -0
  117. package/fonts/ttf/courier-new-700-normal.ttf +0 -0
  118. package/fonts/ttf/daytona-400-italic.ttf +0 -0
  119. package/fonts/ttf/daytona-400-normal.ttf +0 -0
  120. package/fonts/ttf/daytona-700-italic.ttf +0 -0
  121. package/fonts/ttf/daytona-700-normal.ttf +0 -0
  122. package/fonts/ttf/dengxian-400-normal.ttf +0 -0
  123. package/fonts/ttf/dengxian-700-normal.ttf +0 -0
  124. package/fonts/ttf/dengxian-light-400-normal.ttf +0 -0
  125. package/fonts/ttf/didot-400-italic.ttf +0 -0
  126. package/fonts/ttf/didot-400-normal.ttf +0 -0
  127. package/fonts/ttf/didot-700-normal.ttf +0 -0
  128. package/fonts/ttf/edwardian-script-itc-400-normal.ttf +0 -0
  129. package/fonts/ttf/euphemia-ucas-400-italic.ttf +0 -0
  130. package/fonts/ttf/euphemia-ucas-400-normal.ttf +0 -0
  131. package/fonts/ttf/euphemia-ucas-700-normal.ttf +0 -0
  132. package/fonts/ttf/eurostile-400-normal.ttf +0 -0
  133. package/fonts/ttf/eurostile-700-normal.ttf +0 -0
  134. package/fonts/ttf/franklin-gothic-book-400-italic.ttf +0 -0
  135. package/fonts/ttf/franklin-gothic-book-400-normal.ttf +0 -0
  136. package/fonts/ttf/franklin-gothic-demi-400-italic.ttf +0 -0
  137. package/fonts/ttf/franklin-gothic-demi-400-normal.ttf +0 -0
  138. package/fonts/ttf/franklin-gothic-demi-cond-400-normal.ttf +0 -0
  139. package/fonts/ttf/franklin-gothic-medium-400-italic.ttf +0 -0
  140. package/fonts/ttf/franklin-gothic-medium-400-normal.ttf +0 -0
  141. package/fonts/ttf/franklin-gothic-medium-cond-400-normal.ttf +0 -0
  142. package/fonts/ttf/futura-400-italic.ttf +0 -0
  143. package/fonts/ttf/futura-400-normal.ttf +0 -0
  144. package/fonts/ttf/futura-700-normal.ttf +0 -0
  145. package/fonts/ttf/garamond-400-italic.ttf +0 -0
  146. package/fonts/ttf/garamond-400-normal.ttf +0 -0
  147. package/fonts/ttf/garamond-700-italic.ttf +0 -0
  148. package/fonts/ttf/garamond-700-normal.ttf +0 -0
  149. package/fonts/ttf/geneva-400-normal.ttf +0 -0
  150. package/fonts/ttf/georgia-400-italic.ttf +0 -0
  151. package/fonts/ttf/georgia-400-normal.ttf +0 -0
  152. package/fonts/ttf/georgia-700-normal.ttf +0 -0
  153. package/fonts/ttf/gill-sans-400-italic.ttf +0 -0
  154. package/fonts/ttf/gill-sans-400-normal.ttf +0 -0
  155. package/fonts/ttf/gill-sans-700-italic.ttf +0 -0
  156. package/fonts/ttf/gill-sans-700-normal.ttf +0 -0
  157. package/fonts/ttf/gill-sans-light-400-italic.ttf +0 -0
  158. package/fonts/ttf/gill-sans-light-400-normal.ttf +0 -0
  159. package/fonts/ttf/gill-sans-mt-400-italic.ttf +0 -0
  160. package/fonts/ttf/gill-sans-mt-400-normal.ttf +0 -0
  161. package/fonts/ttf/gill-sans-mt-700-italic.ttf +0 -0
  162. package/fonts/ttf/gill-sans-mt-700-normal.ttf +0 -0
  163. package/fonts/ttf/helvetica-400-italic.ttf +0 -0
  164. package/fonts/ttf/helvetica-400-normal.ttf +0 -0
  165. package/fonts/ttf/helvetica-700-italic.ttf +0 -0
  166. package/fonts/ttf/helvetica-700-normal.ttf +0 -0
  167. package/fonts/ttf/helvetica-neue-400-italic.ttf +0 -0
  168. package/fonts/ttf/helvetica-neue-400-normal.ttf +0 -0
  169. package/fonts/ttf/helvetica-neue-700-italic.ttf +0 -0
  170. package/fonts/ttf/helvetica-neue-700-normal.ttf +0 -0
  171. package/fonts/ttf/hind-siliguri-400-normal.ttf +0 -0
  172. package/fonts/ttf/hind-siliguri-700-normal.ttf +0 -0
  173. package/fonts/ttf/hind-siliguri-light-400-normal.ttf +0 -0
  174. package/fonts/ttf/hind-siliguri-medium-400-normal.ttf +0 -0
  175. package/fonts/ttf/hind-siliguri-semibold-700-normal.ttf +0 -0
  176. package/fonts/ttf/hoefler-text-400-italic.ttf +0 -0
  177. package/fonts/ttf/hoefler-text-400-normal.ttf +0 -0
  178. package/fonts/ttf/hoefler-text-700-italic.ttf +0 -0
  179. package/fonts/ttf/hoefler-text-700-normal.ttf +0 -0
  180. package/fonts/ttf/lucida-grande-400-normal.ttf +0 -0
  181. package/fonts/ttf/lucida-grande-700-normal.ttf +0 -0
  182. package/fonts/ttf/lucida-sans-400-italic.ttf +0 -0
  183. package/fonts/ttf/lucida-sans-400-normal.ttf +0 -0
  184. package/fonts/ttf/lucida-sans-700-italic.ttf +0 -0
  185. package/fonts/ttf/lucida-sans-700-normal.ttf +0 -0
  186. package/fonts/ttf/lucida-sans-unicode-400-normal.ttf +0 -0
  187. package/fonts/ttf/malgun-gothic-400-normal.ttf +0 -0
  188. package/fonts/ttf/malgun-gothic-700-normal.ttf +0 -0
  189. package/fonts/ttf/mangal-400-normal.ttf +0 -0
  190. package/fonts/ttf/mangal-700-normal.ttf +0 -0
  191. package/fonts/ttf/microsoft-sans-serif-400-normal.ttf +0 -0
  192. package/fonts/ttf/microsoft-yahei-400-normal.ttf +0 -0
  193. package/fonts/ttf/microsoft-yahei-700-normal.ttf +0 -0
  194. package/fonts/ttf/microsoft-yi-baiti-400-normal.ttf +0 -0
  195. package/fonts/ttf/monotype-sorts-400-normal.ttf +0 -0
  196. package/fonts/ttf/ms-gothic-400-normal.ttf +0 -0
  197. package/fonts/ttf/ms-mincho-400-normal.ttf +0 -0
  198. package/fonts/ttf/ms-ui-gothic-400-normal.ttf +0 -0
  199. package/fonts/ttf/new-york-400-italic.ttf +0 -0
  200. package/fonts/ttf/new-york-400-normal.ttf +0 -0
  201. package/fonts/ttf/news-gothic-mt-400-italic.ttf +0 -0
  202. package/fonts/ttf/news-gothic-mt-400-normal.ttf +0 -0
  203. package/fonts/ttf/news-gothic-mt-700-italic.ttf +0 -0
  204. package/fonts/ttf/news-gothic-mt-700-normal.ttf +0 -0
  205. package/fonts/ttf/nsimsun-400-normal.ttf +0 -0
  206. package/fonts/ttf/optima-400-italic.ttf +0 -0
  207. package/fonts/ttf/optima-400-normal.ttf +0 -0
  208. package/fonts/ttf/optima-700-italic.ttf +0 -0
  209. package/fonts/ttf/optima-700-normal.ttf +0 -0
  210. package/fonts/ttf/palatino-400-italic.ttf +0 -0
  211. package/fonts/ttf/palatino-400-normal.ttf +0 -0
  212. package/fonts/ttf/palatino-700-italic.ttf +0 -0
  213. package/fonts/ttf/palatino-700-normal.ttf +0 -0
  214. package/fonts/ttf/palatino-linotype-400-italic.ttf +0 -0
  215. package/fonts/ttf/palatino-linotype-400-normal.ttf +0 -0
  216. package/fonts/ttf/palatino-linotype-700-italic.ttf +0 -0
  217. package/fonts/ttf/palatino-linotype-700-normal.ttf +0 -0
  218. package/fonts/ttf/pmingliu-400-normal.ttf +0 -0
  219. package/fonts/ttf/pt-mono-400-normal.ttf +0 -0
  220. package/fonts/ttf/pt-mono-700-normal.ttf +0 -0
  221. package/fonts/ttf/segoe-ui-symbol-400-normal.ttf +0 -0
  222. package/fonts/ttf/simsun-400-normal.ttf +0 -0
  223. package/fonts/ttf/skia-400-normal.ttf +0 -0
  224. package/fonts/ttf/stencil-400-normal.ttf +0 -0
  225. package/fonts/ttf/symbol-400-normal.ttf +0 -0
  226. package/fonts/ttf/tahoma-400-normal.ttf +0 -0
  227. package/fonts/ttf/tahoma-700-normal.ttf +0 -0
  228. package/fonts/ttf/times-400-italic.ttf +0 -0
  229. package/fonts/ttf/times-400-normal.ttf +0 -0
  230. package/fonts/ttf/times-700-italic.ttf +0 -0
  231. package/fonts/ttf/times-700-normal.ttf +0 -0
  232. package/fonts/ttf/times-new-roman-400-italic.ttf +0 -0
  233. package/fonts/ttf/times-new-roman-400-normal.ttf +0 -0
  234. package/fonts/ttf/times-new-roman-700-italic.ttf +0 -0
  235. package/fonts/ttf/times-new-roman-700-normal.ttf +0 -0
  236. package/fonts/ttf/trebuchet-ms-400-italic.ttf +0 -0
  237. package/fonts/ttf/trebuchet-ms-400-normal.ttf +0 -0
  238. package/fonts/ttf/trebuchet-ms-700-italic.ttf +0 -0
  239. package/fonts/ttf/trebuchet-ms-700-normal.ttf +0 -0
  240. package/fonts/ttf/tw-cen-mt-400-normal.ttf +0 -0
  241. package/fonts/ttf/tw-cen-mt-700-normal.ttf +0 -0
  242. package/fonts/ttf/tw-cen-mt-condensed-400-normal.ttf +0 -0
  243. package/fonts/ttf/tw-cen-mt-condensed-700-normal.ttf +0 -0
  244. package/fonts/ttf/verdana-400-italic.ttf +0 -0
  245. package/fonts/ttf/verdana-400-normal.ttf +0 -0
  246. package/fonts/ttf/verdana-700-italic.ttf +0 -0
  247. package/fonts/ttf/verdana-700-normal.ttf +0 -0
  248. package/fonts/ttf/webdings-400-normal.ttf +0 -0
  249. package/fonts/ttf/wingdings-2-400-normal.ttf +0 -0
  250. package/fonts/ttf/wingdings-3-400-normal.ttf +0 -0
  251. package/fonts/ttf/wingdings-400-normal.ttf +0 -0
  252. package/fonts/ttf/yu-gothic-light-400-normal.ttf +0 -0
  253. package/fonts/ttf/yu-mincho-400-normal.ttf +0 -0
  254. package/fonts/ttf/yu-mincho-700-normal.ttf +0 -0
@@ -1,7 +1,7 @@
1
1
  import * as s from "blockly";
2
- import { k as p, T as u, m, n as f, o as g, q as h } from "./sdk-BIAG7DE-.js";
2
+ import { n as p, T as u, o as m, q as f, t as g, u as h } from "./sdk-DdtgYtTx.js";
3
3
  let r = !1;
4
- function b(o, n, i) {
4
+ function k(o, n, i) {
5
5
  r || (p(), r = !0), o.replaceChildren();
6
6
  const t = document.createElement("div");
7
7
  t.className = "vp-canvas-host", o.append(t);
@@ -37,6 +37,6 @@ function b(o, n, i) {
37
37
  };
38
38
  }
39
39
  export {
40
- b as mountBlockly
40
+ k as mountBlockly
41
41
  };
42
- //# sourceMappingURL=vars-blockly-CMA3qyLP.js.map
42
+ //# sourceMappingURL=vars-blockly-BSiNa0Vb.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vars-blockly-CMA3qyLP.js","sources":["../../src/vars-blockly.ts"],"sourcesContent":["import * as Blockly from 'blockly'\nimport {\n decorate, defineBlocks, fieldLibrary, setFields, THEME, TOOLBOX,\n type BlockJson,\n} from '@myrole/docx-vars'\nimport type { Tag } from '@myrole/docx-tags'\n\n/**\n * Le mode Blockly, chargé à la demande.\n *\n * Le canvas ne se replie pas — c'est ce qui a fait choisir le rendu DOM par\n * défaut — mais il sait ce que le DOM ne fait pas encore aussi bien :\n * restructurer librement une expression au glisser-déposer, avec sa poubelle,\n * son annulation et ses connexions typées.\n *\n * Il vit dans son propre module pour ne peser que si on l'ouvre : un\n * mégaoctet et demi qu'un utilisateur qui ne bascule jamais ne télécharge pas.\n */\n\nlet defined = false\n\nexport interface BlocklyView {\n load(tree: BlockJson): void\n read(): BlockJson | null\n resize(): void\n dispose(): void\n}\n\nexport function mountBlockly(\n holder: HTMLElement, onChange: () => void, tags: () => Tag[],\n): BlocklyView {\n if (!defined) { defineBlocks(); defined = true }\n holder.replaceChildren()\n const host = document.createElement('div')\n host.className = 'vp-canvas-host'\n holder.append(host)\n\n const ws = Blockly.inject(host, {\n // La boîte à outils : sans elle, on peut lire une expression et la\n // rebrancher, mais pas y AJOUTER quoi que ce soit — c'est la moitié de ce\n // qu'on vient chercher dans un canvas de blocs.\n toolbox: TOOLBOX,\n theme: THEME,\n renderer: 'geras',\n trashcan: true,\n sounds: false,\n grid: { spacing: 20, length: 1, colour: '#e8e9ed', snap: false },\n zoom: { controls: true, wheel: true, startScale: 0.95, minScale: 0.3, maxScale: 2 },\n move: { scrollbars: true, drag: true, wheel: true },\n })\n ws.addChangeListener((e) => { if (!e.isUiEvent) onChange() })\n\n return {\n load(tree) {\n // `setFields` alimente le sélecteur du bloc « champ » : sans lui, un clic\n // sur un champ n'ouvre rien.\n const groups = fieldLibrary(tags())\n setFields(groups.flatMap((g) => g.fields.map((f) => ({ path: f.path, label: f.label }))))\n Blockly.serialization.workspaces.load({ blocks: { languageVersion: 0, blocks: [tree] } }, ws)\n decorate(ws)\n Blockly.svgResize(ws)\n },\n read() {\n const state = Blockly.serialization.workspaces.save(ws) as {\n blocks?: { blocks?: BlockJson[] }\n }\n return state?.blocks?.blocks?.[0] ?? null\n },\n resize() { Blockly.svgResize(ws) },\n dispose() { ws.dispose() },\n }\n}\n"],"names":["defined","mountBlockly","holder","onChange","tags","defineBlocks","host","ws","Blockly","TOOLBOX","THEME","e","tree","groups","fieldLibrary","setFields","g","f","decorate"],"mappings":";;AAmBA,IAAIA,IAAU;AASP,SAASC,EACdC,GAAqBC,GAAsBC,GAC9B;AACb,EAAKJ,MAAWK,EAAA,GAAgBL,IAAU,KAC1CE,EAAO,gBAAA;AACP,QAAMI,IAAO,SAAS,cAAc,KAAK;AACzC,EAAAA,EAAK,YAAY,kBACjBJ,EAAO,OAAOI,CAAI;AAElB,QAAMC,IAAKC,EAAQ,OAAOF,GAAM;AAAA;AAAA;AAAA;AAAA,IAI9B,SAASG;AAAA,IACT,OAAOC;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM,EAAE,SAAS,IAAI,QAAQ,GAAG,QAAQ,WAAW,MAAM,GAAA;AAAA,IACzD,MAAM,EAAE,UAAU,IAAM,OAAO,IAAM,YAAY,MAAM,UAAU,KAAK,UAAU,EAAA;AAAA,IAChF,MAAM,EAAE,YAAY,IAAM,MAAM,IAAM,OAAO,GAAA;AAAA,EAAK,CACnD;AACD,SAAAH,EAAG,kBAAkB,CAACI,MAAM;AAAE,IAAKA,EAAE,aAAWR,EAAA;AAAA,EAAW,CAAC,GAErD;AAAA,IACL,KAAKS,GAAM;AAGT,YAAMC,IAASC,EAAaV,GAAM;AAClC,MAAAW,EAAUF,EAAO,QAAQ,CAACG,MAAMA,EAAE,OAAO,IAAI,CAACC,OAAO,EAAE,MAAMA,EAAE,MAAM,OAAOA,EAAE,MAAA,EAAQ,CAAC,CAAC,GACxFT,EAAQ,cAAc,WAAW,KAAK,EAAE,QAAQ,EAAE,iBAAiB,GAAG,QAAQ,CAACI,CAAI,EAAA,EAAE,GAAKL,CAAE,GAC5FW,EAASX,CAAE,GACXC,EAAQ,UAAUD,CAAE;AAAA,IACtB;AAAA,IACA,OAAO;AAIL,aAHcC,EAAQ,cAAc,WAAW,KAAKD,CAAE,GAGxC,QAAQ,SAAS,CAAC,KAAK;AAAA,IACvC;AAAA,IACA,SAAS;AAAE,MAAAC,EAAQ,UAAUD,CAAE;AAAA,IAAE;AAAA,IACjC,UAAU;AAAE,MAAAA,EAAG,QAAA;AAAA,IAAU;AAAA,EAAA;AAE7B;"}
1
+ {"version":3,"file":"vars-blockly-BSiNa0Vb.js","sources":["../../src/vars-blockly.ts"],"sourcesContent":["import * as Blockly from 'blockly'\nimport {\n decorate, defineBlocks, fieldLibrary, setFields, THEME, TOOLBOX,\n type BlockJson,\n} from '@myrole/docx-vars'\nimport type { Tag } from '@myrole/docx-tags'\n\n/**\n * Le mode Blockly, chargé à la demande.\n *\n * Le canvas ne se replie pas — c'est ce qui a fait choisir le rendu DOM par\n * défaut — mais il sait ce que le DOM ne fait pas encore aussi bien :\n * restructurer librement une expression au glisser-déposer, avec sa poubelle,\n * son annulation et ses connexions typées.\n *\n * Il vit dans son propre module pour ne peser que si on l'ouvre : un\n * mégaoctet et demi qu'un utilisateur qui ne bascule jamais ne télécharge pas.\n */\n\nlet defined = false\n\nexport interface BlocklyView {\n load(tree: BlockJson): void\n read(): BlockJson | null\n resize(): void\n dispose(): void\n}\n\nexport function mountBlockly(\n holder: HTMLElement, onChange: () => void, tags: () => Tag[],\n): BlocklyView {\n if (!defined) { defineBlocks(); defined = true }\n holder.replaceChildren()\n const host = document.createElement('div')\n host.className = 'vp-canvas-host'\n holder.append(host)\n\n const ws = Blockly.inject(host, {\n // La boîte à outils : sans elle, on peut lire une expression et la\n // rebrancher, mais pas y AJOUTER quoi que ce soit — c'est la moitié de ce\n // qu'on vient chercher dans un canvas de blocs.\n toolbox: TOOLBOX,\n theme: THEME,\n renderer: 'geras',\n trashcan: true,\n sounds: false,\n grid: { spacing: 20, length: 1, colour: '#e8e9ed', snap: false },\n zoom: { controls: true, wheel: true, startScale: 0.95, minScale: 0.3, maxScale: 2 },\n move: { scrollbars: true, drag: true, wheel: true },\n })\n ws.addChangeListener((e) => { if (!e.isUiEvent) onChange() })\n\n return {\n load(tree) {\n // `setFields` alimente le sélecteur du bloc « champ » : sans lui, un clic\n // sur un champ n'ouvre rien.\n const groups = fieldLibrary(tags())\n setFields(groups.flatMap((g) => g.fields.map((f) => ({ path: f.path, label: f.label }))))\n Blockly.serialization.workspaces.load({ blocks: { languageVersion: 0, blocks: [tree] } }, ws)\n decorate(ws)\n Blockly.svgResize(ws)\n },\n read() {\n const state = Blockly.serialization.workspaces.save(ws) as {\n blocks?: { blocks?: BlockJson[] }\n }\n return state?.blocks?.blocks?.[0] ?? null\n },\n resize() { Blockly.svgResize(ws) },\n dispose() { ws.dispose() },\n }\n}\n"],"names":["defined","mountBlockly","holder","onChange","tags","defineBlocks","host","ws","Blockly","TOOLBOX","THEME","e","tree","groups","fieldLibrary","setFields","g","f","decorate"],"mappings":";;AAmBA,IAAIA,IAAU;AASP,SAASC,EACdC,GAAqBC,GAAsBC,GAC9B;AACb,EAAKJ,MAAWK,EAAA,GAAgBL,IAAU,KAC1CE,EAAO,gBAAA;AACP,QAAMI,IAAO,SAAS,cAAc,KAAK;AACzC,EAAAA,EAAK,YAAY,kBACjBJ,EAAO,OAAOI,CAAI;AAElB,QAAMC,IAAKC,EAAQ,OAAOF,GAAM;AAAA;AAAA;AAAA;AAAA,IAI9B,SAASG;AAAA,IACT,OAAOC;AAAA,IACP,UAAU;AAAA,IACV,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,MAAM,EAAE,SAAS,IAAI,QAAQ,GAAG,QAAQ,WAAW,MAAM,GAAA;AAAA,IACzD,MAAM,EAAE,UAAU,IAAM,OAAO,IAAM,YAAY,MAAM,UAAU,KAAK,UAAU,EAAA;AAAA,IAChF,MAAM,EAAE,YAAY,IAAM,MAAM,IAAM,OAAO,GAAA;AAAA,EAAK,CACnD;AACD,SAAAH,EAAG,kBAAkB,CAACI,MAAM;AAAE,IAAKA,EAAE,aAAWR,EAAA;AAAA,EAAW,CAAC,GAErD;AAAA,IACL,KAAKS,GAAM;AAGT,YAAMC,IAASC,EAAaV,GAAM;AAClC,MAAAW,EAAUF,EAAO,QAAQ,CAACG,MAAMA,EAAE,OAAO,IAAI,CAACC,OAAO,EAAE,MAAMA,EAAE,MAAM,OAAOA,EAAE,MAAA,EAAQ,CAAC,CAAC,GACxFT,EAAQ,cAAc,WAAW,KAAK,EAAE,QAAQ,EAAE,iBAAiB,GAAG,QAAQ,CAACI,CAAI,EAAA,EAAE,GAAKL,CAAE,GAC5FW,EAASX,CAAE,GACXC,EAAQ,UAAUD,CAAE;AAAA,IACtB;AAAA,IACA,OAAO;AAIL,aAHcC,EAAQ,cAAc,WAAW,KAAKD,CAAE,GAGxC,QAAQ,SAAS,CAAC,KAAK;AAAA,IACvC;AAAA,IACA,SAAS;AAAE,MAAAC,EAAQ,UAAUD,CAAE;AAAA,IAAE;AAAA,IACjC,UAAU;AAAE,MAAAA,EAAG,QAAA;AAAA,IAAU;AAAA,EAAA;AAE7B;"}
package/dist/index.js CHANGED
@@ -1,34 +1,32 @@
1
- import { i as f, r as m, e as w, f as p, p as u, l as y, a as g, b as h, c as x } from "./chunks/sdk-BIAG7DE-.js";
2
- import { D as v, d as b, g as E, h as I, j as U, s as C } from "./chunks/sdk-BIAG7DE-.js";
3
- async function R(a, o, r = {}) {
4
- const i = performance.now(), [c] = await Promise.all([
5
- typeof a == "string" ? fetch(a).then((e) => e.ok ? e.arrayBuffer() : Promise.reject(new Error(`${e.status} ${a}`))) : Promise.resolve(a),
6
- f(r.fontsUrl)
7
- ]), t = m(new Uint8Array(c));
8
- for (const e of w(t))
1
+ import { r as u, e as y, d as h, f as g, i as x, a as D, p as F, l as R, b, c as v, g as E } from "./chunks/sdk-DdtgYtTx.js";
2
+ import { D as C, h as O, j as S, k as V, m as j, s as k } from "./chunks/sdk-DdtgYtTx.js";
3
+ async function P(t, o, n = {}) {
4
+ const d = performance.now(), f = typeof t == "string" ? await fetch(t).then((e) => e.ok ? e.arrayBuffer() : Promise.reject(new Error(`${e.status} ${t}`))) : t, a = u(new Uint8Array(f)), r = y(a), m = new Set(r.map((e) => e.family)), c = [...h(a)].filter((e) => !m.has(e)), i = g(a);
5
+ await x(n.fontsUrl, c, i);
6
+ for (const e of r)
9
7
  try {
10
- const s = p(e), n = new FontFace(s.family, e.data, { weight: s.weight, style: s.style });
11
- await n.load(), document.fonts.add(n);
8
+ const s = D(e), l = new FontFace(s.family, e.data, { weight: s.weight, style: s.style });
9
+ await l.load(), document.fonts.add(l);
12
10
  } catch {
13
11
  }
14
- const [l, d] = await Promise.all([u(t), y(r.fontsUrl)]);
15
- return o.replaceChildren(), g({
16
- ...x(t),
12
+ const [w, p] = await Promise.all([F(a), R(n.fontsUrl, c, i)]);
13
+ return o.replaceChildren(), b({
14
+ ...E(a),
17
15
  container: o,
18
- images: l,
19
- lineRatios: d,
20
- footnotes: h(t),
16
+ images: w,
17
+ lineRatios: p,
18
+ footnotes: v(a),
21
19
  devicePixelRatio: window.devicePixelRatio || 1
22
- }), { pages: [...o.querySelectorAll("canvas")], ms: Math.round(performance.now() - i) };
20
+ }), { pages: [...o.querySelectorAll("canvas")], ms: Math.round(performance.now() - d) };
23
21
  }
24
22
  export {
25
- v as DOCX_EDITOR_VERSION,
26
- b as createDocxEditor,
27
- E as createDocxViewer,
28
- I as defaultFontsUrl,
29
- U as evaluateTags,
30
- f as installFonts,
31
- R as renderDocx,
32
- C as sampleValues
23
+ C as DOCX_EDITOR_VERSION,
24
+ O as createDocxEditor,
25
+ S as createDocxViewer,
26
+ V as defaultFontsUrl,
27
+ j as evaluateTags,
28
+ x as installFonts,
29
+ P as renderDocx,
30
+ k as sampleValues
33
31
  };
34
32
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/embed.ts"],"sourcesContent":["/**\n * The renderer, embeddable in ANY page served by the studio.\n *\n * The review dashboard shows a document next to Word's render: with this\n * module the canvas side is the engine composing the document LIVE in the\n * page, not a PNG the bench cached — so a change in the engine shows on the\n * next reload, and the slider compares what the editor would draw.\n *\n * const { pages } = await renderDocx('/corpus/<name>.docx', hiddenDiv)\n *\n * Fed by `buildRenderInput`, like the editor and the bench: the third surface\n * that mounts the renderer starts from there, as CLAUDE.md asks. What it adds\n * is the platform: fonts loaded before any measurement, embedded fonts of the\n * document, images decoded by the browser.\n */\nimport { embeddedFonts, fontFaceDescriptor, readDocx } from '@myrole/docx-model'\nimport { buildRenderInput, footnoteContent, render, preloadImages } from '@myrole/docx-render'\nimport { installFonts, lineRatios } from './fonts'\n\nexport interface Rendered {\n pages: HTMLCanvasElement[]\n ms: number\n}\n\nexport async function renderDocx(\n url: string | ArrayBuffer | Uint8Array, container: HTMLElement, opts: { fontsUrl?: string } = {},\n): Promise<Rendered> {\n const t0 = performance.now()\n const [buf] = await Promise.all([\n typeof url === 'string'\n ? fetch(url).then((r) => (r.ok ? r.arrayBuffer() : Promise.reject(new Error(`${r.status} ${url}`))))\n : Promise.resolve(url),\n installFonts(opts.fontsUrl),\n ])\n const doc = readDocx(new Uint8Array(buf))\n for (const f of embeddedFonts(doc)) {\n try {\n const d = fontFaceDescriptor(f)\n const face = new FontFace(d.family, f.data as BufferSource, { weight: d.weight, style: d.style })\n await face.load()\n document.fonts.add(face)\n } catch { /* police corrompue ou format non supporté */ }\n }\n const [images, ratios] = await Promise.all([preloadImages(doc), lineRatios(opts.fontsUrl)])\n container.replaceChildren()\n render({\n ...buildRenderInput(doc),\n container,\n images,\n lineRatios: ratios,\n footnotes: footnoteContent(doc),\n devicePixelRatio: window.devicePixelRatio || 1,\n })\n return { pages: [...container.querySelectorAll('canvas')], ms: Math.round(performance.now() - t0) }\n}\n"],"names":["renderDocx","url","container","opts","t0","buf","r","installFonts","doc","readDocx","f","embeddedFonts","d","fontFaceDescriptor","face","images","ratios","preloadImages","lineRatios","render","buildRenderInput","footnoteContent"],"mappings":";;AAwBA,eAAsBA,EACpBC,GAAwCC,GAAwBC,IAA8B,CAAA,GAC3E;AACnB,QAAMC,IAAK,YAAY,IAAA,GACjB,CAACC,CAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC9B,OAAOJ,KAAQ,WACX,MAAMA,CAAG,EAAE,KAAK,CAACK,MAAOA,EAAE,KAAKA,EAAE,YAAA,IAAgB,QAAQ,OAAO,IAAI,MAAM,GAAGA,EAAE,MAAM,IAAIL,CAAG,EAAE,CAAC,CAAE,IACjG,QAAQ,QAAQA,CAAG;AAAA,IACvBM,EAAaJ,EAAK,QAAQ;AAAA,EAAA,CAC3B,GACKK,IAAMC,EAAS,IAAI,WAAWJ,CAAG,CAAC;AACxC,aAAWK,KAAKC,EAAcH,CAAG;AAC/B,QAAI;AACF,YAAMI,IAAIC,EAAmBH,CAAC,GACxBI,IAAO,IAAI,SAASF,EAAE,QAAQF,EAAE,MAAsB,EAAE,QAAQE,EAAE,QAAQ,OAAOA,EAAE,OAAO;AAChG,YAAME,EAAK,KAAA,GACX,SAAS,MAAM,IAAIA,CAAI;AAAA,IACzB,QAAQ;AAAA,IAAgD;AAE1D,QAAM,CAACC,GAAQC,CAAM,IAAI,MAAM,QAAQ,IAAI,CAACC,EAAcT,CAAG,GAAGU,EAAWf,EAAK,QAAQ,CAAC,CAAC;AAC1F,SAAAD,EAAU,gBAAA,GACViB,EAAO;AAAA,IACL,GAAGC,EAAiBZ,CAAG;AAAA,IACvB,WAAAN;AAAA,IACA,QAAAa;AAAA,IACA,YAAYC;AAAA,IACZ,WAAWK,EAAgBb,CAAG;AAAA,IAC9B,kBAAkB,OAAO,oBAAoB;AAAA,EAAA,CAC9C,GACM,EAAE,OAAO,CAAC,GAAGN,EAAU,iBAAiB,QAAQ,CAAC,GAAG,IAAI,KAAK,MAAM,YAAY,IAAA,IAAQE,CAAE,EAAA;AAClG;"}
1
+ {"version":3,"file":"index.js","sources":["../src/embed.ts"],"sourcesContent":["/**\n * The renderer, embeddable in ANY page served by the studio.\n *\n * The review dashboard shows a document next to Word's render: with this\n * module the canvas side is the engine composing the document LIVE in the\n * page, not a PNG the bench cached — so a change in the engine shows on the\n * next reload, and the slider compares what the editor would draw.\n *\n * const { pages } = await renderDocx('/corpus/<name>.docx', hiddenDiv)\n *\n * Fed by `buildRenderInput`, like the editor and the bench: the third surface\n * that mounts the renderer starts from there, as CLAUDE.md asks. What it adds\n * is the platform: fonts loaded before any measurement, embedded fonts of the\n * document, images decoded by the browser.\n */\nimport { embeddedFonts, fontAltNames, fontFaceDescriptor, readDocx } from '@myrole/docx-model'\nimport { buildRenderInput, footnoteContent, render, preloadImages } from '@myrole/docx-render'\nimport { documentFonts, installFonts, lineRatios } from './fonts'\n\nexport interface Rendered {\n pages: HTMLCanvasElement[]\n ms: number\n}\n\nexport async function renderDocx(\n url: string | ArrayBuffer | Uint8Array, container: HTMLElement, opts: { fontsUrl?: string } = {},\n): Promise<Rendered> {\n const t0 = performance.now()\n const buf = typeof url === 'string'\n ? await fetch(url).then((r) => (r.ok ? r.arrayBuffer() : Promise.reject(new Error(`${r.status} ${url}`))))\n : url\n const doc = readDocx(new Uint8Array(buf))\n const embedded = embeddedFonts(doc)\n const own = new Set(embedded.map((f) => f.family))\n const families = [...documentFonts(doc)].filter((f) => !own.has(f))\n const alt = fontAltNames(doc)\n await installFonts(opts.fontsUrl, families, alt)\n for (const f of embedded) {\n try {\n const d = fontFaceDescriptor(f)\n const face = new FontFace(d.family, f.data as BufferSource, { weight: d.weight, style: d.style })\n await face.load()\n document.fonts.add(face)\n } catch { /* police corrompue ou format non supporté */ }\n }\n const [images, ratios] = await Promise.all([preloadImages(doc), lineRatios(opts.fontsUrl, families, alt)])\n container.replaceChildren()\n render({\n ...buildRenderInput(doc),\n container,\n images,\n lineRatios: ratios,\n footnotes: footnoteContent(doc),\n devicePixelRatio: window.devicePixelRatio || 1,\n })\n return { pages: [...container.querySelectorAll('canvas')], ms: Math.round(performance.now() - t0) }\n}\n"],"names":["renderDocx","url","container","opts","t0","buf","r","doc","readDocx","embedded","embeddedFonts","own","f","families","documentFonts","alt","fontAltNames","installFonts","d","fontFaceDescriptor","face","images","ratios","preloadImages","lineRatios","render","buildRenderInput","footnoteContent"],"mappings":";;AAwBA,eAAsBA,EACpBC,GAAwCC,GAAwBC,IAA8B,CAAA,GAC3E;AACnB,QAAMC,IAAK,YAAY,IAAA,GACjBC,IAAM,OAAOJ,KAAQ,WACvB,MAAM,MAAMA,CAAG,EAAE,KAAK,CAACK,MAAOA,EAAE,KAAKA,EAAE,YAAA,IAAgB,QAAQ,OAAO,IAAI,MAAM,GAAGA,EAAE,MAAM,IAAIL,CAAG,EAAE,CAAC,CAAE,IACvGA,GACEM,IAAMC,EAAS,IAAI,WAAWH,CAAG,CAAC,GAClCI,IAAWC,EAAcH,CAAG,GAC5BI,IAAM,IAAI,IAAIF,EAAS,IAAI,CAACG,MAAMA,EAAE,MAAM,CAAC,GAC3CC,IAAW,CAAC,GAAGC,EAAcP,CAAG,CAAC,EAAE,OAAO,CAACK,MAAM,CAACD,EAAI,IAAIC,CAAC,CAAC,GAC5DG,IAAMC,EAAaT,CAAG;AAC5B,QAAMU,EAAad,EAAK,UAAUU,GAAUE,CAAG;AAC/C,aAAWH,KAAKH;AACd,QAAI;AACF,YAAMS,IAAIC,EAAmBP,CAAC,GACxBQ,IAAO,IAAI,SAASF,EAAE,QAAQN,EAAE,MAAsB,EAAE,QAAQM,EAAE,QAAQ,OAAOA,EAAE,OAAO;AAChG,YAAME,EAAK,KAAA,GACX,SAAS,MAAM,IAAIA,CAAI;AAAA,IACzB,QAAQ;AAAA,IAAgD;AAE1D,QAAM,CAACC,GAAQC,CAAM,IAAI,MAAM,QAAQ,IAAI,CAACC,EAAchB,CAAG,GAAGiB,EAAWrB,EAAK,UAAUU,GAAUE,CAAG,CAAC,CAAC;AACzG,SAAAb,EAAU,gBAAA,GACVuB,EAAO;AAAA,IACL,GAAGC,EAAiBnB,CAAG;AAAA,IACvB,WAAAL;AAAA,IACA,QAAAmB;AAAA,IACA,YAAYC;AAAA,IACZ,WAAWK,EAAgBpB,CAAG;AAAA,IAC9B,kBAAkB,OAAO,oBAAoB;AAAA,EAAA,CAC9C,GACM,EAAE,OAAO,CAAC,GAAGL,EAAU,iBAAiB,QAAQ,CAAC,GAAG,IAAI,KAAK,MAAM,YAAY,IAAA,IAAQE,CAAE,EAAA;AAClG;"}
package/dist/react.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { jsx as h } from "react/jsx-runtime";
2
2
  import { forwardRef as v, useRef as f, useEffect as n } from "react";
3
- import { d as y } from "./chunks/sdk-BIAG7DE-.js";
4
- import { D as I } from "./chunks/sdk-BIAG7DE-.js";
3
+ import { h as y } from "./chunks/sdk-DdtgYtTx.js";
4
+ import { D as I } from "./chunks/sdk-DdtgYtTx.js";
5
5
  const s = v(function({ src: u, className: b, style: i, onReady: g, ...e }, o) {
6
6
  const l = f(null), c = f(null), a = f(e);
7
7
  a.current = e;
@@ -30,6 +30,8 @@ export interface ChromeHost {
30
30
  get(): boolean;
31
31
  set(on: boolean): void;
32
32
  };
33
+ /** the font picker's names — a live array the host may refill */
34
+ fonts: string[];
33
35
  }
34
36
  export interface Chrome {
35
37
  refresh(ctx: EditContext | null, hasSel: boolean): void;
@@ -1,4 +1,4 @@
1
- import { type CellPatch, type MarginPatch, type DocViews, type DocxDocument, type DocPos, type EditContext, type PageSetup, type PageSetupPatch, type ParaPatch, type RunPatch } from '../../docx-model/src/index';
1
+ import { type CellPatch, type TableBorderPatch, type MarginPatch, type DocViews, type DocxDocument, type DocPos, type EditContext, type PageSetup, type PageSetupPatch, type ParaPatch, type RunPatch } from '../../docx-model/src/index';
2
2
  import { type ImageRect, type LineTrace, type MarkRect, type ResumeState, type SelRect, type TableRect, type CellRect } from '../../docx-render/src/index';
3
3
  export interface EditorHooks {
4
4
  /** appelé après chaque composition, avec ce qu'il faut pour la barre d'outils */
@@ -190,6 +190,14 @@ export declare function createEditor(setup: EditorSetup): {
190
190
  setList(ordered: boolean | null): void;
191
191
  clearTableBorders(): boolean;
192
192
  formatCell(patch: CellPatch): boolean;
193
+ /** Word's « Bordures » menu, on the whole table holding the caret. */
194
+ setTableBorders(patch: TableBorderPatch): boolean;
195
+ setRowHeight: (para: number, heightPt: number) => void;
196
+ /**
197
+ * Word's « Fusionner »: the selected cells become one; with no cell
198
+ * selection, the caret's cell takes in its right-hand neighbour.
199
+ */
200
+ mergeCells(): boolean;
193
201
  mergeNextCell(): boolean;
194
202
  replaceAll(query: string, replacement: string, matchCase?: boolean): number;
195
203
  /** Insère du texte au curseur, ou remplace la sélection. */
@@ -209,7 +217,7 @@ export declare function createEditor(setup: EditorSetup): {
209
217
  splitAtCaret: () => void;
210
218
  format: (patch: RunPatch) => void;
211
219
  formatPara: (patch: ParaPatch) => void;
212
- table: (what: "row" | "col", how: "above" | "below" | "left" | "right" | "delete") => void;
220
+ table: (what: "row" | "col", how: "above" | "below" | "left" | "right" | "delete", at?: number) => void;
213
221
  insertTable: (rows: number, cols: number) => boolean;
214
222
  resizeImage: (index: number, factor: number) => void;
215
223
  insertBreak: (kind: "page" | "column" | "line") => void;
@@ -217,7 +225,7 @@ export declare function createEditor(setup: EditorSetup): {
217
225
  setMargins: (patch: MarginPatch, section?: number) => void;
218
226
  setPageSetup: (patch: PageSetupPatch, section?: number) => void;
219
227
  insertSectionBreak: (kind: "nextPage" | "continuous") => boolean;
220
- setTableColumn: (col: number, widthPt: number) => void;
228
+ setTableColumn: (col: number, widthPt: number, at?: number) => void;
221
229
  /** Format d'une section — celle du curseur par défaut. */
222
230
  pageSetup: (section?: number) => PageSetup | null;
223
231
  currentSection: () => number;
@@ -1,5 +1,63 @@
1
+ /**
2
+ * The faces the engine measures with, declared at runtime.
3
+ *
4
+ * The app used to `import '../../fonts/src/faces'`; through a library build
5
+ * that stylesheet would carry 33 MB of base64. The SDK ships the files under
6
+ * `fonts/ttf/` instead and declares each face as a `FontFace` from a manifest
7
+ * generated at build time.
8
+ *
9
+ * Only the families a document names are declared and downloaded — a contract
10
+ * in Calibri fetches Calibri's four files, not the 229 of the manifest. A name
11
+ * we do not serve is declared under its own name with the faces of its nearest
12
+ * served family (`nearestFamily`: alias, the document's `w:altName`, then
13
+ * « Helvetica Bold » → Helvetica), so the canvas draws what the Node bench
14
+ * measures.
15
+ *
16
+ * `fontsUrl` is the directory that contains `ttf/`. In development it is the
17
+ * `@myrole/fonts` package itself (Vite serves it in place); in the published
18
+ * package it is `fonts/` next to `dist/`. A consumer whose bundler does not
19
+ * keep `fonts/` next to the bundle passes the URL it serves them from.
20
+ */
21
+ import { type DocxDocument } from '../../docx-model/src/index';
1
22
  export declare function defaultFontsUrl(): string;
2
- /** Declare every shipped face once, then wait for them like the app did. */
3
- export declare function installFonts(fontsUrl?: string): Promise<void>;
4
- /** Line-height ratios read in the served TTFs — `fontLineRatios` on our directory. */
5
- export declare function lineRatios(fontsUrl?: string): Promise<Partial<Record<"Times New Roman" | "New York" | "Cambria" | "Arial" | "Symbol" | "Calibri" | "Avenir Book" | "Avenir" | "Avenir Next" | "Gill Sans Light" | "Century Gothic" | "Century Schoolbook" | "Avenir Heavy" | "Bookman Old Style" | "Aptos" | "Consolas" | "Abadi MT Condensed Extra Bold" | "Abadi MT Condensed Light" | "Angsana New" | "Apple Color Emoji" | "Apple Symbols" | "Aptos Narrow" | "Arial Black" | "Arial Hebrew" | "Arial Narrow" | "Arial Rounded MT Bold" | "Arial Unicode MS" | "Avenir Black" | "Avenir Light" | "Baskerville Old Face" | "Batang" | "Bauhaus 93" | "Big Caslon" | "Calibri Light" | "Cambria Math" | "Candara" | "Century" | "Comic Sans MS" | "Corbel" | "Cordia New" | "Courier" | "Courier New" | "Daytona" | "DengXian" | "DengXian Light" | "Didot" | "Edwardian Script ITC" | "Euphemia UCAS" | "Eurostile" | "Franklin Gothic Book" | "Franklin Gothic Demi" | "Franklin Gothic Demi Cond" | "Franklin Gothic Medium" | "Franklin Gothic Medium Cond" | "Futura" | "Garamond" | "Geneva" | "Georgia" | "Gill Sans" | "Gill Sans MT" | "Helvetica" | "Helvetica Neue" | "Hind Siliguri" | "Hind Siliguri Light" | "Hind Siliguri Medium" | "Hind Siliguri SemiBold" | "Hoefler Text" | "Lucida Grande" | "Lucida Sans" | "Lucida Sans Unicode" | "MS Gothic" | "MS Mincho" | "MS UI Gothic" | "Malgun Gothic" | "Mangal" | "Microsoft Sans Serif" | "Microsoft YaHei" | "Microsoft Yi Baiti" | "Monotype Sorts" | "NSimSun" | "News Gothic MT" | "Optima" | "PMingLiU" | "PT Mono" | "Palatino" | "Palatino Linotype" | "Segoe UI Symbol" | "SimSun" | "Skia" | "Stencil" | "Tahoma" | "Times" | "Trebuchet MS" | "Tw Cen MT" | "Tw Cen MT Condensed" | "Verdana" | "Webdings" | "Wingdings" | "Wingdings 2" | "Wingdings 3" | "Yu Gothic Light" | "Yu Mincho", number>>>;
23
+ /**
24
+ * Declare the faces for `families` (all served families when omitted) and wait
25
+ * for them. Resolves to the names it newly declared, so a caller can recompose.
26
+ */
27
+ export declare function installFonts(fontsUrl?: string, families?: Iterable<string>, alt?: Map<string, string>): Promise<string[]>;
28
+ /**
29
+ * Every font name the document can ask the canvas for: run and style fonts
30
+ * (`w:rFonts`, numbering and headers included), the font table and the theme.
31
+ * A superset of what gets drawn — still a handful of families, not 102.
32
+ */
33
+ export declare function documentFonts(doc: DocxDocument): Set<string>;
34
+ /** Line-height ratios read in the served TTFs of `families` (all when omitted). */
35
+ export declare function lineRatios(fontsUrl?: string, families?: Iterable<string>, alt?: Map<string, string>): Promise<Partial<Record<"Times New Roman" | "New York" | "Cambria" | "Arial" | "Symbol" | "Calibri" | "Avenir Book" | "Avenir" | "Avenir Next" | "Gill Sans Light" | "Century Gothic" | "Century Schoolbook" | "Avenir Heavy" | "Bookman Old Style" | "Aptos" | "Consolas" | "Abadi MT Condensed Extra Bold" | "Abadi MT Condensed Light" | "Angsana New" | "Apple Color Emoji" | "Apple Symbols" | "Aptos Narrow" | "Arial Black" | "Arial Hebrew" | "Arial Narrow" | "Arial Rounded MT Bold" | "Arial Unicode MS" | "Avenir Black" | "Avenir Light" | "Baskerville Old Face" | "Batang" | "Bauhaus 93" | "Big Caslon" | "Calibri Light" | "Cambria Math" | "Candara" | "Century" | "Comic Sans MS" | "Corbel" | "Cordia New" | "Courier" | "Courier New" | "Daytona" | "DengXian" | "DengXian Light" | "Didot" | "Edwardian Script ITC" | "Euphemia UCAS" | "Eurostile" | "Franklin Gothic Book" | "Franklin Gothic Demi" | "Franklin Gothic Demi Cond" | "Franklin Gothic Medium" | "Franklin Gothic Medium Cond" | "Futura" | "Garamond" | "Geneva" | "Georgia" | "Gill Sans" | "Gill Sans MT" | "Helvetica" | "Helvetica Neue" | "Hind Siliguri" | "Hind Siliguri Light" | "Hind Siliguri Medium" | "Hind Siliguri SemiBold" | "Hoefler Text" | "Lucida Grande" | "Lucida Sans" | "Lucida Sans Unicode" | "MS Gothic" | "MS Mincho" | "MS UI Gothic" | "Malgun Gothic" | "Mangal" | "Microsoft Sans Serif" | "Microsoft YaHei" | "Microsoft Yi Baiti" | "Monotype Sorts" | "NSimSun" | "News Gothic MT" | "Optima" | "PMingLiU" | "PT Mono" | "Palatino" | "Palatino Linotype" | "Segoe UI Symbol" | "SimSun" | "Skia" | "Stencil" | "Tahoma" | "Times" | "Trebuchet MS" | "Tw Cen MT" | "Tw Cen MT Condensed" | "Verdana" | "Webdings" | "Wingdings" | "Wingdings 2" | "Wingdings 3" | "Yu Gothic Light" | "Yu Mincho", number>>>;
36
+ /** One face a host serves, as its catalog lists it. */
37
+ export interface RemoteFontFace {
38
+ id: string;
39
+ family: string;
40
+ weight: number;
41
+ style: 'normal' | 'italic';
42
+ }
43
+ /**
44
+ * Fonts served by the host instead of the package — licensed faces never ship
45
+ * on npm. The host owns route, authentication and cache: `list` feeds the font
46
+ * picker, `load` returns one face's bytes.
47
+ */
48
+ export interface FontSource {
49
+ list(): Promise<RemoteFontFace[]>;
50
+ load(face: RemoteFontFace): Promise<ArrayBuffer>;
51
+ }
52
+ /**
53
+ * `installFonts` over a FontSource: same contract — declare the faces for
54
+ * `families` under the name the document asks for, with its nearest served
55
+ * family, and resolve to the names newly declared. A face is fetched once even
56
+ * when several names draw with it.
57
+ */
58
+ export declare function remoteFonts(source: FontSource): {
59
+ install: (families: Iterable<string>, alt?: Map<string, string>) => Promise<string[]>;
60
+ ratios: Record<string, number>;
61
+ /** served family names, sorted — for the font picker */
62
+ families: () => Promise<string[]>;
63
+ };
@@ -14,6 +14,7 @@ export type { AssistantOptions } from './assistant';
14
14
  export { renderDocx } from './embed';
15
15
  export type { Rendered } from './embed';
16
16
  export { installFonts, defaultFontsUrl } from './fonts';
17
+ export type { FontSource, RemoteFontFace } from './fonts';
17
18
  export type { Editor, EditorEvent, Command, Decoration, DecorationProvider } from './editor';
18
19
  export type { Tag } from '../../docx-tags/src/index';
19
20
  export type { DocxDocument, DocPos, EditContext, RunPatch, ParaPatch, MarginPatch } from '../../docx-model/src/index';
@@ -16,6 +16,7 @@ import { type DocxDocument } from '../../docx-model/src/index';
16
16
  import type { Tag } from '../../docx-tags/src/index';
17
17
  import { type Editor } from './editor';
18
18
  import { type BadgeDisplay } from './variables';
19
+ import { type FontSource } from './fonts';
19
20
  import { type LibraryExtras } from './vars-library';
20
21
  import { type CommentRange } from './comments';
21
22
  import { type Panel, type DocxEditorUiOptions } from './ui/shell';
@@ -32,6 +33,12 @@ export interface DocxEditorOptions {
32
33
  /** `full`: ribbon, rulers, panels. `viewer`: read-only pages under a slim header. `none`: pages only. */
33
34
  /** Development host compatibility only; npm instances expose no window globals or IDs. */
34
35
  debug?: boolean;
36
+ /**
37
+ * Show the « Performances » button (Affichage tab): FPS, composition time,
38
+ * keystroke-to-screen latency. Without it the panel is still one shortcut
39
+ * away — Ctrl+Alt+Shift+P (⌘⌥⇧P) — so it can be opened in production.
40
+ */
41
+ perf?: boolean;
35
42
  chrome?: ChromeMode;
36
43
  readOnly?: boolean;
37
44
  lock?: DocxLockAdapter;
@@ -39,6 +46,8 @@ export interface DocxEditorOptions {
39
46
  theme?: Theme;
40
47
  /** directory that holds `ttf/` — see `fonts.ts` */
41
48
  fontsUrl?: string | URL;
49
+ /** host-served fonts (licensed faces are not on npm); replaces `fontsUrl` */
50
+ fonts?: FontSource;
42
51
  /** hard cap on the page count — a guard against a runaway layout, never an alignment */
43
52
  maxPages?: number;
44
53
  /** the document after a quiet period, and on tab change — where autosave goes */
@@ -1,2 +1,8 @@
1
+ import { type IconName } from '../../../docx-vars/src/index';
1
2
  export declare function hasIcon(id: string): boolean;
3
+ /**
4
+ * A Material Symbols glyph from the shared library (`@myrole/docx-vars`): filled,
5
+ * on its own 960-unit grid. The table tab and the context menu use these.
6
+ */
7
+ export declare function materialIcon(name: IconName, size?: number): SVGElement;
2
8
  export declare function icon(id: string, size?: number): SVGElement;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Debug-only performance overlay: FPS, frame times, composition time and the
3
+ * keystroke-to-screen latency, refreshed twice a second.
4
+ *
5
+ * Every composition is also published as a `performance.measure('docx:compose')`,
6
+ * so a DevTools Performance recording shows it on the Timings track.
7
+ */
8
+ export interface PerfHud {
9
+ /** One composition finished: its duration and the page count it produced. */
10
+ compose(ms: number, pages: number): void;
11
+ destroy(): void;
12
+ }
13
+ export declare function mountPerfHud(root: HTMLElement, pagesEl: HTMLElement): PerfHud;
@@ -6,10 +6,15 @@ import type { Tag } from '../../docx-tags/src/index';
6
6
  * Elle ne se déclenche pas n'importe où — une liste qui s'ouvre pendant qu'on
7
7
  * rédige une phrase est une nuisance. Deux endroits, et deux seulement :
8
8
  *
9
- * - **dans un tag ouvert** (`{{` ou `{%` sans fermeture avant le curseur) :
10
- * champs et fonctions, c'est-à-dire ce qui a le droit d'y figurer ;
9
+ * - **après un `/` dans un tag ouvert** (`{{` ou `{%` sans fermeture avant le
10
+ * curseur) : champs et fonctions, insérés comme expression nue
11
+ * (`salarie.prenom`, sans `{{ }}`). Un `/` collé à un opérande (`a/b`) reste
12
+ * une division ;
11
13
  * - **après un `/` en début de mot** : champs, fonctions et extraits.
12
14
  *
15
+ * The `/` hands the keyboard to the list's search box: the query is typed
16
+ * there, not in the document, and only the `/` is replaced on insertion.
17
+ *
13
18
  * Le clavier passe AVANT l'éditeur : la capture est posée sur le champ de
14
19
  * frappe, et les flèches, Entrée, Tab et Échap ne redescendent pas jusqu'à lui
15
20
  * tant que la liste est ouverte. Sans ça, ↓ déplacerait le curseur dans la page
@@ -40,6 +45,8 @@ export interface Completer {
40
45
  open(): boolean;
41
46
  destroy(): void;
42
47
  }
48
+ /** Directives of the sections that contain the caret. */
49
+ export declare function enclosing(tags: Tag[], para: number, off: number): string[];
43
50
  /** Ce qu'on est en train de taper, et ce qu'on a le droit d'y proposer. */
44
51
  interface Context {
45
52
  para: number;
@@ -50,7 +57,6 @@ interface Context {
50
57
  kinds: LibEntry['kind'][];
51
58
  /** ce qu'on insère : le code entier, ou seulement l'expression */
52
59
  as: 'code' | 'expr';
53
- padded?: boolean;
54
60
  }
55
61
  /**
56
62
  * Lit le contexte de frappe autour du curseur.
@@ -293,9 +293,37 @@ export interface CellPatch {
293
293
  marginPt?: number;
294
294
  borderPt?: number;
295
295
  borderColor?: string;
296
+ borderStyle?: string;
296
297
  }
297
298
  /** Explicit nil borders suppress style inheritance; nested tables keep their own grid. */
298
299
  export declare function clearTableBorders(doc: DocxDocument, para: number): boolean;
299
300
  export declare function formatCell(doc: DocxDocument, para: number, patch: CellPatch): boolean;
301
+ /**
302
+ * Word's « Fusionner les cellules »: the selected rectangle becomes ONE cell.
303
+ *
304
+ * `paras` holds one paragraph of each selected cell. Within a row the cells
305
+ * add their grid columns (`w:gridSpan`); across rows the merged cells chain
306
+ * with `w:vMerge`, the top one holding every paragraph. A cell whose only
307
+ * content is an empty paragraph contributes nothing, as in Word. Refused —
308
+ * nothing changed — unless the selection is a full rectangle with no vertical
309
+ * merge already in it.
310
+ */
311
+ export declare function mergeCells(doc: DocxDocument, paras: number[]): boolean;
300
312
  /** Merge with the next cell without dropping its paragraphs. Vertical merges are protected. */
301
313
  export declare function mergeNextCell(doc: DocxDocument, para: number): boolean;
314
+ export type BorderSides = 'all' | 'outside' | 'inside' | 'none' | 'top' | 'bottom' | 'left' | 'right' | 'insideH' | 'insideV';
315
+ /** `style` is a `w:val` (single, double, dashed, dotted, thick…); `sizePt` 0 or `sides: 'none'` erases. */
316
+ export interface TableBorderPatch {
317
+ sides: BorderSides;
318
+ style?: string;
319
+ sizePt?: number;
320
+ color?: string;
321
+ }
322
+ /**
323
+ * Word's « Bordures » menu on the whole table: writes `w:tblBorders`, then drops
324
+ * the cell overrides (`w:tcBorders`) that would hide the change, on the cells
325
+ * whose edge actually lies on the chosen side.
326
+ */
327
+ export declare function setTableBorders(doc: DocxDocument, para: number, patch: TableBorderPatch): boolean;
328
+ /** Minimum height of the row holding `para` — the gesture of dragging its bottom rule. */
329
+ export declare function setRowHeight(doc: DocxDocument, para: number, heightPt: number): boolean;
@@ -14,5 +14,7 @@ export declare function createPageSurfaces(input: Pick<RenderInput, 'container'
14
14
  open: (pageCount: number, wPx: number, hPx: number, paintFrom: number) => CanvasRenderingContext2D;
15
15
  /** Reused pages stay addressable by tables which revisit earlier sheets. */
16
16
  reuseBefore(page: number): void;
17
+ /** End of composition: repaint exactly the recorded pages whose ink changed. */
18
+ flush(): void;
17
19
  removeAfter(pageCount: number): void;
18
20
  };
@@ -20,7 +20,7 @@ export declare function createRenderOutput(opts: RenderOptions): {
20
20
  state: Pick<ReturnType<typeof createPageFlow>["state"], "pageCount" | "bodyBottom" | "frame">;
21
21
  converged: boolean;
22
22
  resumeTop?: Pick<LayoutState, "page">;
23
- surfaces: Pick<ReturnType<typeof createPageSurfaces>, "contexts" | "removeAfter">;
23
+ surfaces: Pick<ReturnType<typeof createPageSurfaces>, "contexts" | "removeAfter" | "flush">;
24
24
  footnotes: Pick<ReturnType<typeof createFootnoteLayout>, "draw">;
25
25
  pageParts: Pick<ReturnType<typeof createPageParts>, "draw">;
26
26
  checkpoints: Pick<ReturnType<typeof createCheckpoints>, "retainAfter" | "publish">;
@@ -134,6 +134,8 @@ export interface DrawCtx {
134
134
  dpr?: number;
135
135
  /** trace de layout — publie chaque ligne dessinée pour comparaison avec Word */
136
136
  onLine?(line: LineTrace): void;
137
+ /** The `onLine` consumer reads line boxes only (top, height, text): skip the per-word trace. */
138
+ boxesOnly?: boolean;
137
139
  /** publie le rectangle de chaque image dessinée — la souris n'a que ça */
138
140
  onImage?(rect: ImageRect): void;
139
141
  onCell?(rect: CellRect): void;
@@ -44,6 +44,42 @@ export declare const ICONS: {
44
44
  readonly redo: "M686-584H391q-70 0-120.5 46.5T220-422q0 69 50.5 115.5T391-260h280q13 0 21.5 8.5T701-230q0 13-8.5 21.5T671-200H392q-95 0-163.5-64T160-422q0-94 68.5-158T392-644h294l-93-93q-9-9-9-21t9-21q9-9 21-9t21 9l144 144q5 5 7 10t2 11q0 6-2 11t-7 10L635-449q-9 9-21 9t-21-9q-9-9-9-21t9-21l93-93Z";
45
45
  readonly science: "M172-120q-41.78 0-59.39-39T124-230l248-280v-270h-52q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h320q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-52v270l248 280q29 32 11.39 71T788-120H172Zm-12-60h640L528-488v-292h-96v292L160-180Zm318-300Z";
46
46
  readonly history: "M477-120q-142 0-243.5-95.5T121-451q-1-12 7.5-21t21.5-9q12 0 20.5 8.5T181-451q11 115 95 193t201 78q127 0 215-89t88-216q0-124-89-209.5T477-780q-68 0-127.5 31T246-667h75q13 0 21.5 8.5T351-637q0 13-8.5 21.5T321-607H172q-13 0-21.5-8.5T142-637v-148q0-13 8.5-21.5T172-815q13 0 21.5 8.5T202-785v76q52-61 123.5-96T477-840q75 0 141 28t115.5 76.5Q783-687 811.5-622T840-482q0 75-28.5 141t-78 115Q684-177 618-148.5T477-120Zm34-374 115 113q9 9 9 21.5t-9 21.5q-9 9-21 9t-21-9L460-460q-5-5-7-10.5t-2-11.5v-171q0-13 8.5-21.5T481-683q13 0 21.5 8.5T511-653v159Z";
47
+ readonly add_row_above: "M180-409v269h600v-269H180Zm0 329q-24.75 0-42.37-17.63Q120-115.25 120-140v-600q0-24.75 17.63-42.38Q155.25-800 180-800h60q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-60v271h600v-271h-60q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h60q24.75 0 42.38 17.62Q840-764.75 840-740v600q0 24.75-17.62 42.37Q804.75-80 780-80H180Zm270-660h-50q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h50v-50q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v50h50q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-50v50q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-50Zm30 271Zm0 60v-60 60Zm0 0Z";
48
+ readonly add_row_below: "M780-551v-269H180v269h600ZM180-160q-24.75 0-42.37-17.63Q120-195.25 120-220v-600q0-24.75 17.63-42.38Q155.25-880 180-880h600q24.75 0 42.38 17.62Q840-844.75 840-820v600q0 24.75-17.62 42.37Q804.75-160 780-160h-60q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h60v-271H180v271h60q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-60Zm299.82 80Q467-80 458.5-88.63 450-97.25 450-110v-50h-50q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h50v-50q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v50h50q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-50v50q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63Zm.18-411Zm0-60v60-60Zm0 0Z";
49
+ readonly add_column_left: "M551-180h269v-600H551v600Zm-331 60q-24.75 0-42.37-17.63Q160-155.25 160-180v-60q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v60h271v-600H220v60q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-60q0-24.75 17.63-42.38Q195.25-840 220-840h600q24.75 0 42.38 17.62Q880-804.75 880-780v600q0 24.75-17.62 42.37Q844.75-120 820-120H220Zm-30.18-250q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-50h-50q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32Q97.25-510 110-510h50v-50q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v50h50q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-50v50q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63ZM491-480Zm60 0h-60 60Zm0 0Z";
50
+ readonly add_column_right: "M409-780H140v600h269v-600ZM140-120q-24.75 0-42.37-17.63Q80-155.25 80-180v-600q0-24.75 17.63-42.38Q115.25-840 140-840h600q24.75 0 42.38 17.62Q800-804.75 800-780v60q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-60H469v600h271v-60q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v60q0 24.75-17.62 42.37Q764.75-120 740-120H140Zm629.82-250q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-50h-50q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h50v-50q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v50h50q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-50v50q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63ZM469-480Zm-60 0h60-60Zm0 0Z";
51
+ readonly table_rows: "M780-180v-157H180v157h600Zm0-217v-166H180v166h600Zm0-226v-157H180v157h600ZM180-120q-24 0-42-18t-18-42v-600q0-24 18-42t42-18h600q24 0 42 18t18 42v600q0 24-18 42t-42 18H180Z";
52
+ readonly view_column: "M120-260v-440q0-24.75 17.63-42.38Q155.25-760 180-760h600q24.75 0 42.38 17.62Q840-724.75 840-700v440q0 24.75-17.62 42.37Q804.75-200 780-200H180q-24.75 0-42.37-17.63Q120-235.25 120-260Zm60 0h160v-440H180v440Zm220 0h160v-440H400v440Zm220 0h160v-440H620v440Z";
53
+ readonly cell_merge: "M159.82-610q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-130q0-24.75 17.63-42.38Q165.25-830 190-830h130q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H190v130q0 12-8.68 21-8.67 9-21.5 9Zm640 0q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-130H640q-12 0-21-8.68-9-8.67-9-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h130q24.75 0 42.38 17.62Q830-794.75 830-770v130q0 12-8.68 21-8.67 9-21.5 9ZM652-362l-97-97q-9-9-9-21t9-21l97-97q8.8-9 20.9-9 12.1 0 21.1 9 9 9 9.5 21.5T695-555l-46 45h191q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H649l46 46q9 9 8.5 21t-9.34 21q-8.84 9-21 9T652-362Zm-386.12-.05q-9.12-9.06-9.5-21.5Q256-396 265-405l46-45H120q-12 0-21-8.68-9-8.67-9-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h191l-46-46q-9-8.8-8.5-20.9.5-12.1 9.5-21.1 9-9 21-9t21 9l97 97q9 9 9 21t-9 21l-97 97q-9 9-21 9t-21.12-9.05ZM190-130q-24.75 0-42.37-17.63Q130-165.25 130-190v-130q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v130h130q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H190Zm450 0q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h130v-130q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v130q0 24.75-17.62 42.37Q794.75-130 770-130H640Z";
54
+ readonly border_all: "M120-180v-600q0-24.75 17.63-42.38Q155.25-840 180-840h600q24.75 0 42.38 17.62Q840-804.75 840-780v600q0 24.75-17.62 42.37Q804.75-120 780-120H180q-24.75 0-42.37-17.63Q120-155.25 120-180Zm390-270v270h270v-270H510Zm0-60h270v-270H510v270Zm-60 0v-270H180v270h270Zm0 60H180v270h270v-270Z";
55
+ readonly border_clear: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-330-495q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Z";
56
+ readonly border_outer: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM180-180h600v-600H180v600Zm0 60q-24.75 0-42.37-17.63Q120-155.25 120-180v-600q0-24.75 17.63-42.38Q155.25-840 180-840h600q24.75 0 42.38 17.62Q840-804.75 840-780v600q0 24.75-17.62 42.37Q804.75-120 780-120H180Z";
57
+ readonly border_inner: "M149.82-780q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm330 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 330q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm330 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM450-150v-300H150q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h300v-300q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v300h300q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H510v300q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37Z";
58
+ readonly border_top: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-330-330q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM150-780q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Z";
59
+ readonly border_bottom: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-330-495q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM150-120q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Z";
60
+ readonly border_left: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165-495q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-495 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM120-150v-660q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v660q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37Z";
61
+ readonly border_right: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-165 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-330-495q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-495 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM780-150v-660q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v660q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37Z";
62
+ readonly border_horizontal: "M479.82-615q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm0 330q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-330-495q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 330q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM150-450q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h660q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Z";
63
+ readonly border_vertical: "M314.82-450q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm330 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-495-330q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm330 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm330 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM450-150v-660q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v660q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37Z";
64
+ readonly delete: "M261-120q-24.75 0-42.37-17.63Q201-155.25 201-180v-570h-11q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h158q0-13 8.63-21.5 8.62-8.5 21.37-8.5h204q12.75 0 21.38 8.62Q612-822.75 612-810h158q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-11v570q0 24.75-17.62 42.37Q723.75-120 699-120H261Zm438-630H261v570h438v-570ZM397.18-266q12.82 0 21.32-8.63 8.5-8.62 8.5-21.37v-339q0-12.75-8.68-21.38-8.67-8.62-21.5-8.62-12.82 0-21.32 8.62-8.5 8.63-8.5 21.38v339q0 12.75 8.68 21.37 8.67 8.63 21.5 8.63Zm166 0q12.82 0 21.32-8.63 8.5-8.62 8.5-21.37v-339q0-12.75-8.68-21.38-8.67-8.62-21.5-8.62-12.82 0-21.32 8.62-8.5 8.63-8.5 21.38v339q0 12.75 8.68 21.37 8.67 8.63 21.5 8.63ZM261-750v570-570Z";
65
+ readonly select: "M149.82-780q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Z";
66
+ readonly select_all: "M149.82-780q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm660 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm-660 165q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5Zm165 0q-12.82 0-21.32-8.68-8.5-8.67-8.5-21.5 0-12.82 8.68-21.32 8.67-8.5 21.5-8.5 12.82 0 21.32 8.68 8.5 8.67 8.5 21.5 0 12.82-8.68 21.32-8.67 8.5-21.5 8.5ZM345-285q-24.75 0-42.37-17.63Q285-320.25 285-345v-270q0-24.75 17.63-42.38Q320.25-675 345-675h270q24.75 0 42.38 17.62Q675-639.75 675-615v270q0 24.75-17.62 42.37Q639.75-285 615-285H345Zm0-60h270v-270H345v270Z";
67
+ readonly content_cut: "M481-415 364-298q11 17 13.5 33t2.5 35q0 64-43 107T230-80q-64 0-107-43T80-230q0-64 43-107t107-43q18 0 35.5 5t36.5 15l116-116-118-118q-17 8-34.5 11t-35.5 3q-64 0-107-43T80-730q0-64 43-107t107-43q64 0 107 43t43 107q0 19-2.5 36T367-662l468 468q23 23 10.5 51.5T801-114q-9 0-17.5-3.5T768-128L481-415Zm118-112-66-66 235-235q7-7 15.5-10.5T801-842q32 0 43.5 29T834-762L599-527ZM230-640q38 0 64-26t26-64q0-38-26-64t-64-26q-38 0-64 26t-26 64q0 38 26 64t64 26Zm253 183q8 0 13.5-5.5T502-476q0-8-5.5-13.5T483-495q-8 0-13.5 5.5T464-476q0 8 5.5 13.5T483-457ZM230-140q38 0 64-26t26-64q0-38-26-64t-64-26q-38 0-64 26t-26 64q0 38 26 64t64 26Z";
68
+ readonly content_copy: "M300-200q-24 0-42-18t-18-42v-560q0-24 18-42t42-18h440q24 0 42 18t18 42v560q0 24-18 42t-42 18H300Zm0-60h440v-560H300v560ZM180-80q-24 0-42-18t-18-42v-590q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v590h470q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32Q662.75-80 650-80H180Zm120-180v-560 560Z";
69
+ readonly content_paste: "M180-120q-26 0-43-17t-17-43v-600q0-26 17-43t43-17h202q7-35 34.5-57.5T480-920q36 0 63.5 22.5T578-840h202q26 0 43 17t17 43v600q0 26-17 43t-43 17H180Zm0-60h600v-600h-60v60q0 12.75-8.62 21.37Q702.75-690 690-690H270q-12.75 0-21.37-8.63Q240-707.25 240-720v-60h-60v600Zm300-600q17 0 28.5-11.5T520-820q0-17-11.5-28.5T480-860q-17 0-28.5 11.5T440-820q0 17 11.5 28.5T480-780Z";
70
+ readonly content_paste_go: "M766-236H534q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h232l-53-53q-9-9-9-21.1 0-12.1 9-20.9 9-9 21-9t21 9l104 104q9 9 9 21t-9 21L755-141q-9 9-21 9t-21.39-9q-8.61-9-8.61-21t9-21l53-53ZM180-120q-26 0-43-17t-17-43v-600q0-26 17-43t43-17h202q7-35 34.5-57.5T480-920q36 0 63.5 22.5T578-840h202q26 0 43 17t17 43v278q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-278h-60v60q0 12.75-8.62 21.37Q702.75-690 690-690H270q-12.75 0-21.37-8.63Q240-707.25 240-720v-60h-60v600h234q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H180Zm300-660q17 0 28.5-11.5T520-820q0-17-11.5-28.5T480-860q-17 0-28.5 11.5T440-820q0 17 11.5 28.5T480-780Z";
71
+ readonly add_comment: "M450-530v100q0 12.75 8.68 21.37 8.67 8.63 21.5 8.63 12.82 0 21.32-8.63 8.5-8.62 8.5-21.37v-100h100q12.75 0 21.38-8.68 8.62-8.67 8.62-21.5 0-12.82-8.62-21.32-8.63-8.5-21.38-8.5H510v-100q0-12.75-8.68-21.38-8.67-8.62-21.5-8.62-12.82 0-21.32 8.62-8.5 8.63-8.5 21.38v100H350q-12.75 0-21.37 8.68-8.63 8.67-8.63 21.5 0 12.82 8.63 21.32 8.62 8.5 21.37 8.5h100ZM240-240 131-131q-14 14-32.5 6.34Q80-132.31 80-152v-668q0-24 18-42t42-18h680q24 0 42 18t18 42v520q0 24-18 42t-42 18H240Zm-26-60h606v-520H140v600l74-80Zm-74 0v-520 520Z";
72
+ readonly link_off: "m594-447-60-60h71q12.75 0 21.38 8.62Q635-489.75 635-477q0 13-8.5 21.5T605-447h-11ZM836-78q-9 9-21.5 9T793-78L84-786q-9-9-9-21.5t9-21.5q9-9 21.5-9t21.5 9l709 709q9 9 9 21t-9 21ZM280-280q-83 0-141.5-58.5T80-480q0-72 44.5-127T238-676l56 56h-14q-58.33 0-99.17 40.76-40.83 40.77-40.83 99Q140-422 180.83-381q40.84 41 99.17 41h140q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H280Zm75-170q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h49l60 60H355Zm366 139.5q-5-11.5-.5-23.5t15.5-17q38-17 61-50.5t23-75.5q0-58.33-40.83-99.17Q738.33-617 680-617H555q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h125q83 0 141.5 58.5T880-477q0 59-32.5 106.5T763-297q-11 6-24 2t-18-15.5Z";
73
+ readonly format_bold: "M335-200q-25 0-42.5-17.5T275-260v-440q0-25 17.5-42.5T335-760h168q66 0 114.5 42T666-612q0 38-21 70t-56 49v6q43 14 69.5 50t26.5 81q0 68-52.5 112T510-200H335Zm26-76h144q38 0 66-25t28-63q0-37-28-62t-66-25H361v175Zm0-247h136q35 0 60.5-23t25.5-58q0-35-25.5-58.5T497-686H361v163Z";
74
+ readonly format_italic: "M264-199q-16.8 0-28.4-11.64-11.6-11.64-11.6-28.5t11.6-28.36Q247.2-279 264-279h94l139-409H378q-16.8 0-28.4-11.64-11.6-11.64-11.6-28.5t11.6-28.36Q361.2-768 378-768h300q16.8 0 28.4 11.64 11.6 11.64 11.6 28.5t-11.6 28.36Q694.8-688 678-688h-94L445-279h119q16.8 0 28.4 11.64 11.6 11.64 11.6 28.5t-11.6 28.36Q580.8-199 564-199H264Z";
75
+ readonly format_underlined: "M230-140q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h500q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H230Zm250-140q-100 0-156.5-58.5T267-497v-302q0-16.88 12.53-28.94Q292.05-840 309.03-840 326-840 338-827.94T350-799v302q0 63 34 101t96 38q62 0 96-38t34-101v-302q0-16.88 12.53-28.94Q635.05-840 652.03-840 669-840 681-827.94T693-799v302q0 100-56.5 158.5T480-280Z";
76
+ readonly format_clear: "m507-524-77-76 24-56h-58q-26 0-38.5-16T345-708q0-20 13-36t39-16h353q21 0 35.5 14.5T800-710q0 21-14.5 35.5T750-660H565l-58 136ZM785-77 457-406l-75 176q-6 14-18.5 22t-27.5 8q-27 0-42-22.5t-4-47.5l90-212L77-785q-9-9-9-21t9-21q9-9 21-9t21 9l708 708q9 9 9 21t-9 21q-9 9-21 9t-21-9Z";
77
+ readonly format_paragraph: "M419.82-160q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-230h-40q-78.85 0-134.43-55.61Q160-531.21 160-610.11q0-78.89 55.57-134.39Q271.15-800 350-800h340q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-80v550q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-550H450v550q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63Z";
78
+ readonly tune: "M456.82-120q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-165q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v53h323q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H487v52q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63ZM150-202q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h187q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Zm186.82-166q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-52H150q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h157v-54q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v166q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63ZM457-450q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h353q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H457Zm165.82-165q-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-165q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v52h157q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H653v53q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63ZM150-698q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h353q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H150Z";
79
+ readonly zoom_in: "M346-556h-52q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h52v-51q0-12.75 8.68-21.38 8.67-8.62 21.5-8.62 12.82 0 21.32 8.62 8.5 8.63 8.5 21.38v51h51q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5h-51v52q0 12.75-8.68 21.37-8.67 8.63-21.5 8.63-12.82 0-21.32-8.63-8.5-8.62-8.5-21.37v-52Zm32 227q-108.16 0-183.08-75Q120-479 120-585t75-181q75-75 181.5-75t181 75Q632-691 632-584.85 632-542 618-502q-14 40-42 75l242 240q9 8.56 9 21.78T818-143q-9 9-22.22 9-13.22 0-21.78-9L533-384q-30 26-69.96 40.5Q423.08-329 378-329Zm-1-60q81.25 0 138.13-57.5Q572-504 572-585t-56.87-138.5Q458.25-781 377-781q-82.08 0-139.54 57.5Q180-666 180-585t57.46 138.5Q294.92-389 377-389Z";
80
+ readonly zoom_out: "M305-556q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h141q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H305Zm73 227q-108.16 0-183.08-75Q120-479 120-585t75-181q75-75 181.5-75t181 75Q632-691 632-584.85 632-542 618-502q-14 40-42 75l242 240q9 8.56 9 21.78T818-143q-9 9-22.22 9-13.22 0-21.78-9L533-384q-30 26-69.96 40.5Q423.08-329 378-329Zm-1-60q81.25 0 138.13-57.5Q572-504 572-585t-56.87-138.5Q458.25-781 377-781q-82.08 0-139.54 57.5Q180-666 180-585t57.46 138.5Q294.92-389 377-389Z";
81
+ readonly code: "m166-482 176 176q9 9 8.5 21t-9.5 21q-9 9-21.5 9t-21.5-9L101-461q-5-5-7-10t-2-11q0-6 2-11t7-10l200-200q9-9 21.5-9t21.5 9q9 9 9 21.5t-9 21.5L166-482Zm628 0L618-658q-9-9-8.5-21t9.5-21q9-9 21.5-9t21.5 9l197 197q5 5 7 10t2 11q0 6-2 11t-7 10L659-261q-9 9-21 8.5t-21-9.5q-9-9-9-21.5t9-21.5l177-177Z";
82
+ readonly edit_note: "M190-410q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h240q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H190Zm0-165q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h410q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H190Zm0-165q-12.75 0-21.37-8.68-8.63-8.67-8.63-21.5 0-12.82 8.63-21.32 8.62-8.5 21.37-8.5h410q12.75 0 21.38 8.68 8.62 8.67 8.62 21.5 0 12.82-8.62 21.32-8.63 8.5-21.38 8.5H190Zm330 550v-81q0-5.57 2-10.78 2-5.22 7-10.22l211.61-210.77q9.11-9.12 20.25-13.18Q772-520 783-520q12 0 23 4.5t20 13.5l37 37q9 9 13 20t4 22q0 11-4.5 22.5t-13.58 20.62L652-169q-5 5-10.22 7-5.21 2-10.78 2h-81q-12.75 0-21.37-8.63Q520-177.25 520-190Zm300-233-37-37 37 37ZM580-220h38l121-122-18-19-19-18-122 121v38Zm141-141-19-18 37 37-18-19Z";
47
83
  };
48
84
  export type IconName = keyof typeof ICONS;
49
85
  /** Icône SVG inline, dimensionnée en em pour suivre la taille du texte. */
@@ -50,6 +50,7 @@ export interface Prepared {
50
50
  * la boîte réservée ne correspond pas à ce qui sera posé dedans.
51
51
  */
52
52
  export declare function prepareMarks(o: OverlayOptions, maxWidthPx: number): Map<string, Prepared>;
53
+ export declare const PAIR_COLORS: string[];
53
54
  /**
54
55
  * Regroupe les rectangles d'un même marqueur sur une même page, dans l'ordre
55
56
  * de lecture. Un run replié occupe plusieurs lignes : on ne prend pas leur
@@ -25,3 +25,17 @@ export declare const FONT_ALIASES: Record<string, string>;
25
25
  * matching is the only reason it would miss.
26
26
  */
27
27
  export declare function resolveFamily(name: string, served: Iterable<string>): string | undefined;
28
+ /**
29
+ * The served family to draw `name` with, or undefined if nothing is close.
30
+ *
31
+ * In order: the name itself or its alias; `w:altName`, the substitute Word
32
+ * wrote into this document's font table; then the name with its trailing words
33
+ * dropped one by one — « Helvetica Bold », « HelveticaNeue-Light » and
34
+ * « Arial Nova » are a style or a cut of a family we serve, and that family
35
+ * is a better stand-in than the browser's generic sans-serif.
36
+ *
37
+ * ponytail: the dropped words are not read — « Helvetica Bold » draws the
38
+ * Helvetica ROMAN unless the run is bold itself. Map the style words to a
39
+ * weight if a document shows it matters.
40
+ */
41
+ export declare function nearestFamily(name: string, served: Iterable<string>, alt?: Map<string, string>): string | undefined;
@@ -41,4 +41,4 @@ export declare function lineRatioOf(ttf: ArrayBuffer): number | undefined;
41
41
  * `baseUrl` doit pointer le dossier qui contient `ttf/` — par défaut celui du
42
42
  * module, ce qui marche avec un bundler qui réécrit les URL relatives.
43
43
  */
44
- export declare function fontLineRatios(baseUrl?: string): Promise<Partial<Record<FontFamily, number>>>;
44
+ export declare function fontLineRatios(baseUrl?: string, families?: readonly string[]): Promise<Partial<Record<FontFamily, number>>>;