@heycys/gallery 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (785) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -2
  3. package/THIRD-PARTY-NOTICES.md +3253 -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 +39 -0
  11. package/browser/editor/components/callout/page.mjs +13 -0
  12. package/browser/editor/components/code/index.mjs +327 -0
  13. package/browser/editor/components/code/page.mjs +561 -0
  14. package/browser/editor/components/colors.mjs +50 -0
  15. package/browser/editor/components/columns/index.mjs +104 -0
  16. package/browser/editor/components/columns/page.mjs +297 -0
  17. package/browser/editor/components/details/index.mjs +72 -0
  18. package/browser/editor/components/details/page.mjs +86 -0
  19. package/browser/editor/components/dialog/index.mjs +83 -0
  20. package/browser/editor/components/dialog/page.mjs +219 -0
  21. package/browser/editor/components/divider/index.mjs +48 -0
  22. package/browser/editor/components/embed/icons.mjs +11 -0
  23. package/browser/editor/components/embed/index.mjs +123 -0
  24. package/browser/editor/components/embed/page.mjs +309 -0
  25. package/browser/editor/components/figure/index.mjs +87 -0
  26. package/browser/editor/components/figure/page.mjs +33 -0
  27. package/browser/editor/components/file/icons.mjs +14 -0
  28. package/browser/editor/components/file/index.mjs +77 -0
  29. package/browser/editor/components/file/page.mjs +114 -0
  30. package/browser/editor/components/flowchart/add.mjs +123 -0
  31. package/browser/editor/components/flowchart/index.mjs +246 -0
  32. package/browser/editor/components/flowchart/page.mjs +453 -0
  33. package/browser/editor/components/heading/index.mjs +51 -0
  34. package/browser/editor/components/highlight/index.mjs +79 -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 +45 -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 +133 -0
  43. package/browser/editor/components/installed/page.mjs +422 -0
  44. package/browser/editor/components/installed/served.mjs +35 -0
  45. package/browser/editor/components/kit.mjs +64 -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 +162 -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 +833 -0
  66. package/browser/editor/components/rows.mjs +16 -0
  67. package/browser/editor/components/section/index.mjs +41 -0
  68. package/browser/editor/components/section/page.mjs +141 -0
  69. package/browser/editor/components/sheets/index.mjs +137 -0
  70. package/browser/editor/components/sheets/page.mjs +227 -0
  71. package/browser/editor/components/sheets/pills.mjs +226 -0
  72. package/browser/editor/components/table/grid.mjs +73 -0
  73. package/browser/editor/components/table/index.mjs +306 -0
  74. package/browser/editor/components/table/page.mjs +672 -0
  75. package/browser/editor/components/table/slots.mjs +41 -0
  76. package/browser/editor/components/widget/index.mjs +50 -0
  77. package/browser/editor/page/annotate/anchors.mjs +229 -0
  78. package/browser/editor/page/annotate/card.mjs +102 -0
  79. package/browser/editor/page/annotate/index.mjs +1629 -0
  80. package/browser/editor/page/at-menu/index.mjs +317 -0
  81. package/browser/editor/page/autosave.mjs +977 -0
  82. package/browser/editor/page/beside.mjs +21 -0
  83. package/browser/editor/page/block-info.mjs +63 -0
  84. package/browser/editor/page/block-menu/colors.mjs +82 -0
  85. package/browser/editor/page/block-menu/index.mjs +215 -0
  86. package/browser/editor/page/blocks.mjs +246 -0
  87. package/browser/editor/page/caret.mjs +679 -0
  88. package/browser/editor/page/chip-fills.mjs +126 -0
  89. package/browser/editor/page/clipboard/import/colors.mjs +192 -0
  90. package/browser/editor/page/clipboard/import/html.mjs +792 -0
  91. package/browser/editor/page/clipboard/import/inline.mjs +232 -0
  92. package/browser/editor/page/clipboard/import/languages.mjs +42 -0
  93. package/browser/editor/page/clipboard/import/markdown.mjs +760 -0
  94. package/browser/editor/page/clipboard/import/math.mjs +100 -0
  95. package/browser/editor/page/clipboard/import/office.mjs +245 -0
  96. package/browser/editor/page/clipboard/import/read.mjs +120 -0
  97. package/browser/editor/page/clipboard/import/rich.mjs +29 -0
  98. package/browser/editor/page/clipboard/import/to-blocks.mjs +290 -0
  99. package/browser/editor/page/clipboard/index.mjs +797 -0
  100. package/browser/editor/page/clipboard/own/blocks.mjs +202 -0
  101. package/browser/editor/page/clipboard/own/chart-keys.mjs +58 -0
  102. package/browser/editor/page/clipboard/own/describe.mjs +115 -0
  103. package/browser/editor/page/clipboard/own/export.mjs +167 -0
  104. package/browser/editor/page/clipboard/own/ids.mjs +39 -0
  105. package/browser/editor/page/clipboard/own/index.mjs +13 -0
  106. package/browser/editor/page/clipboard/own/rules.mjs +44 -0
  107. package/browser/editor/page/clipboard/own/selection.mjs +159 -0
  108. package/browser/editor/page/clipboard/own/writers.mjs +326 -0
  109. package/browser/editor/page/columns/index.mjs +360 -0
  110. package/browser/editor/page/commit.mjs +1798 -0
  111. package/browser/editor/page/conflicts.mjs +269 -0
  112. package/browser/editor/page/convert.mjs +830 -0
  113. package/browser/editor/page/core.mjs +1655 -0
  114. package/browser/editor/page/drag/drop.mjs +307 -0
  115. package/browser/editor/page/drag/index.mjs +335 -0
  116. package/browser/editor/page/drag/preview.mjs +121 -0
  117. package/browser/editor/page/edge-scroll.mjs +50 -0
  118. package/browser/editor/page/editor.mjs +1725 -0
  119. package/browser/editor/page/emoji-picker/emoji-tab.mjs +278 -0
  120. package/browser/editor/page/emoji-picker/glyph-html.mjs +26 -0
  121. package/browser/editor/page/emoji-picker/grid.mjs +79 -0
  122. package/browser/editor/page/emoji-picker/icon-tab.mjs +217 -0
  123. package/browser/editor/page/emoji-picker/icons.mjs +32 -0
  124. package/browser/editor/page/emoji-picker/index.mjs +164 -0
  125. package/browser/editor/page/emoji-picker/styles.mjs +2 -0
  126. package/browser/editor/page/emoji-picker/support.mjs +202 -0
  127. package/browser/editor/page/emoji-picker/upload.mjs +235 -0
  128. package/browser/editor/page/export-report.mjs +23 -0
  129. package/browser/editor/page/fills.mjs +60 -0
  130. package/browser/editor/page/find/index.mjs +107 -0
  131. package/browser/editor/page/flags.mjs +70 -0
  132. package/browser/editor/page/format-bar/bar.mjs +448 -0
  133. package/browser/editor/page/format-bar/brush.mjs +77 -0
  134. package/browser/editor/page/format-bar/colors.mjs +46 -0
  135. package/browser/editor/page/format-bar/index.mjs +404 -0
  136. package/browser/editor/page/formula/index.mjs +236 -0
  137. package/browser/editor/page/formula/panel.mjs +336 -0
  138. package/browser/editor/page/formula/symbols.mjs +156 -0
  139. package/browser/editor/page/frame.mjs +74 -0
  140. package/browser/editor/page/frames.mjs +196 -0
  141. package/browser/editor/page/geometry.mjs +400 -0
  142. package/browser/editor/page/gesture.mjs +45 -0
  143. package/browser/editor/page/handle/index.mjs +639 -0
  144. package/browser/editor/page/handle-sizes.mjs +14 -0
  145. package/browser/editor/page/hints/index.mjs +84 -0
  146. package/browser/editor/page/history.mjs +401 -0
  147. package/browser/editor/page/insert/index.mjs +243 -0
  148. package/browser/editor/page/kept.mjs +38 -0
  149. package/browser/editor/page/links/address.mjs +40 -0
  150. package/browser/editor/page/links/index.mjs +866 -0
  151. package/browser/editor/page/links/pages.mjs +131 -0
  152. package/browser/editor/page/links/views.mjs +369 -0
  153. package/browser/editor/page/look.mjs +65 -0
  154. package/browser/editor/page/made.mjs +24 -0
  155. package/browser/editor/page/margin.mjs +352 -0
  156. package/browser/editor/page/markdown/index.mjs +88 -0
  157. package/browser/editor/page/markdown/rules.mjs +33 -0
  158. package/browser/editor/page/marks.mjs +377 -0
  159. package/browser/editor/page/media-menu/index.mjs +158 -0
  160. package/browser/editor/page/menu.mjs +500 -0
  161. package/browser/editor/page/merge.mjs +100 -0
  162. package/browser/editor/page/notices.mjs +142 -0
  163. package/browser/editor/page/offered.mjs +32 -0
  164. package/browser/editor/page/outline/folds.mjs +52 -0
  165. package/browser/editor/page/outline/index.mjs +697 -0
  166. package/browser/editor/page/outline/list.mjs +172 -0
  167. package/browser/editor/page/outline/read.mjs +201 -0
  168. package/browser/editor/page/outline/strip.mjs +281 -0
  169. package/browser/editor/page/outline/tree.mjs +248 -0
  170. package/browser/editor/page/overlay-layer.mjs +227 -0
  171. package/browser/editor/page/overlays.mjs +205 -0
  172. package/browser/editor/page/own.mjs +28 -0
  173. package/browser/editor/page/pads.mjs +71 -0
  174. package/browser/editor/page/page-objects.mjs +105 -0
  175. package/browser/editor/page/panel.mjs +64 -0
  176. package/browser/editor/page/placement.mjs +58 -0
  177. package/browser/editor/page/post.mjs +41 -0
  178. package/browser/editor/page/present-links.mjs +50 -0
  179. package/browser/editor/page/quiet.mjs +48 -0
  180. package/browser/editor/page/resize/index.mjs +327 -0
  181. package/browser/editor/page/select-all/index.mjs +262 -0
  182. package/browser/editor/page/selection/delete.mjs +59 -0
  183. package/browser/editor/page/selection/index.mjs +157 -0
  184. package/browser/editor/page/selection/marquee.mjs +174 -0
  185. package/browser/editor/page/session.mjs +117 -0
  186. package/browser/editor/page/slash-menu/index.mjs +291 -0
  187. package/browser/editor/page/storage.mjs +48 -0
  188. package/browser/editor/page/sync-state.mjs +267 -0
  189. package/browser/editor/page/table/aligns.mjs +29 -0
  190. package/browser/editor/page/table/cell-bar.mjs +138 -0
  191. package/browser/editor/page/table/cells.mjs +527 -0
  192. package/browser/editor/page/table/icons.mjs +40 -0
  193. package/browser/editor/page/table/index.mjs +985 -0
  194. package/browser/editor/page/table/lists.mjs +187 -0
  195. package/browser/editor/page/table/widths.mjs +308 -0
  196. package/browser/editor/page/tex.mjs +32 -0
  197. package/browser/editor/page/text-select/index.mjs +656 -0
  198. package/browser/editor/page/tooltip.mjs +98 -0
  199. package/browser/editor/page/type-grid.mjs +82 -0
  200. package/browser/editor/page/typing/code-edges.mjs +228 -0
  201. package/browser/editor/page/typing/index.mjs +276 -0
  202. package/browser/editor/page/typing/leave.mjs +68 -0
  203. package/browser/editor/page/ui.mjs +160 -0
  204. package/browser/shared/annotations.mjs +571 -0
  205. package/browser/shared/code-folds.mjs +10 -0
  206. package/browser/shared/code-languages.mjs +70 -0
  207. package/browser/shared/code-lines.mjs +30 -0
  208. package/browser/shared/colors.mjs +28 -0
  209. package/browser/shared/component-catalog.mjs +559 -0
  210. package/browser/shared/components/bookmark.mjs +26 -0
  211. package/browser/shared/components/callout.mjs +7 -0
  212. package/browser/shared/components/chart.mjs +20 -0
  213. package/browser/shared/components/code.mjs +37 -0
  214. package/browser/shared/components/columns.mjs +16 -0
  215. package/browser/shared/components/details.mjs +15 -0
  216. package/browser/shared/components/dialog.mjs +28 -0
  217. package/browser/shared/components/diff.mjs +18 -0
  218. package/browser/shared/components/divider.mjs +6 -0
  219. package/browser/shared/components/embed.mjs +25 -0
  220. package/browser/shared/components/figure.mjs +14 -0
  221. package/browser/shared/components/file.mjs +23 -0
  222. package/browser/shared/components/heading.mjs +6 -0
  223. package/browser/shared/components/highlight.mjs +9 -0
  224. package/browser/shared/components/icon.mjs +18 -0
  225. package/browser/shared/components/image.mjs +39 -0
  226. package/browser/shared/components/index.mjs +342 -0
  227. package/browser/shared/components/installed.mjs +162 -0
  228. package/browser/shared/components/list.mjs +146 -0
  229. package/browser/shared/components/math.mjs +49 -0
  230. package/browser/shared/components/mention.mjs +33 -0
  231. package/browser/shared/components/page.mjs +37 -0
  232. package/browser/shared/components/paragraph.mjs +9 -0
  233. package/browser/shared/components/quote.mjs +6 -0
  234. package/browser/shared/components/section.mjs +8 -0
  235. package/browser/shared/components/sheets.mjs +80 -0
  236. package/browser/shared/components/state.mjs +20 -0
  237. package/browser/shared/components/table.mjs +49 -0
  238. package/browser/shared/components/text.mjs +14 -0
  239. package/browser/shared/components/widget.mjs +10 -0
  240. package/browser/shared/copy-ids.mjs +72 -0
  241. package/browser/shared/css-references.mjs +110 -0
  242. package/browser/shared/emoji/custom.mjs +91 -0
  243. package/browser/shared/emoji/data/LICENSE-mingcute.txt +202 -0
  244. package/browser/shared/emoji/data/LICENSE-tabler.txt +21 -0
  245. package/browser/shared/emoji/data/README.md +26 -0
  246. package/browser/shared/emoji/data/categories.json +1 -0
  247. package/browser/shared/emoji/data/icons.json +1 -0
  248. package/browser/shared/emoji/data/keywords-en.json +1 -0
  249. package/browser/shared/emoji/data/keywords-zh.json +1 -0
  250. package/browser/shared/emoji/data/names.json +1 -0
  251. package/browser/shared/emoji/data/positions.json +1 -0
  252. package/browser/shared/emoji/data/twemoji-index.json +1 -0
  253. package/browser/shared/emoji/data/twemoji-svg.bin +0 -0
  254. package/browser/shared/emoji/data.mjs +196 -0
  255. package/browser/shared/emoji/emoji.mjs +37 -0
  256. package/browser/shared/emoji/glyphs.mjs +134 -0
  257. package/browser/shared/emoji/icon-value.mjs +90 -0
  258. package/browser/shared/escape.mjs +20 -0
  259. package/browser/shared/export-wrap.mjs +89 -0
  260. package/browser/shared/files.mjs +33 -0
  261. package/browser/shared/html-tree.mjs +53 -0
  262. package/browser/shared/http.mjs +22 -0
  263. package/browser/shared/i18n/en.mjs +1164 -0
  264. package/browser/shared/i18n/index.mjs +132 -0
  265. package/browser/shared/ids.mjs +24 -0
  266. package/browser/shared/import-types.mjs +23 -0
  267. package/browser/shared/inline-spacing.mjs +97 -0
  268. package/browser/shared/layers.mjs +42 -0
  269. package/browser/shared/media.mjs +162 -0
  270. package/browser/shared/new-names.mjs +64 -0
  271. package/browser/shared/number-reading.mjs +92 -0
  272. package/browser/shared/old-names.mjs +143 -0
  273. package/browser/shared/page-address.mjs +140 -0
  274. package/browser/shared/page-links.mjs +86 -0
  275. package/browser/shared/paths.mjs +73 -0
  276. package/browser/shared/preferences.mjs +110 -0
  277. package/browser/shared/preview-server.mjs +247 -0
  278. package/browser/shared/qa-levels.mjs +93 -0
  279. package/browser/shared/reading-place.mjs +91 -0
  280. package/browser/shared/renamed-storage.mjs +220 -0
  281. package/browser/shared/reports.mjs +46 -0
  282. package/browser/shared/search.mjs +85 -0
  283. package/browser/shared/session.mjs +76 -0
  284. package/browser/shared/table-chart.mjs +113 -0
  285. package/browser/shared/table-hides.mjs +120 -0
  286. package/browser/shared/table-slots.mjs +75 -0
  287. package/browser/shared/words.mjs +23 -0
  288. package/browser/shared/workspace.mjs +535 -0
  289. package/browser/shared/writing-preferences.mjs +68 -0
  290. package/browser/shared/zoom.mjs +57 -0
  291. package/dist/chunk-2B5E4CDJ.mjs +2 -0
  292. package/dist/chunk-2PBALTR3.mjs +57 -0
  293. package/dist/chunk-342HXE3Q.mjs +2 -0
  294. package/dist/chunk-3LA3EMDE.mjs +15 -0
  295. package/dist/chunk-43B75J5T.mjs +2 -0
  296. package/dist/chunk-4K5KC6V2.mjs +2 -0
  297. package/dist/chunk-5FRMCDPY.mjs +16 -0
  298. package/dist/chunk-5L7RYZCL.mjs +2 -0
  299. package/dist/chunk-5LEK2CBS.mjs +2 -0
  300. package/dist/chunk-5OFN5AHC.mjs +2 -0
  301. package/dist/chunk-5SIYS5HN.mjs +2 -0
  302. package/dist/chunk-5TEK3RAD.mjs +2 -0
  303. package/dist/chunk-6CYG3Z4V.mjs +2 -0
  304. package/dist/chunk-6U2SLSDN.mjs +3 -0
  305. package/dist/chunk-742D2WWJ.mjs +19 -0
  306. package/dist/chunk-7GHT2UCA.mjs +15 -0
  307. package/dist/chunk-7QQBR7PB.mjs +2 -0
  308. package/dist/chunk-A55HN5OK.mjs +2 -0
  309. package/dist/chunk-ACOPDCNB.mjs +2 -0
  310. package/dist/chunk-AGDILNWB.mjs +2 -0
  311. package/dist/chunk-ATCJYAR4.mjs +2 -0
  312. package/dist/chunk-B3VTYBYR.mjs +960 -0
  313. package/dist/chunk-C564NU2H.mjs +77 -0
  314. package/dist/chunk-C7HWOBIF.mjs +2 -0
  315. package/dist/chunk-DB4WKGYF.mjs +7 -0
  316. package/dist/chunk-E7VYDG2X.mjs +2 -0
  317. package/dist/chunk-EUX7IC5J.mjs +48 -0
  318. package/dist/chunk-EVJ3BX3M.mjs +2 -0
  319. package/dist/chunk-EZY3WC6Z.mjs +15 -0
  320. package/dist/chunk-FQGQH4KM.mjs +2 -0
  321. package/dist/chunk-G7TOXONE.mjs +6 -0
  322. package/dist/chunk-GPF4YWWB.mjs +9 -0
  323. package/dist/chunk-GRAXKKG4.mjs +2 -0
  324. package/dist/chunk-GYQV7Y4J.mjs +120 -0
  325. package/dist/chunk-HMHK3EQ6.mjs +2 -0
  326. package/dist/chunk-HQQMJCQJ.mjs +10 -0
  327. package/dist/chunk-HYMEEXKN.mjs +4 -0
  328. package/dist/chunk-IERUOGC3.mjs +6 -0
  329. package/dist/chunk-ITNLYXXV.mjs +3 -0
  330. package/dist/chunk-L4DVONOG.mjs +2 -0
  331. package/dist/chunk-LAE5NQ4B.mjs +2 -0
  332. package/dist/chunk-LC7YNQFG.mjs +2 -0
  333. package/dist/chunk-LHTFLRB6.mjs +4 -0
  334. package/dist/chunk-LKX55H76.mjs +2 -0
  335. package/dist/chunk-MAFIGVXY.mjs +2 -0
  336. package/dist/chunk-NFIBI4IP.mjs +26 -0
  337. package/dist/chunk-NSKUTQ5J.mjs +5 -0
  338. package/dist/chunk-O52JMOCZ.mjs +2 -0
  339. package/dist/chunk-P2CAZPDP.mjs +3 -0
  340. package/dist/chunk-QAIHRH3I.mjs +13 -0
  341. package/dist/chunk-QMQUXTU4.mjs +12 -0
  342. package/dist/chunk-QR6A54KJ.mjs +3 -0
  343. package/dist/chunk-QVWVFC5K.mjs +6 -0
  344. package/dist/chunk-QYKCJ7FG.mjs +8 -0
  345. package/dist/chunk-QZY6Q64C.mjs +2 -0
  346. package/dist/chunk-TDQP3DKQ.mjs +10 -0
  347. package/dist/chunk-TMYZB6AV.mjs +2 -0
  348. package/dist/chunk-TX6JH7TR.mjs +2 -0
  349. package/dist/chunk-U3SSPL4K.mjs +8 -0
  350. package/dist/chunk-UH4SIXTR.mjs +2 -0
  351. package/dist/chunk-UNUEWH4S.mjs +2 -0
  352. package/dist/chunk-UXUK4PMC.mjs +27 -0
  353. package/dist/chunk-V4CPWKMZ.mjs +2 -0
  354. package/dist/chunk-V6XZ4VIR.mjs +2 -0
  355. package/dist/chunk-VACRB2NE.mjs +3 -0
  356. package/dist/chunk-W63L7367.mjs +7 -0
  357. package/dist/chunk-W7CXPCRV.mjs +6 -0
  358. package/dist/chunk-W7XHE4CT.mjs +2 -0
  359. package/dist/chunk-XINNG4F2.mjs +4 -0
  360. package/dist/chunk-Y34NR5JL.mjs +2 -0
  361. package/dist/chunk-YEY3RSFQ.mjs +2 -0
  362. package/dist/chunk-YL2DPWVS.mjs +4 -0
  363. package/dist/chunk-YXAUQPVK.mjs +8 -0
  364. package/dist/chunk-YZ5Z6H4W.mjs +4 -0
  365. package/dist/chunk-Z52HTUW7.mjs +4 -0
  366. package/dist/chunk-ZBIM6ARY.mjs +216 -0
  367. package/dist/cli.mjs +2 -0
  368. package/dist/server.mjs +2 -0
  369. package/dist/worker.mjs +5 -0
  370. package/kit/charts.js +355 -0
  371. package/kit/code.js +164 -0
  372. package/kit/dialogs.js +157 -0
  373. package/kit/math.js +1988 -0
  374. package/kit/report.css +2821 -0
  375. package/kit/runtime.js +1707 -0
  376. package/kit/sheets.js +123 -0
  377. package/kit/state.js +217 -0
  378. package/kit/tables.js +1449 -0
  379. package/kit/tokens.js +29 -0
  380. package/kit/ui.js +561 -0
  381. package/package.json +41 -4
  382. package/release.json +25 -0
  383. package/sdk/column-widths.d.ts +56 -0
  384. package/sdk/doc-charts.d.ts +82 -0
  385. package/sdk/doc-code.d.ts +28 -0
  386. package/sdk/doc-dialogs.d.ts +4 -0
  387. package/sdk/doc-kit.d.ts +141 -0
  388. package/sdk/doc-math.d.ts +3 -0
  389. package/sdk/doc-sheets.d.ts +15 -0
  390. package/sdk/doc-state.d.ts +41 -0
  391. package/sdk/doc-tables.d.ts +24 -0
  392. package/sdk/doc-tokens.d.ts +22 -0
  393. package/sdk/index.d.ts +30 -0
  394. package/skill/SKILL.md +138 -0
  395. package/skill/agents/openai.yaml +5 -0
  396. package/skill/references/building-components.md +327 -0
  397. package/skill/references/example-report.html +356 -0
  398. package/skill/references/writing-html.md +187 -0
  399. package/skill/sdk/column-widths.d.ts +56 -0
  400. package/skill/sdk/doc-charts.d.ts +82 -0
  401. package/skill/sdk/doc-code.d.ts +28 -0
  402. package/skill/sdk/doc-dialogs.d.ts +4 -0
  403. package/skill/sdk/doc-kit.d.ts +141 -0
  404. package/skill/sdk/doc-math.d.ts +3 -0
  405. package/skill/sdk/doc-sheets.d.ts +15 -0
  406. package/skill/sdk/doc-state.d.ts +41 -0
  407. package/skill/sdk/doc-tables.d.ts +24 -0
  408. package/skill/sdk/doc-tokens.d.ts +22 -0
  409. package/skill/sdk/index.d.ts +30 -0
  410. package/starter/doc.html +21 -0
  411. package/starter/doc.json +5 -0
  412. package/vendor/d3.v7.9.0.min.js +2 -0
  413. package/vendor/katex/auto-render.min.js +1 -0
  414. package/vendor/katex/contrib/mhchem.min.js +1 -0
  415. package/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
  416. package/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
  417. package/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
  418. package/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
  419. package/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
  420. package/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
  421. package/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
  422. package/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
  423. package/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
  424. package/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
  425. package/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
  426. package/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
  427. package/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
  428. package/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
  429. package/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
  430. package/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
  431. package/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
  432. package/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
  433. package/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
  434. package/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
  435. package/vendor/katex/katex.min.css +1 -0
  436. package/vendor/katex/katex.min.js +1 -0
  437. package/vendor/pdfjs/LICENSE +177 -0
  438. package/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
  439. package/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
  440. package/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
  441. package/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
  442. package/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
  443. package/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
  444. package/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
  445. package/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
  446. package/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
  447. package/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
  448. package/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
  449. package/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
  450. package/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
  451. package/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
  452. package/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
  453. package/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
  454. package/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
  455. package/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
  456. package/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
  457. package/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
  458. package/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
  459. package/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
  460. package/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
  461. package/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
  462. package/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
  463. package/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
  464. package/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
  465. package/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
  466. package/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
  467. package/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
  468. package/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
  469. package/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
  470. package/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
  471. package/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
  472. package/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
  473. package/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
  474. package/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
  475. package/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
  476. package/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
  477. package/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
  478. package/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
  479. package/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
  480. package/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
  481. package/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
  482. package/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
  483. package/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
  484. package/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
  485. package/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
  486. package/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
  487. package/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
  488. package/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
  489. package/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
  490. package/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
  491. package/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
  492. package/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
  493. package/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
  494. package/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
  495. package/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
  496. package/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
  497. package/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
  498. package/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
  499. package/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
  500. package/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
  501. package/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
  502. package/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
  503. package/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
  504. package/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
  505. package/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
  506. package/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
  507. package/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
  508. package/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
  509. package/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
  510. package/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
  511. package/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
  512. package/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
  513. package/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
  514. package/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
  515. package/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
  516. package/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
  517. package/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
  518. package/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
  519. package/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
  520. package/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
  521. package/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
  522. package/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
  523. package/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
  524. package/vendor/pdfjs/cmaps/H.bcmap +0 -0
  525. package/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
  526. package/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
  527. package/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
  528. package/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
  529. package/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
  530. package/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
  531. package/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
  532. package/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
  533. package/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
  534. package/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
  535. package/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
  536. package/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
  537. package/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
  538. package/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
  539. package/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
  540. package/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
  541. package/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
  542. package/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
  543. package/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
  544. package/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
  545. package/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
  546. package/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
  547. package/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
  548. package/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
  549. package/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
  550. package/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
  551. package/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
  552. package/vendor/pdfjs/cmaps/LICENSE +36 -0
  553. package/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
  554. package/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
  555. package/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
  556. package/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
  557. package/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
  558. package/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
  559. package/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
  560. package/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
  561. package/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
  562. package/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
  563. package/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
  564. package/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
  565. package/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
  566. package/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
  567. package/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
  568. package/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
  569. package/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
  570. package/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
  571. package/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
  572. package/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
  573. package/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
  574. package/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
  575. package/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
  576. package/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
  577. package/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
  578. package/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
  579. package/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
  580. package/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
  581. package/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
  582. package/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
  583. package/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
  584. package/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
  585. package/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
  586. package/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
  587. package/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
  588. package/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
  589. package/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
  590. package/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
  591. package/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
  592. package/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
  593. package/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
  594. package/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
  595. package/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
  596. package/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
  597. package/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
  598. package/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
  599. package/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
  600. package/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
  601. package/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
  602. package/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
  603. package/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
  604. package/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
  605. package/vendor/pdfjs/cmaps/V.bcmap +0 -0
  606. package/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
  607. package/vendor/pdfjs/legacy/build/pdf.min.mjs +27 -0
  608. package/vendor/pdfjs/legacy/build/pdf.worker.min.mjs +27 -0
  609. package/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
  610. package/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
  611. package/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
  612. package/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
  613. package/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
  614. package/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
  615. package/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
  616. package/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
  617. package/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
  618. package/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
  619. package/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
  620. package/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +363 -0
  621. package/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
  622. package/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
  623. package/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
  624. package/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
  625. package/vendor/types/@types/d3/LICENSE +21 -0
  626. package/vendor/types/@types/d3/index.d.ts +39 -0
  627. package/vendor/types/@types/d3/package.json +81 -0
  628. package/vendor/types/@types/d3-array/LICENSE +21 -0
  629. package/vendor/types/@types/d3-array/index.d.ts +1118 -0
  630. package/vendor/types/@types/d3-array/package.json +56 -0
  631. package/vendor/types/@types/d3-axis/LICENSE +21 -0
  632. package/vendor/types/@types/d3-axis/index.d.ts +293 -0
  633. package/vendor/types/@types/d3-axis/package.json +47 -0
  634. package/vendor/types/@types/d3-brush/LICENSE +21 -0
  635. package/vendor/types/@types/d3-brush/index.d.ts +255 -0
  636. package/vendor/types/@types/d3-brush/package.json +42 -0
  637. package/vendor/types/@types/d3-chord/LICENSE +21 -0
  638. package/vendor/types/@types/d3-chord/index.d.ts +471 -0
  639. package/vendor/types/@types/d3-chord/package.json +40 -0
  640. package/vendor/types/@types/d3-color/LICENSE +21 -0
  641. package/vendor/types/@types/d3-color/index.d.ts +669 -0
  642. package/vendor/types/@types/d3-color/package.json +55 -0
  643. package/vendor/types/@types/d3-contour/LICENSE +21 -0
  644. package/vendor/types/@types/d3-contour/index.d.ts +222 -0
  645. package/vendor/types/@types/d3-contour/package.json +38 -0
  646. package/vendor/types/@types/d3-delaunay/LICENSE +21 -0
  647. package/vendor/types/@types/d3-delaunay/index.d.ts +316 -0
  648. package/vendor/types/@types/d3-delaunay/package.json +30 -0
  649. package/vendor/types/@types/d3-dispatch/LICENSE +21 -0
  650. package/vendor/types/@types/d3-dispatch/index.d.ts +96 -0
  651. package/vendor/types/@types/d3-dispatch/package.json +51 -0
  652. package/vendor/types/@types/d3-drag/LICENSE +21 -0
  653. package/vendor/types/@types/d3-drag/index.d.ts +395 -0
  654. package/vendor/types/@types/d3-drag/package.json +42 -0
  655. package/vendor/types/@types/d3-dsv/LICENSE +21 -0
  656. package/vendor/types/@types/d3-dsv/index.d.ts +482 -0
  657. package/vendor/types/@types/d3-dsv/package.json +45 -0
  658. package/vendor/types/@types/d3-ease/LICENSE +21 -0
  659. package/vendor/types/@types/d3-ease/index.d.ts +316 -0
  660. package/vendor/types/@types/d3-ease/package.json +40 -0
  661. package/vendor/types/@types/d3-fetch/LICENSE +21 -0
  662. package/vendor/types/@types/d3-fetch/index.d.ts +282 -0
  663. package/vendor/types/@types/d3-fetch/package.json +37 -0
  664. package/vendor/types/@types/d3-force/LICENSE +21 -0
  665. package/vendor/types/@types/d3-force/index.d.ts +899 -0
  666. package/vendor/types/@types/d3-force/package.json +45 -0
  667. package/vendor/types/@types/d3-format/LICENSE +21 -0
  668. package/vendor/types/@types/d3-format/index.d.ts +337 -0
  669. package/vendor/types/@types/d3-format/package.json +45 -0
  670. package/vendor/types/@types/d3-geo/LICENSE +21 -0
  671. package/vendor/types/@types/d3-geo/index.d.ts +1371 -0
  672. package/vendor/types/@types/d3-geo/package.json +48 -0
  673. package/vendor/types/@types/d3-hierarchy/LICENSE +21 -0
  674. package/vendor/types/@types/d3-hierarchy/index.d.ts +928 -0
  675. package/vendor/types/@types/d3-hierarchy/package.json +50 -0
  676. package/vendor/types/@types/d3-interpolate/LICENSE +21 -0
  677. package/vendor/types/@types/d3-interpolate/index.d.ts +387 -0
  678. package/vendor/types/@types/d3-interpolate/package.json +47 -0
  679. package/vendor/types/@types/d3-path/LICENSE +21 -0
  680. package/vendor/types/@types/d3-path/index.d.ts +108 -0
  681. package/vendor/types/@types/d3-path/package.json +41 -0
  682. package/vendor/types/@types/d3-polygon/LICENSE +21 -0
  683. package/vendor/types/@types/d3-polygon/index.d.ts +41 -0
  684. package/vendor/types/@types/d3-polygon/package.json +40 -0
  685. package/vendor/types/@types/d3-quadtree/LICENSE +21 -0
  686. package/vendor/types/@types/d3-quadtree/index.d.ts +204 -0
  687. package/vendor/types/@types/d3-quadtree/package.json +45 -0
  688. package/vendor/types/@types/d3-random/LICENSE +21 -0
  689. package/vendor/types/@types/d3-random/index.d.ts +313 -0
  690. package/vendor/types/@types/d3-random/package.json +41 -0
  691. package/vendor/types/@types/d3-scale/LICENSE +21 -0
  692. package/vendor/types/@types/d3-scale/index.d.ts +2669 -0
  693. package/vendor/types/@types/d3-scale/package.json +53 -0
  694. package/vendor/types/@types/d3-scale-chromatic/LICENSE +21 -0
  695. package/vendor/types/@types/d3-scale-chromatic/index.d.ts +520 -0
  696. package/vendor/types/@types/d3-scale-chromatic/package.json +46 -0
  697. package/vendor/types/@types/d3-selection/LICENSE +21 -0
  698. package/vendor/types/@types/d3-selection/index.d.ts +1210 -0
  699. package/vendor/types/@types/d3-selection/package.json +56 -0
  700. package/vendor/types/@types/d3-shape/LICENSE +21 -0
  701. package/vendor/types/@types/d3-shape/index.d.ts +2792 -0
  702. package/vendor/types/@types/d3-shape/package.json +53 -0
  703. package/vendor/types/@types/d3-time/LICENSE +21 -0
  704. package/vendor/types/@types/d3-time/index.d.ts +697 -0
  705. package/vendor/types/@types/d3-time/package.json +46 -0
  706. package/vendor/types/@types/d3-time-format/LICENSE +21 -0
  707. package/vendor/types/@types/d3-time-format/index.d.ts +202 -0
  708. package/vendor/types/@types/d3-time-format/package.json +40 -0
  709. package/vendor/types/@types/d3-timer/LICENSE +21 -0
  710. package/vendor/types/@types/d3-timer/index.d.ts +68 -0
  711. package/vendor/types/@types/d3-timer/package.json +45 -0
  712. package/vendor/types/@types/d3-transition/LICENSE +21 -0
  713. package/vendor/types/@types/d3-transition/index.d.ts +664 -0
  714. package/vendor/types/@types/d3-transition/package.json +47 -0
  715. package/vendor/types/@types/d3-zoom/LICENSE +21 -0
  716. package/vendor/types/@types/d3-zoom/index.d.ts +611 -0
  717. package/vendor/types/@types/d3-zoom/package.json +48 -0
  718. package/vendor/types/@types/geojson/LICENSE +21 -0
  719. package/vendor/types/@types/geojson/index.d.ts +202 -0
  720. package/vendor/types/@types/geojson/package.json +46 -0
  721. package/vendor/typescript/LICENSE.txt +55 -0
  722. package/vendor/typescript/lib.decorators.d.ts +384 -0
  723. package/vendor/typescript/lib.decorators.legacy.d.ts +22 -0
  724. package/vendor/typescript/lib.dom.d.ts +39429 -0
  725. package/vendor/typescript/lib.dom.iterable.d.ts +571 -0
  726. package/vendor/typescript/lib.es2015.collection.d.ts +147 -0
  727. package/vendor/typescript/lib.es2015.core.d.ts +597 -0
  728. package/vendor/typescript/lib.es2015.d.ts +28 -0
  729. package/vendor/typescript/lib.es2015.generator.d.ts +77 -0
  730. package/vendor/typescript/lib.es2015.iterable.d.ts +605 -0
  731. package/vendor/typescript/lib.es2015.promise.d.ts +81 -0
  732. package/vendor/typescript/lib.es2015.proxy.d.ts +128 -0
  733. package/vendor/typescript/lib.es2015.reflect.d.ts +144 -0
  734. package/vendor/typescript/lib.es2015.symbol.d.ts +46 -0
  735. package/vendor/typescript/lib.es2015.symbol.wellknown.d.ts +326 -0
  736. package/vendor/typescript/lib.es2016.array.include.d.ts +116 -0
  737. package/vendor/typescript/lib.es2016.d.ts +21 -0
  738. package/vendor/typescript/lib.es2016.intl.d.ts +31 -0
  739. package/vendor/typescript/lib.es2017.arraybuffer.d.ts +21 -0
  740. package/vendor/typescript/lib.es2017.d.ts +26 -0
  741. package/vendor/typescript/lib.es2017.date.d.ts +31 -0
  742. package/vendor/typescript/lib.es2017.intl.d.ts +44 -0
  743. package/vendor/typescript/lib.es2017.object.d.ts +49 -0
  744. package/vendor/typescript/lib.es2017.sharedmemory.d.ts +135 -0
  745. package/vendor/typescript/lib.es2017.string.d.ts +45 -0
  746. package/vendor/typescript/lib.es2017.typedarrays.d.ts +53 -0
  747. package/vendor/typescript/lib.es2018.asyncgenerator.d.ts +77 -0
  748. package/vendor/typescript/lib.es2018.asynciterable.d.ts +53 -0
  749. package/vendor/typescript/lib.es2018.d.ts +24 -0
  750. package/vendor/typescript/lib.es2018.intl.d.ts +83 -0
  751. package/vendor/typescript/lib.es2018.promise.d.ts +30 -0
  752. package/vendor/typescript/lib.es2018.regexp.d.ts +37 -0
  753. package/vendor/typescript/lib.es2019.array.d.ts +79 -0
  754. package/vendor/typescript/lib.es2019.d.ts +24 -0
  755. package/vendor/typescript/lib.es2019.intl.d.ts +23 -0
  756. package/vendor/typescript/lib.es2019.object.d.ts +33 -0
  757. package/vendor/typescript/lib.es2019.string.d.ts +37 -0
  758. package/vendor/typescript/lib.es2019.symbol.d.ts +24 -0
  759. package/vendor/typescript/lib.es2020.bigint.d.ts +765 -0
  760. package/vendor/typescript/lib.es2020.d.ts +27 -0
  761. package/vendor/typescript/lib.es2020.date.d.ts +42 -0
  762. package/vendor/typescript/lib.es2020.intl.d.ts +474 -0
  763. package/vendor/typescript/lib.es2020.number.d.ts +28 -0
  764. package/vendor/typescript/lib.es2020.promise.d.ts +47 -0
  765. package/vendor/typescript/lib.es2020.sharedmemory.d.ts +99 -0
  766. package/vendor/typescript/lib.es2020.string.d.ts +44 -0
  767. package/vendor/typescript/lib.es2020.symbol.wellknown.d.ts +41 -0
  768. package/vendor/typescript/lib.es2021.d.ts +23 -0
  769. package/vendor/typescript/lib.es2021.intl.d.ts +166 -0
  770. package/vendor/typescript/lib.es2021.promise.d.ts +48 -0
  771. package/vendor/typescript/lib.es2021.string.d.ts +33 -0
  772. package/vendor/typescript/lib.es2021.weakref.d.ts +78 -0
  773. package/vendor/typescript/lib.es2022.array.d.ts +121 -0
  774. package/vendor/typescript/lib.es2022.d.ts +25 -0
  775. package/vendor/typescript/lib.es2022.error.d.ts +75 -0
  776. package/vendor/typescript/lib.es2022.intl.d.ts +145 -0
  777. package/vendor/typescript/lib.es2022.object.d.ts +26 -0
  778. package/vendor/typescript/lib.es2022.regexp.d.ts +39 -0
  779. package/vendor/typescript/lib.es2022.string.d.ts +25 -0
  780. package/vendor/typescript/lib.es5.d.ts +4601 -0
  781. package/vendor/typescript/package.json +4 -0
  782. package/vendor/typescript/typescript.js +446 -0
  783. package/web/assets/index-B6Ai3wsa.js +13 -0
  784. package/web/assets/index-SYPC3EZy.css +1 -0
  785. package/web/index.html +14 -0
