@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,134 @@
1
+ import { GLYPH_SETS, ICON_COLORS, ICON_COLOR_VALUES, glyphOf, glyphValue } from "./icon-value.mjs";
2
+ import { KEYS } from "../renamed-storage.mjs";
3
+
4
+ /* The 图标 tab's icons (glyphs): two open-source sets of filled icons, MingCute Core Filled
5
+ * (Apache-2.0) and Tabler Filled (MIT), as the 443 pairs of icons both have for one thing, and
6
+ * Tabler's 40 numbers (0–9 in four shapes), which MingCute has no series of (data/icons.json, made
7
+ * by src/cli/import-icons.mjs), each in one of 12 categories. The tab shows one set (MingCute unless
8
+ * the reader switched to Tabler: kept in this browser), each pair in the same place in either, so
9
+ * the switch compares them in place; an icon only one set has (a number) is that set's in either.
10
+ * Shared by the page editor (the icon picker, the page's icon) and the workbench;
11
+ * src/render/emoji.mjs reads the same data for the preview and an export.
12
+ * A glyph's value: `/icons/<name>_<color>.svg` (MingCute's) or `/icons/tabler/<name>_<color>.svg`
13
+ * (icon-value.mjs glyphOf, glyphValue): a number is always Tabler's.
14
+ * Colors (Notion's ten, the icon picker's: icon_picker_color): set once, an icon goes in in it; not
15
+ * set ("每次询问"), a click on an icon asks for one first. Recent: at most 2 × 12 icons, by pair.
16
+ * Search: an icon's Chinese name, both sets' names (and each name's words, split at "-") and its
17
+ * search words (the list's, English; the numbers' Chinese too; a name it had before), best first:
18
+ * the Chinese name equal (100) > it begins with the filter (80) > a set's name or a word of it
19
+ * equal (50) > the Chinese name holds it (40) > a set's name or word begins with it (30) > a search
20
+ * word equal (20) > one begins with it (10) > one holds it (5, Chinese filters alone: an English
21
+ * word inside another, "art" in "start", is no match); among equals, the tab's order.
22
+ * Random: any icon of the tab, in the set shown (a number: Tabler's), in the color set (or any one).
23
+ * The data is fetched (the page editor's modules are served unbundled); the settings, the recent
24
+ * pairs and the set shown are this browser's (localStorage). */
25
+
26
+ /* iconPickerColorPicker.color.* */
27
+ export const ICON_COLOR_NAMES = { gray: '默认', lightgray: '浅灰色', brown: '棕色', yellow: '黄色', orange: '橙色', green: '绿色', blue: '蓝色', purple: '紫色', pink: '粉色', red: '红色' };
28
+ /* The color button's and swatches' values (an icon's fill too), by theme: from icon-value.mjs's one table. */
29
+ export const ICON_COLOR_BY_THEME = {
30
+ light: Object.fromEntries(ICON_COLORS.map(color => [color, ICON_COLOR_VALUES[color][0]])),
31
+ dark: Object.fromEntries(ICON_COLORS.map(color => [color, ICON_COLOR_VALUES[color][1]])),
32
+ };
33
+ /** The sets' names as the tab shows them. */
34
+ export const GLYPH_SET_NAMES = { mingcute: 'MingCute', tabler: 'Tabler' };
35
+ const COLOR_KEY = KEYS.iconColor, RECENT_KEY = KEYS.recentGlyphs, SET_KEY = KEYS.glyphSet;
36
+
37
+ // An icon of the tab (a pair, or a number only Tabler has): { key (its MingCute name; one of
38
+ // Tabler's alone `tabler/<name>`), label (its Chinese name), names: { mingcute, tabler } and svg
39
+ // (each undefined for a set that has it not), category (its name, Chinese), words (its search words) }.
40
+ const state = { loaded: false, pairs: [], categories: [], byKey: new Map(), byName: new Map() };
41
+ let loading = null;
42
+
43
+ export function loadGlyphs() {
44
+ loading ??= fetch(new URL('./data/icons.json', import.meta.url).href).then(response => {
45
+ if (!response.ok) throw new Error(`icons.json: ${response.status}`);
46
+ return response.json();
47
+ }).then(data => {
48
+ state.categories = data.categories;
49
+ for (const [label, mingcute, tabler, mingcuteSvg, tablerSvg, category, words] of data.icons) {
50
+ const pair = {
51
+ key: mingcute ?? `tabler/${tabler}`, label, names: { mingcute: mingcute ?? undefined, tabler }, svg: { mingcute: mingcuteSvg ?? undefined, tabler: tablerSvg },
52
+ category: data.categories[category], words: (words ?? []).flatMap(word => [word, ...(/\s/.test(word) ? word.split(/\s+/) : [])]),
53
+ };
54
+ state.pairs.push(pair);
55
+ state.byKey.set(pair.key, pair);
56
+ for (const set of GLYPH_SETS) if (pair.names[set]) state.byName.set(`${set}/${pair.names[set]}`, pair);
57
+ }
58
+ state.loaded = true;
59
+ });
60
+ return loading;
61
+ }
62
+ export const glyphsLoaded = () => state.loaded;
63
+ /** Every icon of the tab, in its order: by category, each's pairs, then its icons of one set alone. */
64
+ export const allPairs = () => state.pairs;
65
+ /** The categories' names (Chinese), in the tab's order. */
66
+ export const glyphCategories = () => state.categories;
67
+ export const pairOf = key => state.byKey.get(key);
68
+ /** The set `pair` is drawn in when the tab shows `set`: that one, or the one set it has (a number: Tabler). */
69
+ export const glyphSetOf = (pair, set) => (pair.svg[set] ? set : GLYPH_SETS.find(each => pair.svg[each]));
70
+ /** The one set `pair` is of when only one has it (a number: "tabler"), else null (a pair). */
71
+ export const onlySetOf = pair => { const sets = GLYPH_SETS.filter(set => pair.svg[set]); return sets.length === 1 ? sets[0] : null; };
72
+ /** The value of `pair`'s icon of `set` (or of the one set it has) in `color`. */
73
+ export const pairValue = (pair, set, color) => { const shown = glyphSetOf(pair, set); return glyphValue(shown, pair.names[shown], color); };
74
+ /** The pair a glyph's value is of, or undefined (none, or the data not loaded yet). */
75
+ export function pairOfValue(value) {
76
+ const glyph = glyphOf(value);
77
+ return glyph ? state.byName.get(`${glyph.set}/${glyph.name}`) : undefined;
78
+ }
79
+ export const isGlyph = value => glyphOf(value) !== null;
80
+
81
+ /** A pair's icon of `set` (or of the one set it has) drawn in `color` for theme `mode` ("light", "dark"), its SVG text. */
82
+ export const glyphSVG = (pair, set, color, mode) => pair.svg[glyphSetOf(pair, set)].split('#COLOR').join(ICON_COLOR_BY_THEME[mode][color] ?? ICON_COLOR_BY_THEME[mode].gray);
83
+ /** A glyph's SVG text drawn in the color of where it stands (currentColor), or null. */
84
+ export function glyphSVGOf(value) {
85
+ const glyph = glyphOf(value), pair = pairOfValue(value);
86
+ return pair ? pair.svg[glyph.set].split('#COLOR').join('currentColor') : null;
87
+ }
88
+
89
+ /* Search: the icons' keys, best first (the scores above; a stable sort keeps the tab's order among equals). */
90
+ export function searchGlyphs(filter) {
91
+ const q = filter.trim().toLowerCase();
92
+ if (!q) return [];
93
+ const chinese = /[^\x00-\x7f]/.test(q);
94
+ const hits = [];
95
+ for (const pair of state.pairs) {
96
+ const label = pair.label.toLowerCase();
97
+ const names = [...new Set(GLYPH_SETS.flatMap(set => pair.names[set] ? [pair.names[set], ...pair.names[set].split('-')] : []))];
98
+ const score = label === q ? 100 : label.startsWith(q) ? 80 : names.includes(q) ? 50 : label.includes(q) ? 40
99
+ : names.some(w => w.startsWith(q)) ? 30 : pair.words.includes(q) ? 20 : pair.words.some(w => w.startsWith(q)) ? 10
100
+ : chinese && pair.words.some(w => w.includes(q)) ? 5 : 0;
101
+ if (score) hits.push([score, pair.key]);
102
+ }
103
+ return hits.sort((a, b) => b[0] - a[0]).map(h => h[1]);
104
+ }
105
+
106
+ /* ---------- settings, the recent pairs and the set shown ---------- */
107
+ const read = key => { try { return localStorage.getItem(key); } catch { return null; } };
108
+ const write = (key, value) => { try { if (value === null) localStorage.removeItem(key); else localStorage.setItem(key, value); } catch { /* for this session only */ } };
109
+
110
+ let iconColor = read(COLOR_KEY) ?? undefined;
111
+ export const getIconColor = () => iconColor;
112
+ /* undefined = 每次询问 */
113
+ export function setIconColor(color) {
114
+ iconColor = color;
115
+ write(COLOR_KEY, color === undefined ? null : color);
116
+ }
117
+
118
+ let set = GLYPH_SETS.includes(read(SET_KEY)) ? read(SET_KEY) : GLYPH_SETS[0];
119
+ /** The set the tab shows: "mingcute" (the default) or "tabler". */
120
+ export const getGlyphSet = () => set;
121
+ export function setGlyphSet(next) {
122
+ set = GLYPH_SETS.includes(next) ? next : GLYPH_SETS[0];
123
+ write(SET_KEY, set === GLYPH_SETS[0] ? null : set);
124
+ }
125
+
126
+ let recent = (() => { try { return JSON.parse(read(RECENT_KEY) || '[]'); } catch { return []; } })();
127
+ export const recentGlyphs = () => recent;
128
+ export function recordGlyphUse(key, max) {
129
+ recent = [key, ...recent.filter(k => k !== key)].slice(0, max); // first, once
130
+ write(RECENT_KEY, JSON.stringify(recent));
131
+ }
132
+
133
+ const pickOne = list => list[Math.floor(Math.random() * list.length)];
134
+ export const randomGlyph = () => pairValue(pickOne(state.pairs), set, iconColor ?? pickOne(ICON_COLORS));
@@ -0,0 +1,91 @@
1
+ import { iconImageFile } from "../media.mjs";
2
+
3
+ // A page's icon (the kit's "icon" component): what its value may be, its markup in a report and
4
+ // the value of that markup again. Shared by the editor (components/icon/, source/apply.mjs), the
5
+ // render (an export's and the preview's images: src/render/emoji.mjs) and the workbench.
6
+ //
7
+ // Its value, as report.json has it, and its markup in the file:
8
+ // an emoji <div class="doc-icon">🎯</div>
9
+ // an icon of the 图标 tab, in a color <div class="doc-icon" data-icon="/icons/airplane_blue.svg"></div>
10
+ // an image of the report's folder <div class="doc-icon"><img src="assets/icon-1a2b3c4d.png" alt=""></div>
11
+ // The 图标 tab's icons (a glyph: glyphs.mjs) are two open-source sets of the same 443 things,
12
+ // MingCute (the default: /icons/<name>_<color>.svg) and Tabler (/icons/tabler/<name>_<color>.svg),
13
+ // and Tabler's numbers (/icons/tabler/circle-number-3_<color>.svg: MingCute has none).
14
+
15
+ export const ICON = "doc-icon";
16
+
17
+ const KEYCAP = String.fromCodePoint(0x20e3);
18
+ /**
19
+ * The ten icon colors (Notion's), each's value light and dark: the one table (glyphs.mjs, the icon picker's
20
+ * swatches, the browser tab's icon and the glyphs' drawing read it; styles/page.css of the kit and the
21
+ * workbench's base.css write the same values as CSS, which tests/unit/icons.mjs holds to it).
22
+ */
23
+ export const ICON_COLOR_VALUES = {
24
+ gray: ["#55534E", "#D3D3D3"], lightgray: ["#A6A299", "#7F7F7F"], brown: ["#9F6B53", "#AA755F"], yellow: ["#CB912F", "#CA8E1B"], orange: ["#D9730D", "#D87620"],
25
+ green: ["#448361", "#2D9964"], blue: ["#337EA9", "#2E7CD1"], purple: ["#9065B0", "#8D5BC1"], pink: ["#C14C8A", "#C94079"], red: ["#D44C47", "#CD4945"],
26
+ };
27
+ /** The icon colors, in the picker's order. */
28
+ export const ICON_COLORS = Object.keys(ICON_COLOR_VALUES);
29
+ /** The 图标 tab's two sets, the default first. */
30
+ export const GLYPH_SETS = ["mingcute", "tabler"];
31
+ const GLYPH = new RegExp(`^/icons/(?:(tabler)/)?([a-z0-9-]+)_(${ICON_COLORS.join("|")})\\.svg$`);
32
+
33
+ /** A glyph's value: { set, name, color }, or null (no glyph's). */
34
+ export function glyphOf(value) {
35
+ const found = typeof value === "string" ? value.match(GLYPH) : null;
36
+ return found ? { set: found[1] ?? GLYPH_SETS[0], name: found[2], color: found[3] } : null;
37
+ }
38
+ /** The value of icon `name` of set `set` in `color`. */
39
+ export const glyphValue = (set, name, color) => `/icons/${set === GLYPH_SETS[0] ? "" : `${set}/`}${name}_${color}.svg`;
40
+
41
+ /** What kind of icon a value is: "emoji", "glyph" (an icon of the 图标 tab), "image", or null (none a page may have). */
42
+ export function iconKind(value) {
43
+ if (typeof value !== "string" || value.length === 0 || value.length > 120) return null;
44
+ if (GLYPH.test(value)) return "glyph";
45
+ if (iconImageFile(value)) return "image";
46
+ // An emoji: pictographs, a flag or a keycap, no letters, nothing that is markup.
47
+ return value.length <= 32 && !/[\s<>&"'A-Za-z]/.test(value) && (/\p{Extended_Pictographic}|\p{Regional_Indicator}/u.test(value) || value.includes(KEYCAP)) ? "emoji" : null;
48
+ }
49
+ export const validIcon = (value) => iconKind(value) !== null;
50
+
51
+ /** The custom property a Sheet tab's emoji is drawn through (the kit's sheets.css), and its value for the image at `url`: the server's (render/emoji.mjs) and the editor's (components/sheets/pills.mjs). */
52
+ export const TAB_ICON = "--doc-tab-icon";
53
+ export const tabIconValue = (url) => `url('${url}')`;
54
+
55
+ /** The icon's element as the file has it (`id`: its block id attribute, or ""). */
56
+ export function iconMarkup(value, id = "") {
57
+ const kind = iconKind(value);
58
+ if (kind === "glyph") return `<div class="${ICON}" data-icon="${value}"${id}></div>`;
59
+ if (kind === "image") return `<div class="${ICON}"${id}><img src="${value}" alt=""></div>`;
60
+ return `<div class="${ICON}"${id}>${value}</div>`; // checked: an emoji holds no markup
61
+ }
62
+
63
+ /**
64
+ * An icon as one image the preview server serves (GET /__gallery/edit/icon): the workbench's tree and
65
+ * menus; with `tab`, the browser tab's (a glyph in its own color, light or dark as the system).
66
+ * `slug`: the report whose folder holds an image.
67
+ * @param {string} value
68
+ * @param {string | null} [slug]
69
+ * @param {{ tab?: boolean }} [options]
70
+ */
71
+ export const iconUrl = (value, slug = null, { tab = false } = {}) => `/__gallery/edit/icon?${new URLSearchParams({ value, ...(slug ? { slug } : {}), ...(tab ? { tab: "1" } : {}) })}`;
72
+
73
+ const [TAB_LIGHT, TAB_DARK] = ICON_COLOR_VALUES.gray;
74
+ /**
75
+ * The browser tab's image of a page with no icon (the workbench's and the preview page's): the page
76
+ * the workbench's tree shows for one (its "page" icon, components/icons.ts: Lucide's file-text,
77
+ * FinHarness's 文档), its box cropped to `1 1 22 22` so it fills the tab as an emoji does, in the tab
78
+ * glyphs' gray, light or dark as the system is. An image, never none: a tab given no image, or one that does not
79
+ * load, keeps the one it showed (Chrome), so a page with no icon opened after one with one showed that one's.
80
+ */
81
+ export const DEFAULT_TAB_ICON = `data:image/svg+xml,${encodeURIComponent(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="1 1 22 22" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round"><style>svg{color:${TAB_LIGHT}}@media (prefers-color-scheme:dark){svg{color:${TAB_DARK}}}</style><path d="M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z"/><path d="M14 2v5a1 1 0 0 0 1 1h5"/><path d="M10 9H8"/><path d="M16 13H8"/><path d="M16 17H8"/></svg>`)}`;
82
+
83
+ /** The value of an icon's element as the file (or a page) has it, or null. */
84
+ export function iconValueOf(html) {
85
+ const glyph = html.match(/\bdata-icon="([^"]*)"/)?.[1];
86
+ if (glyph && iconKind(glyph) === "glyph") return glyph;
87
+ const image = html.match(/<img\b[^>]*\bsrc="([^"]*)"/)?.[1];
88
+ if (image && iconKind(image) === "image") return image;
89
+ const text = html.replace(/<[^>]*>/g, "").trim();
90
+ return iconKind(text) === "emoji" ? text : null;
91
+ }
@@ -0,0 +1,20 @@
1
+ // The one place a string is made safe to stand in markup, for the page, the server and the render
2
+ // side alike. A writer picks the set of characters its markup needs and has always written:
3
+ // escapeText & < > text in an element
4
+ // escapeAttribute & " a value in double quotes
5
+ // escapeMarkup & < > " a string that lands in text or in an attribute
6
+ // escapeTyped & < what a reader typed into a block: a bare > is as valid, and the file
7
+ // keeps the one an author wrote
8
+ const ENTITIES = { "&": "&amp;", "<": "&lt;", ">": "&gt;", '"': "&quot;" };
9
+ const replacing = (characters) => {
10
+ const pattern = new RegExp(`[${characters}]`, "g");
11
+ return (text) => text.replace(pattern, (character) => ENTITIES[character]);
12
+ };
13
+
14
+ export const escapeText = replacing("&<>");
15
+ export const escapeAttribute = replacing('&"');
16
+ export const escapeMarkup = replacing('&<>"');
17
+ export const escapeTyped = replacing("&<");
18
+
19
+ /** The text an escaped string reads as: what the page reads back from a source it holds. */
20
+ export const unescapeText = (text) => text.replace(/&(lt|gt|quot|#39|#93|#36|amp);/g, (_, name) => ({ lt: "<", gt: ">", quot: '"', "#39": "'", "#93": "]", "#36": "$", amp: "&" })[name]);
@@ -0,0 +1,89 @@
1
+ // What an export of a report wraps its parts in, written once for the two things that make an
2
+ // export: the CLI's (src/render/pipeline.mjs) and the reader's 导出当前视图副本 (src/render/kit/ui.js,
3
+ // which the kit's build bundles with this file), so that one export cannot allow what the other forbids.
4
+
5
+ /** The policy of an export: nothing reaches the network but an embed block's page (online). */
6
+ export const EXPORT_CSP = [
7
+ "default-src 'none'",
8
+ "script-src 'unsafe-inline'",
9
+ "style-src 'unsafe-inline'",
10
+ "img-src data: blob:",
11
+ "font-src data:",
12
+ "media-src data: blob:",
13
+ "frame-src https: data: blob:", // an embed block's page (online), or its file
14
+ "connect-src 'none'",
15
+ "object-src 'none'",
16
+ "base-uri 'none'",
17
+ "form-action 'none'",
18
+ ].join("; ");
19
+
20
+ // Some desktop HTML viewers expose CommonJS globals inside local documents. UMD bundles such as D3
21
+ // otherwise write into `exports` and leave `globalThis.d3` undefined, so report shells render but
22
+ // their charts stay empty. Shadow those globals only while the bundle initializes and force its
23
+ // normal browser-global branch.
24
+ /** A UMD bundle's source, run with the CommonJS globals shadowed. */
25
+ export const isolateUmd = (source) => `(function (exports, module, define) {\n${source}\n}).call(globalThis, undefined, undefined, undefined);`;
26
+
27
+ /** A component package's stylesheet as the text of a <style>: nothing in it ends the element. A style reads the escape as the slash it stands for. */
28
+ export const styleText = (css) => css.replace(/<\/style/gi, "<\\/style");
29
+
30
+ /**
31
+ * A component package's kit.js as a page runs it, the route's copy and an export's alike: in a function
32
+ * of its own, so that what it declares is its own and two packages on a page never meet. A classic
33
+ * script all the same, `this` the global object, its lines the file's lines.
34
+ */
35
+ export const packageScript = (code) => `(function () {${code}\n}).call(globalThis);`;
36
+
37
+ /**
38
+ * A component package's script as the text of a <script>, whatever it holds. An author's text may say
39
+ * </script>, which would end the element, and <!-- and <script, after which the parser takes the next
40
+ * end tag for a part of it, and no rewriting of a script's text keeps its sense in a string, a regular
41
+ * expression, a comment and code alike. So its text stays a string, where < can be escaped, and goes
42
+ * in as a script of its own, run where it stands; the policy allows that as any inline script.
43
+ */
44
+ export const scriptText = (code) => `(function () {
45
+ var script = document.createElement("script");
46
+ script.textContent = ${JSON.stringify(code).replace(/</g, "\\u003c")};
47
+ document.currentScript.after(script);
48
+ script.remove();
49
+ })();`;
50
+
51
+ // Which report.html an export was made from: the sha256 of the file's bytes as the export read them,
52
+ // in a meta of its own right after the export's policy (pipeline.mjs withExportPolicy), which
53
+ // gallery qa compares with the file as it is now (src/cli/qa.mjs, so that a file restored or
54
+ // copied is judged by its text, never by when it was written) and an import of the export takes out
55
+ // again (src/transfer/own-report.mjs). Never in report.html itself. Named as the view copy's
56
+ // doc-export-id is (ui.js).
57
+ export const SOURCE_META = "doc-export-source";
58
+
59
+ // Which component packages an export holds, each by its stamp, in a meta of its own right after that
60
+ // one, none for a page of no package: an export is as old as what it holds of them, which a
61
+ // document's text does not say, and gallery qa compares these with what the workspace holds now.
62
+ export const PACKAGES_META = "doc-export-packages";
63
+ /** How `packages` (their ids and stamps, any order) are said, in that meta and by gallery qa: "" for none. */
64
+ export const packagesSaid = (packages) => packages.map(({ id, stamp }) => `${id}@${stamp}`).sort().join(" ");
65
+ /** The meta saying an export holds `packages`. */
66
+ export const packagesMeta = (packages) => `<meta name="${PACKAGES_META}" content="${packagesSaid(packages)}">`;
67
+
68
+ // Who made an export: <meta name="generator" content="Gallery">, the first of its head (pipeline.mjs
69
+ // withExportPolicy). An export made before the product's rename (2026-10-26) says "HTML Report Studio":
70
+ // every reader takes either (exportSourceOf below, an import's undoExport in src/transfer/own-report.mjs,
71
+ // the kit's runtime/kernel.js, which writes the two out as a classic script), and no export is rewritten.
72
+ export const GENERATOR = "Gallery";
73
+ /** The generators an export may name: the new one first, then the one exports made before said. */
74
+ export const GENERATORS = [GENERATOR, "HTML Report Studio"];
75
+
76
+ /** The meta saying an export was made from a report.html whose bytes' sha256 is `hash`. */
77
+ export const sourceMeta = (hash) => `<meta name="${SOURCE_META}" content="sha256:${hash}">`;
78
+
79
+ // An export's own metas, where it writes them, right after its generator and its policy at the start of its head.
80
+ const OWN_METAS = new RegExp(`<head\\b[^>]*>\\s*<meta name="generator" content="(?:${GENERATORS.join("|")})">\\s*<meta http-equiv="Content-Security-Policy" content="[^"]*">\\s*<meta name="${SOURCE_META}" content="sha256:([0-9a-f]{64})">(?:\\s*<meta name="${PACKAGES_META}" content="([^"]*)">)?`, "i");
81
+
82
+ /** The sha256 an export (`html`, its text) says it was made from: its sourceMeta; null when it says none. */
83
+ export function exportSourceOf(html) {
84
+ const found = OWN_METAS.exec(html);
85
+ return found ? found[1].toLowerCase() : null;
86
+ }
87
+
88
+ /** The packages an export (`html`, its text) says it holds, as packagesSaid says them; "" when it says none. */
89
+ export const exportPackagesOf = (html) => OWN_METAS.exec(html)?.[2] ?? "";
@@ -0,0 +1,33 @@
1
+ import { createHash } from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+
5
+ export function sha256(value) {
6
+ return createHash("sha256").update(value).digest("hex");
7
+ }
8
+
9
+ // Write a sibling temp file, then rename it over the report. Windows can refuse the rename while
10
+ // another process (editor, antivirus, indexer) holds the file, so retry briefly before failing.
11
+ // With `expect`, the file must still hold exactly that text right before each rename attempt;
12
+ // otherwise nothing is written and the result is false. That is a check, not a lock: a writer
13
+ // that does not go through this service can still change the file between it and the rename.
14
+ export async function writeAtomic(file, text, { expect } = {}) {
15
+ const temp = path.join(path.dirname(file), `.${path.basename(file)}.${process.pid}.${Date.now()}.tmp`);
16
+ await fs.writeFile(temp, text);
17
+ for (let attempt = 0; ; attempt++) {
18
+ try {
19
+ if (expect !== undefined && (await fs.readFile(file, "utf8").catch(() => null)) !== expect) {
20
+ await fs.rm(temp, { force: true });
21
+ return false;
22
+ }
23
+ await fs.rename(temp, file);
24
+ return true;
25
+ } catch (error) {
26
+ if (attempt >= 9 || !["EPERM", "EBUSY", "EACCES"].includes(error.code)) {
27
+ await fs.rm(temp, { force: true });
28
+ throw error;
29
+ }
30
+ await new Promise((resolve) => setTimeout(resolve, 40 * (attempt + 1)));
31
+ }
32
+ }
33
+ }
@@ -0,0 +1,59 @@
1
+ // Reading a parsed report (parse5's tree: { tagName, attrs, childNodes, sourceCodeLocation }): what
2
+ // every system that reads the HTML as a tree asks of an element. The render's checks, the editor's
3
+ // source and the components' selectors (components/index.mjs) all read through it. Pure data: no
4
+ // parser is imported here, so code that runs in the browser may import it too.
5
+
6
+ /** Block-level elements: what a text block made of `text` may be, what holds units. */
7
+ export const BLOCK_LEVEL = new Set([
8
+ "address", "article", "aside", "blockquote", "caption", "dd", "details", "dialog", "div", "dl", "dt",
9
+ "fieldset", "figcaption", "figure", "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hr",
10
+ "li", "main", "menu", "nav", "ol", "p", "pre", "section", "summary", "table", "tbody", "td", "tfoot",
11
+ "th", "thead", "tr", "ul",
12
+ ]);
13
+
14
+ /** An element's attribute, or undefined. */
15
+ export const attr = (node, name) => node.attrs?.find((entry) => entry.name === name)?.value;
16
+
17
+ /** Whether an element has the class. */
18
+ export const hasClass = (node, name) => (attr(node, "class") ?? "").split(/\s+/).includes(name);
19
+
20
+ /**
21
+ * The attributes of an element whose value its file opens with a curly quote (name=“… or name=”…,
22
+ * U+201C or U+201D, where a straight quote belongs), each { name, written: the attribute as the file
23
+ * writes it, line }: HTML takes no curly quote for a quote, so the value is read unquoted, the curly
24
+ * quotes part of it (class=”doc-sheet-tab” is the class ”doc-sheet-tab”). Read from the
25
+ * attribute's place in `html` (parse5's sourceCodeLocation), never from its value: title="“引语”"
26
+ * is a value in straight quotes that holds curly ones, as a Chinese text does. An editor that keeps
27
+ * a file's “…” style (as an Edit matched with its quotes made straight does) writes them.
28
+ */
29
+ export function curlyQuoted(html, node) {
30
+ const places = node.sourceCodeLocation?.attrs ?? {};
31
+ return Object.entries(places).flatMap(([name, place]) => {
32
+ const written = html.slice(place.startOffset, place.endOffset);
33
+ return /^[^\s=]+\s*=\s*[“”]/.test(written) ? [{ name, written, line: place.startLine }] : [];
34
+ });
35
+ }
36
+
37
+ /** The element children of a node. */
38
+ export const elementsOf = (node) => (node.childNodes ?? []).filter((child) => child.tagName);
39
+
40
+ /**
41
+ * Every element under `root`, in document order, handed to `visit`. What a template holds is part of
42
+ * the page's markup (`inTemplates`, the default) or left out, as a browser's querySelectorAll does
43
+ * (what is inert there). A template in an <svg> or <math> holds no content: its children are the page's.
44
+ * `stop(element)`: what it says yes to is handed to `visit`, and what that holds is not, but for
45
+ * the elements `through(element)` gives of it, whose insides the walk goes on in (themselves not handed
46
+ * to `visit`): an instance of a component package and its slots (components/index.mjs BODY).
47
+ */
48
+ export function walk(root, visit, { inTemplates = true, stop = null, through = null } = {}) {
49
+ const options = { inTemplates, stop, through };
50
+ for (const child of elementsOf(root)) {
51
+ visit(child);
52
+ if (stop?.(child)) {
53
+ for (const inner of through?.(child) ?? []) walk(inner, visit, options);
54
+ continue;
55
+ }
56
+ if (!(child.tagName === "template" && child.content)) walk(child, visit, options);
57
+ else if (inTemplates) walk(child.content, visit, options);
58
+ }
59
+ }
@@ -0,0 +1,22 @@
1
+ // The local server's answers: JSON for its endpoints (the editor's saves, the workbench's commands),
2
+ // and files for its routes.
3
+
4
+ // A JSON answer.
5
+ export function sendJson(response, status, body) {
6
+ response.statusCode = status;
7
+ response.setHeader("Content-Type", "application/json; charset=utf-8");
8
+ response.setHeader("Cache-Control", "no-store");
9
+ response.end(JSON.stringify(body));
10
+ }
11
+
12
+ // What the routes answer with: a status (404 with nothing else), a content type, the headers the
13
+ // route sets (its caching, nosniff, a sandbox) and the body.
14
+ export function serve(response, { status = 200, type, headers = {}, body } = {}) {
15
+ response.statusCode = status;
16
+ if (type) response.setHeader("Content-Type", type);
17
+ for (const [name, value] of Object.entries(headers)) response.setHeader(name, value);
18
+ response.end(body);
19
+ }
20
+
21
+ // A file the route reads: its answer, or 404 when there is none.
22
+ export const serveFound = (response, body, options) => (body ? serve(response, { ...options, body }) : serve(response, { status: 404 }));