@heycys/gallery 0.0.0-stage → 0.1.1

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 (806) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -2
  3. package/THIRD-PARTY-NOTICES.md +3303 -0
  4. package/assets/writing-preferences.md +107 -0
  5. package/bin/gallery.mjs +10 -0
  6. package/browser/editor/components/bookmark/icons.mjs +6 -0
  7. package/browser/editor/components/bookmark/index.mjs +80 -0
  8. package/browser/editor/components/bookmark/page.mjs +147 -0
  9. package/browser/editor/components/builders.mjs +19 -0
  10. package/browser/editor/components/callout/index.mjs +64 -0
  11. package/browser/editor/components/code/index.mjs +327 -0
  12. package/browser/editor/components/code/page.mjs +561 -0
  13. package/browser/editor/components/colors.mjs +50 -0
  14. package/browser/editor/components/columns/index.mjs +104 -0
  15. package/browser/editor/components/columns/page.mjs +310 -0
  16. package/browser/editor/components/details/index.mjs +73 -0
  17. package/browser/editor/components/details/page.mjs +86 -0
  18. package/browser/editor/components/dialog/index.mjs +84 -0
  19. package/browser/editor/components/dialog/page.mjs +201 -0
  20. package/browser/editor/components/divider/index.mjs +48 -0
  21. package/browser/editor/components/embed/icons.mjs +11 -0
  22. package/browser/editor/components/embed/index.mjs +123 -0
  23. package/browser/editor/components/embed/page.mjs +309 -0
  24. package/browser/editor/components/figure/index.mjs +87 -0
  25. package/browser/editor/components/figure/page.mjs +42 -0
  26. package/browser/editor/components/file/icons.mjs +14 -0
  27. package/browser/editor/components/file/index.mjs +77 -0
  28. package/browser/editor/components/file/page.mjs +114 -0
  29. package/browser/editor/components/flowchart/add.mjs +123 -0
  30. package/browser/editor/components/flowchart/index.mjs +246 -0
  31. package/browser/editor/components/flowchart/page.mjs +453 -0
  32. package/browser/editor/components/heading/index.mjs +53 -0
  33. package/browser/editor/components/heading/page.mjs +6 -0
  34. package/browser/editor/components/highlight/index.mjs +63 -0
  35. package/browser/editor/components/icon/index.mjs +57 -0
  36. package/browser/editor/components/icon/page.mjs +286 -0
  37. package/browser/editor/components/icons.mjs +48 -0
  38. package/browser/editor/components/image/crop.mjs +189 -0
  39. package/browser/editor/components/image/index.mjs +104 -0
  40. package/browser/editor/components/image/page.mjs +385 -0
  41. package/browser/editor/components/image/viewer.mjs +213 -0
  42. package/browser/editor/components/installed/index.mjs +179 -0
  43. package/browser/editor/components/installed/page.mjs +523 -0
  44. package/browser/editor/components/installed/served.mjs +35 -0
  45. package/browser/editor/components/kit.mjs +67 -0
  46. package/browser/editor/components/list/index.mjs +194 -0
  47. package/browser/editor/components/list/join.mjs +68 -0
  48. package/browser/editor/components/list/numbers.mjs +107 -0
  49. package/browser/editor/components/list/page.mjs +632 -0
  50. package/browser/editor/components/math/index.mjs +88 -0
  51. package/browser/editor/components/math/page.mjs +236 -0
  52. package/browser/editor/components/math/tex-logo.mjs +6 -0
  53. package/browser/editor/components/media/icons.mjs +19 -0
  54. package/browser/editor/components/media/page.mjs +192 -0
  55. package/browser/editor/components/media/parts.mjs +60 -0
  56. package/browser/editor/components/media/size.mjs +20 -0
  57. package/browser/editor/components/media/toolbar.mjs +37 -0
  58. package/browser/editor/components/media/write.mjs +7 -0
  59. package/browser/editor/components/pages.mjs +46 -0
  60. package/browser/editor/components/paragraph/index.mjs +43 -0
  61. package/browser/editor/components/paragraph/page.mjs +52 -0
  62. package/browser/editor/components/placeholder-bar.mjs +17 -0
  63. package/browser/editor/components/placeholder.mjs +128 -0
  64. package/browser/editor/components/quote/index.mjs +33 -0
  65. package/browser/editor/components/registry.mjs +859 -0
  66. package/browser/editor/components/rows.mjs +16 -0
  67. package/browser/editor/components/section/index.mjs +42 -0
  68. package/browser/editor/components/section/page.mjs +141 -0
  69. package/browser/editor/components/set-apart.mjs +24 -0
  70. package/browser/editor/components/sheets/index.mjs +137 -0
  71. package/browser/editor/components/sheets/page.mjs +227 -0
  72. package/browser/editor/components/sheets/pills.mjs +226 -0
  73. package/browser/editor/components/table/grid.mjs +73 -0
  74. package/browser/editor/components/table/index.mjs +308 -0
  75. package/browser/editor/components/table/page.mjs +683 -0
  76. package/browser/editor/components/table/slots.mjs +41 -0
  77. package/browser/editor/components/widget/index.mjs +50 -0
  78. package/browser/editor/page/annotate/anchors.mjs +230 -0
  79. package/browser/editor/page/annotate/card.mjs +102 -0
  80. package/browser/editor/page/annotate/index.mjs +1656 -0
  81. package/browser/editor/page/at-menu/index.mjs +317 -0
  82. package/browser/editor/page/autosave.mjs +1023 -0
  83. package/browser/editor/page/beside.mjs +21 -0
  84. package/browser/editor/page/block-info.mjs +63 -0
  85. package/browser/editor/page/block-menu/colors.mjs +84 -0
  86. package/browser/editor/page/block-menu/index.mjs +217 -0
  87. package/browser/editor/page/blocks.mjs +255 -0
  88. package/browser/editor/page/caret.mjs +682 -0
  89. package/browser/editor/page/changes/bar.mjs +102 -0
  90. package/browser/editor/page/changes/ghost.mjs +206 -0
  91. package/browser/editor/page/changes/gone-words.mjs +94 -0
  92. package/browser/editor/page/changes/index.mjs +447 -0
  93. package/browser/editor/page/changes/words.mjs +27 -0
  94. package/browser/editor/page/chip-fills.mjs +126 -0
  95. package/browser/editor/page/clipboard/import/colors.mjs +192 -0
  96. package/browser/editor/page/clipboard/import/html.mjs +792 -0
  97. package/browser/editor/page/clipboard/import/inline.mjs +232 -0
  98. package/browser/editor/page/clipboard/import/languages.mjs +42 -0
  99. package/browser/editor/page/clipboard/import/markdown.mjs +760 -0
  100. package/browser/editor/page/clipboard/import/math.mjs +100 -0
  101. package/browser/editor/page/clipboard/import/office.mjs +245 -0
  102. package/browser/editor/page/clipboard/import/read.mjs +120 -0
  103. package/browser/editor/page/clipboard/import/rich.mjs +29 -0
  104. package/browser/editor/page/clipboard/import/to-blocks.mjs +290 -0
  105. package/browser/editor/page/clipboard/index.mjs +816 -0
  106. package/browser/editor/page/clipboard/own/blocks.mjs +211 -0
  107. package/browser/editor/page/clipboard/own/chart-keys.mjs +58 -0
  108. package/browser/editor/page/clipboard/own/describe.mjs +124 -0
  109. package/browser/editor/page/clipboard/own/export.mjs +167 -0
  110. package/browser/editor/page/clipboard/own/ids.mjs +39 -0
  111. package/browser/editor/page/clipboard/own/index.mjs +13 -0
  112. package/browser/editor/page/clipboard/own/rules.mjs +44 -0
  113. package/browser/editor/page/clipboard/own/selection.mjs +159 -0
  114. package/browser/editor/page/clipboard/own/writers.mjs +315 -0
  115. package/browser/editor/page/columns/index.mjs +360 -0
  116. package/browser/editor/page/commit.mjs +1813 -0
  117. package/browser/editor/page/conflicts.mjs +249 -0
  118. package/browser/editor/page/convert.mjs +831 -0
  119. package/browser/editor/page/core.mjs +1693 -0
  120. package/browser/editor/page/drag/drop.mjs +307 -0
  121. package/browser/editor/page/drag/index.mjs +351 -0
  122. package/browser/editor/page/drag/preview.mjs +126 -0
  123. package/browser/editor/page/edge-scroll.mjs +50 -0
  124. package/browser/editor/page/editor.mjs +1780 -0
  125. package/browser/editor/page/emoji-picker/emoji-tab.mjs +287 -0
  126. package/browser/editor/page/emoji-picker/glyph-html.mjs +26 -0
  127. package/browser/editor/page/emoji-picker/grid.mjs +81 -0
  128. package/browser/editor/page/emoji-picker/icon-tab.mjs +217 -0
  129. package/browser/editor/page/emoji-picker/icons.mjs +31 -0
  130. package/browser/editor/page/emoji-picker/index.mjs +166 -0
  131. package/browser/editor/page/emoji-picker/styles.mjs +161 -0
  132. package/browser/editor/page/emoji-picker/support.mjs +204 -0
  133. package/browser/editor/page/emoji-picker/upload.mjs +236 -0
  134. package/browser/editor/page/export-report.mjs +23 -0
  135. package/browser/editor/page/fills.mjs +62 -0
  136. package/browser/editor/page/find/index.mjs +107 -0
  137. package/browser/editor/page/flags.mjs +70 -0
  138. package/browser/editor/page/fold/index.mjs +348 -0
  139. package/browser/editor/page/fold/rule.mjs +125 -0
  140. package/browser/editor/page/folded.mjs +23 -0
  141. package/browser/editor/page/format-bar/bar.mjs +449 -0
  142. package/browser/editor/page/format-bar/brush.mjs +77 -0
  143. package/browser/editor/page/format-bar/colors.mjs +46 -0
  144. package/browser/editor/page/format-bar/index.mjs +404 -0
  145. package/browser/editor/page/formula/index.mjs +236 -0
  146. package/browser/editor/page/formula/panel.mjs +336 -0
  147. package/browser/editor/page/formula/symbols.mjs +156 -0
  148. package/browser/editor/page/frame.mjs +74 -0
  149. package/browser/editor/page/frames.mjs +196 -0
  150. package/browser/editor/page/geometry.mjs +402 -0
  151. package/browser/editor/page/gesture.mjs +45 -0
  152. package/browser/editor/page/handle/index.mjs +650 -0
  153. package/browser/editor/page/handle-sizes.mjs +14 -0
  154. package/browser/editor/page/hints/index.mjs +84 -0
  155. package/browser/editor/page/history.mjs +401 -0
  156. package/browser/editor/page/insert/index.mjs +256 -0
  157. package/browser/editor/page/kept.mjs +38 -0
  158. package/browser/editor/page/links/address.mjs +40 -0
  159. package/browser/editor/page/links/index.mjs +866 -0
  160. package/browser/editor/page/links/pages.mjs +131 -0
  161. package/browser/editor/page/links/views.mjs +369 -0
  162. package/browser/editor/page/long-runs.mjs +75 -0
  163. package/browser/editor/page/look.mjs +77 -0
  164. package/browser/editor/page/made.mjs +24 -0
  165. package/browser/editor/page/margin.mjs +373 -0
  166. package/browser/editor/page/markdown/index.mjs +88 -0
  167. package/browser/editor/page/markdown/rules.mjs +33 -0
  168. package/browser/editor/page/marks.mjs +377 -0
  169. package/browser/editor/page/media-menu/index.mjs +158 -0
  170. package/browser/editor/page/menu.mjs +544 -0
  171. package/browser/editor/page/merge.mjs +124 -0
  172. package/browser/editor/page/notices.mjs +142 -0
  173. package/browser/editor/page/offered.mjs +32 -0
  174. package/browser/editor/page/outline/folds.mjs +53 -0
  175. package/browser/editor/page/outline/index.mjs +783 -0
  176. package/browser/editor/page/outline/list.mjs +184 -0
  177. package/browser/editor/page/outline/read.mjs +201 -0
  178. package/browser/editor/page/outline/strip.mjs +287 -0
  179. package/browser/editor/page/outline/tree.mjs +248 -0
  180. package/browser/editor/page/overlay-layer.mjs +227 -0
  181. package/browser/editor/page/overlays.mjs +205 -0
  182. package/browser/editor/page/own.mjs +28 -0
  183. package/browser/editor/page/pads.mjs +71 -0
  184. package/browser/editor/page/page-objects.mjs +105 -0
  185. package/browser/editor/page/panel.mjs +65 -0
  186. package/browser/editor/page/placement.mjs +58 -0
  187. package/browser/editor/page/post.mjs +41 -0
  188. package/browser/editor/page/present-links.mjs +50 -0
  189. package/browser/editor/page/quiet.mjs +48 -0
  190. package/browser/editor/page/resize/index.mjs +327 -0
  191. package/browser/editor/page/select-all/index.mjs +262 -0
  192. package/browser/editor/page/selection/delete.mjs +61 -0
  193. package/browser/editor/page/selection/index.mjs +164 -0
  194. package/browser/editor/page/selection/marquee.mjs +174 -0
  195. package/browser/editor/page/session.mjs +168 -0
  196. package/browser/editor/page/slash-menu/index.mjs +291 -0
  197. package/browser/editor/page/storage.mjs +48 -0
  198. package/browser/editor/page/sync-state.mjs +267 -0
  199. package/browser/editor/page/table/aligns.mjs +29 -0
  200. package/browser/editor/page/table/cell-bar.mjs +141 -0
  201. package/browser/editor/page/table/cells.mjs +527 -0
  202. package/browser/editor/page/table/icons.mjs +40 -0
  203. package/browser/editor/page/table/index.mjs +990 -0
  204. package/browser/editor/page/table/lists.mjs +187 -0
  205. package/browser/editor/page/table/widths.mjs +313 -0
  206. package/browser/editor/page/tex.mjs +32 -0
  207. package/browser/editor/page/text-select/index.mjs +671 -0
  208. package/browser/editor/page/tooltip.mjs +98 -0
  209. package/browser/editor/page/type-grid.mjs +83 -0
  210. package/browser/editor/page/typing/code-edges.mjs +274 -0
  211. package/browser/editor/page/typing/index.mjs +282 -0
  212. package/browser/editor/page/typing/leave.mjs +68 -0
  213. package/browser/editor/page/ui.mjs +160 -0
  214. package/browser/shared/annotations.mjs +569 -0
  215. package/browser/shared/code-folds.mjs +14 -0
  216. package/browser/shared/code-languages.mjs +70 -0
  217. package/browser/shared/code-lines.mjs +30 -0
  218. package/browser/shared/colors.mjs +30 -0
  219. package/browser/shared/component-catalog.mjs +573 -0
  220. package/browser/shared/components/bookmark.mjs +26 -0
  221. package/browser/shared/components/callout.mjs +9 -0
  222. package/browser/shared/components/chart.mjs +20 -0
  223. package/browser/shared/components/code.mjs +37 -0
  224. package/browser/shared/components/columns.mjs +16 -0
  225. package/browser/shared/components/details.mjs +15 -0
  226. package/browser/shared/components/dialog.mjs +28 -0
  227. package/browser/shared/components/diff.mjs +18 -0
  228. package/browser/shared/components/divider.mjs +6 -0
  229. package/browser/shared/components/embed.mjs +25 -0
  230. package/browser/shared/components/figure.mjs +14 -0
  231. package/browser/shared/components/file.mjs +23 -0
  232. package/browser/shared/components/heading.mjs +6 -0
  233. package/browser/shared/components/highlight.mjs +9 -0
  234. package/browser/shared/components/icon.mjs +18 -0
  235. package/browser/shared/components/image.mjs +39 -0
  236. package/browser/shared/components/index.mjs +396 -0
  237. package/browser/shared/components/installed.mjs +232 -0
  238. package/browser/shared/components/list.mjs +146 -0
  239. package/browser/shared/components/math.mjs +49 -0
  240. package/browser/shared/components/mention.mjs +33 -0
  241. package/browser/shared/components/page.mjs +46 -0
  242. package/browser/shared/components/paragraph.mjs +9 -0
  243. package/browser/shared/components/quote.mjs +6 -0
  244. package/browser/shared/components/section.mjs +8 -0
  245. package/browser/shared/components/sheets.mjs +80 -0
  246. package/browser/shared/components/state.mjs +20 -0
  247. package/browser/shared/components/table.mjs +49 -0
  248. package/browser/shared/components/text.mjs +14 -0
  249. package/browser/shared/components/widget.mjs +10 -0
  250. package/browser/shared/copy-ids.mjs +72 -0
  251. package/browser/shared/css-references.mjs +110 -0
  252. package/browser/shared/document-look.mjs +178 -0
  253. package/browser/shared/emoji/custom.mjs +91 -0
  254. package/browser/shared/emoji/data/LICENSE-lucide.txt +43 -0
  255. package/browser/shared/emoji/data/LICENSE-mingcute.txt +202 -0
  256. package/browser/shared/emoji/data/LICENSE-tabler.txt +21 -0
  257. package/browser/shared/emoji/data/README.md +28 -0
  258. package/browser/shared/emoji/data/categories.json +1 -0
  259. package/browser/shared/emoji/data/icons.json +1 -0
  260. package/browser/shared/emoji/data/keywords-en.json +1 -0
  261. package/browser/shared/emoji/data/keywords-zh.json +1 -0
  262. package/browser/shared/emoji/data/names.json +1 -0
  263. package/browser/shared/emoji/data/positions.json +1 -0
  264. package/browser/shared/emoji/data/twemoji-index.json +1 -0
  265. package/browser/shared/emoji/data/twemoji-svg.bin +0 -0
  266. package/browser/shared/emoji/data.mjs +194 -0
  267. package/browser/shared/emoji/emoji.mjs +38 -0
  268. package/browser/shared/emoji/glyphs.mjs +134 -0
  269. package/browser/shared/emoji/icon-value.mjs +91 -0
  270. package/browser/shared/escape.mjs +20 -0
  271. package/browser/shared/export-wrap.mjs +89 -0
  272. package/browser/shared/files.mjs +33 -0
  273. package/browser/shared/html-tree.mjs +59 -0
  274. package/browser/shared/http.mjs +22 -0
  275. package/browser/shared/i18n/en.mjs +1223 -0
  276. package/browser/shared/i18n/index.mjs +132 -0
  277. package/browser/shared/ids.mjs +24 -0
  278. package/browser/shared/import-types.mjs +23 -0
  279. package/browser/shared/inline-spacing.mjs +97 -0
  280. package/browser/shared/layers.mjs +42 -0
  281. package/browser/shared/long-runs.mjs +39 -0
  282. package/browser/shared/media.mjs +162 -0
  283. package/browser/shared/new-names.mjs +67 -0
  284. package/browser/shared/number-reading.mjs +92 -0
  285. package/browser/shared/old-names.mjs +143 -0
  286. package/browser/shared/outline.mjs +194 -0
  287. package/browser/shared/page-address.mjs +140 -0
  288. package/browser/shared/page-links.mjs +86 -0
  289. package/browser/shared/paths.mjs +73 -0
  290. package/browser/shared/preferences.mjs +116 -0
  291. package/browser/shared/preview-server.mjs +247 -0
  292. package/browser/shared/qa-levels.mjs +93 -0
  293. package/browser/shared/reading-place.mjs +91 -0
  294. package/browser/shared/renamed-storage.mjs +220 -0
  295. package/browser/shared/reports.mjs +46 -0
  296. package/browser/shared/search.mjs +85 -0
  297. package/browser/shared/session.mjs +77 -0
  298. package/browser/shared/table-chart.mjs +113 -0
  299. package/browser/shared/table-hides.mjs +120 -0
  300. package/browser/shared/table-slots.mjs +75 -0
  301. package/browser/shared/words.mjs +23 -0
  302. package/browser/shared/workspace-look.mjs +91 -0
  303. package/browser/shared/workspace.mjs +535 -0
  304. package/browser/shared/writing-preferences.mjs +68 -0
  305. package/browser/shared/zoom.mjs +57 -0
  306. package/dist/chunk-2B5E4CDJ.mjs +2 -0
  307. package/dist/chunk-342HXE3Q.mjs +2 -0
  308. package/dist/chunk-3HIRPVLU.mjs +2 -0
  309. package/dist/chunk-43B75J5T.mjs +2 -0
  310. package/dist/chunk-4FS7Z7WR.mjs +2 -0
  311. package/dist/chunk-4K5KC6V2.mjs +2 -0
  312. package/dist/chunk-5L7RYZCL.mjs +2 -0
  313. package/dist/chunk-5MHMDLZD.mjs +4 -0
  314. package/dist/chunk-5ZKJ3H4P.mjs +8 -0
  315. package/dist/chunk-64K7IPLO.mjs +255 -0
  316. package/dist/chunk-6QXGZM36.mjs +8 -0
  317. package/dist/chunk-6RGJOMJP.mjs +16 -0
  318. package/dist/chunk-742D2WWJ.mjs +19 -0
  319. package/dist/chunk-7DTINW6U.mjs +48 -0
  320. package/dist/chunk-A55HN5OK.mjs +2 -0
  321. package/dist/chunk-AGDILNWB.mjs +2 -0
  322. package/dist/chunk-AJ73XJF3.mjs +2 -0
  323. package/dist/chunk-AUZGSZJH.mjs +13 -0
  324. package/dist/chunk-BFE45AKL.mjs +2 -0
  325. package/dist/chunk-BGGDRNYQ.mjs +10 -0
  326. package/dist/chunk-BXO2ZY5P.mjs +2 -0
  327. package/dist/chunk-C564NU2H.mjs +77 -0
  328. package/dist/chunk-CEH4MRCC.mjs +2 -0
  329. package/dist/chunk-CY2FNNAB.mjs +16 -0
  330. package/dist/chunk-DFUDV4LX.mjs +2 -0
  331. package/dist/chunk-DKXG4XDG.mjs +2 -0
  332. package/dist/chunk-E7LWZRXY.mjs +4 -0
  333. package/dist/chunk-EZQ34M3F.mjs +124 -0
  334. package/dist/chunk-EZY3WC6Z.mjs +15 -0
  335. package/dist/chunk-FDLXYYG4.mjs +4 -0
  336. package/dist/chunk-FUKQNOQS.mjs +9 -0
  337. package/dist/chunk-GB5SOYQJ.mjs +7 -0
  338. package/dist/chunk-GRAXKKG4.mjs +2 -0
  339. package/dist/chunk-HYMEEXKN.mjs +4 -0
  340. package/dist/chunk-IVDLMMBD.mjs +2 -0
  341. package/dist/chunk-JPOSLGOC.mjs +6 -0
  342. package/dist/chunk-JVHHHGEA.mjs +3 -0
  343. package/dist/chunk-L3QKH4OK.mjs +26 -0
  344. package/dist/chunk-LAE5NQ4B.mjs +2 -0
  345. package/dist/chunk-LCTHTZIL.mjs +960 -0
  346. package/dist/chunk-LEF6DRCK.mjs +59 -0
  347. package/dist/chunk-LKX55H76.mjs +2 -0
  348. package/dist/chunk-LS4F7JUM.mjs +2 -0
  349. package/dist/chunk-MAFIGVXY.mjs +2 -0
  350. package/dist/chunk-NO5NJCHO.mjs +2 -0
  351. package/dist/chunk-NQPVAU63.mjs +2 -0
  352. package/dist/chunk-NSKUTQ5J.mjs +5 -0
  353. package/dist/chunk-O35FIXRB.mjs +2 -0
  354. package/dist/chunk-P2CAZPDP.mjs +3 -0
  355. package/dist/chunk-PL6GHLGD.mjs +15 -0
  356. package/dist/chunk-QAIHRH3I.mjs +13 -0
  357. package/dist/chunk-QJIR2BLP.mjs +6 -0
  358. package/dist/chunk-QR6A54KJ.mjs +3 -0
  359. package/dist/chunk-QUPLVPB2.mjs +7 -0
  360. package/dist/chunk-R7BNENLY.mjs +4 -0
  361. package/dist/chunk-S6O4UHLC.mjs +2 -0
  362. package/dist/chunk-SGJWQKEI.mjs +2 -0
  363. package/dist/chunk-SYGN7GLU.mjs +2 -0
  364. package/dist/chunk-TMYZB6AV.mjs +2 -0
  365. package/dist/chunk-TX6JH7TR.mjs +2 -0
  366. package/dist/chunk-TYK6VNAB.mjs +10 -0
  367. package/dist/chunk-U3SSPL4K.mjs +8 -0
  368. package/dist/chunk-U6KNPJPR.mjs +2 -0
  369. package/dist/chunk-UALRNVSE.mjs +4 -0
  370. package/dist/chunk-UH4SIXTR.mjs +2 -0
  371. package/dist/chunk-UMHUSOPJ.mjs +2 -0
  372. package/dist/chunk-V3HXVQEM.mjs +2 -0
  373. package/dist/chunk-V5JTW2LH.mjs +27 -0
  374. package/dist/chunk-V5VXUJKG.mjs +2 -0
  375. package/dist/chunk-V6XZ4VIR.mjs +2 -0
  376. package/dist/chunk-VBXMADMP.mjs +2 -0
  377. package/dist/chunk-VNV55RUA.mjs +2 -0
  378. package/dist/chunk-VPD2PS35.mjs +2 -0
  379. package/dist/chunk-W3BGBJQW.mjs +2 -0
  380. package/dist/chunk-W4VKN3GF.mjs +7 -0
  381. package/dist/chunk-W5BXXPDJ.mjs +3 -0
  382. package/dist/chunk-W7XHE4CT.mjs +2 -0
  383. package/dist/chunk-XNROSH2T.mjs +4 -0
  384. package/dist/chunk-XUNHRCOG.mjs +6 -0
  385. package/dist/chunk-Y34NR5JL.mjs +2 -0
  386. package/dist/chunk-Y6RLRPG3.mjs +3 -0
  387. package/dist/chunk-YEY3RSFQ.mjs +2 -0
  388. package/dist/cli.mjs +2 -0
  389. package/dist/server.mjs +2 -0
  390. package/dist/worker.mjs +5 -0
  391. package/kit/charts.js +355 -0
  392. package/kit/code.js +164 -0
  393. package/kit/dialogs.js +157 -0
  394. package/kit/math.js +2004 -0
  395. package/kit/report.css +2932 -0
  396. package/kit/runtime.js +1782 -0
  397. package/kit/sheets.js +123 -0
  398. package/kit/state.js +217 -0
  399. package/kit/tables.js +1499 -0
  400. package/kit/tokens.js +29 -0
  401. package/kit/ui.js +658 -0
  402. package/package.json +41 -4
  403. package/release.json +25 -0
  404. package/sdk/column-widths.d.ts +56 -0
  405. package/sdk/doc-charts.d.ts +82 -0
  406. package/sdk/doc-code.d.ts +28 -0
  407. package/sdk/doc-dialogs.d.ts +4 -0
  408. package/sdk/doc-kit.d.ts +147 -0
  409. package/sdk/doc-math.d.ts +3 -0
  410. package/sdk/doc-sheets.d.ts +15 -0
  411. package/sdk/doc-state.d.ts +41 -0
  412. package/sdk/doc-tables.d.ts +24 -0
  413. package/sdk/doc-tokens.d.ts +22 -0
  414. package/sdk/index.d.ts +30 -0
  415. package/skill/SKILL.md +150 -0
  416. package/skill/agents/openai.yaml +5 -0
  417. package/skill/references/building-components.md +367 -0
  418. package/skill/references/example-report.html +356 -0
  419. package/skill/references/writing-html.md +187 -0
  420. package/skill/sdk/column-widths.d.ts +56 -0
  421. package/skill/sdk/doc-charts.d.ts +82 -0
  422. package/skill/sdk/doc-code.d.ts +28 -0
  423. package/skill/sdk/doc-dialogs.d.ts +4 -0
  424. package/skill/sdk/doc-kit.d.ts +147 -0
  425. package/skill/sdk/doc-math.d.ts +3 -0
  426. package/skill/sdk/doc-sheets.d.ts +15 -0
  427. package/skill/sdk/doc-state.d.ts +41 -0
  428. package/skill/sdk/doc-tables.d.ts +24 -0
  429. package/skill/sdk/doc-tokens.d.ts +22 -0
  430. package/skill/sdk/index.d.ts +30 -0
  431. package/starter/doc.html +21 -0
  432. package/starter/doc.json +5 -0
  433. package/vendor/d3.v7.9.0.min.js +2 -0
  434. package/vendor/katex/auto-render.min.js +1 -0
  435. package/vendor/katex/contrib/mhchem.min.js +1 -0
  436. package/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  437. package/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  438. package/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  439. package/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  440. package/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  441. package/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  442. package/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  443. package/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  444. package/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  445. package/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  446. package/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  447. package/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  448. package/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  449. package/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  450. package/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  451. package/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  452. package/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  453. package/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  454. package/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  455. package/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  456. package/vendor/katex/katex.min.css +1 -0
  457. package/vendor/katex/katex.min.js +1 -0
  458. package/vendor/pdfjs/LICENSE +177 -0
  459. package/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  460. package/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  461. package/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
  462. package/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  463. package/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  464. package/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
  465. package/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  466. package/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  467. package/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  468. package/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  469. package/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  470. package/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  471. package/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  472. package/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  473. package/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  474. package/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
  475. package/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  476. package/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  477. package/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
  478. package/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  479. package/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  480. package/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  481. package/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  482. package/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  483. package/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  484. package/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  485. package/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  486. package/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  487. package/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  488. package/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  489. package/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  490. package/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  491. package/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  492. package/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  493. package/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  494. package/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  495. package/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  496. package/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  497. package/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  498. package/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  499. package/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  500. package/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  501. package/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  502. package/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  503. package/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  504. package/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  505. package/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
  506. package/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
  507. package/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  508. package/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  509. package/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  510. package/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  511. package/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  512. package/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  513. package/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  514. package/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  515. package/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  516. package/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  517. package/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  518. package/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  519. package/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  520. package/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  521. package/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
  522. package/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
  523. package/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
  524. package/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  525. package/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  526. package/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
  527. package/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  528. package/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  529. package/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
  530. package/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
  531. package/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  532. package/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  533. package/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  534. package/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  535. package/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  536. package/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  537. package/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  538. package/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  539. package/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
  540. package/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
  541. package/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  542. package/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  543. package/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  544. package/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  545. package/vendor/pdfjs/cmaps/H.bcmap +0 -0
  546. package/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  547. package/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  548. package/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  549. package/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  550. package/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  551. package/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  552. package/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  553. package/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  554. package/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  555. package/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  556. package/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  557. package/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  558. package/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
  559. package/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
  560. package/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  561. package/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  562. package/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
  563. package/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  564. package/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  565. package/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
  566. package/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  567. package/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  568. package/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  569. package/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  570. package/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  571. package/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  572. package/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
  573. package/vendor/pdfjs/cmaps/LICENSE +36 -0
  574. package/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
  575. package/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
  576. package/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  577. package/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  578. package/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
  579. package/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  580. package/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  581. package/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  582. package/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  583. package/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  584. package/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  585. package/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  586. package/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  587. package/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  588. package/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  589. package/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  590. package/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  591. package/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  592. package/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  593. package/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  594. package/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  595. package/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  596. package/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  597. package/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  598. package/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  599. package/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  600. package/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  601. package/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  602. package/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  603. package/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  604. package/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  605. package/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  606. package/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  607. package/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  608. package/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  609. package/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  610. package/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  611. package/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  612. package/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  613. package/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  614. package/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  615. package/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  616. package/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  617. package/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  618. package/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  619. package/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  620. package/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  621. package/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  622. package/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  623. package/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  624. package/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  625. package/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  626. package/vendor/pdfjs/cmaps/V.bcmap +0 -0
  627. package/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  628. package/vendor/pdfjs/legacy/build/pdf.min.mjs +27 -0
  629. package/vendor/pdfjs/legacy/build/pdf.worker.min.mjs +27 -0
  630. package/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  631. package/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  632. package/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  633. package/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  634. package/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  635. package/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  636. package/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  637. package/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  638. package/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  639. package/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  640. package/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  641. package/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +363 -0
  642. package/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  643. package/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  644. package/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  645. package/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  646. package/vendor/types/@types/d3/LICENSE +21 -0
  647. package/vendor/types/@types/d3/index.d.ts +39 -0
  648. package/vendor/types/@types/d3/package.json +81 -0
  649. package/vendor/types/@types/d3-array/LICENSE +21 -0
  650. package/vendor/types/@types/d3-array/index.d.ts +1118 -0
  651. package/vendor/types/@types/d3-array/package.json +56 -0
  652. package/vendor/types/@types/d3-axis/LICENSE +21 -0
  653. package/vendor/types/@types/d3-axis/index.d.ts +293 -0
  654. package/vendor/types/@types/d3-axis/package.json +47 -0
  655. package/vendor/types/@types/d3-brush/LICENSE +21 -0
  656. package/vendor/types/@types/d3-brush/index.d.ts +255 -0
  657. package/vendor/types/@types/d3-brush/package.json +42 -0
  658. package/vendor/types/@types/d3-chord/LICENSE +21 -0
  659. package/vendor/types/@types/d3-chord/index.d.ts +471 -0
  660. package/vendor/types/@types/d3-chord/package.json +40 -0
  661. package/vendor/types/@types/d3-color/LICENSE +21 -0
  662. package/vendor/types/@types/d3-color/index.d.ts +669 -0
  663. package/vendor/types/@types/d3-color/package.json +55 -0
  664. package/vendor/types/@types/d3-contour/LICENSE +21 -0
  665. package/vendor/types/@types/d3-contour/index.d.ts +222 -0
  666. package/vendor/types/@types/d3-contour/package.json +38 -0
  667. package/vendor/types/@types/d3-delaunay/LICENSE +21 -0
  668. package/vendor/types/@types/d3-delaunay/index.d.ts +316 -0
  669. package/vendor/types/@types/d3-delaunay/package.json +30 -0
  670. package/vendor/types/@types/d3-dispatch/LICENSE +21 -0
  671. package/vendor/types/@types/d3-dispatch/index.d.ts +96 -0
  672. package/vendor/types/@types/d3-dispatch/package.json +51 -0
  673. package/vendor/types/@types/d3-drag/LICENSE +21 -0
  674. package/vendor/types/@types/d3-drag/index.d.ts +395 -0
  675. package/vendor/types/@types/d3-drag/package.json +42 -0
  676. package/vendor/types/@types/d3-dsv/LICENSE +21 -0
  677. package/vendor/types/@types/d3-dsv/index.d.ts +482 -0
  678. package/vendor/types/@types/d3-dsv/package.json +45 -0
  679. package/vendor/types/@types/d3-ease/LICENSE +21 -0
  680. package/vendor/types/@types/d3-ease/index.d.ts +316 -0
  681. package/vendor/types/@types/d3-ease/package.json +40 -0
  682. package/vendor/types/@types/d3-fetch/LICENSE +21 -0
  683. package/vendor/types/@types/d3-fetch/index.d.ts +282 -0
  684. package/vendor/types/@types/d3-fetch/package.json +37 -0
  685. package/vendor/types/@types/d3-force/LICENSE +21 -0
  686. package/vendor/types/@types/d3-force/index.d.ts +899 -0
  687. package/vendor/types/@types/d3-force/package.json +45 -0
  688. package/vendor/types/@types/d3-format/LICENSE +21 -0
  689. package/vendor/types/@types/d3-format/index.d.ts +337 -0
  690. package/vendor/types/@types/d3-format/package.json +45 -0
  691. package/vendor/types/@types/d3-geo/LICENSE +21 -0
  692. package/vendor/types/@types/d3-geo/index.d.ts +1371 -0
  693. package/vendor/types/@types/d3-geo/package.json +48 -0
  694. package/vendor/types/@types/d3-hierarchy/LICENSE +21 -0
  695. package/vendor/types/@types/d3-hierarchy/index.d.ts +928 -0
  696. package/vendor/types/@types/d3-hierarchy/package.json +50 -0
  697. package/vendor/types/@types/d3-interpolate/LICENSE +21 -0
  698. package/vendor/types/@types/d3-interpolate/index.d.ts +387 -0
  699. package/vendor/types/@types/d3-interpolate/package.json +47 -0
  700. package/vendor/types/@types/d3-path/LICENSE +21 -0
  701. package/vendor/types/@types/d3-path/index.d.ts +108 -0
  702. package/vendor/types/@types/d3-path/package.json +41 -0
  703. package/vendor/types/@types/d3-polygon/LICENSE +21 -0
  704. package/vendor/types/@types/d3-polygon/index.d.ts +41 -0
  705. package/vendor/types/@types/d3-polygon/package.json +40 -0
  706. package/vendor/types/@types/d3-quadtree/LICENSE +21 -0
  707. package/vendor/types/@types/d3-quadtree/index.d.ts +204 -0
  708. package/vendor/types/@types/d3-quadtree/package.json +45 -0
  709. package/vendor/types/@types/d3-random/LICENSE +21 -0
  710. package/vendor/types/@types/d3-random/index.d.ts +313 -0
  711. package/vendor/types/@types/d3-random/package.json +41 -0
  712. package/vendor/types/@types/d3-scale/LICENSE +21 -0
  713. package/vendor/types/@types/d3-scale/index.d.ts +2669 -0
  714. package/vendor/types/@types/d3-scale/package.json +53 -0
  715. package/vendor/types/@types/d3-scale-chromatic/LICENSE +21 -0
  716. package/vendor/types/@types/d3-scale-chromatic/index.d.ts +520 -0
  717. package/vendor/types/@types/d3-scale-chromatic/package.json +46 -0
  718. package/vendor/types/@types/d3-selection/LICENSE +21 -0
  719. package/vendor/types/@types/d3-selection/index.d.ts +1210 -0
  720. package/vendor/types/@types/d3-selection/package.json +56 -0
  721. package/vendor/types/@types/d3-shape/LICENSE +21 -0
  722. package/vendor/types/@types/d3-shape/index.d.ts +2792 -0
  723. package/vendor/types/@types/d3-shape/package.json +53 -0
  724. package/vendor/types/@types/d3-time/LICENSE +21 -0
  725. package/vendor/types/@types/d3-time/index.d.ts +697 -0
  726. package/vendor/types/@types/d3-time/package.json +46 -0
  727. package/vendor/types/@types/d3-time-format/LICENSE +21 -0
  728. package/vendor/types/@types/d3-time-format/index.d.ts +202 -0
  729. package/vendor/types/@types/d3-time-format/package.json +40 -0
  730. package/vendor/types/@types/d3-timer/LICENSE +21 -0
  731. package/vendor/types/@types/d3-timer/index.d.ts +68 -0
  732. package/vendor/types/@types/d3-timer/package.json +45 -0
  733. package/vendor/types/@types/d3-transition/LICENSE +21 -0
  734. package/vendor/types/@types/d3-transition/index.d.ts +664 -0
  735. package/vendor/types/@types/d3-transition/package.json +47 -0
  736. package/vendor/types/@types/d3-zoom/LICENSE +21 -0
  737. package/vendor/types/@types/d3-zoom/index.d.ts +611 -0
  738. package/vendor/types/@types/d3-zoom/package.json +48 -0
  739. package/vendor/types/@types/geojson/LICENSE +21 -0
  740. package/vendor/types/@types/geojson/index.d.ts +202 -0
  741. package/vendor/types/@types/geojson/package.json +46 -0
  742. package/vendor/typescript/LICENSE.txt +55 -0
  743. package/vendor/typescript/lib.decorators.d.ts +384 -0
  744. package/vendor/typescript/lib.decorators.legacy.d.ts +22 -0
  745. package/vendor/typescript/lib.dom.d.ts +39429 -0
  746. package/vendor/typescript/lib.dom.iterable.d.ts +571 -0
  747. package/vendor/typescript/lib.es2015.collection.d.ts +147 -0
  748. package/vendor/typescript/lib.es2015.core.d.ts +597 -0
  749. package/vendor/typescript/lib.es2015.d.ts +28 -0
  750. package/vendor/typescript/lib.es2015.generator.d.ts +77 -0
  751. package/vendor/typescript/lib.es2015.iterable.d.ts +605 -0
  752. package/vendor/typescript/lib.es2015.promise.d.ts +81 -0
  753. package/vendor/typescript/lib.es2015.proxy.d.ts +128 -0
  754. package/vendor/typescript/lib.es2015.reflect.d.ts +144 -0
  755. package/vendor/typescript/lib.es2015.symbol.d.ts +46 -0
  756. package/vendor/typescript/lib.es2015.symbol.wellknown.d.ts +326 -0
  757. package/vendor/typescript/lib.es2016.array.include.d.ts +116 -0
  758. package/vendor/typescript/lib.es2016.d.ts +21 -0
  759. package/vendor/typescript/lib.es2016.intl.d.ts +31 -0
  760. package/vendor/typescript/lib.es2017.arraybuffer.d.ts +21 -0
  761. package/vendor/typescript/lib.es2017.d.ts +26 -0
  762. package/vendor/typescript/lib.es2017.date.d.ts +31 -0
  763. package/vendor/typescript/lib.es2017.intl.d.ts +44 -0
  764. package/vendor/typescript/lib.es2017.object.d.ts +49 -0
  765. package/vendor/typescript/lib.es2017.sharedmemory.d.ts +135 -0
  766. package/vendor/typescript/lib.es2017.string.d.ts +45 -0
  767. package/vendor/typescript/lib.es2017.typedarrays.d.ts +53 -0
  768. package/vendor/typescript/lib.es2018.asyncgenerator.d.ts +77 -0
  769. package/vendor/typescript/lib.es2018.asynciterable.d.ts +53 -0
  770. package/vendor/typescript/lib.es2018.d.ts +24 -0
  771. package/vendor/typescript/lib.es2018.intl.d.ts +83 -0
  772. package/vendor/typescript/lib.es2018.promise.d.ts +30 -0
  773. package/vendor/typescript/lib.es2018.regexp.d.ts +37 -0
  774. package/vendor/typescript/lib.es2019.array.d.ts +79 -0
  775. package/vendor/typescript/lib.es2019.d.ts +24 -0
  776. package/vendor/typescript/lib.es2019.intl.d.ts +23 -0
  777. package/vendor/typescript/lib.es2019.object.d.ts +33 -0
  778. package/vendor/typescript/lib.es2019.string.d.ts +37 -0
  779. package/vendor/typescript/lib.es2019.symbol.d.ts +24 -0
  780. package/vendor/typescript/lib.es2020.bigint.d.ts +765 -0
  781. package/vendor/typescript/lib.es2020.d.ts +27 -0
  782. package/vendor/typescript/lib.es2020.date.d.ts +42 -0
  783. package/vendor/typescript/lib.es2020.intl.d.ts +474 -0
  784. package/vendor/typescript/lib.es2020.number.d.ts +28 -0
  785. package/vendor/typescript/lib.es2020.promise.d.ts +47 -0
  786. package/vendor/typescript/lib.es2020.sharedmemory.d.ts +99 -0
  787. package/vendor/typescript/lib.es2020.string.d.ts +44 -0
  788. package/vendor/typescript/lib.es2020.symbol.wellknown.d.ts +41 -0
  789. package/vendor/typescript/lib.es2021.d.ts +23 -0
  790. package/vendor/typescript/lib.es2021.intl.d.ts +166 -0
  791. package/vendor/typescript/lib.es2021.promise.d.ts +48 -0
  792. package/vendor/typescript/lib.es2021.string.d.ts +33 -0
  793. package/vendor/typescript/lib.es2021.weakref.d.ts +78 -0
  794. package/vendor/typescript/lib.es2022.array.d.ts +121 -0
  795. package/vendor/typescript/lib.es2022.d.ts +25 -0
  796. package/vendor/typescript/lib.es2022.error.d.ts +75 -0
  797. package/vendor/typescript/lib.es2022.intl.d.ts +145 -0
  798. package/vendor/typescript/lib.es2022.object.d.ts +26 -0
  799. package/vendor/typescript/lib.es2022.regexp.d.ts +39 -0
  800. package/vendor/typescript/lib.es2022.string.d.ts +25 -0
  801. package/vendor/typescript/lib.es5.d.ts +4601 -0
  802. package/vendor/typescript/package.json +4 -0
  803. package/vendor/typescript/typescript.js +446 -0
  804. package/web/assets/index-Bh74DfsV.css +1 -0
  805. package/web/assets/index-UW0RyFFt.js +13 -0
  806. package/web/index.html +14 -0