@@ -0,0 +1,143 @@
1
+ // The format's old names, made new (2026-10-26). Until then the HTML a report is written in named
2
+ // its kit with "report": classes report-*, attributes data-report-*, custom properties --report-*,
3
+ // globals and SDK types Report*, events report-*-change. They are doc-*, data-doc-*, --doc-* and
4
+ // Doc* now (docs/render.md, "Names"). A file written before, an Agent that still writes the old
5
+ // names (the user's own 写作偏好 may teach them for good) and an export made before all keep
6
+ // working: the tools read a report's text through newNames (new-names.mjs) where they already make
7
+ // its natural HTML the kit's (source/natural.mjs naturalize: the preview before showing it, the
8
+ // first edit, gallery check, build, export and ids, gallery import) and where they read a page of
9
+ // Gallery's own made elsewhere (an import of an export, a paste: newDomNames below), so every reader past those reads the new names
10
+ // only, and a file takes them the next time a tool writes it. The kit's runtime answers to the old
11
+ // globals too (window.ReportCharts is DocCharts), for a script of the report's folder that no
12
+ // tool rewrites.
13
+ //
14
+ // The old names are a closed set: those the kit had on 2026-10-26 (the rename's table), never one
15
+ // added since. A class written report-<name> of none of them (a typo) is left as written, for the
16
+ // checks to say as the file writes it (component-checks.mjs). An id the report spelled as an old
17
+ // name (id="report-summary") is renamed with everything of the file that names it (its selectors and
18
+ // script strings, href="#…", for, aria-*), so they still meet; inside the report's own <style> and
19
+ // <script> a whole old name is renamed wherever it stands, their comments too. Nothing else of the
20
+ // file changes: its text and comments, other ids, slugs (report-2) and paths (assets/report-chart.png)
21
+ // stay as written; what the product is named after (gallery, html-report-studio, /__gallery/edit/) is no name
22
+ // of the format.
23
+
24
+ /** The kit's old class, keyframe, event and meta names: report-<name> for each, now doc-<name>. */
25
+ export const OLD_NAMES = new Set([
26
+ "accent", "align-", "align-center", "align-left", "align-right", "annotations-changed", "assets-changed", "bar", "bar-series", "bar-shares",
27
+ "bold", "bookmark", "bookmark-card", "bookmark-cover", "bookmark-description", "bookmark-href", "bookmark-icon", "bookmark-text",
28
+ "bookmark-title", "bookmark-url", "button", "callout", "card", "chart", "chart-message", "charts", "checks", "checks-layout", "checks-live",
29
+ "code", "code--folded", "code--nowrap", "code--wrap", "code-block", "code-card", "code-content", "code-copy", "code-fold", "code-header",
30
+ "code-language", "code-line", "code-line--", "code-line--added", "code-line--folded", "code-line--hidden", "code-line--removed",
31
+ "code-line-fold", "code-line-more", "code-lines", "code-range", "code-run", "code-separator", "code-title", "code-toolbar", "code-tools",
32
+ "code-wrap", "column", "columns", "details", "details-content", "details-summary-label", "dialog", "dialog-close", "dialog-content",
33
+ "dialog-fade", "dialog-header", "dialog-in", "dialog-open", "dialog-panel", "dialog-title", "dialog-trigger", "dialogs", "diff", "diff-",
34
+ "diff-added", "diff-body", "diff-removed", "diff-stats", "display", "display-button", "display-check", "display-header", "display-icon",
35
+ "display-item", "display-label", "display-menu", "display-section", "display-switch", "edit-map", "embed", "embed--file", "embed-frame",
36
+ "export-copy-done", "export-id", "export-source", "figure", "figure--compact", "figure-caption", "file", "file-link", "file-name",
37
+ "file-size", "filter", "filter-button", "filter-row", "flow", "flow-right", "grid", "grid-3", "header", "hero", "highlight", "highlight-",
38
+ "highlight-blue", "highlight-brown", "highlight-gray", "highlight-green", "highlight-orange", "highlight-pink", "highlight-purple",
39
+ "highlight-red", "highlight-yellow", "icon", "image", "image--center", "image--left", "image--right", "image--wide", "image-like", "kicker",
40
+ "kit-error", "layout-change", "lead", "lede", "legend", "link-mention", "link-mention-icon", "link-mention-title", "math", "math-",
41
+ "math-block", "math-break", "math-inline", "math-joiner", "math-tie", "note", "page", "panel", "pie-", "pie-center", "pie-labels",
42
+ "pie-slice", "pie-slices", "plot-clip", "plot-clip-", "prose", "prose-h1", "prose-h2", "prose-h3", "prose-h4", "range", "reference-legend",
43
+ "reveal", "scrollbar", "scrollbar--x", "scrollbar--y", "scrollbar-thumb", "scrollbars", "scrollbars-frame", "section",
44
+ "section--no-divider", "section-header", "sheet-dock", "sheet-shell", "sheet-shell--plain", "sheet-tab", "sheet-tabs", "sheets", "sheets-",
45
+ "source", "source-changed", "state", "state-actions", "state-field", "state-fields", "state-grid", "state-group", "state-list",
46
+ "state-status", "summary", "swatch", "tab", "table", "table--auto", "table--full", "table--sticky-first", "table-meta", "table-sort",
47
+ "table-sort-button", "table-wrap", "tables", "text-", "text-blue", "text-brown", "text-cyan", "text-gray", "text-green", "text-orange",
48
+ "text-pink", "text-purple", "text-red", "text-teal", "text-yellow", "theme-change", "theme-request", "title", "todo", "tokens", "tooltip",
49
+ "tooltip-row", "underline-", "underline-blue", "underline-orange", "underline-plain", "underline-purple", "underline-thick",
50
+ "underline-thin", "valign-", "valign-bottom", "valign-middle", "valign-top", "zoom", "zoom-", "zoom-caption", "zoom-close", "zoom-fade",
51
+ "zoom-grow", "zoom-gutter", "zoom-hover", "zoom-open", "zoom-picture",
52
+ ]);
53
+
54
+ /** The kit's old globals and SDK types: Report<name> for each, now Doc<name>. */
55
+ export const OLD_GLOBALS = [
56
+ "ChartBaseOptions", "ChartDrawContext", "ChartHandle", "ChartPart", "ChartPartContext", "Charts", "ChartsApi", "ChartState", "Code",
57
+ "Dialogs", "DialogsApi", "DotDatum", "DrawnChartHandle", "Kit", "Math", "MathApi", "PieDatum", "SharedChartOptions", "SharedChartType",
58
+ "Sheets", "SheetsApi", "SheetsHandle", "SortDirection", "SortType", "State", "StateChange", "StateFactory", "StateOptions",
59
+ "TableChartChoices", "TableChartOptions", "TableChoices", "Tables", "TablesApi", "TableSeriesChoices", "TableSortDetail", "TableState",
60
+ "Tokens", "TokensApi", "TokenSnapshot", "ValueFormat",
61
+ ];
62
+
63
+ // A name of the old set where it stands as a whole (a class, a selector's, a keyframe's, an event's,
64
+ // an id's, a string's), never inside another word (html-report-studio, x-report-studio-*, x-gallery-*) and never
65
+ // a file's name (assets/report-chart.png, report-chart.png: a path stays as the folder has it).
66
+ const FILE_TYPE = "png|jpe?g|gif|svg|webp|avif|bmp|ico|css|js|mjs|cjs|ts|json|html?|xml|pdf|csv|tsv|txt|md|woff2?|ttf|otf|mp4|webm|mov|mp3|wav|ogg|zip";
67
+ const NAME = new RegExp(String.raw`(?<![\w$/-])report-([a-z0-9]+(?:-{1,2}[a-z0-9]+)*-{0,2})(?![\w-])(?!\.(?:${FILE_TYPE})(?![\w-]))`, "g");
68
+ // The SDK's files were report-*.d.ts (sdk/report-charts.d.ts): a script's type import names them by path.
69
+ const SDK_FILE = /(\bsdk\/)report-(?=[a-z])/g;
70
+ // An id named where an attribute points to one (href="#report-summary", data-doc-dialog-open="#…",
71
+ // fill="url(#report-grad)"): its old name new, as the id's own is (ID_LISTS).
72
+ const ID_REFERENCE = /(?<=^|[\s(,'"=])#report-([a-z0-9]+(?:-{1,2}[a-z0-9]+)*)(?![\w-])/g;
73
+ // The attributes whose value is ids (an element's own, or those it points to).
74
+ const ID_LISTS = /^(?:id|for|headers|list|form|aria-(?:labelledby|describedby|controls|owns|activedescendant|details|errormessage|flowto))$/i;
75
+ const ATTRIBUTE = /(?<![\w-])data-report-(?=[\w$])/gi;
76
+ const PROPERTY = /(?<![\w-])--report-(?=[\w$])/gi;
77
+ const DATASET = /\b(dataset\??\.)report(?=[A-Z])/g;
78
+ const GLOBAL = new RegExp(`\\bReport(?=(?:${[...OLD_GLOBALS].sort((a, b) => b.length - a.length).join("|")})\\b)`, "g");
79
+ const FONT = /\bReport Segoe\b/g; // the kit's alias of Segoe UI (styles/tokens.css)
80
+ // What a text needs to hold for any of these to be in it: most files hold none, and are not parsed.
81
+ const ANY = /report-|Report(?:[A-Z]| Segoe)|\.report[A-Z]/;
82
+
83
+ /**
84
+ * Whether a class is in the kit's namespace: doc-*, or report-* left as written (none of the old set:
85
+ * a typo of an old name), which the checks say as the kit's (no class of its, did you mean …), never
86
+ * taking it for a class of the report's own.
87
+ */
88
+ export const kitNamespace = (name) => /^(?:doc|report)-/.test(name);
89
+
90
+ /** A name in the kit's namespace as the kit's new names spell it (report-calout: doc-calout), to compare. */
91
+ export const asDocName = (name) => name.replace(/^report-/, "doc-");
92
+
93
+ /** Whether a text may hold an old name: most hold none, and need not be read again. */
94
+ export const mayHoldOldNames = (text) => ANY.test(text);
95
+
96
+ /** A class attribute's value (or a list of classes, a meta's name) with its old names new: those of the old set alone. */
97
+ export const newClassNames = (text) => text.replace(NAME, (whole, name) => (OLD_NAMES.has(name) ? `doc-${name}` : whole));
98
+
99
+ /** An attribute's name with its old prefix new (data-report-id: data-doc-id). */
100
+ export const newAttributeName = (name) => name.replace(ATTRIBUTE, "data-doc-");
101
+
102
+ /** A text's custom properties new (--report-ink: --doc-ink), as any attribute's value may name them (an SVG's fill). */
103
+ export const newProperties = (text) => text.replace(PROPERTY, "--doc-");
104
+
105
+ /**
106
+ * An attribute's value with the old names new, by what the attribute holds: a class list (a meta's
107
+ * name too), ids (id, for, aria-labelledby …: an id spelled as an old name is renamed with the
108
+ * selectors and script strings that name it, so they still meet), a style, or anything else (custom
109
+ * properties, and an id it points to: href="#report-summary"). Code (on*, javascript:) is the caller's.
110
+ */
111
+ export const newAttributeValue = (name, value, tag) => (name === "class" || (name === "name" && tag === "meta") || ID_LISTS.test(name)
112
+ ? newClassNames(value)
113
+ : name === "style" ? newStyleNames(value)
114
+ : newProperties(value).replace(ID_REFERENCE, (whole, old) => (OLD_NAMES.has(old) ? `#doc-${old}` : whole)));
115
+
116
+ const names = newClassNames;
117
+ const properties = newProperties;
118
+
119
+ /** A stylesheet's text (a <style>'s, a style attribute's) with the old names new. */
120
+ export const newStyleNames = (text) => properties(names(text.replace(ATTRIBUTE, "data-doc-").replace(FONT, "Doc Segoe")));
121
+
122
+ /** A script's text (a <script>'s, an on* attribute's, a javascript: address) with the old names new. */
123
+ export const newScriptNames = (text) => newStyleNames(text).replace(DATASET, "$1doc").replace(GLOBAL, "Doc").replace(SDK_FILE, "$1doc-");
124
+
125
+
126
+ /**
127
+ * The old names in a DOM made new where they stand (what another program pasted: a page or an export
128
+ * of Gallery (HTML Report Studio then) made before 2026-10-26, its classes and attributes as its page had them): every
129
+ * element under `root`, its data-report-* attributes and their values (classes, ids and what points
130
+ * to one, style, custom properties: newAttributeValue). Text is left as it is.
131
+ */
132
+ export function newDomNames(root) {
133
+ for (const element of root.querySelectorAll("*")) {
134
+ for (const { name, value } of [...element.attributes]) {
135
+ const renamed = newAttributeName(name);
136
+ const next = newAttributeValue(name, value, element.localName);
137
+ if (renamed === name && next === value) continue;
138
+ if (renamed !== name) element.removeAttribute(name);
139
+ element.setAttribute(renamed, next);
140
+ }
141
+ }
142
+ return root;
143
+ }
@@ -0,0 +1,140 @@
1
+ import { pageLink, pageOfLink } from "./page-links.mjs";
2
+
3
+ // A document's address, as a link, a paste or the address bar may write it (docs/workbench.md, "A
4
+ // document's addresses"), read in one place: { slug, block }, block null for the page itself. Pure: the
5
+ // link card, a paste, a click, the workbench's address and the checks all come here, and a click
6
+ // stays synchronous, for only one form asks for a list.
7
+ //
8
+ // In a file there is one form, an ordinary link between two ordinary files: ../<slug>/doc.html (an old
9
+ // document's ../<slug>/report.html), with #<block id> for a block; #<block id> within a page, which
10
+ // names no page and is no business of this module's. It holds no port and no title, and a slug in a
11
+ // file is no address a reader sees. On this computer's own host (127.0.0.1 or localhost) or as a path
12
+ // alone, a document is also /generated/<slug>.html (its page, with any query) and /<slug>/doc.html,
13
+ // each with #<block id>, and in a workbench's address /#<link>/<block id> and /#<link> (shared/page-links.mjs:
14
+ // its title's words and its page id), the one form a whole address is written in (fullAddress), the
15
+ // words as they are; a page id alone or a slug in its place reads as well. A workbench's address is the
16
+ // one form that needs `links` (pageLinks: a Map of slug to link), for only the list can say which
17
+ // document an id is or whether a name is a slug at all; given, `links` also turns away every slug it
18
+ // does not hold. Without it such an address is none here, and workbenchHash hands it to the workbench,
19
+ // which has the list. pageAddress reads no port, as a link outlives a server; but this computer runs
20
+ // other programs too, and other workspaces, whose folder of one name has one page id, so an address
21
+ // on another port (elsewhere) is a document's only if the list holds it, by its folder name or its
22
+ // link of now (addressOn).
23
+
24
+ const SLUG = "[a-z0-9]+(?:-[a-z0-9]+)*"; // shared/workspace.mjs slugPattern, which needs Node
25
+ const FILE = "(?:doc|report)\\.html";
26
+ const IN_FILE = new RegExp(`^\\.\\./(${SLUG})/${FILE}(?:#(.*))?$`);
27
+ const PAGE = new RegExp(`^/generated/(${SLUG})\\.html$`);
28
+ const OWN_FILE = new RegExp(`^/(${SLUG})/${FILE}$`);
29
+ const LOOPBACK = new Set(["127.0.0.1", "localhost"]);
30
+ const HOSTED = /^(?:https?:)?\/\//i;
31
+
32
+ /** A hash or a part of an address as words: as it is written where it is no good encoding. */
33
+ export const decoded = (text) => {
34
+ try {
35
+ return decodeURIComponent(text);
36
+ } catch {
37
+ return text;
38
+ }
39
+ };
40
+
41
+ // `text` as an address of this computer's own host, read as the page reads a path: a URL, or null.
42
+ function ownAddress(text) {
43
+ try {
44
+ const url = new URL(text, "http://127.0.0.1");
45
+ return /^https?:$/.test(url.protocol) && LOOPBACK.has(url.hostname) && /^(?:https?:|\/)/i.test(text) ? url : null;
46
+ } catch {
47
+ return null;
48
+ }
49
+ }
50
+
51
+ /**
52
+ * What a workbench's hash says, decoded, of the documents of `links`: a link or a slug, with a block
53
+ * or without (neither ever holds "/"). Else null, as with no `links` to read it by.
54
+ * @param {string} hash
55
+ * @param {Map<string, string> | null} [links]
56
+ */
57
+ export function hashAddress(hash, links = null) {
58
+ const at = hash.indexOf("/");
59
+ const name = at < 0 ? hash : hash.slice(0, at);
60
+ const block = at < 0 ? null : hash.slice(at + 1) || null;
61
+ const slug = links && pageOfLink(links, name);
62
+ return slug ? { slug, block } : null;
63
+ }
64
+
65
+ /** The document and block `text` is the address of ({ slug, block }), or null: a web address, another host, a slug `links` does not hold, a workbench's address with no `links`. */
66
+ export function pageAddress(text, links = null) {
67
+ const address = String(text ?? "").trim();
68
+ const known = (slug, block) => (!links || links.has(slug) ? { slug, block: block || null } : null);
69
+ const inFile = IN_FILE.exec(address);
70
+ if (inFile) return known(inFile[1], decoded(inFile[2] ?? ""));
71
+ const url = ownAddress(address);
72
+ if (!url) return null;
73
+ const path = PAGE.exec(url.pathname) ?? OWN_FILE.exec(url.pathname);
74
+ if (path) return known(path[1], decoded(url.hash.slice(1)));
75
+ return url.pathname === "/" && url.hash.length > 1 ? hashAddress(decoded(url.hash.slice(1)), links) : null;
76
+ }
77
+
78
+ /** The document and block `text` names of those in `links`: an address, as pageAddress reads one, or what stands after the # of a workbench's, the # with it or not, or after the Windows path Git Bash puts in place of a word's first / (/#<link>), as a person may hand a command one. Else null. */
79
+ export const namedPlace = (text, links) => pageAddress(text, links) ?? hashAddress(decoded(text.replace(/^(?:[a-z]:\/(?:.*\/)?)?#/i, "")), links);
80
+
81
+ /** The hash of an address of a workbench (/#<anything>, on this computer's own host), decoded, or null: what a click hands the workbench to read. */
82
+ export function workbenchHash(text) {
83
+ const url = ownAddress(String(text ?? "").trim());
84
+ return url?.pathname === "/" && url.hash.length > 1 ? decoded(url.hash.slice(1)) : null;
85
+ }
86
+
87
+ /**
88
+ * The document and block `text` names of those in `links` (a Map, or null with no list) as read on the
89
+ * server of `origin`, as pageAddress reads it; but a workbench's address on another port says what it
90
+ * is by its words, the folder name or the link the document has now, for the same id there may be
91
+ * another workspace's page. With no `origin`, as a file is read, every port is another.
92
+ * @param {string} text
93
+ * @param {Map<string, string> | null} links
94
+ * @param {string} [origin]
95
+ */
96
+ export function addressOn(text, links, origin = "http://127.0.0.1") {
97
+ const place = pageAddress(text, links);
98
+ const name = place && elsewhere(text, origin) ? workbenchHash(text)?.split("/")[0] : undefined;
99
+ return name === undefined || links.has(name) || links.get(place.slug) === name ? place : null;
100
+ }
101
+
102
+ /** Whether `text` is an address of a document of this workspace, as far as can be told with no list. */
103
+ export const isPageAddress = (text) => pageAddress(text) !== null || workbenchHash(text) !== null;
104
+
105
+ /** Whether `text` may be one, once the list is read (a paste reads it): an address of this computer's own host. */
106
+ export const mayBePage = (text) => ownAddress(String(text ?? "").trim()) !== null;
107
+
108
+ /** Whether `href` is written as a file writes a link to a document or a block: all a page block's address may be. */
109
+ export const isFileLink = (href) => IN_FILE.test(href) || /^#[^\s"<>]+$/.test(href);
110
+
111
+ /** The link a file writes to a document or block, from document `own`: within it a block is #<block id>. */
112
+ export const fileLink = ({ slug, block = null }, own = null) => (slug === own && block ? `#${block}` : `../${slug}/doc.html${block ? `#${block}` : ""}`);
113
+
114
+ /** Whether `text` names a host of its own, where a path or a relative link is read on the server that shows it. */
115
+ export const hosted = (text) => HOSTED.test(String(text ?? "").trim());
116
+
117
+ /** Whether `text` is an address of this computer on another server than `origin`'s, which may be another program's. */
118
+ export function elsewhere(text, origin) {
119
+ const url = hosted(text) ? ownAddress(text.trim()) : null;
120
+ return url !== null && url.port !== new URL(origin).port;
121
+ }
122
+
123
+ /** Where `href`, a link in the file of document `own`, leads, read beside that file as the disk reads it: an address on `origin`, or null for none. */
124
+ export function fromFile(href, own, origin = "http://127.0.0.1") {
125
+ try {
126
+ return new URL(String(href ?? "").trim(), `${origin}/${own}/doc.html`).href;
127
+ } catch {
128
+ return null;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * The full address of a document or block, which a browser opens in a workbench from anywhere
134
+ * (`origin`: its server's): /#<link>/<block id>, or /#<link> for a page, in the words as they are. A
135
+ * document `links` does not hold goes by its page id, which opens it all the same.
136
+ * @param {string} origin
137
+ * @param {{ slug: string, block?: string | null }} place
138
+ * @param {Map<string, string> | null} [links]
139
+ */
140
+ export const fullAddress = (origin, { slug, block = null }, links = null) => `${origin}/#${links?.get(slug) ?? pageLink({ slug })}${block ? `/${block}` : ""}`;
@@ -0,0 +1,86 @@
1
+ // A document's link in the workbench's address (#项目周报-Q3-k3xv9q2a): its title in the words a link can
2
+ // hold, the rest of it dashes, then the document's page id; a title that leaves no words is the id
3
+ // alone. The words are a label and nothing more: a link is read by what stands after its last dash,
4
+ // so that an address written down before a rename opens its document for ever, and two documents of
5
+ // one title need nothing to tell them apart.
6
+ //
7
+ // A page id has the look of a block id (shared/ids.mjs) and is worked out from the folder name, the
8
+ // document's identity, which a title never changes. So nothing is kept anywhere: no file, no list to
9
+ // keep in step, and a page alone in a tab or with no list read yet can always say its own address.
10
+ // The folder name opens its document too, for what was written by it. A document in the trash has its
11
+ // id, and has its address back when it is restored; one restored under another folder name goes by
12
+ // that name's id, as the links of files to it change too.
13
+ //
14
+ // Pure, and the same on the server, in the workbench and on a page, so that a title typed shows in the
15
+ // address at once. Only the documents of the sidebar and of the trash go by a link: 写作偏好 stands
16
+ // outside the tree of pages.
17
+
18
+ // What is no word of a title, a mark going with what it sits on (an emoji's variation selector).
19
+ const NOT_WORDS = /(?:[^\p{L}\p{M}\p{N}_]\p{M}*)+/gu;
20
+
21
+ /**
22
+ * A document's page id: eight letters and digits, a letter first, from a 53-bit hash of its folder
23
+ * name (cyrb53).
24
+ * @param {string} slug
25
+ */
26
+ export function pageId(slug) {
27
+ let one = 0xdeadbeef;
28
+ let two = 0x41c6ce57;
29
+ for (let at = 0; at < slug.length; at++) {
30
+ one = Math.imul(one ^ slug.charCodeAt(at), 2654435761);
31
+ two = Math.imul(two ^ slug.charCodeAt(at), 1597334677);
32
+ }
33
+ one = Math.imul(one ^ (one >>> 16), 2246822507) ^ Math.imul(two ^ (two >>> 13), 3266489909);
34
+ two = Math.imul(two ^ (two >>> 16), 2246822507) ^ Math.imul(one ^ (one >>> 13), 3266489909);
35
+ const hash = (two >>> 0) % 2 ** 21 * 2 ** 32 + (one >>> 0);
36
+ return String.fromCharCode(97 + hash % 26) + Math.floor(hash / 26).toString(36).padStart(7, "0").slice(-7);
37
+ }
38
+
39
+ /**
40
+ * A document's link, what stands after # in its address: its title's words and its page id, the id
41
+ * alone for a title that leaves no words or one not known here.
42
+ * @param {{ slug: string, title?: string }} page
43
+ */
44
+ export function pageLink({ slug, title }) {
45
+ const words = String(title ?? "").replace(NOT_WORDS, "-").replace(/^[-\p{M}]+|-+$/gu, "");
46
+ return words ? `${words}-${pageId(slug)}` : pageId(slug);
47
+ }
48
+
49
+ /**
50
+ * Each document's link: a Map of slug to link, which is also the list of documents an address is read
51
+ * against (pageOfLink).
52
+ * @param {{ slug: string, title?: string }[]} pages
53
+ * @returns {Map<string, string>}
54
+ */
55
+ export const pageLinks = (pages) => new Map(pages.map((page) => [page.slug, pageLink(page)]));
56
+
57
+ /**
58
+ * The document `value` names of those in `links`: by its folder name, else by the page id after the
59
+ * last dash of a link, or that id alone, whatever words stand before it. Its slug, or null.
60
+ * @param {Map<string, string>} links
61
+ * @param {string} value
62
+ */
63
+ export function pageOfLink(links, value) {
64
+ if (links.has(value)) return value;
65
+ const id = value.slice(value.lastIndexOf("-") + 1);
66
+ for (const slug of links.keys()) if (pageId(slug) === id) return slug;
67
+ return null;
68
+ }
69
+
70
+ /**
71
+ * Whether `name` (a slug or a link, what stands before any "/" of an address) names a document of the trash ({ slug, title } each).
72
+ * @param {{ slug: string, title?: string }[]} trash
73
+ * @param {string} name
74
+ */
75
+ export const inTrash = (trash, name) => pageOfLink(pageLinks(trash), name.split("/")[0]) !== null;
76
+
77
+ /**
78
+ * What an address written for anyone goes by: `links` and the links of the trash (`trash`: { slug,
79
+ * title } each).
80
+ * @param {Map<string, string>} links
81
+ * @param {{ slug: string, title?: string }[]} trash
82
+ */
83
+ export const namedLinks = (links, trash) => new Map([...pageLinks(trash), ...links]);
84
+
85
+ /** The pages of a list of reports (`reports` of the outline's answer) that hold a link: all but 写作偏好. */
86
+ export const linkedPages = (reports) => Object.values(reports).filter(({ instructions }) => !instructions);
@@ -0,0 +1,73 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { findWorkspace, layoutOf } from "./workspace.mjs";
5
+
6
+ // Where everything is on disk, for every system, in two kinds: the workspace's (the user's documents
7
+ // and what Gallery keeps of them: ./workspace.mjs) and the package's (Gallery's own files). Only paths
8
+ // are computed here, at import, and nothing is made: the gallery command sets GALLERY_WORKSPACE (from
9
+ // --workspace, or the workspace it found) before it imports anything that imports this; npm run dev
10
+ // sets it to the repository's reports/ (vite.config.ts), the tests to folders of their own.
11
+
12
+ // The package: the folder up from this file whose package.json is @heycys/gallery's (src/shared/ here,
13
+ // a dist/ chunk in the release).
14
+ function findPackageRoot() {
15
+ for (let directory = path.dirname(fileURLToPath(import.meta.url)); ; directory = path.dirname(directory)) {
16
+ try {
17
+ if (JSON.parse(readFileSync(path.join(directory, "package.json"), "utf8")).name === "@heycys/gallery") return directory;
18
+ } catch {}
19
+ if (path.dirname(directory) === directory) return path.resolve(path.dirname(fileURLToPath(import.meta.url)), "..", "..");
20
+ }
21
+ }
22
+ export const packageRoot = findPackageRoot();
23
+ /** The package's folder (its old name, which the tests and the maintainers' scripts use). */
24
+ export const projectRoot = packageRoot;
25
+ /**
26
+ * Whether this is the release build (npm run release:build, src/cli/release-build.mjs): release.json in
27
+ * the package, which says its version and the stamps of its files (src/server/stamps.mjs). Gallery's
28
+ * own files are then the package's folders (dist/, web/, browser/, kit/, vendor/…), else the source
29
+ * checkout's (src/, public/, node_modules/).
30
+ */
31
+ export const releaseFile = path.join(packageRoot, "release.json");
32
+ export const release = existsSync(releaseFile);
33
+
34
+ // The workspace: the user's documents (<workspace>/<slug>/) and what is made of them.
35
+ export const workspaceRoot = path.resolve(process.env.GALLERY_WORKSPACE || findWorkspace().root);
36
+ const workspace = layoutOf(workspaceRoot);
37
+ /** The documents' folder: the workspace's root (its old name, which 60 modules import). */
38
+ export const reportsDirectory = workspaceRoot;
39
+ export const generatedDirectory = workspace.built; // built previews (nothing serves them: the export builds through them)
40
+ export const exportsDirectory = workspace.exports; // the offline deliverables, the user's
41
+ export const qaDirectory = workspace.qa; // gallery qa's pictures of what it flagged in an export
42
+ export const backupsDirectory = workspace.backups; // documents as they were before a migration (add-block-ids.mjs)
43
+ export const editStateDirectory = workspace.state; // the editor's token, snapshots, recent versions…
44
+ // What a server a command started says while it runs (it runs on after that command).
45
+ export const previewLogFile = workspace.serverLog;
46
+
47
+ // Gallery's own files, which a command never writes (a global install may be read-only): the shared
48
+ // kit and the starter, what the preview serves, what the checks and the import read. In the release
49
+ // each is a folder of the package (docs/internals.md, "Packaging"); in the source checkout, where it is
50
+ // kept or built (npm run dev's predev writes public/kit and public/vendor: src/cli/build-kit.mjs).
51
+ const inPackage = (built, ...source) => path.join(packageRoot, ...(release ? built : source));
52
+ export const kitSourceDirectory = path.join(packageRoot, "src", "render", "kit"); // the source checkout's only
53
+ export const starterDirectory = inPackage(["starter"], "src", "render", "starter");
54
+ export const vendorDirectory = inPackage(["vendor"], "public", "vendor");
55
+ export const kitPublicDirectory = inPackage(["kit"], "public", "kit");
56
+ /** The editor's browser modules, at their path under src/ (the preview serves them so: src/server/routes.mjs). */
57
+ export const browserDirectory = inPackage(["browser"], "src");
58
+ /** The emoji and icon data (the editor fetches it; the render reads it for a page's icon). */
59
+ export const emojiDataDirectory = path.join(browserDirectory, "shared", "emoji", "data");
60
+ /** The workbench as built (index.html and assets/): the release's; the source checkout's is Vite's (src/workbench/app/). */
61
+ export const workbenchDirectory = release ? path.join(packageRoot, "web") : null;
62
+ /** The SDK's types (the type check's roots, and what a script's JSDoc imports of ../../sdk reach). */
63
+ export const sdkDirectory = path.join(packageRoot, "sdk");
64
+ /** Gallery's default 写作偏好 (shared/writing-preferences.mjs). */
65
+ export const defaultPreferencesFile = inPackage(["assets", "writing-preferences.md"], "src", "shared", "writing-preferences.md");
66
+ /** TypeScript (src/render/typescript.mjs): the release's own minified copy, beside the libs it reads; null: the typescript package. */
67
+ export const typescriptFile = release ? path.join(packageRoot, "vendor", "typescript", "typescript.js") : null;
68
+ /** Where the type check finds d3's types (the type library d3, and the d3-* it names). */
69
+ export const typeRoots = [inPackage(["vendor", "types", "@types"], "node_modules", "@types")];
70
+ /** pdf.js (a PDF's import: src/transfer/import.mjs): the release's subset; null: the pdfjs-dist package. */
71
+ export const pdfjsDirectory = release ? path.join(packageRoot, "vendor", "pdfjs") : null;
72
+ /** The thin skill gallery skill install writes: the release's (the source checkout makes it: src/cli/package-skill.mjs). */
73
+ export const skillDirectory = release ? path.join(packageRoot, "skill") : null;
@@ -0,0 +1,110 @@
1
+ // The reader's preferences of Gallery's UI (the workbench's 设置): switches (and a width) kept in localStorage,
2
+ // which the workbench and every report page share (one origin), so the page editor follows a change
3
+ // at once (the storage event reaches every other page of the origin). Each is off (or its default) until changed.
4
+ // editFrame 显示编辑框: the dashed frame around the text being edited (editor/page/frame.mjs)
5
+ // quietNotices 减少通知: the notices of everyday operations (what was just done, how to go on) are not
6
+ // shown, only what the reader must act on or would not know otherwise (editor/page/quiet.mjs)
7
+ // outlineWidth the outline's width in full, as the reader dragged it (px; 0: its default), for every report
8
+ //
9
+ // Whether the outline (目录, the top bar's 更多; editor/page/outline/) shows is no preference of the UI
10
+ // but the report's, as what is folded in it is: switched on for one report, the others keep
11
+ // theirs, and every report has it off until it is switched on there. It is kept apart, under its own
12
+ // key (OUTLINE_OPEN_KEY): the slugs of the reports that have it on, the one switched on last at the end,
13
+ // at most OPEN_KEEP of them (switched on for one more, the one switched on longest ago lets it go), so
14
+ // what is kept stays small with no list of the reports to check it against. Off, a report is taken out
15
+ // of it. The page's head reads it before the page shows (editor/page/margin.mjs), and a page follows a
16
+ // switch made in another (the workbench's top bar, another tab) by the storage event, as the switches above.
17
+ // Both keys are named in renamed-storage.mjs, which carries what the old names hold (before 2026-10-26).
18
+
19
+ import { KEYS, OLD_KEYS } from "./renamed-storage.mjs";
20
+
21
+ const KEY = KEYS.preferences;
22
+ /** The preferences, each with its default (a switch's false, a width's 0). */
23
+ export const PREFERENCES = { editFrame: false, quietNotices: false, outlineWidth: 0 };
24
+
25
+ /** The key they are kept under (the page's head reads the outline's width before it shows: editor/page/margin.mjs). */
26
+ export const PREFERENCES_KEY = KEY;
27
+
28
+ function stored() {
29
+ try {
30
+ const value = JSON.parse(globalThis.localStorage?.getItem(KEY) ?? "{}");
31
+ return value && typeof value === "object" ? value : {};
32
+ } catch {
33
+ return {};
34
+ }
35
+ }
36
+
37
+ /** The value of preference `name` (one of the other kind than its default's: the default). */
38
+ export function preference(name) {
39
+ const value = stored()[name];
40
+ return typeof value === typeof PREFERENCES[name] && (typeof value !== "number" || Number.isFinite(value)) ? value : PREFERENCES[name];
41
+ }
42
+
43
+ /**
44
+ * Keep preference `name` as `value`. What is no preference any more is let go as one is kept (the
45
+ * outline's switch, once one for every report, is now each report's own: outlineOpen).
46
+ */
47
+ export function setPreference(name, value) {
48
+ if (!Object.hasOwn(PREFERENCES, name)) return;
49
+ try {
50
+ const kept = typeof PREFERENCES[name] === "number" ? (Number.isFinite(Number(value)) ? Number(value) : PREFERENCES[name]) : Boolean(value);
51
+ const known = Object.fromEntries(Object.entries(stored()).filter(([key]) => Object.hasOwn(PREFERENCES, key)));
52
+ globalThis.localStorage?.setItem(KEY, JSON.stringify({ ...known, [name]: kept }));
53
+ } catch {}
54
+ }
55
+
56
+ /** Call `listener` when another page of the origin changes the preferences (the workbench, for a report page). */
57
+ export function onPreferences(listener) {
58
+ globalThis.addEventListener?.("storage", (event) => {
59
+ if (event.key === KEY || event.key === null) listener();
60
+ });
61
+ }
62
+
63
+ // ---------- the outline, each report's ----------
64
+
65
+ const OPEN_KEY = KEYS.outlineOpen;
66
+ const OPEN_KEEP = 100; // reports with the outline on
67
+
68
+ /** The key the reports with the outline on are kept under (a JSON list of their slugs; the page's head reads it: editor/page/margin.mjs). */
69
+ export const OUTLINE_OPEN_KEY = OPEN_KEY;
70
+ /** The two keys under their names before 2026-10-26, for the page's head, which runs before renamed-storage.mjs has carried them. */
71
+ export const OLD_PREFERENCES_KEY = OLD_KEYS.preferences;
72
+ export const OLD_OUTLINE_OPEN_KEY = OLD_KEYS.outlineOpen;
73
+
74
+ function openSlugs() {
75
+ try {
76
+ const value = JSON.parse(globalThis.localStorage?.getItem(OPEN_KEY) ?? "[]");
77
+ return Array.isArray(value) ? value.filter((slug) => typeof slug === "string" && slug !== "") : [];
78
+ } catch {
79
+ return [];
80
+ }
81
+ }
82
+
83
+ /** Whether report `slug` has its outline on (off until it is switched on there). */
84
+ export function outlineOpen(slug) {
85
+ return typeof slug === "string" && slug !== "" && openSlugs().includes(slug);
86
+ }
87
+
88
+ /**
89
+ * Report `slug`'s outline switched on or off: on, it is the one switched on last (at most OPEN_KEEP
90
+ * reports, the one switched on longest ago let go); off, it is taken out.
91
+ */
92
+ export function setOutlineOpen(slug, on) {
93
+ if (typeof slug !== "string" || slug === "") return;
94
+ try {
95
+ const slugs = openSlugs().filter((one) => one !== slug);
96
+ if (on) slugs.push(slug);
97
+ globalThis.localStorage?.setItem(OPEN_KEY, JSON.stringify(slugs.slice(-OPEN_KEEP)));
98
+ } catch {}
99
+ }
100
+
101
+ /**
102
+ * Call `listener` when another page of the origin switches a report's outline (the workbench's 更多 ›
103
+ * 目录, the same report in another tab): it reads outlineOpen() for its own report, which may not have
104
+ * changed (another report switched).
105
+ */
106
+ export function onOutlineOpen(listener) {
107
+ globalThis.addEventListener?.("storage", (event) => {
108
+ if (event.key === OPEN_KEY || event.key === null) listener();
109
+ });
110
+ }