@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,447 @@
1
+ import { t } from "../../../shared/i18n/index.mjs";
2
+ import { onPreferences, preference } from "../../../shared/preferences.mjs";
3
+ import { readText, rangeOf } from "../annotate/anchors.mjs";
4
+ import { GONE_WORDS, nestedBlocks } from "../core.mjs";
5
+ import { createFills } from "../fills.mjs";
6
+ import { FOLLOW, task } from "../frames.mjs";
7
+ import { onSettle, own, provide } from "../overlays.mjs";
8
+ import { failure, postAnswer } from "../post.mjs";
9
+ import { addStyle } from "../ui.mjs";
10
+ import { UNDO_SHOWN, createBar } from "./bar.mjs";
11
+ import { GHOST_STYLE, createGhosts } from "./ghost.mjs";
12
+ import { editsBy, goneMark, placeOf, putMark, takeMark } from "./gone-words.mjs";
13
+ import { wordMarks } from "./words.mjs";
14
+
15
+ // The Agent's changes on the page (docs/editor.md "Agent's changes"), as Cursor reviews an Agent's:
16
+ // what an Agent wrote to the report since the reader last kept or reverted it (the server's review,
17
+ // editor/changes.mjs, read at the editor's start and never holding it back, drawn once the page is
18
+ // ready), marked without a change to the file: a block added (or changed with no words to tell, or
19
+ // whose words cannot be compared) a green fill (fills.mjs), words added the 批注's look in green (a
20
+ // CSS highlight under the 批注's own), the words taken out shown where they were, in red struck
21
+ // through (gone-words.mjs: an empty inline mark of the editor's own, its words drawn by CSS, which
22
+ // nothing that reads or writes the block's content takes), the blocks deleted shown where they were,
23
+ // a ghost of them in red struck through in room made for it (ghost.mjs, drawn in the overlay layer:
24
+ // nothing of it in the document). Nothing to rest the pointer on: all of it shows at once. The reader
25
+ // editing a block takes its words taken out away first (the keys, input, an input method, a paste,
26
+ // cut or drop in it, the format bar over it), and they are not drawn in it again until the caret has
27
+ // left it (the review read again then). The bar at the window's bottom (bar.mjs) says how many blocks
28
+ // and offers 撤回 (the server writes the baseline back: the reader's own saved edits stay; undone within
29
+ // UNDO_SHOWN from the bar of the page shown again) and 确认 (no more marks). 显示变更 off (设置),
30
+ // nothing is drawn and a review read is kept at once, quietly. The page reads the review again when
31
+ // its server says it changed (another tab kept it, an Agent wrote more) and 1.5s after a commit of its
32
+ // own while the bar shows. Not on a page opened on its own in a frame (?solo), printed, or presented
33
+ // (the preview's ?present has no editor).
34
+
35
+ const ROUTE = "/__gallery/edit/changes";
36
+ const REREAD_AFTER = 1500; // after a commit of the page's own, the review read again this long after (the reader paused)
37
+ const LEFT_AFTER = 150; // the caret left a block the reader edited: the review read again this long after (once saved)
38
+ const KEEP_TRIES = 3; // a quiet keep refused (the review grew meanwhile) is tried again this often
39
+ // What may edit the block it happens in: its words taken out go first (gone-words.mjs editsBy for a key).
40
+ const EDITS = ["keydown", "beforeinput", "compositionstart", "paste", "cut", "drop", "dragstart"];
41
+
42
+ const STYLE = `
43
+ ::highlight(ge-diff-add) { background-color: var(--ge-diff-add); text-decoration: underline 2px var(--ge-diff-add-line); }
44
+ .ge-diff-del { user-select: none; pointer-events: none; }
45
+ .ge-diff-del::before { content: attr(data-ge-gone-words); border-radius: 3px; background: var(--ge-diff-del); color: var(--ge-diff-del-text); text-decoration: line-through; text-decoration-color: var(--ge-diff-del-text); -webkit-box-decoration-break: clone; box-decoration-break: clone; }
46
+ .ge-diff-del[data-ge-gone-lead]::before { margin-left: .28em; }
47
+ .ge-diff-del[data-ge-gone-tail]::after { content: " "; }
48
+ ${GHOST_STYLE}
49
+ @media print { ::highlight(ge-diff-add) { background-color: transparent; text-decoration: none; } .ge-diff-del, .ge-diff-halo { display: none; } }
50
+ `;
51
+
52
+ const highlights = () => Boolean(globalThis.CSS?.highlights && globalThis.Highlight);
53
+ const holdsSelection = (block) => {
54
+ const selection = getSelection();
55
+ return selection.rangeCount > 0 && (block.contains(selection.anchorNode) || block.contains(selection.focusNode));
56
+ };
57
+
58
+ /**
59
+ * slug, token: the map's; commits(), autosave(): the page's (made later than this); flush(): what
60
+ * waits saved now (as Ctrl+S); say(text, kind); session: sessionStorage (storage.mjs storageOf), where
61
+ * a revert's undo is kept over the page shown again; across: the selection across blocks (text-select/:
62
+ * texts(), redraw(texts)), kept on its words while marks go and come. Returns { start(),
63
+ * committed(receipt), leave() }.
64
+ */
65
+ export function createChanges({ slug, token, commits, autosave, flush, say, session, across = null }) {
66
+ const undoKey = `gallery-edit:${slug}:changes-undo`;
67
+ const shows = () => preference("showChanges");
68
+ let review = null; // the review as last read and drawn: { stamp, counts, added, changed, removed }
69
+ let started = false;
70
+ let left = false;
71
+ let busy = false; // 撤回, 确认 or 撤销 under way
72
+ let reading = read(); // at once: the page's start does not wait for it
73
+ let rereadTimer = 0;
74
+ let keepTries = 0;
75
+ let offering = 0; // until when the bar offers 撤销 of this tab's revert
76
+ const filled = new Set(); // block elements filled green
77
+ const changedBlocks = new Map(); // a text block -> its words in the baseline
78
+ const added = new Map(); // a text block -> the ranges of its words added (the green highlight's)
79
+ let dels = []; // the words taken out shown: { node, block }
80
+ const edited = new Set(); // text blocks the reader edited since their words taken out were drawn
81
+ const ghosts = createGhosts();
82
+ let fills = null;
83
+ const bar = createBar({ revert: () => revert(), accept: () => keep() });
84
+
85
+ function read() {
86
+ return postAnswer(ROUTE, token, { slug, action: "read" });
87
+ }
88
+
89
+ // ---------- finding the blocks it names (in the file now) ----------
90
+ const unitOf = (id) => document.querySelector(`[data-ge-unit="${id}"]`);
91
+ const body = () => document.querySelector("main");
92
+ function find(ref) {
93
+ if (!ref) return null;
94
+ const main = body() ?? document;
95
+ if (ref.title) return main.querySelector('[data-ge-kind="title"]'); // the page's own title, as the editor made it a text block
96
+ if (ref.id) return main.querySelector(`[data-block-id="${CSS.escape(ref.id)}"]`);
97
+ if (typeof ref.hash !== "string") return null;
98
+ const list = commits();
99
+ if (!list) return null;
100
+ let nth = 0;
101
+ for (const node of main.querySelectorAll("[data-ge-unit]")) {
102
+ if (list.fileHash(Number(node.getAttribute("data-ge-unit"))) !== ref.hash) continue;
103
+ if (nth++ === ref.nth) return node;
104
+ }
105
+ return null;
106
+ }
107
+ // A unit's own text blocks in the page's order (the server's: its scope line's first, if a table's).
108
+ function ownBlocks(unit, ref) {
109
+ if (ref.title) return [unit];
110
+ const owner = (block) => {
111
+ const at = block.closest("[data-ge-unit], [data-ge-lead]");
112
+ return at?.hasAttribute("data-ge-lead") && !at.hasAttribute("data-ge-unit") ? unitOf(at.getAttribute("data-ge-lead")) : at;
113
+ };
114
+ const lead = document.querySelector(`[data-ge-lead="${unit.getAttribute("data-ge-unit")}"]`);
115
+ const within = (root) => [root, ...root.querySelectorAll("[data-ge-block]")].filter((block) => block.hasAttribute("data-ge-block") && owner(block) === unit);
116
+ return [...(lead && lead !== unit ? within(lead) : []), ...within(unit)];
117
+ }
118
+ // A text block's words as the server reads them: a list item's own, not the blocks it holds.
119
+ const readBlock = (block) => {
120
+ const held = nestedBlocks(block);
121
+ return readText([block], held.length ? { skip: (child) => held.includes(child) } : undefined);
122
+ };
123
+
124
+ // ---------- drawing ----------
125
+ const frames = task("changes", { run: place, fail: () => keepingAcross(takeDown) });
126
+ // A selection across blocks (text-select/) kept on its words while marks go and come: its ends are
127
+ // points of its own, which a text node joined again (takeMark) would leave off the page, and so its
128
+ // pieces' live ranges are taken first (a text node split, putMark, they follow; one joined, takeMark
129
+ // sets them) and it is drawn again from them.
130
+ function keepingAcross(change) {
131
+ const texts = across?.texts() ?? null;
132
+ change(texts ? texts.map(({ range }) => range) : []);
133
+ if (texts) across.redraw(texts);
134
+ }
135
+ function takeDown(ranges = []) {
136
+ fills?.clear();
137
+ for (const { node } of dels) if (node.isConnected) takeMark(node, ranges);
138
+ dels = [];
139
+ ghosts.clear();
140
+ filled.clear();
141
+ changedBlocks.clear();
142
+ added.clear();
143
+ if (highlights()) CSS.highlights.delete("ge-diff-add");
144
+ }
145
+
146
+ function draw() {
147
+ keepingAcross((ranges) => drawNow(ranges));
148
+ }
149
+ function drawNow(ranges) {
150
+ takeDown(ranges);
151
+ if (!review || !shows()) {
152
+ edited.clear();
153
+ return;
154
+ }
155
+ addStyle(STYLE);
156
+ fills ??= createFills({ kind: "changes", className: "ge-diff-halo", stands: (block) => filled.has(block) });
157
+ for (const { ref } of review.added) {
158
+ const unit = find(ref);
159
+ if (unit) filled.add(unit);
160
+ }
161
+ for (const change of review.changed) {
162
+ const unit = find(change.ref);
163
+ if (!unit) continue;
164
+ if (change.whole) {
165
+ filled.add(unit);
166
+ continue;
167
+ }
168
+ const blocks = ownBlocks(unit, change.ref);
169
+ for (const { nth, base } of change.texts ?? []) {
170
+ if (blocks[nth]) changedBlocks.set(blocks[nth], base);
171
+ }
172
+ }
173
+ // A block the reader edited keeps its words taken out away while the caret is in it.
174
+ for (const block of [...edited]) if (!changedBlocks.has(block) || !holdsSelection(block)) edited.delete(block);
175
+ for (const [block, base] of changedBlocks) markWords(block, base, !edited.has(block));
176
+ paintAdded();
177
+ for (const group of review.removed) {
178
+ const anchor = group.before ? find(group.before) : group.after ? find(group.after) : body();
179
+ if (anchor) ghosts.add(group, anchor, group.before ? "before" : group.after ? "after" : "into");
180
+ }
181
+ if (filled.size || added.size || dels.length || ghosts.count) frames.wake();
182
+ }
183
+
184
+ // A changed text block's marks: the ranges of its words added (live: they follow the reader's
185
+ // typing), and, `taken`, its words taken out put in where they were (from the last, so that each
186
+ // place read before is still where it was: a text node is split only after it).
187
+ function markWords(block, base, taken) {
188
+ const text = readBlock(block);
189
+ const { ins, cuts } = wordMarks(base, text.text);
190
+ added.set(block, ins.map(([from, to]) => rangeOf(text, from, to)).filter(Boolean));
191
+ if (!taken) return;
192
+ for (const { at, text: words } of [...cuts].reverse()) {
193
+ const where = placeOf(text, at);
194
+ if (!where) continue;
195
+ const node = goneMark(words, document, { before: text.text[at - 1], after: text.text[at] });
196
+ const entry = { node, block };
197
+ own(node, "changes", { owner: block, alive: () => block.contains(node) && dels.includes(entry) });
198
+ putMark(node, where);
199
+ dels.push(entry);
200
+ }
201
+ }
202
+
203
+ function paintAdded() {
204
+ if (!highlights()) return;
205
+ const ranges = [...added.values()].flat();
206
+ if (ranges.length === 0) return void CSS.highlights.delete("ge-diff-add");
207
+ const highlight = new Highlight(...ranges);
208
+ highlight.priority = -1; // a 批注's marks over these
209
+ CSS.highlights.set("ge-diff-add", highlight);
210
+ }
211
+
212
+ // Each frame something may have moved: the fills where their blocks are, the ghosts where their rooms are.
213
+ function place() {
214
+ if (!review) return false;
215
+ fills?.paint([...filled].filter((block) => block.isConnected));
216
+ ghosts.place();
217
+ return filled.size || ghosts.count ? FOLLOW : false;
218
+ }
219
+
220
+ // What the page's edits took off the page goes with it (a block deleted, its marks): the words taken
221
+ // out shown in a block deleted or turned into another are taken out of it too, so that undo, which
222
+ // puts the very same element back, puts back none of them.
223
+ // A copy of a mark that a change made (a cell turned into a header cell or back, cells merged or
224
+ // filled, a disclosure's title made a paragraph, a block duplicated: whatever clones a block's
225
+ // content) stands for nothing and goes at once, before the overlays' audit would find it a stray:
226
+ // the review read again after the change's commit draws the words taken out where they are then.
227
+ onSettle(() => {
228
+ const drawn = dels.length > 0;
229
+ for (const block of [...filled]) if (!block.isConnected) filled.delete(block);
230
+ dels = dels.filter((entry) => {
231
+ if (entry.block.isConnected && entry.node.isConnected) return true;
232
+ if (entry.node.parentNode) takeMark(entry.node);
233
+ return false;
234
+ });
235
+ if (drawn) {
236
+ const ours = new Set(dels.map((entry) => entry.node));
237
+ for (const node of document.querySelectorAll(`main ${GONE_WORDS}`)) if (!ours.has(node)) takeMark(node);
238
+ }
239
+ ghosts.settle();
240
+ });
241
+
242
+ // ---------- the reader edits a block holding words taken out ----------
243
+ // They go first, before the edit touches the block (window, capture: before the editor's own
244
+ // listeners): the text either side of each one text node again, the caret where it was, and the
245
+ // block's words added marked anew (a range that ended in the half that went would cover the wrong
246
+ // words). The block is `edited`: drawn without them until the caret leaves it.
247
+ // The blocks an edit may touch: the one it happens in, those the selection reaches, the browser's
248
+ // or the page's across blocks (text-select/, which the browser's then holds none of).
249
+ function blocksOf(event) {
250
+ const selection = getSelection();
251
+ const range = selection.rangeCount ? selection.getRangeAt(0) : null;
252
+ const target = event?.target instanceof Node ? event.target : null;
253
+ const reached = across?.texts()?.map(({ host }) => host) ?? [];
254
+ const hit = new Set();
255
+ for (const { block } of dels) {
256
+ if (hit.has(block)) continue;
257
+ if ((target && block.contains(target)) || (range && range.intersectsNode(block)) || reached.some((host) => host === block || host.contains(block) || block.contains(host))) hit.add(block);
258
+ }
259
+ return hit;
260
+ }
261
+ function takeOut(blocks) {
262
+ if (blocks.size === 0) return;
263
+ keepingAcross((ranges) => {
264
+ for (const entry of dels) if (blocks.has(entry.block) && entry.node.isConnected) takeMark(entry.node, ranges);
265
+ });
266
+ dels = dels.filter((entry) => !blocks.has(entry.block));
267
+ for (const block of blocks) {
268
+ edited.add(block);
269
+ const base = changedBlocks.get(block);
270
+ if (base !== undefined) markWords(block, base, false);
271
+ }
272
+ paintAdded();
273
+ }
274
+ function editing(event) {
275
+ if (dels.length === 0 || (event.type === "keydown" && !editsBy(event))) return;
276
+ takeOut(blocksOf(event));
277
+ }
278
+ // The format bar over words of such a block (its buttons keep the selection where it is).
279
+ function pressed(event) {
280
+ if (dels.length > 0 && event.target instanceof Element && event.target.closest(".ge-format")) takeOut(blocksOf(null));
281
+ }
282
+ // The caret left a block the reader edited: the review read again once what waits is saved, and drawn.
283
+ function moved() {
284
+ if (edited.size === 0) return;
285
+ let leaving = false;
286
+ for (const block of [...edited]) {
287
+ if (block.isConnected && holdsSelection(block)) continue;
288
+ edited.delete(block);
289
+ leaving = true;
290
+ }
291
+ if (leaving) rereadSaved(LEFT_AFTER);
292
+ }
293
+ for (const type of EDITS) addEventListener(type, editing, true);
294
+ addEventListener("pointerdown", pressed, true);
295
+ document.addEventListener("selectionchange", moved);
296
+
297
+ // ---------- what the server says ----------
298
+ function take(answer) {
299
+ if (left) return;
300
+ review = answer?.ok && answer.pending ? answer : null;
301
+ if (review && !shows()) return void keep({ quiet: true });
302
+ if (busy) return;
303
+ if (review) bar.counts(review.counts);
304
+ else if (Date.now() >= offering) bar.hide();
305
+ draw();
306
+ }
307
+ async function reread() {
308
+ clearTimeout(rereadTimer);
309
+ if (left || !started) return;
310
+ reading = read();
311
+ take(await reading);
312
+ }
313
+ // Read again `after` ms from now, once nothing waits to be saved (the reader paused).
314
+ function rereadSaved(after) {
315
+ clearTimeout(rereadTimer);
316
+ const again = () => {
317
+ if (autosave()?.state.waiting > 0) rereadTimer = setTimeout(again, REREAD_AFTER);
318
+ else reread();
319
+ };
320
+ rereadTimer = setTimeout(again, after);
321
+ }
322
+
323
+ // 确认: the review ended; `quiet`, as the setting being off does it (nothing said).
324
+ async function keep({ quiet = false } = {}) {
325
+ if (!review || busy) return;
326
+ const stamp = review.stamp;
327
+ busy = true;
328
+ review = null;
329
+ draw();
330
+ bar.hide();
331
+ const answer = await postAnswer(ROUTE, token, { slug, action: "accept", stamp });
332
+ busy = false;
333
+ if (answer.ok) {
334
+ keepTries = 0;
335
+ return;
336
+ }
337
+ // Refused (the review grew meanwhile, the file was held): read again, and kept again when quiet, a few times at most.
338
+ if (quiet) {
339
+ if (++keepTries > KEEP_TRIES) return;
340
+ } else if (answer.reason === "changed") say(failure(answer, t("Agent 刚刚又改了文档,再看一眼")), "note");
341
+ else say(t("没能确认:{0}", failure(answer, t("预览服务器出错"))), "error");
342
+ reread();
343
+ }
344
+
345
+ // 撤回: what waits is saved first, and nothing may wait for the reader (a conflict); then the server
346
+ // writes the baseline, and the page is shown again as after a write of its own (autosave showOwn: no
347
+ // question of what that write put back of the reader's, which the reader asked for).
348
+ async function revert() {
349
+ if (!review || busy) return;
350
+ const stamp = review.stamp;
351
+ busy = true;
352
+ await flush();
353
+ const state = autosave()?.state;
354
+ if (!state || state.waiting > 0 || state.syncing || state.held > 0 || state.offline) {
355
+ busy = false;
356
+ say(t("还有修改没保存或有冲突待处理,处理完再撤回"), "error");
357
+ return;
358
+ }
359
+ let answer = null;
360
+ const shown = await autosave().showOwn(async () => {
361
+ answer = await postAnswer(ROUTE, token, { slug, action: "revert", stamp });
362
+ if (!answer.ok || answer.none) return false;
363
+ session?.set(undoKey, JSON.stringify({ undo: answer.undo, at: Date.now() }));
364
+ return true;
365
+ });
366
+ if (shown) return; // the page goes: the one shown again offers 撤销
367
+ busy = false;
368
+ if (answer?.ok) return void reread(); // nothing was under review any more
369
+ say(answer?.reason === "changed" ? failure(answer, t("Agent 刚刚又改了文档,再看一眼")) : t("没能撤回:{0}", failure(answer ?? {}, t("预览服务器出错"))), answer?.reason === "changed" ? "note" : "error");
370
+ reread();
371
+ }
372
+
373
+ // 撤销 of a revert: the server writes back what the revert wrote over, while the file is still the revert's.
374
+ async function undo(id) {
375
+ if (busy) return;
376
+ busy = true;
377
+ offering = 0;
378
+ session?.remove(undoKey);
379
+ bar.hide();
380
+ await flush();
381
+ let answer = null;
382
+ const shown = await autosave().showOwn(async () => {
383
+ answer = await postAnswer(ROUTE, token, { slug, action: "undo", undo: id });
384
+ return Boolean(answer.ok);
385
+ });
386
+ if (shown) return;
387
+ busy = false;
388
+ say(t("没能撤销:{0}", failure(answer ?? {}, t("预览服务器出错"))), "error");
389
+ }
390
+
391
+ // A revert of this tab's, the page shown again since: 撤销 on the bar for what is left of UNDO_SHOWN.
392
+ function undoShown() {
393
+ let kept = null;
394
+ try { kept = JSON.parse(session?.get(undoKey) ?? "null"); } catch {}
395
+ const remaining = kept && typeof kept.undo === "string" ? UNDO_SHOWN - (Date.now() - kept.at) : 0;
396
+ if (remaining <= 0) {
397
+ session?.remove(undoKey);
398
+ return false;
399
+ }
400
+ offering = Date.now() + remaining;
401
+ bar.reverted(remaining, () => undo(kept.undo));
402
+ setTimeout(() => session?.remove(undoKey), remaining);
403
+ return true;
404
+ }
405
+
406
+ // The server's word that the review changed (another tab kept or reverted it, the Agent wrote more).
407
+ const heard = () => {
408
+ clearTimeout(rereadTimer);
409
+ rereadTimer = setTimeout(reread, 100);
410
+ };
411
+ addEventListener("doc-changes-changed", heard);
412
+ // 显示变更 switched (设置, another page of the origin): off, what is under review is kept and nothing drawn; on, read again.
413
+ onPreferences(() => {
414
+ if (!started || left) return;
415
+ if (!shows()) {
416
+ if (review) keep({ quiet: true });
417
+ return;
418
+ }
419
+ reread();
420
+ });
421
+
422
+ provide("changes", () => ({ pending: Boolean(review), counts: review?.counts ?? null, filled: filled.size, words: dels.length, ghosts: ghosts.count, edited: edited.size }));
423
+
424
+ return {
425
+ /** The page is ready: what was read is drawn (the bar, or 撤销 after a revert of this tab's). */
426
+ async start() {
427
+ if (started) return;
428
+ started = true;
429
+ undoShown();
430
+ take(await reading);
431
+ },
432
+ /** A commit of the page's was taken in: while the bar shows, the review is read again once the reader pauses. */
433
+ committed(receipt) {
434
+ if (!receipt?.wrote || !review || !started) return;
435
+ rereadSaved(REREAD_AFTER);
436
+ },
437
+ /** The page goes. */
438
+ leave() {
439
+ left = true;
440
+ clearTimeout(rereadTimer);
441
+ removeEventListener("doc-changes-changed", heard);
442
+ for (const type of EDITS) removeEventListener(type, editing, true);
443
+ removeEventListener("pointerdown", pressed, true);
444
+ document.removeEventListener("selectionchange", moved);
445
+ },
446
+ };
447
+ }
@@ -0,0 +1,27 @@
1
+ import { wordDiff } from "../merge.mjs";
2
+
3
+ // The words an Agent changed in a text block, as the page marks them (docs/editor.md "Agent's
4
+ // changes"): the word diff of the block's text in the baseline against its text on the page
5
+ // (merge.mjs wordDiff), as places in the page's text.
6
+
7
+ /**
8
+ * What `now` (the block's text on the page) has that `base` did not and where `base`'s words were
9
+ * taken out of it: { ins: [[from, to]] (ranges of `now`), cuts: [{ at, text }] (a place in `now`,
10
+ * what was taken out there; one where several runs meet) }.
11
+ */
12
+ export function wordMarks(base, now) {
13
+ const ins = [];
14
+ const cuts = [];
15
+ let at = 0;
16
+ for (const { tag, text } of wordDiff(base, now)) {
17
+ if (tag === "del") {
18
+ const last = cuts.at(-1);
19
+ if (last?.at === at) last.text += text;
20
+ else cuts.push({ at, text });
21
+ continue;
22
+ }
23
+ if (tag === "ins") ins.push([at, at + text.length]);
24
+ at += text.length;
25
+ }
26
+ return { ins, cuts };
27
+ }
@@ -0,0 +1,126 @@
1
+ import { atomOf, editable } from "./caret.mjs";
2
+ import { addStyle } from "./ui.mjs";
3
+
4
+ // What fills a chip of the text (core.mjs: a formula, a link shown with its icon, a page block): one
5
+ // rectangle around all of it, a chip being one whole. A formula's under the pointer and while its box
6
+ // is open; any chip's when a selection holds it, whose color the browser would paint on the pieces of
7
+ // the chip that hold text, in strips as broken as they are (so nothing is painted inside a chip).
8
+ // KaTeX's boxes stand out of a formula's inline box, whose background is a narrow strip through the
9
+ // middle of a fraction, so its fill is its .katex with as much padding above and below as the drawing
10
+ // reaches past that box, which moves nothing: a padding above an inline box counts for no line. A
11
+ // chip selected is as high as its line, as the words selected beside it are, the hair of room at its
12
+ // sides filled too (they reach it): a box of its own, ::after behind it, which takes a chip of any
13
+ // display and moves nothing. (A chip the line wraps fills its pieces, its background on each line.) How
14
+ // much of each is known only by measuring, so it is measured for the chips that show a fill and written
15
+ // in a style sheet of the page's own, as is which chips those are, no attribute of theirs: nothing here
16
+ // enters a block's snapshots or the file, or reaches what the editor's observers watch, and a selection
17
+ // that holds no chip, and a caret moving, cost nothing but the look at it.
18
+
19
+ const STYLE = `
20
+ [data-ge-editing] [data-ge-atom]::selection, [data-ge-editing] [data-ge-atom] ::selection { background-color: transparent; }
21
+ `;
22
+
23
+ let sheet = null; // made as the page starts editing: the import reads the editor's modules with no page
24
+ let hovered = null; // the formula under the pointer, or the last one
25
+ let edited = null; // the formula whose box is open
26
+ let selected = []; // the chips the browser's selection holds whole
27
+
28
+ // How far up and down a formula's drawing goes (window px), or null for a chip with no drawing.
29
+ function drawingOf(chip) {
30
+ const boxes = [...chip.querySelectorAll(".katex-base")].map((base) => base.getBoundingClientRect());
31
+ return boxes.length > 0 ? { top: Math.min(...boxes.map((box) => box.top)), bottom: Math.max(...boxes.map((box) => box.bottom)) } : null;
32
+ }
33
+
34
+ /** Where a chip of the text shows, all of its drawing (window px): what stands by a formula stands clear of this. */
35
+ export function chipBox(chip) {
36
+ const { left, right, top, bottom, width } = chip.getBoundingClientRect();
37
+ const drawing = drawingOf(chip) ?? { top, bottom };
38
+ const box = { top: Math.min(top, drawing.top), bottom: Math.max(bottom, drawing.bottom) };
39
+ return { left, right, width, ...box, height: box.bottom - box.top };
40
+ }
41
+
42
+ // Where a chip stands on its line (window px): all of its drawing, and a line high around the line's
43
+ // middle, which is an inline chip's; one of the page's own boxes (placeholder.mjs) stands at the line's top.
44
+ function bandOf(chip) {
45
+ const { top, bottom } = chip.getBoundingClientRect();
46
+ const half = parseFloat(getComputedStyle(chip.parentElement).lineHeight) / 2 || 0;
47
+ const middle = getComputedStyle(chip).display === "inline" ? (top + bottom) / 2 : top + half;
48
+ const drawing = drawingOf(chip);
49
+ return { top: Math.min(middle - half, drawing?.top ?? top), bottom: Math.max(middle + half, drawing?.bottom ?? bottom) };
50
+ }
51
+
52
+ // The lines the chips `chosen` stand on, by chip: as the browser fills a line for the words selected on it, as high as all the chips of its block on it.
53
+ function linesOf(chosen) {
54
+ const lines = new Map();
55
+ for (const host of new Set(chosen.map((chip) => editable(chip.parentElement) ?? chip.parentElement))) {
56
+ const found = [];
57
+ for (const chip of host.querySelectorAll("[data-ge-atom]")) {
58
+ const band = bandOf(chip);
59
+ const line = found.find((each) => band.top < each.bottom - 1 && band.bottom > each.top + 1) ?? found[found.push(band) - 1];
60
+ line.top = Math.min(line.top, band.top);
61
+ line.bottom = Math.max(line.bottom, band.bottom);
62
+ lines.set(chip, line);
63
+ }
64
+ }
65
+ return lines;
66
+ }
67
+
68
+ // The rules of one chip: a formula's padding, and a chip selected (on `line`) its fill. Its name stands
69
+ // three times, for a chip selected to outweigh the looks it has under the pointer and of its own.
70
+ function rulesOf(chip, line) {
71
+ const name = `[data-ge-editing] ${`[data-ge-atom="${chip.getAttribute("data-ge-atom")}"]`.repeat(3)}`;
72
+ const drawing = drawingOf(chip);
73
+ const rules = [];
74
+ let box = chip.getBoundingClientRect();
75
+ if (drawing) {
76
+ // By what the padding does not move: KaTeX's own line inside .katex.
77
+ const inner = chip.querySelector(".katex-html").getBoundingClientRect();
78
+ box = { top: Math.min(inner.top, drawing.top), bottom: Math.max(inner.bottom, drawing.bottom) };
79
+ if (box.top < inner.top || box.bottom > inner.bottom) rules.push(`${name} .katex { padding-block: ${inner.top - box.top}px ${box.bottom - inner.bottom}px; }`);
80
+ }
81
+ if (selected.includes(chip)) {
82
+ const fill = drawing ? " .katex" : "";
83
+ if (chip.getClientRects().length > 1) rules.push(`${name}${fill} { background: var(--ge-select); border-radius: 0; }`);
84
+ else {
85
+ const room = parseFloat(getComputedStyle(chip).marginLeft);
86
+ rules.push(`${name}${fill} { position: relative; isolation: isolate; background: transparent; border-radius: 0; }`);
87
+ rules.push(`${name}${fill}::after { content: ""; position: absolute; inset: ${line.top - box.top}px ${-room}px ${box.bottom - line.bottom}px; z-index: -1; background: var(--ge-select); pointer-events: none; }`);
88
+ }
89
+ }
90
+ return rules;
91
+ }
92
+
93
+ // A sheet written anew is looked at against the whole page (10ms on a page of a thousand blocks): only when it changes.
94
+ let written = "";
95
+ function write() {
96
+ const lines = linesOf(selected.filter((chip) => chip.isConnected));
97
+ const rules = [...new Set([hovered, edited, ...selected])].filter((chip) => chip?.isConnected).flatMap((chip) => rulesOf(chip, lines.get(chip))).join("\n");
98
+ if (rules !== written) sheet?.replaceSync((written = rules));
99
+ }
100
+
101
+ /** The formula whose box is open, drawn anew by what is typed (null: none). */
102
+ export function fillEdited(chip) {
103
+ edited = chip;
104
+ write();
105
+ }
106
+
107
+ /** Start following the pointer and the selection on the page (`isEditing`: the page edits). */
108
+ export function connectChipFills(isEditing) {
109
+ addStyle(STYLE);
110
+ sheet = new CSSStyleSheet();
111
+ document.adoptedStyleSheets = [...document.adoptedStyleSheets, sheet];
112
+ document.addEventListener("mouseover", (event) => {
113
+ const chip = isEditing() ? atomOf(event.target) : null;
114
+ if (!chip || chip === hovered) return;
115
+ hovered = chip;
116
+ write();
117
+ }, true);
118
+ document.addEventListener("selectionchange", () => {
119
+ const selection = getSelection();
120
+ const around = isEditing() && selection.rangeCount && !selection.isCollapsed ? selection.getRangeAt(0).commonAncestorContainer : null;
121
+ const chips = around ? [...(around.nodeType === 1 ? around : around.parentElement).querySelectorAll("[data-ge-atom]")].filter((chip) => selection.containsNode(chip)) : [];
122
+ if (chips.length === selected.length && chips.every((chip, index) => chip === selected[index])) return;
123
+ selected = chips;
124
+ write();
125
+ });
126
+ }