@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,16 @@
1
+ import { t } from "../../shared/i18n/index.mjs";
2
+ // What a component's own rows of the block menu share (`menuItems` of each component's page module:
3
+ // block-menu/index.mjs asks the block's own, one source of a block's component rows). A row that changes a
4
+ // block's look, its classes and sizes, as one undo step.
5
+
6
+ /**
7
+ * The row for `target`: `change` ({ classes, sizes }) applied by look(element, change, select)
8
+ * (the editor's undoable change, history.mjs: the block is selected again on undo), `done` said on
9
+ * the status line once it was. `state` ({ current } or { checked }) is how the menu shows it.
10
+ */
11
+ export const lookRow = ({ look, say }, target, { label, icon, change, done, ...state }) => ({
12
+ label,
13
+ icon,
14
+ ...state,
15
+ run: () => { if (look(target, change, target)) say(t("{0} · Ctrl+Z 撤销", done)); },
16
+ });
@@ -0,0 +1,42 @@
1
+ import { SECTION_ICON } from "../icons.mjs";
2
+ import { HIGHLIGHT } from "../kit.mjs";
3
+ import { t } from "../../../shared/i18n/index.mjs";
4
+ // 分区: section.doc-section, a container of ordinary blocks (its title is whatever heading it
5
+ // holds, a line above it an <hr> at its top) that stands in the page or a Sheet panel only. It is
6
+ // a chapter: optional, made and dissolved only by explicit commands, never derived from headings.
7
+ // page.mjs: a new section, 组成新分区, 解散分区.
8
+ //
9
+ // Where the engines reach it (src/editor/page/ unless named): handle/ (its bar along its right side),
10
+ // block-menu/ (the menu rows: page.mjs `sectionOps`), drag/drop.mjs (a drop goes by its
11
+ // edges), clipboard/own/ (copying sections: `clipboard`), commit.mjs (one made again by undo), ../source/ (a new one
12
+ // set apart like the chapters around it: separator).
13
+ // Its look: none of its own, its blocks are a flow's (the kit's styles/flow.css, src/render/kit/).
14
+ // A section of the page, not a <section> that is a block of another kind (a Sheet area, one with a
15
+ // highlight block's class).
16
+ const isSection = (node) => node.localName === "section" && node.getAttribute("data-ge-box-kind") === "section" && !node.matches(HIGHLIGHT.match);
17
+
18
+ export default {
19
+ name: "section",
20
+ listed: () => t("分区"), hideable: false,
21
+ units: {
22
+ section: { name: t("分区"), icon: SECTION_ICON, match: [{ rank: 40, tag: "section" }], chapter: true, fixed: true, handle: "bar" },
23
+ },
24
+ boxes: {
25
+ section: { role: "flow", name: t("分区"), groups: true },
26
+ },
27
+ types: {
28
+ section: {
29
+ tag: "section", className: "doc-section", kind: "section", box: "section",
30
+ clipboard: {
31
+ kind: "flatten", html: "section",
32
+ describe(node, { isHost, holding }) {
33
+ if (!isSection(node) || isHost(node)) return undefined;
34
+ const blocks = holding(node);
35
+ return blocks ? { type: "section", blocks } : null;
36
+ },
37
+ endsIn: (unit, { blocksIn, boxesOf }) => (isSection(unit) ? [{ type: "section", blocks: blocksIn(boxesOf(unit)) }] : undefined),
38
+ check: (block, { container }) => container(block),
39
+ },
40
+ },
41
+ },
42
+ };
@@ -0,0 +1,141 @@
1
+ import { UNIT, boxKind, holdsBlocks, isHost, newContainer, newHost, placeBefore, unitsOf, withLeads } from "../../page/core.mjs";
2
+ import { outerOf } from "../../page/block-info.mjs";
3
+ import { caretAt } from "../../page/caret.mjs";
4
+ import { isTex } from "../math/index.mjs";
5
+ import { accepts, boxRole } from "../registry.mjs";
6
+ import { begin, done, made } from "../../page/made.mjs";
7
+ import { t } from "../../../shared/i18n/index.mjs";
8
+
9
+ // 分区 on the page. A section is a container of ordinary blocks, like a highlight panel without a
10
+ // look of its own: a heading in it (its title, when it has one) and a divider line at its top are
11
+ // blocks like any other. It stands in the page or a Sheet panel only. A new one ("在下方新建分区")
12
+ // holds one empty paragraph to write in; blocks next to each other there can become one ("组成新分区");
13
+ // dissolving one ("解散分区", "解散所在分区" in the menu of a block in it) leaves its blocks where it
14
+ // was. Its handle is the bar along its right side (handle/).
15
+
16
+ const isSection = (node) => node?.nodeType === 1 && node.localName === "section" && boxKind(node) === "section";
17
+ const inRoot = (node) => Boolean(node?.parentElement?.hasAttribute("data-ge-box")) && boxRole(boxKind(node.parentElement)) === "root";
18
+
19
+ /** A new section after `unit` (a block standing in the page or a Sheet panel), holding one empty paragraph. Returns { focus: the paragraph, created }. */
20
+ export function sectionAfter(unit) {
21
+ begin();
22
+ const next = made(newContainer(unit.ownerDocument, "section"));
23
+ const paragraph = newHost(unit.ownerDocument, "paragraph");
24
+ next.append(paragraph);
25
+ unit.after(next);
26
+ return done(paragraph);
27
+ }
28
+
29
+ /**
30
+ * The section `unit` stands in, the innermost, itself when it is one, or null: none is around it, or
31
+ * only past a detail card, which stands for itself (outerOf).
32
+ */
33
+ export function sectionOf(unit) {
34
+ for (let node = unit; node; node = outerOf(node)) if (isSection(node)) return node;
35
+ return null;
36
+ }
37
+
38
+ /**
39
+ * "解散分区" for a section straight in the page or a Sheet panel: null when it does not apply,
40
+ * otherwise why it cannot be done, or "".
41
+ */
42
+ export function unwrapCheck(section) {
43
+ if (!isSection(section) || !section.matches(UNIT) || !inRoot(section)) return null;
44
+ if (section.hasAttribute("data-ge-keep-own")) return t("这个分区被脚本或链接用到,不能解散");
45
+ return [...section.children].every(holdsBlocks) ? "" : t("分区里有不能移动的内容(例如脚本),不能解散");
46
+ }
47
+
48
+ /** The section dissolving from `unit` takes: the innermost around it unwrapCheck applies to, so that a section in a section goes with the one around it, or null. */
49
+ export function dissolvesFrom(unit) {
50
+ for (let section = sectionOf(unit); section; section = sectionOf(outerOf(section))) if (unwrapCheck(section) !== null) return section;
51
+ return null;
52
+ }
53
+
54
+ /**
55
+ * "组成新分区" for blocks (in document order): null when they do not all stand straight in the page
56
+ * or a Sheet panel, otherwise why they cannot become one section, or "". They must be neighbours in
57
+ * one box, with nothing left out between them: a selection with gaps is not quietly completed.
58
+ */
59
+ export function wrapCheck(units) {
60
+ if (units.length === 0 || !units.every(inRoot)) return null;
61
+ const box = units[0].parentElement;
62
+ if (units.some((unit) => unit.parentElement !== box)) return t("只有同一层里的块能组成分区");
63
+ if (units.some((unit) => !accepts("section", unit.getAttribute("data-ge-unit-kind")))) return t("分区里不能再放分区或选项卡区块");
64
+ const blocks = unitsOf(box);
65
+ const first = blocks.indexOf(units[0]);
66
+ return units.every((unit, index) => blocks[first + index] === unit) ? "" : t("只有相邻的块能组成分区:中间还有没选中的块");
67
+ }
68
+
69
+ /** Blocks that pass wrapCheck, in a new section where they stood. Returns { focus: the section, created }. */
70
+ export function wrapSection(units) {
71
+ begin();
72
+ const section = made(newContainer(units[0].ownerDocument, "section"));
73
+ const parts = units.flatMap((unit) => withLeads(unit));
74
+ parts[0].before(section);
75
+ section.append(...parts);
76
+ return done(section);
77
+ }
78
+
79
+ // A block the caret can stand in: a text block, not a display formula, where nothing is typed.
80
+ const takesCaret = (node) => isHost(node) && !isTex(node);
81
+ // The block of a section that takes the reader once it is dissolved: its first that takes the caret, or its first block.
82
+ const firstOfSection = (section) => [...section.children].find(takesCaret) ?? [...section.children].find(holdsBlocks) ?? null;
83
+
84
+ /** A section's blocks where it was, the section gone (with its identity). Returns { focus: its first block, created }. */
85
+ export function unwrapSection(section) {
86
+ const focus = firstOfSection(section);
87
+ const moving = [...section.children];
88
+ begin();
89
+ placeBefore(section.parentElement, moving, withLeads(section)[0]);
90
+ for (const part of withLeads(section)) part.remove();
91
+ return done(focus);
92
+ }
93
+
94
+ /**
95
+ * The block menu's section commands, with what the editor gives it: struct (a structural undo
96
+ * step), say, and blocks() (the block handles and selection, blocks.mjs).
97
+ */
98
+ export function create({ struct, say, blocks }) {
99
+ // A new section holding one empty paragraph, right after a block.
100
+ function addAfter(unit) {
101
+ blocks().clear();
102
+ const result = struct([unit.parentElement], [], () => {
103
+ const { focus, created } = sectionAfter(unit);
104
+ return { touched: [focus], focus, created };
105
+ });
106
+ caretAt(result.focus, "start");
107
+ say(t("已新建分区 · 标题、分割线都可以按需加"));
108
+ }
109
+
110
+ // Blocks next to each other in the page or a Sheet panel, put into a new section where they stand
111
+ // (block-menu/ checks wrapCheck first), one undo step; the section is selected.
112
+ function wrap(units) {
113
+ blocks().clear();
114
+ const result = struct([units[0].parentElement], [], () => {
115
+ const { focus: section, created } = wrapSection(units);
116
+ return { touched: [], focus: section, select: units, created }; // undo selects the blocks again
117
+ });
118
+ blocks().select(result.focus, { quiet: true });
119
+ say(t("已把{0}组成新分区 · 标题、分割线都可以按需加 · Ctrl+Z 撤销", units.length > 1 ? t(" {0} 块", units.length) : t("这一块")));
120
+ }
121
+
122
+ // A section dissolved: its blocks where it was, one undo step. Asked from blocks in it (`from`: the
123
+ // menu of a block, which may stand far down a long section), those stay selected, undo and redo
124
+ // selecting them again, and the page stays where it is; asked from the section, its first text block
125
+ // takes the caret, undo and redo bringing it back there (its first block selected, when none is).
126
+ function unwrap(section, from = null) {
127
+ blocks().clear();
128
+ const first = firstOfSection(section);
129
+ const select = from ?? (first && !takesCaret(first) ? first : null);
130
+ const result = struct([section, section.parentElement], first && takesCaret(first) ? [first] : [], () => {
131
+ const { focus, created } = unwrapSection(section);
132
+ return { touched: focus && takesCaret(focus) ? [focus] : [], focus, created, ...(select ? { select, reselect: true } : {}) };
133
+ });
134
+ if (from) blocks().select(from, { quiet: true });
135
+ else if (result.focus && takesCaret(result.focus)) caretAt(result.focus, "start");
136
+ else if (result.focus) blocks().select(result.focus, { quiet: true });
137
+ say(t("已解散分区,内容留在原处 · Ctrl+Z 撤销"));
138
+ }
139
+
140
+ return { sectionOps: { addAfter, wrap, unwrap, wrapCheck, unwrapCheck, sectionOf, dissolvesFrom } };
141
+ }
@@ -0,0 +1,24 @@
1
+ import { escapeText } from "../../shared/escape.mjs";
2
+
3
+ /**
4
+ * How a box of blocks set apart (a highlight block, a callout: `match` its elements) is copied, one
5
+ * rule for both, their clipboard's hooks (registry.mjs `clipboard`) for the block of `type`: its
6
+ * blocks; one with words straight in it (an Agent's, a callout written the old way), a paragraph of
7
+ * what it says. A list with its class is a list, and a text block of a type of its own that type.
8
+ */
9
+ export const setApart = (type, match) => ({
10
+ describe(node, { isHost, holding, colorOf, copiedType, serializeInner, plain }) {
11
+ if (!node.matches(match) || node.matches("ul, ol") || (isHost(node) && copiedType(node))) return undefined;
12
+ const straight = [...node.childNodes].some((child) => child.nodeType === 3 && child.data.trim());
13
+ const words = isHost(node) ? serializeInner(node) : straight ? escapeText(plain(node)) : null;
14
+ const blocks = words === null ? holding(node) : [{ type: "paragraph", html: words }];
15
+ const color = colorOf(node);
16
+ return blocks ? { type, blocks, ...(color ? { color } : {}) } : null;
17
+ },
18
+ endsIn(unit, { blocksIn, boxesOf, colorOf }) {
19
+ if (!unit.matches(match)) return undefined;
20
+ const color = colorOf(unit);
21
+ return [{ type, blocks: blocksIn(boxesOf(unit)), ...(color ? { color } : {}) }];
22
+ },
23
+ check: (block, { container }) => container(block),
24
+ });
@@ -0,0 +1,137 @@
1
+ import { escapeText } from "../../../shared/escape.mjs";
2
+ import { iconKind } from "../../../shared/emoji/icon-value.mjs";
3
+ import { svg } from "../icons.mjs";
4
+ import { SHEETS } from "../kit.mjs";
5
+ import { t } from "../../../shared/i18n/index.mjs";
6
+
7
+ // 选项卡区块 and 选项卡 (Notion's tabs block): the kit's Sheets (sheets.js). A Sheet area holds a tab
8
+ // row (.doc-sheet-tabs, a box of tabs) and one panel per tab ([data-doc-sheet], a box like the
9
+ // page: chapters and body text). A tab is a unit that takes its panel along; its name is a text
10
+ // block renamed in place. page.mjs: renaming a tab, a new one; pills.mjs: the tabs as Notion's
11
+ // pills (a press, a drag, the menu, +, an empty tab); file.mjs: a new tab in report.html.
12
+ //
13
+ // Where the engines reach it (src/editor/page/ unless named): convert.mjs (a new one: page.mjs
14
+ // `create`), editor.mjs (F2, Enter and Esc while a tab is renamed, undo with a tab focused: page.mjs `key`, `undoHere`, `field`, `click`), core.mjs (a tab's name in a span of its own:
15
+ // prepareBlock; a tab takes its panel: partsOf), selection/delete.mjs and drag/ (deleting and
16
+ // moving tabs, resting on a tab while dragging switches the Sheet),
17
+ // handle/ (room for each tab's handle), blocks.mjs (its tabs as pills, `sheetPills`), drag/drop.mjs (nothing drops over a tab row), clipboard/own/ (copying it: `clipboard`, and `build` in page.mjs), ../source/ (finding tabs and
18
+ // their panels: walkTabs).
19
+ // Its look: the kit's styles/sheets.css, switched by sheets.js (src/render/kit/).
20
+ /** The tabs area's icon: a page with its row of tabs along the top. */
21
+ export const TABS_ICON = svg('<rect x="3.25" y="3.75" width="13.5" height="12.5" rx="2"/><path d="M3.25 8h13.5M8.25 3.75V8M13.25 3.75V8"/>');
22
+
23
+ /** The name span of a tab in the tab row. */
24
+ export function tabOf(target) {
25
+ return target?.closest?.(SHEETS.tabIn)?.querySelector(':scope > [data-ge-kind="tab"]') ?? null;
26
+ }
27
+
28
+ // A tab of a Sheet area described with `blocks` (its panel's): its name and emoji, or null.
29
+ function describeTab(tab, blocks) {
30
+ const icon = tab.getAttribute("data-tab-icon");
31
+ const title = (tab.querySelector(':scope > [data-ge-kind="tab"]') ?? tab).textContent.replace(/\s+/g, " ").trim();
32
+ return blocks && title ? { title, ...(iconKind(icon) === "emoji" ? { icon } : {}), blocks } : null;
33
+ }
34
+
35
+ export default {
36
+ name: "sheets",
37
+ listed: () => t("选项卡"),
38
+ readOnly: [{ rank: 60, at: `${SHEETS.tabIn}:has(> [data-ge-kind="tab"])`, says: null }], // a tab works as Notion's pill (pills.mjs)
39
+ units: {
40
+ sheets: {
41
+ name: t("选项卡区块"),
42
+ // A container, so not the plain block's icon: a page with a row of tabs along its top.
43
+ icon: TABS_ICON,
44
+ match: [
45
+ { rank: 20, tag: "section", class: "doc-sheet-shell" },
46
+ { rank: 30, tag: "section", attr: "data-doc-sheets" },
47
+ ],
48
+ chapter: true, fixed: true,
49
+ handle: "none", // its handle stands on its tab row, a tab's (`outer`)
50
+ below: false,
51
+ entersAfter: true,
52
+ toggles: ["doc-sheet-shell--plain"], // no frame (显示边框 off in its block menu)
53
+ },
54
+ // The server marks each tab of a row (findUnits); its emoji (编辑图标 in its menu, notion-lite's) is
55
+ // an attribute of its button, shown before its name by the kit (sheets.css).
56
+ tab: { clipboard: { kind: "words" }, name: t("选项卡"), icon: svg('<path d="M2.75 15.75h14.5"/><path d="M4.75 15.75v-9.5a2 2 0 0 1 2-2h4.5a2 2 0 0 1 2 2v9.5"/>'), fixed: true, handle: "outer", below: false, attributes: { "data-tab-icon": (value) => iconKind(value) === "emoji" } },
57
+ },
58
+ boxes: {
59
+ // `owner`: the tab that takes the panel along (its hash covers the panel); `takenBy`: that tab known by
60
+ // its key, off the page as both are once it is deleted.
61
+ panel: {
62
+ role: "root", name: t("选项卡"), selectAll: { content: t("这个选项卡里的全部内容"), whole: true },
63
+ find: (unit, key) => [...unit.querySelectorAll(SHEETS.panels)].find((child) => child.getAttribute(SHEETS.panelKey) === key) ?? null,
64
+ owner: (panel) => [...(panel.parentElement?.querySelectorAll(SHEETS.tabs) ?? [])].find((tab) => tab.getAttribute(SHEETS.tabKey) === panel.getAttribute(SHEETS.panelKey)) ?? null,
65
+ takenBy: (tab, key) => tab.getAttribute(SHEETS.tabKey) === key,
66
+ },
67
+ tabs: { role: "tabs", name: t("选项卡栏"), selectAll: { whole: true }, find: (unit) => unit.querySelector(SHEETS.row) },
68
+ },
69
+ types: {
70
+ // A new Sheet area (the "/" menu's 选项卡, 在下方新建: page.mjs newSheets): three tabs, 选项卡 1–3,
71
+ // their panels empty (notion-lite's), written with them under a name of its own (file.mjs).
72
+ sheets: {
73
+ menu: ["advanced", 21], fresh: 6,
74
+ tag: "section", className: "doc-sheet-shell", kind: "sheets", box: "tabs",
75
+ clipboard: {
76
+ kind: "tabs", claims: SHEETS.match,
77
+ holds: (block) => (block.tabs ?? []).flatMap((tab) => tab.blocks),
78
+ read: (unit, { plain, unitsOf }) => [...unit.querySelectorAll(SHEETS.tabs)].map((tab) => {
79
+ const panel = panelFor(tab);
80
+ return { name: plain(tab.querySelector('[data-ge-kind="tab"]') ?? tab), units: panel ? unitsOf(panel) : [] };
81
+ }),
82
+ // Each tab's name, emoji and blocks; its page.mjs makes it again.
83
+ describe(node, { isHost, holding }) {
84
+ if (node.getAttribute("data-ge-unit-kind") !== "sheets" || isHost(node)) return undefined;
85
+ const tabs = [...node.querySelectorAll(SHEETS.tabs)].map((tab) => describeTab(tab, holding(panelFor(tab))));
86
+ return tabs.length > 0 && tabs.every(Boolean) ? { type: "sheets", tabs } : null;
87
+ },
88
+ // The tab shown, with what of its panel comes before the end (notion-lite's tab block holds
89
+ // the content it shows); its tab row is no text of it, and an end before the panel leaves
90
+ // none of it. With no tabs it is no Sheet area, whatever it says: any block's rule holds.
91
+ endsIn(unit, { holdsAny, walk, groupItems }) {
92
+ const tabs = [...unit.querySelectorAll(SHEETS.tabs)];
93
+ if (!unit.matches(SHEETS.match) || tabs.length === 0) return undefined;
94
+ const shown = tabs.flatMap((tab) => {
95
+ const panel = panelFor(tab);
96
+ const described = panel && !panel.hidden && holdsAny(panel) ? describeTab(tab, groupItems(walk(panel))) : null;
97
+ return described ? [described] : [];
98
+ });
99
+ return shown.length > 0 ? [{ type: "sheets", tabs: shown }] : [];
100
+ },
101
+ check: (block, { string, valid }) => Array.isArray(block.tabs) && block.tabs.length >= 1 && block.tabs.length <= 20
102
+ && block.tabs.every((tab) => tab && string(tab.title, 200) && tab.title.length >= 1 && !/[<>\r\n]/.test(tab.title)
103
+ && (tab.icon === undefined || iconKind(tab.icon) === "emoji") && Array.isArray(tab.blocks) && tab.blocks.every((inner) => valid(inner, "panel"))),
104
+ text: (block, lines) => block.tabs.flatMap((tab) => [escapeText(tab.title), ...lines(tab.blocks)]),
105
+ },
106
+ content: (element) => element.querySelector(SHEETS.row),
107
+ extras: (element) => ({ name: element.getAttribute("data-doc-sheets") }),
108
+ label: t("选项卡"), icon: TABS_ICON,
109
+ words: "选项卡 标签页 分页 页签 切换 xuanxiangka biaoqianye fenye yeqian xxk bqy tab tabs tabbed switch",
110
+ glance: { row: 14, name: "选项卡", write: "`<section data-doc-sheets=\"name\">` holding a `<section>` per tab, starting with its heading, the tab's name", after: "`section.doc-sheet-shell`: its row of tabs, a `div[data-doc-sheet]` per tab", rule: "Kit blocks" },
111
+ },
112
+ // A tab made on the page (+ at the end of its row): its name and its panel's blocks, written
113
+ // with its panel (source/apply.mjs insertTab). No label: nothing is turned into a tab.
114
+ tab: {
115
+ tag: "button", className: "doc-sheet-tab", kind: "tab", box: "panel",
116
+ title: (element) => element.querySelector(':scope > [data-ge-kind="tab"]'), content: (element) => panelFor(element),
117
+ written: () => true, // with no blocks too: an empty tab
118
+ extras: (element) => ({ sheet: element.getAttribute(SHEETS.tabKey), ...(iconKind(element.getAttribute("data-tab-icon")) === "emoji" ? { icon: element.getAttribute("data-tab-icon") } : {}) }),
119
+ },
120
+ },
121
+ components: ["doc-sheet-tabs"],
122
+ hosts: {
123
+ tab: { name: t("选项卡名称"), caps: () => ["plain"], textFilters: false, wrapped: true, parts: [["sheets", "tabs"]] }, // the name is a span made inside the button, which keeps switching Sheets
124
+ },
125
+ };
126
+
127
+ /** A Sheet tab's panel (its description's pair, src/shared/components/sheets.mjs), or null. */
128
+ export function panelOf(node) {
129
+ return node.hasAttribute("data-ge-unit") ? panelFor(node) : null;
130
+ }
131
+
132
+ /** The panel of a tab in a Sheet area's row (one of the file's or one made on the page), or null. */
133
+ export function panelFor(tab) {
134
+ const key = tab.getAttribute(SHEETS.tabKey);
135
+ const shell = key !== null ? tab.parentElement?.parentElement : null;
136
+ return shell?.matches(SHEETS.match) ? [...shell.querySelectorAll(SHEETS.panels)].find((child) => child.getAttribute(SHEETS.panelKey) === key) ?? null : null;
137
+ }
@@ -0,0 +1,227 @@
1
+ import { frameOf } from "../../page/core.mjs";
2
+ import { pointRange, select } from "../../page/caret.mjs";
3
+ import { closeLink } from "../../page/links/index.mjs";
4
+ import { ICONS } from "../../page/menu.mjs";
5
+ import { iconKind } from "../../../shared/emoji/icon-value.mjs";
6
+ import { TOGGLES } from "../registry.mjs";
7
+ import { SHEETS } from "../kit.mjs";
8
+ import { capsFor } from "../registry.mjs";
9
+ import { lookRow } from "../rows.mjs";
10
+ import { tabOf } from "./index.mjs";
11
+ import { t } from "../../../shared/i18n/index.mjs";
12
+
13
+ // 选项卡 on the page: renaming a tab, and a new one. A tab is a button that switches Sheets, so a
14
+ // click still switches. 重命名 in its menu (a click on the tab shown: pills.mjs), or F2 while the tab
15
+ // has focus, makes the name span editable in place with the whole name selected (Notion's); Enter or
16
+ // leaving the name keeps it, Esc goes back to the name before. While renamed, clicks and keys stay
17
+ // away from sheets.js. Pressing, dragging, the menu and + are pills.mjs's; deleting and moving a tab,
18
+ // the block tools' (blocks.mjs).
19
+
20
+ // A Sheet area with no frame (显示边框 off), a class switch the description names.
21
+ const PLAIN = TOGGLES.sheets[0];
22
+
23
+ /**
24
+ * Renaming tabs, with what the editor gives it: the last recorded content of each block,
25
+ * recordText (one step of typing), closeTyping and say; the Sheet area's row of the
26
+ * block menu (look(element, { classes }, select): the editor's undoable change of classes); and the
27
+ * tab's menu (openMediaPicker: the icon picker).
28
+ */
29
+ export function create({ lastKnown, recordText, closeTyping, say, look, openMediaPicker }) {
30
+ let renaming = null; // { host, before }: the name being edited and its HTML when renaming began
31
+
32
+ // The caret where the reader pointed (x, y), or the whole name selected.
33
+ function start(host, x, y) {
34
+ if (renaming) finish();
35
+ closeLink(false);
36
+ closeTyping();
37
+ renaming = { host, before: host.innerHTML };
38
+ host.setAttribute("contenteditable", "true");
39
+ host.parentElement?.setAttribute("data-ge-renaming", ""); // the tab's look while renamed (pills.mjs)
40
+ const range = x === undefined ? null : pointRange(x, y);
41
+ host.focus({ preventScroll: true });
42
+ if (range && host.contains(range.startContainer)) return select(range);
43
+ const all = document.createRange();
44
+ all.selectNodeContents(host);
45
+ select(all);
46
+ }
47
+
48
+ // The name is kept with its spaces tidied. keep: false (Esc), or an emptied name, puts the name
49
+ // from before back; either is recorded like typing, so it undoes with the typing just before it.
50
+ function finish(keep = true) {
51
+ if (!renaming) return;
52
+ const { host, before } = renaming;
53
+ renaming = null;
54
+ const name = host.textContent.replace(/\s+/g, " ").trim();
55
+ if (!keep || !name) host.innerHTML = before;
56
+ else if (host.textContent !== name || host.childElementCount > 0) host.textContent = name; // no stray <br>
57
+ if (host.innerHTML !== lastKnown.get(host)) recordText(host);
58
+ closeTyping();
59
+ if (document.activeElement === host) host.blur();
60
+ host.removeAttribute("contenteditable");
61
+ host.parentElement?.removeAttribute("data-ge-renaming");
62
+ const selection = getSelection();
63
+ if (selection.rangeCount && host.contains(selection.anchorNode)) selection.removeAllRanges();
64
+ if (keep && !name) say(t("选项卡名称不能为空,已恢复原来的名称。"), "error");
65
+ }
66
+
67
+ // Whether a press or click lands on the tab being renamed (its name or its padding): a text field
68
+ // then, whose clicks (the space bar's too) do not reach sheets.js.
69
+ const holds = (target) => Boolean(renaming) && frameOf(renaming.host).contains(target);
70
+
71
+ // The page's listeners: a press on the padding of the tab being renamed keeps the caret in its
72
+ // name; leaving the name ends renaming (switching to another window does not).
73
+ function install() {
74
+ document.addEventListener("mousedown", (event) => {
75
+ if (holds(event.target) && !renaming.host.contains(event.target)) event.preventDefault();
76
+ }, true);
77
+ document.addEventListener("focusout", (event) => {
78
+ if (renaming?.host === event.target && document.hasFocus()) finish();
79
+ }, true);
80
+ }
81
+
82
+ /**
83
+ * The tabs' keys, which come before any text block's as a tab holds none of the page's (`key`): the
84
+ * keys of a tab being renamed stay away from sheets.js (it would switch Sheets on arrows, Home and
85
+ * End); Enter or Esc ends renaming (the one + just made too: not a text block of the page's until
86
+ * its commit comes back); F2 on a tab starts it. True when the key was the tabs'.
87
+ */
88
+ function key(event) {
89
+ const renamed = renaming?.host === event.target;
90
+ if (renamed) event.stopPropagation();
91
+ if (renamed && !event.isComposing && event.keyCode !== 229 && (event.key === "Enter" || event.key === "Escape")) {
92
+ event.preventDefault();
93
+ finish(event.key === "Enter");
94
+ return true;
95
+ }
96
+ const tab = !renamed && tabOf(event.target);
97
+ if (!tab || event.key !== "F2") return false;
98
+ event.preventDefault();
99
+ start(tab);
100
+ return true;
101
+ }
102
+
103
+ return {
104
+ create: make, start, install, key,
105
+ /** A click on the tab being renamed stays away from sheets.js, the space bar's too. True when it was. */
106
+ click(event) {
107
+ if (!holds(event.target)) return false;
108
+ event.stopPropagation();
109
+ return true;
110
+ },
111
+ /** Undo and redo work with the focus on a tab, where no text block hears them. */
112
+ undoHere: (node) => Boolean(tabOf(node)),
113
+ /**
114
+ * A Sheet area's row of the block menu: 显示边框, a switch (checked while the frame shows, clicked
115
+ * again to take it away: a choice already made, `current`, could not be clicked). None for another block.
116
+ */
117
+ menuItems(target) {
118
+ if (target?.getAttribute?.("data-ge-unit-kind") !== "sheets") return [];
119
+ const framed = !target.classList.contains(PLAIN);
120
+ return [lookRow({ look, say }, target, { label: t("显示边框"), icon: ICONS.frame, checked: framed, change: { classes: { [PLAIN]: framed } }, done: t("{0}选项卡区块的边框", framed ? t("已去掉") : t("已显示")) })];
121
+ },
122
+ /**
123
+ * A tab's menu, Notion's, in place of the block menu (no types, nothing below it, nothing around
124
+ * it): 重命名, 编辑图标 (the emoji picker below the tab, 表情符号 only; its pick, or 移除, one undo
125
+ * step) and 删除. `tools`: the block menu's { rect: the handle's, reason: why it may not go,
126
+ * remove(): delete it }. None for another block.
127
+ */
128
+ menu(target, { rect, reason, remove }) {
129
+ if (target?.getAttribute?.("data-ge-unit-kind") !== "tab") return null;
130
+ const pick = () => {
131
+ openMediaPicker({ origin: rect ?? target.getBoundingClientRect(), value: target.getAttribute("data-tab-icon"), only: ["emoji"], onPick: (value) => {
132
+ if (value !== null && iconKind(value) !== "emoji") return;
133
+ if (look(target, { attributes: { "data-tab-icon": value } })) say(t("{0}选项卡图标 · Ctrl+Z 撤销", value ? t("已更换") : t("已移除")));
134
+ } });
135
+ };
136
+ return {
137
+ label: t("选项卡的操作"),
138
+ width: 180,
139
+ items: [
140
+ { label: t("重命名"), icon: ICONS.rename, hint: "F2", run: () => { const name = tabOf(target); if (name) start(name); } },
141
+ { label: t("编辑图标"), icon: ICONS.face, run: () => setTimeout(pick) },
142
+ { label: t("删除"), icon: ICONS.trash, disabled: Boolean(reason), note: reason ?? undefined, run: remove },
143
+ ],
144
+ };
145
+ },
146
+ /** The name being renamed, or null. */
147
+ get field() { return renaming?.host ?? null; },
148
+ };
149
+ }
150
+
151
+ /**
152
+ * A new Sheet area (选项卡, notion-lite's tabs block): a frame holding a row of three tabs, 选项卡 1–3,
153
+ * each with an empty panel, under a name of its own on the page (the reader's chosen tab is kept
154
+ * under it). The kit's sheets.js comes too when the page has none (ensureSheetsKit).
155
+ */
156
+ export function newSheets(doc, given = null) {
157
+ const shell = doc.createElement("section");
158
+ shell.className = "doc-sheet-shell";
159
+ const taken = new Set([...doc.querySelectorAll("[data-doc-sheets]")].map((node) => node.getAttribute("data-doc-sheets")));
160
+ let name;
161
+ do name = `tabs-${Math.random().toString(36).slice(2, 6)}`; while (taken.has(name));
162
+ for (const [attribute, value] of [["data-doc-sheets", name], ["aria-label", t("选项卡")], ["data-ge-new", ""], ["data-ge-type", "sheets"], ["data-ge-unit-kind", "sheets"]]) shell.setAttribute(attribute, value);
163
+ const row = doc.createElement("div");
164
+ row.className = "doc-sheet-tabs";
165
+ for (const [attribute, value] of [["aria-label", t("选项卡")], ["data-ge-box", ""], ["data-ge-box-kind", "tabs"]]) row.setAttribute(attribute, value);
166
+ shell.append(row);
167
+ // given: [{ title, icon, blocks }] (a copy pasted), else three empty tabs.
168
+ for (const [index, wanted] of (given ?? [1, 2, 3].map((number) => ({ title: t("选项卡 {0}", number) }))).entries()) {
169
+ const { tab, panel } = newTab(shell, wanted.title || t("选项卡 {0}", index + 1));
170
+ if (wanted.icon) tab.setAttribute("data-tab-icon", wanted.icon);
171
+ panel.append(...(wanted.blocks ?? []));
172
+ row.append(tab);
173
+ shell.append(panel);
174
+ }
175
+ ensureSheetsKit(doc);
176
+ return shell;
177
+ }
178
+
179
+ /** A Sheet area made again from the clipboard's description (its type's `build`, builders.mjs). */
180
+ export function build({ doc, block, inner }) {
181
+ return newSheets(doc, block.tabs.map((tab) => ({ title: tab.title, icon: tab.icon, blocks: inner(tab.blocks) })));
182
+ }
183
+
184
+ /** A Sheet area standing for an empty block (its type's `create`), its three tabs empty; no caret (notion-lite's). */
185
+ export function make({ doc, put }) {
186
+ put(newSheets(doc));
187
+ return null;
188
+ }
189
+
190
+ /** The kit's sheets.js on the page (a page with no Sheet area is served without it), as a kit tag. */
191
+ export function ensureSheetsKit(doc) {
192
+ if (globalThis.DocSheets || doc.querySelector('script[data-doc-kit="sheets"]')) return;
193
+ const script = doc.createElement("script");
194
+ script.src = "/kit/sheets.js";
195
+ script.setAttribute("data-doc-kit", "sheets");
196
+ const kit = [...doc.querySelectorAll("script[data-doc-kit]")].at(-1);
197
+ if (kit) kit.after(script);
198
+ else doc.body.append(script);
199
+ }
200
+
201
+ /**
202
+ * A tab made on the page and its empty panel, for `shell` (a Sheet area), named `name`, under a key
203
+ * the area has not used: { tab, panel, key }, not yet on the page. The tab is a block made on the
204
+ * page (its type's, index.mjs), its name a span as prepareBlock makes a tab's; the panel a box made
205
+ * on the page, which the commit writing the tab makes one of the file's (commit.mjs adopt).
206
+ */
207
+ export function newTab(shell, name) {
208
+ const doc = shell.ownerDocument;
209
+ const taken = new Set([...shell.querySelectorAll(`[${SHEETS.tabKey}], [${SHEETS.panelKey}]`)].map((node) => node.getAttribute(SHEETS.tabKey) ?? node.getAttribute(SHEETS.panelKey)));
210
+ let key;
211
+ do key = `tab-${Math.random().toString(36).slice(2, 6)}`; while (taken.has(key));
212
+ const tab = doc.createElement("button");
213
+ tab.className = "doc-sheet-tab";
214
+ tab.type = "button";
215
+ tab.setAttribute(SHEETS.tabKey, key);
216
+ for (const [attribute, value] of [["data-ge-new", ""], ["data-ge-type", "tab"], ["data-ge-unit-kind", "tab"]]) tab.setAttribute(attribute, value);
217
+ const label = doc.createElement("span");
218
+ label.setAttribute("data-ge-kind", "tab");
219
+ label.setAttribute("data-ge-caps", capsFor("tab"));
220
+ label.textContent = name;
221
+ tab.append(label);
222
+ const panel = doc.createElement("div");
223
+ panel.setAttribute(SHEETS.panelKey, key);
224
+ panel.setAttribute("data-ge-box", "");
225
+ panel.setAttribute("data-ge-box-kind", "panel");
226
+ return { tab, panel, key };
227
+ }