@@ -0,0 +1,211 @@
1
+ import { escapeText } from "../../../../shared/escape.mjs";
2
+ import { heldIn, newContainer, newHost, pastedLines } from "../../core.mjs";
3
+ import { pageBuild } from "../../../components/builders.mjs";
4
+ import { BLOCK_TYPES, COPIED_AS_ITSELF, HOLDS_ONE, TEXT_TYPES, TOGGLES, UNSAID, accepts, clipboardHooks, clipboardOf, isLead, sizeValue } from "../../../components/registry.mjs";
5
+ import { BLOCK_COLORS } from "../../../components/colors.mjs";
6
+ import { MAX_CELL_HTML } from "../../../components/table/index.mjs";
7
+ import { copied, copyOf, reportOf } from "./describe.mjs";
8
+ import { imageSource, kindOfBlock, webPage } from "./rules.mjs";
9
+
10
+ // Described blocks (describe.mjs and selection.mjs, and import/to-blocks.mjs for other programs' content) made (build),
11
+ // and the clipboard's own data, which is not trusted, checked first (parse, checkBlocks): the
12
+ // structure against accepts(), at most 500 blocks, and every piece of inline HTML goes through
13
+ // pastedLines() again (the format bar's marks only). Another program's content is not checked
14
+ // that way: to-blocks.mjs makes blocks that fit (rules.mjs holds what both go by). What a block must
15
+ // be and how it is made again is its definition's (`clipboard.check`, `build`, with a text block
16
+ // and a filled container the engine's own), and it is written like any other made on the page.
17
+ // Besides the blocks the page makes from its menus: a formula block and a table (their data), and an
18
+ // image or an embed of an address, filled once on the page (PASTED_SOURCE: the clipboard fetches
19
+ // the picture, checks the page).
20
+
21
+ const COPIES = COPIED_AS_ITSELF; // the cards, a table, a row of columns
22
+ const LIMIT = 500; // blocks in one paste, containers' blocks counted
23
+ /** Where an image or embed pasted keeps its address until the clipboard fills it. */
24
+ export const PASTED_SOURCE = "data-ge-paste-src";
25
+
26
+ const string = (value, max = 1e6) => typeof value === "string" && value.length <= max;
27
+ // The blocks a description holds, `blocks` or where a definition says (`holds`), each asked whatever
28
+ // the block's type: the clipboard's data is not trusted to say only what its type does.
29
+ const HOLDS = clipboardHooks("holds");
30
+ const heldBy = (block) => [...(block.blocks ?? []), ...HOLDS.flatMap((holds) => holds(block))];
31
+ // A block of a type that wants what `preload` brings, as a description says it.
32
+ const WANTING = Object.keys(BLOCK_TYPES).filter((type) => BLOCK_TYPES[type].preload).map((type) => `"type":"${type}"`);
33
+
34
+ /**
35
+ * Described blocks checked, or null when any is not one the page can make where it stands (`box`:
36
+ * the kind of box they go in, null for the top).
37
+ */
38
+ export function checkBlocks(blocks) {
39
+ let count = 0;
40
+ const valid = (block, box = null) => {
41
+ if (!block || typeof block !== "object" || ++count > LIMIT) return false;
42
+ const { type } = block;
43
+ const clip = clipboardOf(type);
44
+ if (box && !accepts(box, kindOfBlock(block)) && clip.pastedIn !== box) return false;
45
+ if (block.color !== undefined && (typeof block.color !== "string" || !block.color.split(" ").every((name) => BLOCK_COLORS.includes(name)))) return false;
46
+ if (TEXT_TYPES.has(type)) return string(block.html);
47
+ if (type === "copy") return COPIES.has(block.kind) && Number.isInteger(block.unit) && [block.report, block.text, block.html].every((value) => typeof value === "string")
48
+ && (block.data === undefined || (Boolean(clipboardOf(block.data?.type).data) && valid(block.data)));
49
+ return Boolean(clip.check?.(block, {
50
+ box, string, valid, isLead, imageSource, webPage, sizeValue,
51
+ // The blocks of a container, as the box it is takes them; `direction`, the test of a direction, where it may fix one.
52
+ container: (held, direction) => Array.isArray(held.blocks) && (held.direction === undefined || Boolean(direction?.(held.direction))) && held.blocks.every((inner) => valid(inner, BLOCK_TYPES[type].box)),
53
+ }));
54
+ };
55
+ return Array.isArray(blocks) && blocks.length > 0 && blocks.every((block) => valid(block)) ? blocks : null;
56
+ }
57
+
58
+ /**
59
+ * The first copy among described blocks, in boxes too, that cannot be made on `doc`: its unit is not
60
+ * on the page (another report's, or gone since) and it carries no data to make a new one of, or null.
61
+ * With no `doc` (null: a cut takes them off the page) a copy is made only of its data.
62
+ */
63
+ export function unmadeCopy(doc, blocks) {
64
+ for (const block of blocks) {
65
+ // A copy made of its data is made of what that holds too (an instance's slots: a card in one).
66
+ const found = block.type === "copy" ? ((doc && copied(doc, block)) ? null : block.data ? unmadeCopy(doc, heldBy(block.data)) : block) : unmadeCopy(doc, heldBy(block));
67
+ if (found) return found;
68
+ }
69
+ return null;
70
+ }
71
+
72
+ /** Described blocks from the clipboard's own data (its MIME type): checked, or null when it is not such data. */
73
+ export function parse(data) {
74
+ let value;
75
+ try {
76
+ value = JSON.parse(data);
77
+ } catch {
78
+ return null;
79
+ }
80
+ return value?.v === 1 ? checkBlocks(value.blocks) : null;
81
+ }
82
+
83
+ /**
84
+ * Cells copied from a table of the page (components/table CELLS_MIME: { v: 1, cells }) as rows of
85
+ * their inline HTML, or null when it is no such data.
86
+ */
87
+ export function parseCells(data) {
88
+ let value;
89
+ try {
90
+ value = JSON.parse(data);
91
+ } catch {
92
+ return null;
93
+ }
94
+ const rows = value?.v === 1 && Array.isArray(value.cells) ? value.cells : null;
95
+ return rows?.length > 0 && rows.every((row) => Array.isArray(row) && row.length > 0 && row.every((cell) => string(cell, MAX_CELL_HTML))) ? rows : null;
96
+ }
97
+
98
+ /**
99
+ * Text copied in one block from the clipboard's own data (its inline HTML: selection.mjs
100
+ * selectedHtml), or null when it holds none. Not trusted either: pastedLines() makes of it the format
101
+ * bar's marks alone, as of any inline HTML.
102
+ */
103
+ export function parseText(data) {
104
+ let value;
105
+ try {
106
+ value = JSON.parse(data);
107
+ } catch {
108
+ return null;
109
+ }
110
+ return value?.v === 1 && string(value.html) ? value.html : null;
111
+ }
112
+
113
+ /**
114
+ * Inline HTML as nodes of the format bar's marks only, its lines with <br> between them; formulas
115
+ * of other pages made the page's own by `formula(tex)` where given, links shown with their icon by
116
+ * `mention(parts)` (pastedLines).
117
+ */
118
+ function inline(doc, html, { formula = null, mention = null } = {}) {
119
+ return pastedLines(doc, html, { formula, mention }).flatMap((line, index) => (index > 0 ? [doc.createElement("br"), ...line] : line));
120
+ }
121
+
122
+
123
+ // A block's colors (`color`: their classes, one of each family), those its kind takes (TOGGLES).
124
+ function colored(element, block) {
125
+ for (const name of block.color?.split(" ") ?? []) if (TOGGLES[element.getAttribute("data-ge-unit-kind")]?.includes(name)) element.classList.add(name);
126
+ return element;
127
+ }
128
+
129
+ /**
130
+ * A new block of the page from a described one (checked). `formula(tex)`: an inline formula chip of
131
+ * the page (none: their TeX as text); `mention(parts)`: a link shown with its icon (none: a link of
132
+ * its title). What each type adds is its definition's: `clipboard.build`, or the `build` of its
133
+ * page.mjs (builders.mjs); a container is filled with its blocks, a text type with its inline HTML.
134
+ */
135
+ export function build(doc, block, options = {}) {
136
+ if (block.type === "copy") {
137
+ // copied() found its unit: a copy of it, written by the commit as one (core.mjs nodeOf).
138
+ const unit = copied(doc, block);
139
+ if (unit) {
140
+ const copy = copyOf(unit, { editable: true });
141
+ copy.setAttribute("data-ge-new", "");
142
+ copy.setAttribute("data-ge-type", "copy");
143
+ copy.setAttribute("data-ge-copy", String(block.unit));
144
+ copy.setAttribute("data-ge-unit-kind", block.kind);
145
+ return copy;
146
+ }
147
+ // Elsewhere: a new one of its data (pasteBlocks checked it has some), the key a chart reads a
148
+ // table by kept within the report it was copied from (chart-keys.mjs), no other report's.
149
+ const data = { ...block.data };
150
+ if (block.report !== reportOf(doc)) delete data.chart;
151
+ return build(doc, data, options);
152
+ }
153
+ const what = {
154
+ doc,
155
+ block,
156
+ host: (type = block.type) => newHost(doc, type),
157
+ box: (type = block.type) => newContainer(doc, type),
158
+ inline: (html) => inline(doc, html, options),
159
+ inner: (blocks) => blocks.map((each) => build(doc, each, options)),
160
+ one: (each) => build(doc, each, options),
161
+ colored: (element) => colored(element, block),
162
+ pending(figure, src) {
163
+ figure.setAttribute(PASTED_SOURCE, src);
164
+ return figure;
165
+ },
166
+ };
167
+ const made = clipboardOf(block.type).build ?? pageBuild(block.type);
168
+ if (made) return made(what);
169
+ const { box, leaf } = BLOCK_TYPES[block.type] ?? {};
170
+ const element = box ? what.box() : what.host();
171
+ element.append(...(box ? what.inner(block.blocks) : what.inline(block.html)));
172
+ // A box that always holds a block (holdsOne: a highlight block, a callout) described with none (one
173
+ // the file has empty, copied or cut) holds an empty block of its `leaf` (a paragraph, as a new one
174
+ // made from "/" holds), after its lead (a highlight block's icon), as one a change empties does
175
+ // (core.mjs tidyEmptied) and a disclosure's content made again (details/page.mjs): a block to write
176
+ // in, and one the commit writes, where a box of no blocks is written by none (core.mjs nodeOf) and
177
+ // was gone at the next reload.
178
+ if (leaf && HOLDS_ONE.has(box) && heldIn(element).length === 0) element.append(what.host(leaf));
179
+ return what.colored(element);
180
+ }
181
+
182
+ // What a block copied as itself says where it carries no data (a card, a row of columns): the words
183
+ // of its markup on one line, UNSAID left out; no line when it says nothing.
184
+ function wordsOf({ html }) {
185
+ const template = globalThis.document.createElement("template");
186
+ template.innerHTML = html;
187
+ for (const node of template.content.querySelectorAll(UNSAID)) node.remove();
188
+ const words = template.content.textContent.replace(/\s+/g, " ").trim();
189
+ return words ? [escapeText(words)] : [];
190
+ }
191
+
192
+ /**
193
+ * The text of described blocks as inline HTML of the format bar's marks, one `<p>` for each line of
194
+ * it (a block's text, an item's, a table's cell, a line of code, a tab's name, what a block copied
195
+ * as itself says), for a place that cannot split (a table's cell, a title): pastedLines() reads it
196
+ * as it reads any inline HTML.
197
+ */
198
+ export function joinedHtml(blocks) {
199
+ const lines = (list) => list.flatMap((block) => {
200
+ if (block.type === "copy") return block.data ? lines([block.data]) : wordsOf(block);
201
+ const text = clipboardOf(block.type).text;
202
+ return text ? text(block, lines) : block.blocks ? lines(block.blocks) : [block.html];
203
+ });
204
+ return lines(blocks).map((line) => `<p>${line}</p>`).join("");
205
+ }
206
+
207
+ /** Whether described blocks hold formulas (inline ones, or a block that wants what `preload` brings), which want KaTeX on the page. */
208
+ export function holdsFormulas(blocks) {
209
+ const json = JSON.stringify(blocks);
210
+ return json.includes("doc-math-inline") || WANTING.some((type) => json.includes(type));
211
+ }
@@ -0,0 +1,58 @@
1
+ import { CHART_DATA, CHART_SOURCE, nextChartKey } from "../../../../shared/table-chart.mjs";
2
+ import { COPY_KEYS } from "../../../components/figure/index.mjs";
3
+
4
+ // The keys of charts drawn from tables in what a paste made (docs/editor.md, "Copying blocks"): a
5
+ // chart drawn from a table names the table by a key (src/shared/table-chart.mjs), and what a paste
6
+ // makes of a card or a table carries its original's: a copy of it (data-ge-type="copy"), or a table
7
+ // made anew of its data (components/table tableData `chart`: one cut, one whose original is gone or
8
+ // changed since the copy). The rules, by key:
9
+ // - a card and a table pasted together are a pair of their own: both take a new key, the first of
10
+ // t1, t2 … the page does not hold, so that two pairs never cross;
11
+ // - a table pasted without its card keeps its key while no table on the page carries it (a cut
12
+ // table put back, one whose original was deleted: the card draws it again); otherwise it is a
13
+ // table alone, its key taken off (a chart draws the first table of its key, which could be it);
14
+ // - a card pasted alone keeps its key: it draws the same table as its original, both drawing it.
15
+ // A copy's new keys ride on it (COPY_KEYS) to the server, which writes them into the copy's source
16
+ // (core.mjs nodeOf: { copy, keys }; source/text.mjs copiedSource); a table made anew is written with
17
+ // its own. The commit makes sure of both against the file as it is then (source/chart-keys.mjs) and
18
+ // says what it changed (page/commit.mjs).
19
+
20
+ // What carries a key in `root` and in what its templates hold.
21
+ const carriers = (root) => [
22
+ ...(root.matches?.(`[${CHART_DATA}], [${CHART_SOURCE}]`) ? [root] : []),
23
+ ...root.querySelectorAll(`[${CHART_DATA}], [${CHART_SOURCE}]`),
24
+ ...[...root.querySelectorAll("template")].flatMap((template) => carriers(template.content)),
25
+ ];
26
+ const keysOf = (node) => [node.getAttribute(CHART_DATA), node.getAttribute(CHART_SOURCE)].filter((key) => key !== null);
27
+
28
+ /** The blocks a paste made (`made`, not on the page yet), the keys of their cards and tables made their own. */
29
+ export function relinkCopies(doc, made) {
30
+ const inMade = made.flatMap(carriers);
31
+ const hosts = inMade.filter((node) => node.hasAttribute(CHART_DATA));
32
+ const frames = inMade.filter((node) => node.hasAttribute(CHART_SOURCE));
33
+ if (frames.length === 0) return;
34
+ const onPage = carriers(doc);
35
+ const taken = new Set([...onPage, ...inMade].flatMap(keysOf));
36
+ const renamed = new Map(); // a key -> its new value, null: taken off a table
37
+ for (const key of new Set(frames.map((frame) => frame.getAttribute(CHART_SOURCE)))) {
38
+ if (hosts.some((host) => host.getAttribute(CHART_DATA) === key)) {
39
+ const next = nextChartKey(taken);
40
+ taken.add(next);
41
+ renamed.set(key, next);
42
+ } else if (onPage.some((node) => node.getAttribute(CHART_SOURCE) === key)) renamed.set(key, null);
43
+ }
44
+ const sent = new Map(); // a copy -> its keys { old: new | null }
45
+ for (const [name, nodes] of [[CHART_DATA, hosts], [CHART_SOURCE, frames]]) {
46
+ for (const node of nodes) {
47
+ const key = node.getAttribute(name);
48
+ if (!renamed.has(key)) continue;
49
+ const next = renamed.get(key);
50
+ if (next === null && name === CHART_DATA) continue; // a card keeps the key of a table pasted alone
51
+ if (next === null) node.removeAttribute(name);
52
+ else node.setAttribute(name, next);
53
+ const copy = node.closest('[data-ge-type="copy"]');
54
+ if (copy) (sent.get(copy) ?? sent.set(copy, {}).get(copy))[key] = next;
55
+ }
56
+ }
57
+ for (const [copy, keys] of sent) copy.setAttribute(COPY_KEYS, JSON.stringify(keys));
58
+ }
@@ -0,0 +1,124 @@
1
+ import { isHost, nestedBlocks, serializeInner, unitsOf } from "../../core.mjs";
2
+ import { BLOCK_TYPES, COPIED_AS_ITSELF, COPY_KEEPS, TEXT_TYPES, askClipboard, clipboardOf, sizeValue, unitClipboard } from "../../../components/registry.mjs";
3
+ import { BLOCK_COLORS } from "../../../components/colors.mjs";
4
+ import { containerType, typeOf } from "../../convert.mjs";
5
+ import { pageOfType, pageOfUnit } from "../../page-objects.mjs";
6
+ import { referencedIds } from "../../../../shared/copy-ids.mjs";
7
+
8
+ // Selected blocks as the clipboard's own description (docs/editor.md, "Copying blocks"): each
9
+ // block's type and inline HTML, its color, and what lists, quotes, panels, disclosures, sections and
10
+ // tabs areas hold (notion-lite copies any block). Blocks the page can make are copied as what they
11
+ // are, each block saying what it carries (`clipboard.describe` of the unit it is: there is no record
12
+ // to copy as notion-lite's, a block being an element), a text block its text and color, a list or a
13
+ // quote what it holds. A card (a chart card, an image, a file, a bookmark, an embed), a table or a
14
+ // row of columns is copied as itself (a "copy" of its unit; a row's cards and tables can only be
15
+ // copied with it): the page shows a copy of the one on
16
+ // the page (what the kit drew taken off, so that it draws again) and the file gets a copy of the
17
+ // block's own source, its ids taken out (source/commit.mjs, { copy }), within the page it was copied
18
+ // from (the clipboard names the report and the block). Elsewhere a table pastes as a new one from its
19
+ // cells (`data`). A report's own widget is bound to the report's script or its ids, and is the
20
+ // Agent's to copy.
21
+
22
+ export const MIME = "application/x-gallery-blocks";
23
+ // Its name before the product's rename (2026-10-26): a copy writes the same data under it too, so
24
+ // that a page of the old version still open in another tab pastes it as blocks, and a paste reads it
25
+ // when the new one is not there (a copy made on such a page).
26
+ export const OLD_MIME = "application/x-report-studio-blocks";
27
+ /** The clipboard's own data in `data` (a DataTransfer): under MIME, else under OLD_MIME; "" when neither. */
28
+ export const ownData = (data) => data.getData(MIME) || data.getData(OLD_MIME);
29
+ const COPIES = COPIED_AS_ITSELF; // the cards, a table, a row of columns
30
+ export const reportOf = (doc) => doc.querySelector(".doc-page")?.dataset.docId ?? null;
31
+
32
+ // The editor marks: data-ge-*, and data-rs-*, their name before 2026-10-28, which a file may keep.
33
+ const EDITOR_MARK = /^data-(?:ge|rs)-/;
34
+
35
+ /**
36
+ * A copy of a card or a table on the page, as the kit would start it anew: its
37
+ * drawing, the kit's marks, the editor's marks, its block id and ids taken out. `editable`: its
38
+ * fields stay editable (a copy pasted on the page, whose fields the commit takes in as text blocks),
39
+ * its tables keep their tools (COPY_KEEPS: the file gets the same source) and the ids it names itself (an
40
+ * SVG's markers: src/shared/copy-ids.mjs) stay, to be given a prefix of its own (ids.mjs prefixCopies);
41
+ * `named`: those ids alone stay, a copy's markup to be made anew somewhere else.
42
+ */
43
+ export function copyOf(element, { editable = false, named: keepsNamed = editable } = {}) {
44
+ const clone = element.cloneNode(true);
45
+ clone.querySelectorAll("[data-doc-dev]").forEach((node) => node.remove());
46
+ globalThis.DocKit?.dehydrate(clone);
47
+ const all = [clone, ...clone.querySelectorAll("*")];
48
+ const named = keepsNamed ? referencedIds(all.flatMap((node) => [...node.attributes])) : new Set();
49
+ for (const node of all) {
50
+ const marks = [...node.attributes].filter(({ name, value }) => (EDITOR_MARK.test(name) && !(editable && COPY_KEEPS.has(name))) || name === "data-block-id" || (name === "id" && !named.has(value)));
51
+ if (!editable && marks.some(({ name }) => EDITOR_MARK.test(name))) node.removeAttribute("contenteditable");
52
+ marks.forEach(({ name }) => node.removeAttribute(name));
53
+ }
54
+ return clone;
55
+ }
56
+
57
+ /**
58
+ * The unit on the page a described copy is of, or null when it is gone (or of another page). One whose
59
+ * description carries its markup (`data.html`: an instance of a package) is that unit only while the
60
+ * unit holds that markup: what its component wrote may differ where its words do not (a row marked
61
+ * done), and the file's copy of the unit would hold the file's, not what was copied.
62
+ */
63
+ export function copied(doc, block) {
64
+ if (block.report !== reportOf(doc)) return null;
65
+ const unit = doc.querySelector(`main [data-ge-unit="${block.unit}"]`);
66
+ if (!unit || unit.getAttribute("data-ge-unit-kind") !== block.kind) return null;
67
+ // One whose unit's copy cannot stand for it (`copiesAsItself`: an instance with slots) is made of
68
+ // what it carries, here too: that copy would hold blocks the file writes whole, with ids no answer
69
+ // of a commit gives the page (source/apply.mjs restoredText names the block alone).
70
+ if (pageOfUnit(unit)?.copiesAsItself?.(unit) === false) return null;
71
+ const copy = copyOf(unit);
72
+ return (typeof block.data?.html === "string" ? copy.outerHTML === block.html : copy.textContent === block.text) ? unit : null;
73
+ }
74
+
75
+ /** A block's colors (their classes, space-separated), or null. */
76
+ export const colorOf = (node) => BLOCK_COLORS.filter((name) => node.classList.contains(name)).join(" ") || null;
77
+
78
+ /** The type a text block is copied as: its own, the type of the text blocks of what wraps it (a quote's paragraph), or null (code, whose text is no text block's). */
79
+ export function copiedType(host) {
80
+ const type = typeOf(host);
81
+ const own = BLOCK_TYPES[type]?.wraps ? BLOCK_TYPES[type].leaf : type;
82
+ return TEXT_TYPES.has(own) ? own : null;
83
+ }
84
+
85
+ // An element's words on one line.
86
+ const plain = (node) => (node?.textContent ?? "").replace(/\s+/g, " ").trim();
87
+
88
+ /** What copies of a block the page could make: { type, html, text, blocks, lists }, or null. */
89
+ export function describe(node) {
90
+ const kind = node.getAttribute("data-ge-unit-kind");
91
+ // What an element holds: its units. One that is no box has none (a list of a class of its own:
92
+ // source/units.mjs boxKind), and what stands in it is read as it stands.
93
+ const holding = (box) => {
94
+ if (!box) return null;
95
+ const units = unitsOf(box);
96
+ const blocks = (units.length > 0 || box.hasAttribute("data-ge-box") ? units : [...box.children]).map(describe);
97
+ return blocks.every(Boolean) ? blocks : null;
98
+ };
99
+ // Copied as itself. One whose unit's copy cannot stand for it (`copiesAsItself` of its page object:
100
+ // an instance with slots, whose blocks that copy would write whole) is copied by what it carries
101
+ // alone (`data`, those blocks described apart), and is no copy where it carries nothing (a block in a
102
+ // slot the page cannot make).
103
+ if (COPIES.has(kind)) {
104
+ if (!node.hasAttribute("data-ge-unit") || node.hasAttribute("data-ge-new")) return null; // not in the file yet
105
+ const copy = copyOf(node);
106
+ const data = unitClipboard(node).data?.(node, { serializeInner, copyOf, clipboardOf, copiedType, page: pageOfType, holding });
107
+ if (!data && pageOfUnit(node)?.copiesAsItself?.(node) === false) return null;
108
+ return { type: "copy", kind, unit: Number(node.getAttribute("data-ge-unit")), report: reportOf(node.ownerDocument), text: copy.textContent, html: copy.outerHTML, ...(data ? { data } : {}) };
109
+ }
110
+ const what = { page: pageOfType, holding, describe, copiedType, isHost, nestedBlocks, serializeInner, plain, colorOf, sizeValue };
111
+ const block = askClipboard("describe", node, what);
112
+ if (block !== undefined) return block;
113
+ // A text block, of any type: as what it is (a quote's paragraph a paragraph), with its color; a
114
+ // block of code is none.
115
+ if (isHost(node)) {
116
+ const type = copiedType(node);
117
+ const color = colorOf(node);
118
+ return type ? { type, html: serializeInner(node), ...(color ? { color } : {}) } : null;
119
+ }
120
+ // A list or a quote, as the blocks it holds.
121
+ const type = containerType(node);
122
+ const blocks = type ? holding(node) : null;
123
+ return blocks ? { type, blocks } : null;
124
+ }
@@ -0,0 +1,167 @@
1
+ import { clipboardOf } from "../../../components/registry.mjs";
2
+ import { isMention, shownWords } from "../../core.mjs";
3
+ import { COLORS } from "../../../../shared/colors.mjs";
4
+ import { ZWSP } from "../../../../shared/inline-spacing.mjs";
5
+ import { addressOn, decoded, elsewhere, fromFile, fullAddress, pageAddress } from "../../../../shared/page-address.mjs";
6
+ import { heldList } from "../../links/pages.mjs";
7
+ import { groupItems } from "./rules.mjs";
8
+ import { WRITERS, heldToWords } from "./writers.mjs";
9
+
10
+ // Copied blocks for other programs (notion-lite serialize.js, after Notion 210528 / 389867: the
11
+ // Markdown its export writes, and HTML that reads as the same), each block by the writer of its kind
12
+ // (writers.mjs). Pasted back here without the clipboard's own data, both read as the same blocks
13
+ // (import/), but for a callout: its Markdown a highlight block, its HTML a group of its blocks.
14
+ // text/plain Markdown: # … #### headings, "- " / "1. " / "- [ ] " items (an item's lists 4 spaces
15
+ // in), "> " quotes, <aside> callouts (a highlight block and a callout: its emoji, a highlight
16
+ // block's, and the text of its first block, its other blocks),
17
+ // ``` code (its language), $$ formula blocks (an empty one: none), | tables |, ---, a disclosure as an item
18
+ // holding its blocks, a tabs area as each tab's name and blocks (a row of columns, copied
19
+ // as itself, as its text); **bold** *italic* ~~strike~~ `code` $formula$, links as their text
20
+ // (Notion's plain text); a list's items one line apart, other blocks an empty line; a
21
+ // line that would read as a tag or a fence escaped (writers.mjs heldToWords).
22
+ // text/html plain markup: p, a div of a highlight block's or a callout's blocks, h1–h4, ul / ol / li ("[x] " / "[ ] " before a to-do's text), blockquote,
23
+ // details, pre > code.language-x, hr, table, a formula block as $$ … $$ (an empty one:
24
+ // nothing, as in Markdown) and an inline one
25
+ // as $ … $ (Notion's export), colors as the kit's classes with their color in a style.
26
+ // List items copied on their own (each carrying its list's kind) are items of a list of that kind in
27
+ // both. Text selected in one block (textFormats) is its inline HTML for other programs, and as plain
28
+ // text its words alone (notion-lite's inlinePlain: no list's marker, no Markdown).
29
+
30
+ // The kit's light colors (a background on words its words' fill), for programs without its styles (src/shared/colors.mjs).
31
+ const INK = Object.fromEntries(COLORS.flatMap(({ name, text, mark }) => [[`doc-text-${name}`, `color:${text[0]}`], [`doc-highlight-${name}`, `background-color:${mark[0]}`]]));
32
+ const FORMULA = /^\s*\\\(([\s\S]*)\\\)\s*$/;
33
+
34
+ // Inline HTML (the format bar's marks: serializeInner's) as nodes to walk, a link shown with its icon
35
+ // by the words the page shows for it (the file's chip holds what they were when it was made).
36
+ function nodesOf(html) {
37
+ const template = globalThis.document.createElement("template");
38
+ template.innerHTML = html ?? "";
39
+ for (const chip of template.content.querySelectorAll("a[href]")) {
40
+ const words = isMention(chip) && chip.lastChild?.nodeType === 3 ? shownWords(globalThis.document, chip.getAttribute("href")) : null;
41
+ if (words) chip.lastChild.data = words;
42
+ }
43
+ return template.content;
44
+ }
45
+
46
+ // Inline HTML as Markdown (links as their text alone).
47
+ function markdown(html) {
48
+ const walk = (node) => [...node.childNodes].map((child) => {
49
+ if (child.nodeType === 3) return child.data.replace(/\u00a0/g, " ");
50
+ if (child.nodeType !== 1) return "";
51
+ if (child.matches(".doc-math-inline")) {
52
+ const tex = FORMULA.exec(child.textContent)?.[1];
53
+ return tex !== undefined ? `$${tex.trim()}$` : child.textContent;
54
+ }
55
+ const inner = walk(child);
56
+ if (!inner.trim() && child.localName !== "br") return inner;
57
+ switch (child.localName) {
58
+ case "br": return "\n";
59
+ case "ul": case "ol": // a table cell's list: its items one to a line
60
+ return `\n${[...child.children].map((item, index) => `${child.localName === "ol" ? `${index + 1}. ` : "- "}${walk(item).trim()}`).join("\n")}\n`;
61
+ case "strong": return `**${inner}**`;
62
+ case "em": return `*${inner}*`;
63
+ case "s": return `~~${inner}~~`;
64
+ case "code": return `\`${inner}\``;
65
+ default: return inner;
66
+ }
67
+ }).join("");
68
+ return heldToWords(walk(nodesOf(html)));
69
+ }
70
+
71
+ // The address that opens a link's document, or a block of this page, from another program, on this
72
+ // server, by the page's link as the list held has it (links/pages.mjs), or null: an address on another
73
+ // server the list does not hold may be another program's, which stays as it is written.
74
+ export function wholeAddress(href) {
75
+ const here = pageAddress(globalThis.location?.href);
76
+ if (!here) return null;
77
+ const { origin } = globalThis.location;
78
+ const { named } = heldList();
79
+ const address = fromFile(href, here.slug, origin);
80
+ if (href.startsWith("#")) {
81
+ const block = decoded(href.slice(1));
82
+ return block && globalThis.document.querySelector(`[data-block-id="${CSS.escape(block)}"]`) ? fullAddress(origin, { slug: here.slug, block }, named) : null;
83
+ }
84
+ const place = addressOn(address, named, origin) ?? (elsewhere(address, origin) ? null : pageAddress(address));
85
+ return place ? fullAddress(origin, place, named) : null;
86
+ }
87
+
88
+ // Inline HTML for other programs: formulas as $ … $, colors with their style, a link shown with its
89
+ // icon as a link of its title (its icon a file of the report's folder, nowhere else), a link to a
90
+ // document or a block by its whole address.
91
+ function portable(html) {
92
+ const root = nodesOf(html);
93
+ for (const link of root.querySelectorAll("a[href]")) {
94
+ const address = wholeAddress(link.getAttribute("href"));
95
+ if (address) link.setAttribute("href", address);
96
+ }
97
+ for (const chip of root.querySelectorAll("a.doc-link-mention")) {
98
+ chip.querySelector(".doc-link-mention-icon")?.remove();
99
+ chip.removeAttribute("class");
100
+ }
101
+ for (const chip of root.querySelectorAll(".doc-math-inline")) {
102
+ const tex = FORMULA.exec(chip.textContent)?.[1];
103
+ if (tex !== undefined) chip.replaceWith(`$${tex.trim()}$`);
104
+ }
105
+ for (const span of root.querySelectorAll("span[class]")) {
106
+ const style = [...span.classList].map((name) => INK[name]).filter(Boolean).join(";");
107
+ if (style) span.setAttribute("style", style);
108
+ }
109
+ const holder = globalThis.document.createElement("div");
110
+ holder.append(root);
111
+ return holder.innerHTML;
112
+ }
113
+
114
+ const isList = (block) => WRITERS[clipboardOf(block.type).kind].list;
115
+
116
+ function mdLines(blocks) {
117
+ const lines = [];
118
+ blocks.forEach((block, index) => {
119
+ if (WRITERS[clipboardOf(block.type).kind].silent?.(block)) return;
120
+ if (index > 0 && !(isList(block) && isList(blocks[index - 1]))) lines.push("");
121
+ lines.push(...mdBlock(block));
122
+ });
123
+ return lines;
124
+ }
125
+
126
+ function mdBlock(block) {
127
+ if (block.type === "copy") return block.data ? mdBlock(block.data) : [block.text.replace(/\s+/g, " ").trim()]; // a table as its data
128
+ const clip = clipboardOf(block.type);
129
+ return WRITERS[clip.kind].copied(block, how, clip);
130
+ }
131
+
132
+ function htmlBlock(block) {
133
+ if (block.type === "copy") return block.data ? htmlBlock(block.data) : block.html; // a card: its kit markup
134
+ const clip = clipboardOf(block.type);
135
+ return WRITERS[clip.html ?? clip.kind].html(block, how, clip);
136
+ }
137
+
138
+ // What the writers call back (writers.mjs).
139
+ const how = { inline: markdown, portable, block: mdBlock, lines: mdLines, html: htmlBlock };
140
+
141
+ /** The clipboard's text/html and text/plain for described blocks. */
142
+ export function formats(blocks) {
143
+ const listed = groupItems(blocks);
144
+ return { html: listed.map(htmlBlock).join(""), text: mdLines(listed).join("\n") };
145
+ }
146
+
147
+ /**
148
+ * Inline HTML (the format bar's marks, chips as their source) as plain text: a formula as its TeX,
149
+ * a link and a link shown with its icon as their words, a line break and a table cell's list item a
150
+ * line of their own (notion-lite inlinePlain).
151
+ */
152
+ export function plainText(html) {
153
+ const walk = (node) => [...node.childNodes].map((child) => {
154
+ if (child.nodeType === 3) return child.data.replace(/ /g, " ").replaceAll(ZWSP, "");
155
+ if (child.nodeType !== 1) return "";
156
+ if (child.matches(".doc-math-inline")) return FORMULA.exec(child.textContent)?.[1].trim() ?? child.textContent;
157
+ if (child.localName === "br") return "\n";
158
+ if (child.localName === "ul" || child.localName === "ol") return `\n${[...child.children].map((item) => walk(item).trim()).join("\n")}\n`;
159
+ return walk(child);
160
+ }).join("");
161
+ return walk(nodesOf(html)).replace(/^\n+|\n+$/g, "");
162
+ }
163
+
164
+ /** The clipboard's text/html and text/plain for text selected in one block (its inline HTML). */
165
+ export function textFormats(html) {
166
+ return { html: portable(html), text: plainText(html) };
167
+ }
@@ -0,0 +1,39 @@
1
+ import { freshPrefix, rewrite } from "../../../../shared/copy-ids.mjs";
2
+
3
+ // The ids of what a paste made (docs/editor.md, "Copying blocks"): a copy of a card, an instance of a
4
+ // component package or a row of columns holding one keeps the ids it names itself (copyOf: an SVG's
5
+ // marker named by url(#id), a symbol by href="#id", a field by a label's `for`,
6
+ // src/shared/copy-ids.mjs), which the original holds too; each copy gives its own a prefix no id of
7
+ // the page starts with (c1-, c2- …), every reference in it written to match, so that its arrows and
8
+ // gradients draw from its own markers, its label is its own field's and an id still names one element. The
9
+ // server does the same in the file (source/text.mjs copiedSource), from the ids the file holds: the
10
+ // two prefixes may differ, each unique where it stands, and nothing the page sends later carries the
11
+ // copy's ids (a commit takes a copy's text blocks, never its drawing).
12
+
13
+ /** The copies among `made` (a paste's blocks, not on the page yet, and the copies inside them) given ids of their own. */
14
+ export function prefixCopies(doc, made) {
15
+ const copy = '[data-ge-type="copy"], [data-ge-copy]';
16
+ ownIds(doc, made.flatMap((node) => [node, ...node.querySelectorAll(copy)]).filter((node) => node.matches(copy)));
17
+ }
18
+
19
+ /** `copies`, not on the page yet, given ids of their own. */
20
+ export function ownIds(doc, copies) {
21
+ if (!copies.some((copy) => copy.querySelector("[id]") || copy.id)) return;
22
+ const taken = new Set([...doc.querySelectorAll("[id]")].map((node) => node.id));
23
+ for (const copy of copies) {
24
+ const owned = [copy, ...copy.querySelectorAll("*")];
25
+ const ids = owned.filter((node) => node.id).map((node) => node.id);
26
+ if (ids.length === 0) continue;
27
+ const prefix = freshPrefix(taken);
28
+ const renamed = new Map(ids.map((id) => [id, `${prefix}${id}`]));
29
+ for (const node of owned) {
30
+ if (node.id) node.id = renamed.get(node.id);
31
+ for (const attribute of [...node.attributes]) {
32
+ if (attribute.name === "data-ge-copy") continue; // what the file is written from: its ids are the file's to give
33
+ const next = rewrite(attribute.name, attribute.value, renamed);
34
+ if (next !== null) attribute.value = next; // xlink:href in its namespace still
35
+ }
36
+ }
37
+ for (const id of renamed.values()) taken.add(id);
38
+ }
39
+ }
@@ -0,0 +1,13 @@
1
+ // The clipboard's own format (application/x-gallery-blocks, written and read as the old
2
+ // application/x-report-studio-blocks too): selected blocks described
3
+ // (describe.mjs), selected text described (selection.mjs: in one block its inline HTML, across blocks
4
+ // blocks), checked and made again (blocks.mjs), the keys of charts drawn from tables among the copies
5
+ // made their own (chart-keys.mjs), as are the ids a copy's drawing names itself (ids.mjs), and written for other programs
6
+ // (export.mjs, by the table of writers the page export uses too: writers.mjs).
7
+ export { MIME, OLD_MIME, copied, copyOf, describe, ownData, reportOf } from "./describe.mjs";
8
+ export { describeAcross, ownRange, selectedHtml } from "./selection.mjs";
9
+ export { PASTED_SOURCE, build, checkBlocks, holdsFormulas, joinedHtml, parse, parseCells, parseText, unmadeCopy } from "./blocks.mjs";
10
+ export { relinkCopies } from "./chart-keys.mjs";
11
+ export { prefixCopies } from "./ids.mjs";
12
+ export { groupItems, kindOfBlock } from "./rules.mjs";
13
+ export { formats, plainText, textFormats } from "./export.mjs";