@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,227 @@
1
+ import { Z } from "../../shared/layers.mjs";
2
+ import { UNIT, unitElement, withLeads } from "./core.mjs";
3
+ import { frameNumber, inFrame } from "./frames.mjs";
4
+ import { clipOf, fillExtentOf } from "./geometry.mjs";
5
+ import { provide } from "./overlays.mjs";
6
+ import { addStyle, element } from "./ui.mjs";
7
+
8
+ // Where the editor draws over the report's blocks (docs/editor.md, "Overlays"): a selected block's
9
+ // fill, the dashed frame of the text being edited, the handle and a section's bar, a drag's line
10
+ // and tint. Each goes into the layer of the coordinate system its block moves in:
11
+ //
12
+ // page the document's own scrolling (a block in the report's flow): a layer at the
13
+ // document's origin (absolute, in the body), so scrolling the page moves the drawing
14
+ // with its block natively, without waiting for a frame;
15
+ // viewport the window (a block that is fixed or sticky, or inside one: a table's sticky header
16
+ // cell): a fixed layer;
17
+ // dialog the open modal dialog holding the block (it is in the top layer, where nothing of
18
+ // the body shows): a fixed layer inside that dialog, never inside another one.
19
+ //
20
+ // Positions are measured against the layer's own rectangle, never worked out from scrollX/scrollY,
21
+ // so they hold whatever the layer's containing block. A box of the page that scrolls by itself (a
22
+ // dialog's content, a table wider than its frame, a code block's frame) moves its blocks without
23
+ // the layer: the frames that keep the drawings on their blocks put them back (frames.mjs, the same
24
+ // frame as the scroll). A block is measured once per frame (shapeOf): its fill, its frame and its
25
+ // handle drawn in one frame use the same numbers, kept relative to the layer, which scrolling the
26
+ // page leaves as they are; outside the frames (a selection made, a block converted) it is measured
27
+ // afresh.
28
+
29
+ const STYLE = `
30
+ .ge-layer { left: 0; top: 0; width: 0; height: 0; overflow: visible; pointer-events: none; z-index: ${Z.layer}; }
31
+ .ge-layer[data-context="page"] { position: absolute; }
32
+ .ge-layer[data-context="viewport"], .ge-layer[data-context="dialog"] { position: fixed; }
33
+ /* Whatever the tools put in a layer stands where they say; those that declared a position of their own (a relative box) would not, and the layer cannot know which rule a tool wrote them with: !important keeps it one rule. */
34
+ .ge-layer > * { position: absolute !important; }
35
+ .ge-layer > .ge-handle, .ge-layer > .ge-section-bar { pointer-events: auto; }
36
+ `;
37
+
38
+ // The coordinate system a block moves in, and the element its layer goes into.
39
+ function contextOf(target) {
40
+ const dialog = target.closest("dialog[open]");
41
+ if (dialog?.matches(":modal")) return { kind: "dialog", host: dialog };
42
+ for (let node = target; node && node !== document.body && node !== document.documentElement; node = node.parentElement) {
43
+ const { position } = getComputedStyle(node);
44
+ if (position === "fixed" || position === "sticky") return { kind: "viewport", host: document.body };
45
+ }
46
+ return { kind: "page", host: document.body };
47
+ }
48
+
49
+ /** The layer the editor draws in over `target` (made when first needed). */
50
+ export function layerOf(target) {
51
+ addStyle(STYLE);
52
+ const { kind, host } = contextOf(target);
53
+ let layer = [...host.children].find((child) => child.classList.contains("ge-layer") && child.dataset.context === kind);
54
+ if (!layer) {
55
+ layer = element("div", { class: "ge-layer", "data-context": kind, "data-doc-dev": "" });
56
+ host.append(layer);
57
+ }
58
+ return layer;
59
+ }
60
+
61
+ const shapes = new WeakMap(); // block -> { at: the frame measured in, shape }
62
+
63
+ /**
64
+ * Where `target` shows, as the editor draws over it: { layer, origin: the layer's corner in the
65
+ * window, rect and clip relative to the layer, radius: its corners, reach: how far its fill reaches
66
+ * when it says so, room: how far it may reach above and below it (roomOf, measured when first read:
67
+ * only a selected block's fill and the frame of what is edited read it, so the handle, the flags and
68
+ * the others never measure the neighbours) }, or null when it does not show. Measured once per
69
+ * frame; outside the frames, afresh.
70
+ */
71
+ export function shapeOf(target) {
72
+ const at = inFrame() ? frameNumber() : -1;
73
+ const cached = shapes.get(target);
74
+ if (at >= 0 && cached?.at === at) return cached.shape;
75
+ const box = fillExtentOf(target);
76
+ let shape = null;
77
+ if (box) {
78
+ const layer = layerOf(target);
79
+ const origin = layer.getBoundingClientRect();
80
+ const relative = (rect) => rect && { left: rect.left - origin.left, top: rect.top - origin.top, right: rect.right - origin.left, bottom: rect.bottom - origin.top };
81
+ let room = null;
82
+ shape = {
83
+ layer, origin: { left: origin.left, top: origin.top }, rect: relative(box), clip: relative(clipOf(target)), radius: boxRadius(target), reach: boxReach(target),
84
+ get room() { return (room ??= roomOf(target, box)); },
85
+ };
86
+ }
87
+ if (at >= 0) shapes.set(target, { at, shape });
88
+ return shape;
89
+ }
90
+
91
+ /**
92
+ * How far what the editor draws over a block reaches past it (a selected block's fill, the frame
93
+ * of what is being edited), as Notion's fill: a block of its own rounded box (a code block, a
94
+ * highlight block, a card) 6px, or what the block says (`reach`: a file's row 4px, as notion-lite's;
95
+ * a callout's square box 6px), its corners its own and that much more, so the two are concentric; a
96
+ * block of text 2px, 4px round. `radius`: the block's (boxRadius). Above and below it, never more
97
+ * than its `room` (roomOf): two neighbours' fills, however close the blocks stand (disclosures and
98
+ * code blocks 8px apart, list items 5px), never overlap; where the room is less, a block of its own
99
+ * box reaches that much less at its sides too and its corners are round by that much less (the fill
100
+ * as even around it as its box is: never wide at the sides and narrow above and below, never an
101
+ * ellipse); a block of text keeps its 2px at its sides. { x: at its sides, y: its own reach, top,
102
+ * bottom: above and below it, the same, radius, corners: null }.
103
+ */
104
+ export const reachOf = (radius, reach = null, room = null) => {
105
+ const text = radius <= 0 && reach === null;
106
+ const out = text ? 2 : reach ?? 6;
107
+ // The same above and below, the smaller room of the two: a block's fill is even, so in a run of
108
+ // blocks the first and the last look as the ones between (not wider toward the text around them).
109
+ const top = Math.min(out, room?.above ?? out, room?.below ?? out);
110
+ const bottom = top;
111
+ if (text) return { x: out, y: out, top, bottom, radius: 4, corners: null };
112
+ // A box filled evenly on every side: where its room keeps the fill closer above and below, it is as
113
+ // close at the sides (3px all round for disclosures 8px apart, not 6 at the sides and 3 above), and its
114
+ // corners are the block's own and that reach (a circle, as the block's).
115
+ return { x: top, y: out, top, bottom, radius: Math.max(0, radius) + top, corners: null };
116
+ };
117
+
118
+ /**
119
+ * How far a block's fill may reach above and below it ({ above, below }, Infinity where nothing
120
+ * limits it; reachOf takes the smaller of the two for both sides), one rule for every kind of block: half the gap to the block next to it that way
121
+ * (neighbourOf) with a pixel left between them ((gap - 1) / 2, rounded down), or what that block's
122
+ * own reach leaves of the gap less a pixel when that is more (a disclosure 12px under a paragraph,
123
+ * whose fill reaches 2px, keeps its 6px), so two neighbours' fills never overlap: they keep a
124
+ * hairline apart, or just meet where the blocks touch. `box`: its fillExtentOf.
125
+ */
126
+ export function roomOf(target, box = fillExtentOf(target)) {
127
+ if (!box) return null;
128
+ const room = (neighbour, gap) => {
129
+ if (!neighbour) return Infinity;
130
+ const { x: reach } = reachOf(boxRadius(neighbour.unit), boxReach(neighbour.unit)); // its own, on every side
131
+ return Math.max(0, Math.floor((gap - 1) / 2), Math.floor(gap - 1 - reach));
132
+ };
133
+ const above = neighbourOf(target, box, false);
134
+ const below = neighbourOf(target, box, true);
135
+ return { above: room(above, above && box.top - above.rect.bottom), below: room(below, below && below.rect.top - box.bottom) };
136
+ }
137
+
138
+ // The block next to `target` above it (`forward`: below it) and where it shows (fillExtentOf),
139
+ // { unit, rect }, or null: the nearest unit of its container that way that shows and stands over or
140
+ // under it (a column beside it, a step of a flowchart's row, does not); none, its container's (a
141
+ // disclosure's first block: the block before the disclosure). Any of them may be filled with it (a
142
+ // selection, the blocks a text selection takes whole), so its fill keeps clear of all of them.
143
+ function neighbourOf(target, box, forward) {
144
+ for (let at = target; at; at = at.parentElement?.closest(UNIT) ?? null) {
145
+ for (let next = forward ? at.nextElementSibling : withLeads(at)[0].previousElementSibling; next; next = forward ? next.nextElementSibling : next.previousElementSibling) {
146
+ const unit = unitElement(next);
147
+ if (!unit || unit === at || unit.parentElement !== at.parentElement) continue;
148
+ const rect = fillExtentOf(unit);
149
+ if (rect && rect.right > box.left && rect.left < box.right) return { unit, rect };
150
+ }
151
+ }
152
+ return null;
153
+ }
154
+
155
+ /** Where a block's fill lies (client coordinates): its fillExtentOf and its reach past it (reachOf, roomOf), or null. */
156
+ export function fillRectOf(target) {
157
+ const box = fillExtentOf(target);
158
+ if (!box) return null;
159
+ const { x, top, bottom } = reachOf(boxRadius(target), boxReach(target), roomOf(target, box));
160
+ return { left: box.left - x, top: box.top - top, right: box.right + x, bottom: box.bottom + bottom };
161
+ }
162
+
163
+ /** How far a boxed block's fill reaches past it when it says so (--doc-box-reach; a square box too, a callout's), else null. */
164
+ export function boxReach(element) {
165
+ const declared = parseFloat(getComputedStyle(element).getPropertyValue("--doc-box-reach"));
166
+ return declared > 0 ? declared : null;
167
+ }
168
+
169
+ /**
170
+ * The corner radius of a block that shows a box of its own (a background or a border: a code
171
+ * block, a highlight block, a card), else 0 (text, however its element is rounded: a paragraph or
172
+ * heading given a background color too, whose fill the kit lays where a text block's selection is).
173
+ * The editor's own tints over a block (a formula block's under the pointer or while its box is open)
174
+ * are inset shadows, never its background, so they never count: a block's fill is the same
175
+ * whatever the pointer does.
176
+ */
177
+ export function boxRadius(element) {
178
+ const style = getComputedStyle(element);
179
+ // A block whose box is drawn inside it (a file's row, a bookmark's card, an embed's frame), a list
180
+ // item drawn as a box (a flowchart's step) or a list drawn as its items' boxes (a flowchart, whose
181
+ // fill has its cards' corners: styles/flowchart.css), says so.
182
+ const declared = parseFloat(style.getPropertyValue("--doc-box-radius"));
183
+ if (declared > 0) return declared;
184
+ if (/^(P|H[1-4]|LI|HR)$/.test(element.tagName)) return 0; // a divider is a line, no box either
185
+ const radius = parseFloat(style.borderTopLeftRadius) || 0;
186
+ if (radius === 0) return 0;
187
+ const painted = !/^(transparent|rgba\(0, 0, 0, 0\))$/.test(style.backgroundColor) || style.backgroundImage !== "none";
188
+ const bordered = ["Top", "Right", "Bottom", "Left"].some((side) => parseFloat(style[`border${side}Width`]) > 0 && style[`border${side}Style`] !== "none");
189
+ return painted || bordered ? radius : 0;
190
+ }
191
+
192
+ /**
193
+ * Lay `node` over a block measured as `shape` (shapeOf): `x` past it at its sides, `above` and
194
+ * `below` it (`y` both, unless said), with corners of `radius` (or `corners`, a border-radius: reachOf's),
195
+ * cut where the block is cut. Each edge is rounded on its own, so two drawings kept apart stay apart.
196
+ */
197
+ export function drawOver(node, { layer, rect, clip }, { x, y, top: above = y, bottom: below = y, radius, corners = null }) {
198
+ if (node.parentNode !== layer) layer.append(node);
199
+ const left = Math.round(rect.left - x);
200
+ const top = Math.round(rect.top - above);
201
+ const width = Math.round(rect.right + x) - left;
202
+ const height = Math.round(rect.bottom + below) - top;
203
+ const cut = clip && [clip.top - top, left + width - clip.right, top + height - clip.bottom, clip.left - left].map((side) => `${Math.max(0, Math.round(side))}px`).join(" ");
204
+ Object.assign(node.style, {
205
+ transform: `translate(${left}px, ${top}px)`, width: `${width}px`, height: `${height}px`, borderRadius: corners ?? `${radius}px`,
206
+ clipPath: cut && cut !== "0px 0px 0px 0px" ? `inset(${cut})` : "",
207
+ });
208
+ }
209
+
210
+ /** Put `node` in `layer` at `left`, `top` (relative to the layer). */
211
+ export function drawAt(node, layer, left, top) {
212
+ if (node.parentNode !== layer) layer.append(node);
213
+ node.style.transform = `translate(${Math.round(left)}px, ${Math.round(top)}px)`;
214
+ }
215
+
216
+ /** Lay `node` in `layer` over `rect` (window coordinates), `outset` past it. */
217
+ export function drawBox(node, layer, rect, outset = 0) {
218
+ if (node.parentNode !== layer) layer.append(node);
219
+ const origin = layer.getBoundingClientRect();
220
+ Object.assign(node.style, {
221
+ transform: `translate(${Math.round(rect.left - origin.left - outset)}px, ${Math.round(rect.top - origin.top - outset)}px)`,
222
+ width: `${Math.round(rect.right - rect.left + 2 * outset)}px`,
223
+ height: `${Math.round(rect.bottom - rect.top + 2 * outset)}px`,
224
+ });
225
+ }
226
+
227
+ provide("layers", () => [...document.querySelectorAll(".ge-layer")].map((layer) => ({ context: layer.dataset.context, in: layer.parentElement?.localName ?? null, drawings: layer.children.length })));
@@ -0,0 +1,205 @@
1
+ // What the editor draws over the page (docs/editor.md, "Overlays"): a selected block's fill, the
2
+ // handle and a section's bar, the dashed frame of the text being edited, a drag's line, tint and
3
+ // the blocks' faded copy, a box selection, a resize's lines. Each such node is registered with what it stands for
4
+ // (own: a block, or the gesture it belongs to) and a test of whether it still does (alive). The
5
+ // editor's frames audit them against that: one standing for nothing (a block no longer selected or
6
+ // on the page, a gesture over) is a bug, said once with what led to it, and the node goes, so no
7
+ // overlay is ever left behind on the screen. window.__galleryOverlays() describes them all, with
8
+ // their owners, where each is against where it should be, the frames and the recent events: what
9
+ // to look at (and copy) when something drawn looks wrong.
10
+
11
+ // own() marks each overlay node with this attribute: the audit and the snapshot go through the marked
12
+ // nodes on the page, so whatever is registered is audited, whoever draws it. The audit keeps the
13
+ // marked nodes it found (and those marked since) and goes through them: looking them up in the whole
14
+ // page after every frame took 0.2ms a frame on a long report. It looks through the page again
15
+ // whenever a node it does not hold may have come onto it (put in by anyone: a copy of an overlay, one
16
+ // taken off and put back), which an observer of what is added says (`arrivals`).
17
+ const MARK = "data-ge-overlay";
18
+
19
+ const owners = new WeakMap(); // node -> { kind, owner, alive, expected }
20
+ const owned = new Set(); // the marked nodes the audit goes through
21
+ let unknown = true; // a node `owned` does not hold may be on the page: the next audit looks through it
22
+
23
+ // Watched from an audit to the first node added that `owned` does not hold (or that holds a marked
24
+ // node), then not until the next audit: nothing to pay for while the page is built or typed in. Made
25
+ // at the first audit (this module is read without a page too: the unit tests).
26
+ let arrivals = null;
27
+ function arrived(records) {
28
+ for (const record of records) {
29
+ for (const node of record.addedNodes) {
30
+ if (node.nodeType === 1 && (!owned.has(node) || node.querySelector(`[${MARK}]`))) return true;
31
+ }
32
+ }
33
+ return false;
34
+ }
35
+ function stopWatching() {
36
+ unknown = true;
37
+ arrivals?.disconnect();
38
+ }
39
+ const settlers = new Set(); // what each part drops at once after a structural change
40
+ const providers = new Map(); // name -> () => state, for the snapshot
41
+ const events = []; // the last things that changed what is drawn: { t, type, detail }
42
+ const said = new Map(); // scope -> { message, time }: errors said, not said again within 5s
43
+ const errors = []; // the last errors said: { t, scope, message }
44
+ let lastStray = "";
45
+
46
+ /**
47
+ * Register `node` as an overlay of `kind` standing for `owner` (a block, or null for a gesture);
48
+ * alive(): whether it still stands for something (the block selected and on the page, the gesture
49
+ * under way); expected(): where it should be now (client coordinates), when that can be told.
50
+ */
51
+ export function own(node, kind, { owner = null, alive = () => true, expected = null } = {}) {
52
+ owners.set(node, { kind, owner, alive, expected });
53
+ if (node.getAttribute(MARK) !== kind) node.setAttribute(MARK, kind); // the block tools own theirs again on every frame they draw
54
+ owned.add(node);
55
+ return node;
56
+ }
57
+
58
+ /**
59
+ * settle(): after a structural change (history.mjs: a change, undo, redo), at once, not on a later
60
+ * frame, each part drops what stands for something no longer on the page (the selection its gone
61
+ * blocks, the handle the block it stood beside, the frame the text it framed). onSettle(fn): a part's.
62
+ */
63
+ export function onSettle(fn) {
64
+ settlers.add(fn);
65
+ }
66
+
67
+ export function settle() {
68
+ for (const fn of settlers) {
69
+ try {
70
+ fn();
71
+ } catch (error) {
72
+ report("settling after a change", error);
73
+ }
74
+ }
75
+ }
76
+
77
+ /** Something that changes what is drawn happened (selection, history, a gesture). */
78
+ export function note(type, detail = "") {
79
+ events.push({ t: Math.round(performance.now()), type, detail: String(detail).slice(0, 160) });
80
+ if (events.length > 30) events.shift();
81
+ }
82
+
83
+ /** A part of the editor's state for the snapshot (the frames, the block tools). */
84
+ export function provide(name, state) {
85
+ providers.set(name, state);
86
+ }
87
+
88
+ /**
89
+ * An error in drawing or in a gesture: said on the console (the same one at most every 5 seconds
90
+ * per scope, never on every frame) and kept for the snapshot.
91
+ */
92
+ export function report(scope, error) {
93
+ const message = error?.message ?? String(error);
94
+ const now = performance.now();
95
+ const last = said.get(scope);
96
+ if (last && last.message === message && now - last.time < 5000) return;
97
+ said.set(scope, { message, time: now });
98
+ errors.push({ t: Math.round(now), scope, message });
99
+ if (errors.length > 10) errors.shift();
100
+ note("error", `${scope}: ${message}`);
101
+ console.error(`[gallery] ${scope} failed:`, error);
102
+ }
103
+
104
+ // A short description of a block or node: tag, id, the start of its text.
105
+ export function describe(node) {
106
+ if (!node) return null;
107
+ if (!node.localName) return String(node);
108
+ const id = node.getAttribute?.("data-block-id");
109
+ const text = (node.textContent ?? "").replace(/\s+/g, " ").trim().slice(0, 24);
110
+ return `${node.localName}${id ? `#${id}` : ""}${text ? ` "${text}"` : ""}`;
111
+ }
112
+
113
+ const rounded = (rect) => rect && { left: Math.round(rect.left), top: Math.round(rect.top), right: Math.round(rect.right), bottom: Math.round(rect.bottom) };
114
+
115
+ // How far a node's rectangle is from where it should be (the largest difference of an edge), or null.
116
+ function offBy(rect, expected) {
117
+ if (!rect || !expected) return null;
118
+ return Math.max(...["left", "top", "right", "bottom"].map((side) => Math.abs(rect[side] - expected[side])));
119
+ }
120
+
121
+ /** Everything drawn and what it stands for, the frames and the recent events (plain data). */
122
+ export function snapshot() {
123
+ const overlays = [];
124
+ for (const node of document.querySelectorAll(`[${MARK}]`)) {
125
+ const entry = owners.get(node);
126
+ const rect = node.getBoundingClientRect();
127
+ const shown = !node.hidden && rect.width > 0 && rect.height > 0;
128
+ let expected = null;
129
+ try {
130
+ expected = entry?.expected?.() ?? null;
131
+ } catch {}
132
+ let alive = null;
133
+ try {
134
+ alive = entry ? Boolean(entry.alive()) : null;
135
+ } catch {}
136
+ overlays.push({
137
+ class: node.className,
138
+ kind: entry?.kind ?? null,
139
+ shown,
140
+ rect: rounded(rect),
141
+ owner: describe(entry?.owner),
142
+ ownerOnPage: entry?.owner ? Boolean(entry.owner.isConnected) : null,
143
+ alive,
144
+ expected: rounded(expected),
145
+ offBy: shown ? offBy(rect, expected) : null,
146
+ });
147
+ }
148
+ const state = {};
149
+ for (const [name, provider] of providers) {
150
+ try {
151
+ state[name] = provider();
152
+ } catch (error) {
153
+ state[name] = `unavailable: ${error.message}`;
154
+ }
155
+ }
156
+ return { time: Math.round(performance.now()), scroll: { x: Math.round(scrollX), y: Math.round(scrollY) }, overlays, ...state, errors: [...errors], events: [...events] };
157
+ }
158
+
159
+ /**
160
+ * The overlays standing for nothing, removed (a bug: said once, with the snapshot). Returns how
161
+ * many there were.
162
+ */
163
+ export function audit() {
164
+ if (!unknown && arrived(arrivals.takeRecords())) stopWatching();
165
+ if (unknown) {
166
+ owned.clear();
167
+ for (const node of document.querySelectorAll(`[${MARK}]`)) owned.add(node);
168
+ unknown = false;
169
+ arrivals ??= new MutationObserver((records) => {
170
+ if (arrived(records)) stopWatching();
171
+ });
172
+ arrivals.observe(document.documentElement, { childList: true, subtree: true });
173
+ }
174
+ const strays = [...owned].filter((node) => {
175
+ // Off the page (what puts it back is an arrival), or no longer marked (annotate/ unmarks its
176
+ // markers as they fade out, standing for nothing): not the audit's.
177
+ if (!node.isConnected || !node.hasAttribute(MARK)) {
178
+ owned.delete(node);
179
+ return false;
180
+ }
181
+ const entry = owners.get(node);
182
+ try {
183
+ return !entry || !entry.alive();
184
+ } catch {
185
+ return true;
186
+ }
187
+ });
188
+ if (strays.length === 0) {
189
+ lastStray = "";
190
+ return 0;
191
+ }
192
+ const key = strays.map((node) => `${node.className}:${describe(owners.get(node)?.owner)}`).join(" | ");
193
+ if (key !== lastStray) {
194
+ lastStray = key;
195
+ note("stray", key);
196
+ console.error("[gallery] overlay standing for nothing (removed):", key, snapshot());
197
+ }
198
+ strays.forEach((node) => {
199
+ node.remove();
200
+ owned.delete(node);
201
+ });
202
+ return strays.length;
203
+ }
204
+
205
+ globalThis.__galleryOverlays = snapshot;
@@ -0,0 +1,28 @@
1
+ import { isInkClass } from "./marks.mjs";
2
+ import { TAB } from "../components/paragraph/index.mjs";
3
+
4
+ // Inline elements of the report's own (docs/editor.md, "In-place text editing"): a phrasing element
5
+ // the editor has no format for (a span with a class, style or attribute of the report's own: a
6
+ // number badge in a heading, a citation in a cell; a cite, a small, an abbr…), and a format bar's tag
7
+ // that carries attributes of its own and holds no words (a drawn arrow, <i class="arr-r"></i>). In a
8
+ // text block it is an atom, as an inline formula is: shown and written back as the file has it, its
9
+ // words not edited, the words around it editable. Judged from an element's tag, its attributes as the
10
+ // file writes them and whether it holds words, so that the scanner's parse5 nodes (source/blocks.mjs)
11
+ // and the page's elements (core.mjs) are judged alike. Not the editor's own: a text color or
12
+ // highlight (the kit's classes alone), small text's end part, a formula, a link.
13
+
14
+ const PHRASING = new Set([
15
+ "span", "abbr", "cite", "dfn", "small", "mark", "q", "time", "data", "bdi", "bdo", "kbd", "samp", "var",
16
+ "ins", "del", "strike", "font", "big", "tt", "nobr", "acronym",
17
+ ]);
18
+ const FORMATS = new Set(["strong", "em", "b", "i", "u", "s", "code", "sup", "sub"]);
19
+
20
+ /** `attributes`: [{ name, value }] as the file writes them; `words`: whether it holds any. */
21
+ export function ownInline(tag, attributes, words) {
22
+ if (FORMATS.has(tag)) return attributes.length > 0 && !words;
23
+ if (!PHRASING.has(tag)) return false;
24
+ if (tag !== "span") return true;
25
+ const classes = attributes.length === 1 && attributes[0].name === "class" ? attributes[0].value.trim().split(/\s+/).filter(Boolean) : null;
26
+ if (classes?.length > 0 && (classes.every(isInkClass) || classes.join(" ") === TAB)) return false;
27
+ return !attributes.some(({ name, value }) => name === "class" && value.split(/\s+/).includes("doc-math-inline"));
28
+ }
@@ -0,0 +1,71 @@
1
+ import { select } from "./caret.mjs";
2
+ import { holdsNothing } from "./marks.mjs";
3
+ import { ZWSP } from "../../shared/inline-spacing.mjs";
4
+
5
+ // Zero-width pads: a text node holding nothing but a zero-width space where the browser would not
6
+ // keep the caret, so that what is typed there lands on the side the reader chose: after a mark a
7
+ // Markdown shortcut made (typed text would go into it, markdown/), outside after inline code or
8
+ // inside at its start (typing/code-edges.mjs). Text typed into a pad stays there and the space
9
+ // goes (settlePads); a pad the caret left empty goes. A text node holding nothing but the space is
10
+ // never saved (core.mjs serializeNode).
11
+
12
+ const pads = new Set();
13
+
14
+ /** Whether `node` is a text node holding nothing but the zero-width space. */
15
+ export const isPad = (node) => node?.nodeType === 3 && node.data === ZWSP;
16
+
17
+ /**
18
+ * The caret in a pad `where` `node` is ("after" or "before" it, or "start": inside it, first),
19
+ * after its space; one already there is used again.
20
+ */
21
+ export function padCaret(node, where) {
22
+ let pad = where === "start" ? node.firstChild : where === "after" ? node.nextSibling : node.previousSibling;
23
+ if (!isPad(pad)) {
24
+ pad = node.ownerDocument.createTextNode(ZWSP);
25
+ if (where === "start") node.prepend(pad);
26
+ else if (where === "after") node.after(pad);
27
+ else node.before(pad);
28
+ }
29
+ pads.add(pad);
30
+ const caret = node.ownerDocument.createRange();
31
+ caret.setStart(pad, 1);
32
+ caret.collapse(true);
33
+ select(caret);
34
+ return pad;
35
+ }
36
+
37
+ /**
38
+ * Text arrived in a pad: the space goes, the caret staying after the text. `left` (the selection
39
+ * moved): a pad still empty goes unless the caret is in it.
40
+ */
41
+ export function settlePads(left = false) {
42
+ const selection = getSelection();
43
+ for (const pad of [...pads]) {
44
+ if (!pad.isConnected) {
45
+ pads.delete(pad);
46
+ continue;
47
+ }
48
+ const inside = selection.rangeCount > 0 && selection.anchorNode === pad;
49
+ if (pad.data === ZWSP) {
50
+ if (left && !inside) {
51
+ pads.delete(pad);
52
+ const parent = pad.parentElement;
53
+ pad.remove();
54
+ // Inline code that held nothing but the pad (its text deleted, the caret gone) goes too: it
55
+ // would stay drawn as an empty box.
56
+ if (parent?.tagName === "CODE" && holdsNothing(parent)) parent.remove();
57
+ }
58
+ continue;
59
+ }
60
+ pads.delete(pad);
61
+ const at = pad.data.indexOf(ZWSP);
62
+ if (at < 0) continue;
63
+ const offset = inside ? selection.anchorOffset : null;
64
+ pad.deleteData(at, 1);
65
+ if (offset !== null) {
66
+ const caret = pad.ownerDocument.createRange();
67
+ caret.setStart(pad, Math.max(0, offset - (offset > at ? 1 : 0)));
68
+ select(caret);
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,105 @@
1
+ import { HOST_COMPONENT, TYPE_COMPONENT, TYPE_INFO, UNIT_COMPONENT, canHaveChildren, ownerOf, textFilters } from "../components/registry.mjs";
2
+
3
+ // The components' page objects (components/pages.mjs) for the engines that are handed no `ctx` of
4
+ // their own: the editor gives them here once it has made them, and what a type needs of the page is
5
+ // asked of its component.
6
+ let pages = {};
7
+
8
+ /** Hand the engines the page objects. */
9
+ export function connectPages(given) {
10
+ pages = given;
11
+ }
12
+
13
+ /** Whether what happens on `node` is a component's own, the editor letting go of it (`keepsKeys`: its keys, the clipboard, a press that would draw a selection). `event`: the key, where one is asked about. */
14
+ export const keptByComponent = (node, event = null) => pageObjects().some((page) => page.keepsKeys?.(node, event));
15
+
16
+ /** The page object of the component a block type is of, if it has one. */
17
+ export const pageOfType = (type) => pages[TYPE_COMPONENT[type]];
18
+
19
+ /**
20
+ * A key of a menu of blocks (notion-lite's menuEntry): a type, or "type:variant", another entry of the
21
+ * type a page object says (`menuVariants`: { label, icon, words, preview?, sample?, create(what) },
22
+ * `sample` where the words a new one holds are there to be typed over): { type, variant (null when it
23
+ * names none, or none there is), named }.
24
+ */
25
+ export function menuEntry(key) {
26
+ const [type, ...rest] = String(key).split(":");
27
+ const name = rest.join(":");
28
+ return { type, variant: name ? pageOfType(type)?.menuVariants?.()[name] ?? null : null, named: Boolean(name) };
29
+ }
30
+
31
+ /** The row of a key of a menu of blocks: its type's, or its variant's; null for neither. */
32
+ export const menuRow = (key) => TYPE_INFO[key] ?? menuEntry(key).variant;
33
+
34
+ /** The keys of every variant there is now. */
35
+ export const variantKeys = () => Object.keys(TYPE_COMPONENT).flatMap((type) => Object.keys(pageOfType(type)?.menuVariants?.() ?? {}).map((name) => `${type}:${name}`));
36
+
37
+ /** The page objects, in the order they are made. */
38
+ export const pageObjects = () => Object.values(pages);
39
+
40
+ /** The page object with an editor open over the page (`panel`), if any. */
41
+ export const panelOpen = () => pageObjects().find((page) => page.panel) ?? null;
42
+
43
+ /** The text field outside the page's text blocks being edited (`field`: a tab's name), or null. */
44
+ export const fieldOpen = () => pageObjects().map((page) => page.field).find(Boolean) ?? null;
45
+
46
+ /** What the block tools do with rows of columns (`columnOps`, notion-lite's), of whichever page object says, or null. */
47
+ export const columnOps = () => pageObjects().find((page) => page.columnOps)?.columnOps ?? null;
48
+
49
+ /** What the block tools do with sections (`sectionOps`), of whichever page object says, or null. */
50
+ export const sectionOps = () => pageObjects().find((page) => page.sectionOps)?.sectionOps ?? null;
51
+
52
+ /** What the gaps between blocks in a row resize (`rowOps`), of whichever page object says, or null. */
53
+ export const rowOps = () => pageObjects().find((page) => page.rowOps)?.rowOps ?? null;
54
+
55
+ // With no component that says `modalOps`, nothing stands over the page.
56
+ const NO_MODALS = { open: () => [], listen() {}, closeTop: () => false, show: () => null, kept: () => [], reopen() {} };
57
+
58
+ /** What stands open over the page as a modal (`modalOps`), of whichever page object says. */
59
+ export const modalOps = () => pageObjects().find((page) => page.modalOps)?.modalOps ?? NO_MODALS;
60
+
61
+ /** The page's own icon, as the page shows it (`pageIcon`), or null. */
62
+ export const pageIcon = () => pageObjects().map((page) => page.pageIcon?.()).find(Boolean) ?? null;
63
+
64
+ /** The page object of the component that defines a kind of text block. */
65
+ export const pageOfHost = (kind) => pages[HOST_COMPONENT[kind]];
66
+
67
+ /** The page object of the component a kind of unit is of, if it has one. */
68
+ export const pageOfKind = (kind) => pages[UNIT_COMPONENT[kind]];
69
+
70
+ /** The page object of the component a block is of, by the kind of unit it is (`menuItems`, `menu`), if it has one. */
71
+ export const pageOfUnit = (unit) => pageOfKind(unit.getAttribute("data-ge-unit-kind"));
72
+
73
+ /** The row of the block menu a page object has for a block of another component (`rowBeside`), the first that has one, or null. */
74
+ export const rowBeside = (target) => pageObjects().map((page) => page.rowBeside?.(target)).find(Boolean) ?? null;
75
+
76
+ /** The page object of the component a text block is of, or none (`keys`). */
77
+ export const pageOf = (host) => pages[ownerOf(host)];
78
+
79
+ /**
80
+ * What stands around a text block, nearest first, each once and its own component none of them: the
81
+ * block before it where that says `canHaveChildren`, then what it stands in, from where it stands out.
82
+ */
83
+ export function pagesAround(host) {
84
+ const before = host.previousElementSibling;
85
+ const around = before && canHaveChildren(before) ? [before] : [];
86
+ for (let node = host.parentElement; node; node = node.parentElement) around.push(node);
87
+ const own = pageOf(host);
88
+ return [...new Set(around.map(pageOf))].filter((page) => page && page !== own);
89
+ }
90
+
91
+ /** The page object of what a press or a click came down on: of the component of the nearest element around it that is of one. */
92
+ export function pageAt(target) {
93
+ for (let node = target; node?.nodeType === 1; node = node.parentElement) {
94
+ const owner = ownerOf(node);
95
+ if (owner) return pages[owner];
96
+ }
97
+ return undefined;
98
+ }
99
+
100
+ /** Text put in a text block that takes it as it is (`textFilters`), by its component's `type`. Whether it took it. */
101
+ export function typedAsIs(host, text) {
102
+ const page = textFilters(host) ? null : pageOf(host);
103
+ page?.type?.(host, text);
104
+ return Boolean(page?.type);
105
+ }