@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,683 @@
1
+ import { escapeText } from "../../../shared/escape.mjs";
2
+ import { loadScript } from "../../page/ui.mjs";
3
+ import { BLOCK_COLORS } from "../colors.mjs";
4
+ import { capsFor } from "../registry.mjs";
5
+ import { tableOf } from "./grid.mjs";
6
+ import { CELL_LOOKS, COLUMN_WIDTH, GRID, HEADER_LOOK, NUMBERS, TABLE_HEIGHT, rowNames, scrollHeight, tableTiling, widthOf } from "./index.mjs";
7
+ import { columnWidths as widthsOf, slotsOf, widthHolder } from "../../../shared/table-slots.mjs";
8
+ import { CHART_SOURCE } from "../../../shared/table-chart.mjs";
9
+ import { cellFrom, cellsIn, closeRect, setSpan } from "./slots.mjs";
10
+
11
+ // 表格 on the page: a new one, made by a paste (clipboard/) or the "/" menu (convert.mjs), its cells
12
+ // text blocks made on the page (newCell): once saved it is a table like the Agent's (its cells text
13
+ // blocks the commit takes in).
14
+
15
+ // The kit's table script (/kit/tables.js) on a page served without it (a report with no table yet):
16
+ // loaded when the page makes its first table, so that the kit lays it out at once (its columns, its
17
+ // frame filled when its width is dragged) and not only after a reload.
18
+ const loadKit = () => loadScript("/kit/tables.js", () => globalThis.DocTables);
19
+
20
+ /**
21
+ * Widths that share `share` of the width a table stands in (its frame's parent, inside its padding
22
+ * and the frame's border) equally among `count` columns, px each: a new table from the "/" menu.
23
+ */
24
+ export function sharedWidths(wrap, count, share = 1) {
25
+ const parent = wrap.parentElement;
26
+ const style = getComputedStyle(parent);
27
+ const available = parent.clientWidth - parseFloat(style.paddingLeft) - parseFloat(style.paddingRight) - 2;
28
+ return Array.from({ length: count }, () => Math.floor(((available * share - 1) / count) * 100) / 100);
29
+ }
30
+
31
+ /**
32
+ * A new table of `rows` (each an array of its cells: inline HTML, already sanitized, or the nodes
33
+ * made of it, formula chips and lists among them: clipboard/), its first row a header row with
34
+ * `header`, its first column a header column with `column`, its numeric columns read unless
35
+ * `numbers` is false (识别数字列: index.mjs NUMBERS). `looks`, `widths` and `spans` as tableData
36
+ * describes them: each cell's look classes, each column's width, each cell's [rowspan, colspan]
37
+ * (a cell merged makes a row hold fewer cells); where `looks` is given the cells have just those,
38
+ * where not a header row's cell takes the header's look (a header column's none). `chart`: the key a chart drawn from it reads it
39
+ * by (its frame's data-doc-chart-source), when it has one.
40
+ */
41
+ export function newTable(doc, { rows, header = false, column = false, numbers = true, looks, widths, spans, chart }) {
42
+ const wrap = doc.createElement("div");
43
+ wrap.className = "doc-table-wrap";
44
+ for (const [name, value] of [["data-ge-new", ""], ["data-ge-type", "table"], ["data-ge-unit-kind", "table"]]) wrap.setAttribute(name, value);
45
+ if (!numbers) wrap.setAttribute(NUMBERS, "off");
46
+ if (chart) wrap.setAttribute(CHART_SOURCE, chart);
47
+ const table = doc.createElement("table");
48
+ table.className = "doc-table";
49
+ // The column each cell stands in (a merged cell takes the places of the ones it covers).
50
+ const tiling = tableTiling({ rows, header, spans });
51
+ const at = rows.map((cells, r) => cells.map((_, index) => tiling?.places.get(`${r}:${index}`).c ?? index));
52
+ const row = (cells, head, r) => {
53
+ const tr = doc.createElement("tr");
54
+ cells.forEach((html, index) => {
55
+ const first = at[r][index] === 0;
56
+ const cell = newCell(doc, head || (column && first) ? "th" : "td", !head && column && first ? "row" : null);
57
+ if (looks) cell.classList.add(...(looks[r][index] ?? "").split(" ").filter(Boolean));
58
+ else if (head) headerLook(cell, true);
59
+ const [down, across] = spans?.[r]?.[index] ?? [1, 1];
60
+ setSpan(cell, down, across);
61
+ if (Array.isArray(html)) cell.append(...html);
62
+ else cell.innerHTML = html;
63
+ tr.append(cell);
64
+ });
65
+ return tr;
66
+ };
67
+ const [first, ...rest] = rows;
68
+ if (header) table.createTHead().append(row(first, true, 0));
69
+ const body = doc.createElement("tbody");
70
+ body.append(...(header ? rest : rows).map((cells, index) => row(cells, false, index + (header ? 1 : 0))));
71
+ if (body.rows.length > 0) table.append(body);
72
+ wrap.append(table);
73
+ // The server writes it as the kit writes a table (file.mjs), a plain one when it has a body row: its
74
+ // tools are for it from now on, and the file's word (a commit's answer) takes the place of this.
75
+ if (body.rows.length > 0) wrap.setAttribute(GRID, "");
76
+ // Each column's width on the topmost cell of that column alone (shared/table-slots.mjs widthHolder).
77
+ if (widths?.some(Boolean)) {
78
+ const slots = slotsOf([...table.rows]);
79
+ widths.forEach((width, c) => width && widthHolder(slots, c)?.style.setProperty(COLUMN_WIDTH, width));
80
+ }
81
+ if (doc === globalThis.document) loadKit();
82
+ return wrap;
83
+ }
84
+
85
+ // A cell's nodes: its inline HTML as `inline` makes it, and its lists (part of the cell's text:
86
+ // index.mjs tableData), each item's text made again as any inline HTML.
87
+ function cellNodes(doc, html, inline) {
88
+ const template = doc.createElement("template");
89
+ template.innerHTML = html;
90
+ const nodes = [];
91
+ let text = "";
92
+ const flush = () => {
93
+ if (text) nodes.push(...inline(text));
94
+ text = "";
95
+ };
96
+ for (const child of template.content.childNodes) {
97
+ if (child.nodeType !== 1 || (child.localName !== "ul" && child.localName !== "ol")) {
98
+ text += child.nodeType === 1 ? child.outerHTML : escapeText(child.textContent ?? "");
99
+ continue;
100
+ }
101
+ flush();
102
+ const list = doc.createElement(child.localName);
103
+ for (const item of child.children) {
104
+ if (item.localName !== "li") continue;
105
+ const entry = doc.createElement("li");
106
+ const made = inline(item.innerHTML);
107
+ entry.append(...(made.length > 0 ? made : [doc.createElement("br")])); // an empty item keeps a line break for its caret
108
+ list.append(entry);
109
+ }
110
+ if (list.children.length > 0) nodes.push(list);
111
+ }
112
+ flush();
113
+ return nodes;
114
+ }
115
+
116
+ /**
117
+ * A table made again from the clipboard's description (its type's `build`, builders.mjs): each cell's
118
+ * nodes as made, its formulas chips the page draws at once (as HTML again they would be their TeX
119
+ * until the page opened again), its lists the cell's. One from elsewhere comes in 一键优化'd: a header
120
+ * row, its names' column a header column, its numeric columns read (the page's own copy as it was).
121
+ */
122
+ export function build({ doc, block, inline }) {
123
+ const rows = block.rows.map((row) => row.map((html) => cellNodes(doc, html, inline)));
124
+ const table = newTable(doc, { rows, header: Boolean(block.header), column: Boolean(block.column), numbers: block.numbers !== false, looks: block.looks, widths: block.widths, spans: block.spans, chart: block.chart });
125
+ if (block.outside) optimizeTable(table);
126
+ return table;
127
+ }
128
+
129
+ // ---------- its rows and columns ----------
130
+ // What the table's own tools do (the grips, their menus, the corner's +, merging cells:
131
+ // page/table/), on the page, each called inside one undo step (editor.mjs struct, which records the
132
+ // cells' spans and widths too): rows and cells made here are text blocks made on the page
133
+ // (data-ge-new), written with the table's operation (grid.mjs). Rows and columns are slots'
134
+ // (shared/table-slots.mjs): indexes count the thead's rows first, a merged cell stands in each row and column it
135
+ // covers. A row or column put in across a merged cell makes it bigger, one taken out of it smaller;
136
+ // rows (columns) a merged cell ties together move and are copied together. A table that is not
137
+ // plain (the server's judgement, source/table.mjs plainTable, marked on the unit: GRID) has no such tools.
138
+
139
+ /**
140
+ * A table standing for an empty block (its type's `create`): three columns, a header row and two rows
141
+ * (the plan's D6), the caret in its first cell (notion-lite's). It is two fifths as wide as the text
142
+ * it stands in, its columns equal and fixed (typing does not move them); 自动调整列宽 is the reader's
143
+ * to choose (a pasted table has the kit's widths). Its numeric columns are not read (识别数字列 off):
144
+ * typing numbers does not center or sort them.
145
+ */
146
+ export function make({ doc, put }) {
147
+ const table = newTable(doc, { rows: [["", "", ""], ["", "", ""], ["", "", ""]], header: true, numbers: false });
148
+ put(table);
149
+ const first = [...table.querySelector("tr").cells];
150
+ sharedWidths(table, first.length, 2 / 5).forEach((width, index) => first[index].style.setProperty(COLUMN_WIDTH, `${width}px`));
151
+ return table.querySelector("th, td");
152
+ }
153
+
154
+ /** The table's page object: page/table/ is its editing, in the tools' folders for its size. */
155
+ export function create({ tables }) {
156
+ return {
157
+ create: make,
158
+ /** Its rows of the block menu: its tools' (page/table/), made once the block tools are. */
159
+ menuItems: (target) => tables()?.menuItems(target) ?? [],
160
+ /** A space typed in a cell at a line's start: "- " or "1. " makes a list of the line (table/lists.mjs). True when it did. */
161
+ shortcut: (host, data) => tables()?.typed(host, data) ?? false,
162
+ };
163
+ }
164
+
165
+ /**
166
+ * A new cell: a text block made on the page (td, or th with its scope). A header cell made in a
167
+ * header row takes the look of the header cell beside it (`model`: lookLike), one of a new table
168
+ * the header's (newTable); a header column's cell is made plain.
169
+ */
170
+ export function newCell(doc, tag = "td", scope = null, model = null) {
171
+ const cell = doc.createElement(tag);
172
+ for (const [name, value] of [["contenteditable", "true"], ["data-ge-new", ""], ["data-ge-kind", "cell"], ["data-ge-caps", capsFor("cell")], ["data-ge-framed", ""]]) cell.setAttribute(name, value);
173
+ if (scope) cell.setAttribute("scope", scope);
174
+ if (tag === "th" && model) lookLike(cell, model);
175
+ return cell;
176
+ }
177
+
178
+ // Whether a cell of `tag` and `scope` wears the header row's look (index.mjs HEADER_LOOK): a th that is
179
+ // no row's header. A header column's th (scope="row") has no look of its own: 标题列 only makes the
180
+ // column stay at the left when the frame scrolls sideways (the user's, 2026-11-06).
181
+ const wearsHeaderLook = (tag, scope) => tag === "th" && (scope ?? "").trim().toLowerCase() !== "row";
182
+
183
+ // A cell that becomes a header row's cell (wearsHeaderLook) takes the header's look (index.mjs
184
+ // HEADER_LOOK: bold, and the gray fill unless it has a color of its own); one that stops being one
185
+ // loses it; a header column's cell has none (标题列 only sticks). These are looks as any other: the
186
+ // reader may change them.
187
+ function headerLook(cell, on) {
188
+ const [bold, fill] = HEADER_LOOK;
189
+ if (!on) return cell.classList.remove(bold, fill);
190
+ cell.classList.add(bold);
191
+ if (!BLOCK_COLORS.some((name) => cell.classList.contains(name))) cell.classList.add(fill);
192
+ }
193
+
194
+ // A header cell made beside another of its header row: its color and bold as that one's
195
+ // (a header the reader made plain, or the Agent wrote plain, stays so).
196
+ function lookLike(cell, model) {
197
+ const [bold] = HEADER_LOOK;
198
+ for (const name of [...BLOCK_COLORS, bold]) cell.classList.toggle(name, model.classList.contains(name));
199
+ }
200
+
201
+ /**
202
+ * What is read of a table unit without its slots: its table, its rows (the thead's first), its
203
+ * thead and its tbody. What only needs these asks for these (tableState reads the slots too).
204
+ */
205
+ export function tableParts(unit) {
206
+ const table = tableOf(unit);
207
+ return {
208
+ table,
209
+ rows: table ? [...table.querySelectorAll(":scope > thead > tr, :scope > tbody > tr")] : [],
210
+ head: table?.querySelector(":scope > thead") ?? null,
211
+ body: table?.querySelector(":scope > tbody") ?? null,
212
+ };
213
+ }
214
+
215
+ /** A table unit's slots (shared/table-slots.mjs), null when its cells tile no rectangle: what cellOf and placeOf are asked of. */
216
+ export function tableSlots(unit) {
217
+ const { rows } = tableParts(unit);
218
+ return rows.length ? slotsOf(rows) : null;
219
+ }
220
+
221
+ /**
222
+ * A table unit's parts (tableParts), its slots (shared/table-slots.mjs; null when its cells
223
+ * tile no rectangle), its columns and whether it has a header row and a header column. It reads the
224
+ * slots each time it is asked: a caller that goes on reading the table keeps the result.
225
+ */
226
+ export function tableState(unit) {
227
+ const parts = tableParts(unit);
228
+ const { rows, body, head } = parts;
229
+ const bodyRows = body ? [...body.rows] : [];
230
+ const slots = rows.length ? slotsOf(rows) : null;
231
+ const first = rows.length - bodyRows.length;
232
+ return {
233
+ ...parts, slots,
234
+ columns: slots?.columns ?? rows[0]?.cells.length ?? 0,
235
+ headerRow: Boolean(head?.rows.length),
236
+ headerColumn: bodyRows.length > 0 && (slots ? bodyRows.every((row, index) => slots.matrix[first + index][0].localName === "th") : bodyRows.every((row) => row.cells[0]?.localName === "th")),
237
+ };
238
+ }
239
+
240
+ /**
241
+ * The kit lays a table out again at once (tables/: its columns' widths; a style written to a cell
242
+ * is no change it watches), for the tools that measure what it drew: the columns as they are
243
+ * dragged, the table after 一键优化.
244
+ */
245
+ export const relayout = (unit) => globalThis.DocTables?.layout?.(tableOf(unit));
246
+
247
+ /** Rows `from` … `to` grown so that no merged cell is cut: [first, last]. */
248
+ export function rowRange(unit, from, to = from) {
249
+ const { slots, columns } = tableState(unit);
250
+ const rect = closeRect(slots, { r0: from, r1: to, c0: 0, c1: columns - 1 });
251
+ return [rect.r0, rect.r1];
252
+ }
253
+
254
+ /** Columns `from` … `to` grown so that no merged cell is cut: [first, last]. */
255
+ export function columnRange(unit, from, to = from) {
256
+ const { slots, rows } = tableState(unit);
257
+ const rect = closeRect(slots, { r0: 0, r1: rows.length - 1, c0: from, c1: to });
258
+ return [rect.c0, rect.c1];
259
+ }
260
+
261
+ // The cell a new row has in column `c`: as the row it is made beside has it there (a header
262
+ // column's th, plain), never a header row's th.
263
+ const cellLike = (doc, slots, r, c) => {
264
+ const model = r === null ? null : slots.matrix[r]?.[c];
265
+ return model?.localName === "th" && model.getAttribute("scope") === "row" && c === 0 ? newCell(doc, "th", "row") : newCell(doc);
266
+ };
267
+
268
+ /** A new row at `at` (0 … rows): in the tbody (in the thead only between its rows). Returns it. */
269
+ export function insertRow(unit, at) {
270
+ const { rows, body, head, columns, slots } = tableState(unit);
271
+ const doc = unit.ownerDocument;
272
+ const heads = head?.rows.length ?? 0;
273
+ const row = doc.createElement("tr");
274
+ row.setAttribute("data-ge-new", "");
275
+ const inHead = heads > 0 && at > 0 && at < heads;
276
+ const offset = Math.max(0, at - heads);
277
+ const model = inHead ? null : heads + Math.min(offset, body.rows.length - 1);
278
+ const grown = new Set();
279
+ for (let c = 0; c < columns; c++) {
280
+ // A merged cell across the place (above it and below it): a row taller, nothing new there.
281
+ const across = at > 0 && at < rows.length ? slots.matrix[at][c] : null;
282
+ const place = across && slots.places.get(across);
283
+ if (place && place.r < at) {
284
+ if (!grown.has(across)) setSpan(across, place.rows + 1, place.cols);
285
+ grown.add(across);
286
+ continue;
287
+ }
288
+ row.append(inHead ? newCell(doc, "th", null, slots.matrix[at - 1][c]) : cellLike(doc, slots, model, c));
289
+ }
290
+ if (inHead) head.insertBefore(row, head.rows[at]);
291
+ else body.insertBefore(row, body.rows[offset] ?? null);
292
+ return row;
293
+ }
294
+
295
+ /** A new column at `at` (0 … columns): a cell in each row (a header row's th, a header column's when it is the first). Returns its cells. */
296
+ export function insertColumn(unit, at) {
297
+ const { rows, columns, headerColumn, slots } = tableState(unit);
298
+ const doc = unit.ownerDocument;
299
+ const grown = new Set();
300
+ const made = [];
301
+ rows.forEach((row, r) => {
302
+ // A merged cell across the place (left of it and right of it): a column wider, nothing new there.
303
+ const across = at > 0 && at < columns ? slots.matrix[r][at] : null;
304
+ const place = across && slots.places.get(across);
305
+ if (place && place.c < at) {
306
+ if (!grown.has(across)) setSpan(across, place.rows, place.cols + 1);
307
+ grown.add(across);
308
+ return;
309
+ }
310
+ const head = row.parentElement.localName === "thead";
311
+ const first = slots.matrix[r][0];
312
+ const beside = slots.matrix[r][Math.max(0, at - 1)];
313
+ const cell = head ? newCell(doc, "th", null, beside) : at === 0 && headerColumn ? newCell(doc, "th", "row") : newCell(doc);
314
+ row.insertBefore(cell, cellFrom(slots, row, at));
315
+ made.push(cell);
316
+ // A header column stays the first: the cell that was first is a plain one now.
317
+ if (at === 0 && headerColumn && !head && slots.places.get(first).r === r) retagCell(first, "td");
318
+ });
319
+ return made;
320
+ }
321
+
322
+ /** Rows `from` … `to` taken out (never every body row). Returns whether it did. */
323
+ export function removeRows(unit, from, to) {
324
+ const { rows, body, slots } = tableState(unit);
325
+ const going = rows.slice(from, to + 1);
326
+ if (going.length === 0 || [...body.rows].every((row) => going.includes(row))) return false;
327
+ return keepWidths(unit, () => {
328
+ const next = rows[to + 1];
329
+ const column = new Map([...slots.places].map(([cell, place]) => [cell, place.c]));
330
+ for (const [cell, place] of slots.places) {
331
+ const bottom = place.r + place.rows - 1;
332
+ if (bottom < from || place.r > to) continue;
333
+ const overlap = Math.min(bottom, to) - Math.max(place.r, from) + 1;
334
+ // From above them: shorter. Beginning in them and going on below: moved down to the row
335
+ // after them, shorter.
336
+ if (place.r < from) setSpan(cell, place.rows - overlap, place.cols);
337
+ else if (bottom > to) {
338
+ setSpan(cell, bottom - to, place.cols);
339
+ next.insertBefore(cell, [...next.cells].find((other) => column.get(other) > place.c) ?? null);
340
+ }
341
+ }
342
+ going.forEach((row) => row.remove());
343
+ dropEmptyHead(unit);
344
+ return true;
345
+ });
346
+ }
347
+
348
+ /** Columns `from` … `to` taken out (never every column): a merged cell across them narrower. Returns whether it did. */
349
+ export function removeColumns(unit, from, to) {
350
+ const { columns, slots } = tableState(unit);
351
+ if (to - from + 1 >= columns) return false;
352
+ for (const [cell, place] of slots.places) {
353
+ const right = place.c + place.cols - 1;
354
+ if (right < from || place.c > to) continue;
355
+ const overlap = Math.min(right, to) - Math.max(place.c, from) + 1;
356
+ if (overlap === place.cols) cell.remove();
357
+ else setSpan(cell, place.rows, place.cols - overlap);
358
+ }
359
+ return true;
360
+ }
361
+
362
+ // The header row and column are whatever row and column are first (notion-lite's). After a move of
363
+ // rows the thead holds as many rows as before: a row that came into it is of th, one that left it of
364
+ // td, its first cell the header column's th when the table has one.
365
+ function settleHeaderRows(unit, order, heads, headerColumn) {
366
+ const { head, body } = tableParts(unit);
367
+ const moved = order.filter((row, index) => (index < heads) !== (row.parentElement === head));
368
+ head.append(...order.slice(0, heads));
369
+ body.append(...order.slice(heads));
370
+ for (const row of moved) {
371
+ [...row.cells].forEach((cell, index) => (row.parentElement === head ? retagCell(cell, "th") : retagCell(cell, headerColumn && index === 0 ? "th" : "td", headerColumn && index === 0 ? "row" : null)));
372
+ }
373
+ }
374
+
375
+ // After a move of columns, each body row's cell in the first column is the header column's th, the
376
+ // one that was first a td.
377
+ function settleHeaderColumn(unit) {
378
+ const { rows, body, slots } = tableState(unit);
379
+ for (let r = rows.length - body.rows.length; r < rows.length; r++) {
380
+ for (const cell of [...rows[r].cells]) {
381
+ if (slots.places.get(cell).c === 0) retagCell(cell, "th", "row");
382
+ else if (cell.localName === "th" && cell.getAttribute("scope") === "row") retagCell(cell, "td");
383
+ }
384
+ }
385
+ }
386
+
387
+ /**
388
+ * Row `from` moved to `to` (its place among the rows once moved), with the rows a merged cell ties
389
+ * it to, never into another such group; one moved to the top is the header row (rows tied together
390
+ * go neither into nor out of it). Returns [first, last] of where they are now, or false.
391
+ */
392
+ export function moveRow(unit, from, to) {
393
+ const { rows, head, headerColumn } = tableState(unit);
394
+ if (!rows[from] || !rows[to]) return false;
395
+ const [g0, g1] = rowRange(unit, from);
396
+ const [t0, t1] = rowRange(unit, to);
397
+ if (t0 === g0) return false;
398
+ const heads = head?.rows.length ?? 0;
399
+ if ((g1 > g0 || t1 > t0) && heads > 0 && (g0 < heads || t0 < heads)) return false;
400
+ const group = rows.slice(g0, g1 + 1);
401
+ const order = rows.filter((row) => !group.includes(row));
402
+ const at = t0 > g0 ? order.indexOf(rows[t1]) + 1 : order.indexOf(rows[t0]);
403
+ order.splice(at, 0, ...group);
404
+ return keepWidths(unit, () => {
405
+ if (heads > 0) settleHeaderRows(unit, order, heads, headerColumn);
406
+ else tableParts(unit).body.append(...order);
407
+ return [at, at + group.length - 1];
408
+ });
409
+ }
410
+
411
+ /**
412
+ * Column `from` moved to `to`, with the columns a merged cell ties it to, never into another such
413
+ * group; one moved to the front is the header column. Returns [first, last] of where they are now, or false.
414
+ */
415
+ export function moveColumn(unit, from, to) {
416
+ const { rows, columns, headerColumn, slots } = tableState(unit);
417
+ if (from < 0 || to < 0 || from >= columns || to >= columns) return false;
418
+ const [g0, g1] = columnRange(unit, from);
419
+ const [t0, t1] = columnRange(unit, to);
420
+ if (t0 === g0) return false;
421
+ const order = [...Array(columns).keys()];
422
+ const group = order.splice(g0, g1 - g0 + 1);
423
+ const at = t0 > g0 ? order.indexOf(t1) + 1 : order.indexOf(t0);
424
+ order.splice(at, 0, ...group);
425
+ const column = new Map(order.map((old, index) => [old, index]));
426
+ for (const row of rows) row.append(...[...row.cells].sort((a, b) => column.get(slots.places.get(a).c) - column.get(slots.places.get(b).c)));
427
+ if (headerColumn && (g0 === 0 || at === 0)) settleHeaderColumn(unit);
428
+ return [at, at + group.length - 1];
429
+ }
430
+
431
+ /** The header row on (the first body row into a thead, its cells th) or off (back to the tbody's top, td). */
432
+ export function setHeaderRow(unit, on) {
433
+ const { table, head, body, headerRow, headerColumn } = tableState(unit);
434
+ if (on === headerRow) return false;
435
+ if (on) {
436
+ const first = body.rows[0];
437
+ if (!first || body.rows.length < 2) return false; // a table keeps a body row
438
+ if ([...first.cells].some((cell) => cell.rowSpan > 1)) return false; // a merged cell ties it to the rows below
439
+ const thead = head ?? unit.ownerDocument.createElement("thead");
440
+ if (!head) table.insertBefore(thead, body);
441
+ thead.append(first);
442
+ for (const cell of [...first.cells]) retagCell(cell, "th");
443
+ } else {
444
+ for (const row of [...head.rows].reverse()) {
445
+ body.insertBefore(row, body.firstChild);
446
+ [...row.cells].forEach((cell, index) => (index === 0 && headerColumn ? retagCell(cell, "th", "row") : retagCell(cell, "td")));
447
+ }
448
+ head.remove();
449
+ }
450
+ return true;
451
+ }
452
+
453
+ /**
454
+ * Whether a table's first column holds its rows' names, so that 一键优化 makes it the header column:
455
+ * its body cells (none merged down it) read as the rows' names (index.mjs rowNames: none a number by
456
+ * the kit's reading).
457
+ */
458
+ export function labelColumn(unit) {
459
+ const { rows, body, slots } = tableState(unit);
460
+ if (!body || !slots || slots.columns < 2) return false;
461
+ const cells = [];
462
+ for (let r = rows.length - body.rows.length; r < rows.length; r++) {
463
+ const cell = slots.matrix[r][0];
464
+ const place = slots.places.get(cell);
465
+ if (place.r !== r || place.rows > 1) return false;
466
+ cells.push(cell);
467
+ }
468
+ return rowNames(cells);
469
+ }
470
+
471
+ /**
472
+ * 一键优化 (the table's block menu; a table pasted from elsewhere comes in so): the kit's column
473
+ * widths (自动调整列宽: many columns scroll sideways in the frame), a header row, the first column a
474
+ * header column when its words are the rows' names, its numeric columns read (识别数字列: centered,
475
+ * sorted by their header), and a frame shown whole (显示全部行) that is taller than the kit's scroll
476
+ * height scrolling again (one that scrolls already stays as it is). Inside one undo step (the
477
+ * caller's). Returns whether it changed anything.
478
+ */
479
+ export function optimizeTable(unit) {
480
+ let changed = setHeaderRow(unit, true);
481
+ if (!tableState(unit).headerColumn && labelColumn(unit)) changed = setHeaderColumn(unit, true) || changed;
482
+ const widths = columnWidths(unit);
483
+ if (widths) {
484
+ placeWidths(unit, widths.map(() => null));
485
+ changed = true;
486
+ }
487
+ if (unit.getAttribute(NUMBERS) === "off") {
488
+ unit.removeAttribute(NUMBERS);
489
+ changed = true;
490
+ }
491
+ const { table } = tableParts(unit);
492
+ if (unit.style.getPropertyValue(TABLE_HEIGHT).trim() === "none" && table.offsetHeight > scrollHeight(unit)) {
493
+ unit.style.removeProperty(TABLE_HEIGHT);
494
+ if (unit.getAttribute("style") === "") unit.removeAttribute("style");
495
+ changed = true;
496
+ }
497
+ return changed;
498
+ }
499
+
500
+ /** The header column on (each body row's cell in the first column th scope="row") or off (td); its cells' looks untouched either way (the header column only sticks). */
501
+ export function setHeaderColumn(unit, on) {
502
+ const { rows, body, headerColumn, slots } = tableState(unit);
503
+ if (on === headerColumn) return false;
504
+ for (let r = rows.length - body.rows.length; r < rows.length; r++) {
505
+ const cell = slots.matrix[r][0];
506
+ if (slots.places.get(cell).r === r) retagCell(cell, on ? "th" : "td", on ? "row" : null);
507
+ }
508
+ return true;
509
+ }
510
+
511
+ // A copy of a cell: its text (a locked cell's words alone: what a script drew in it is not its
512
+ // text), its look (index.mjs CELL_LOOKS) and its spans.
513
+ const copyCell = (from, to) => {
514
+ if (from.hasAttribute("data-ge-lock")) to.textContent = from.textContent;
515
+ else to.innerHTML = from.innerHTML;
516
+ for (const name of from.classList) if (CELL_LOOKS.includes(name)) to.classList.add(name);
517
+ setSpan(to, from.rowSpan, from.colSpan);
518
+ };
519
+
520
+ /** Rows `from` … `to` (grown so that no merged cell is cut) copied after them (their text and look; new rows). Returns the copies. */
521
+ export function duplicateRows(unit, from, to) {
522
+ const [r0, r1] = rowRange(unit, from, to);
523
+ const { rows } = tableParts(unit);
524
+ const doc = unit.ownerDocument;
525
+ const copies = rows.slice(r0, r1 + 1).map((row) => {
526
+ const copy = doc.createElement("tr");
527
+ copy.setAttribute("data-ge-new", "");
528
+ for (const cell of [...row.cells]) {
529
+ const made = newCell(doc, cell.localName, cell.getAttribute("scope"));
530
+ copyCell(cell, made);
531
+ copy.append(made);
532
+ }
533
+ return copy;
534
+ });
535
+ rows[r1].after(...copies);
536
+ return copies;
537
+ }
538
+
539
+ /** Columns `from` … `to` (grown so that no merged cell is cut) copied after them. Returns the new cells. */
540
+ export function duplicateColumns(unit, from, to) {
541
+ const [c0, c1] = columnRange(unit, from, to);
542
+ const { rows, slots } = tableState(unit);
543
+ const doc = unit.ownerDocument;
544
+ return rows.flatMap((row) => {
545
+ const before = cellFrom(slots, row, c1 + 1);
546
+ return [...row.cells].filter((cell) => slots.places.get(cell).c >= c0 && slots.places.get(cell).c <= c1).map((cell) => {
547
+ const copy = newCell(doc, cell.localName === "th" && cell.getAttribute("scope") !== "row" ? "th" : "td");
548
+ copyCell(cell, copy);
549
+ row.insertBefore(copy, before);
550
+ return copy;
551
+ });
552
+ });
553
+ }
554
+
555
+ // ---------- merged cells ----------
556
+
557
+ const filled = (cell) => cell.innerHTML.replace(/<br\s*\/?>/gi, "").trim() !== "";
558
+
559
+ /**
560
+ * The cells of a rectangle { r0, r1, c0, c1 } (grown so that no merged cell is cut) made one
561
+ * (Feishu's 合并单元格): the top left one spans it, holding its own content and then each other
562
+ * cell's that has any, each on a line of its own; the others go. Not across the header row and the
563
+ * body, nor with a cell a script fills. Returns the cell, or false.
564
+ */
565
+ export function mergeCells(unit, rect) {
566
+ const { slots, head } = tableState(unit);
567
+ const { r0, r1, c0, c1 } = closeRect(slots, rect);
568
+ const heads = head?.rows.length ?? 0;
569
+ if (r0 < heads && r1 >= heads) return false;
570
+ const list = cellsIn(slots, { r0, r1, c0, c1 });
571
+ if (list.length < 2 || list.some((cell) => cell.getAttribute("contenteditable") !== "true")) return false;
572
+ const [first, ...others] = list;
573
+ return keepWidths(unit, () => {
574
+ const doc = unit.ownerDocument;
575
+ let lines = filled(first) ? 1 : 0;
576
+ if (!lines) first.replaceChildren();
577
+ for (const cell of others) {
578
+ if (!filled(cell)) continue;
579
+ if (lines++ > 0) first.append(doc.createElement("br"));
580
+ first.append(...[...cell.childNodes].map((node) => node.cloneNode(true)));
581
+ }
582
+ setSpan(first, r1 - r0 + 1, c1 - c0 + 1);
583
+ others.forEach((cell) => cell.remove());
584
+ return first;
585
+ });
586
+ }
587
+
588
+ /**
589
+ * A merged cell made separate cells again (拆分单元格): it keeps its content in its top left slot,
590
+ * new empty cells (of its tag; a header column's th only in the first column) fill the others.
591
+ * Returns the cells of its rectangle, or false.
592
+ */
593
+ export function splitCell(unit, cell) {
594
+ const { rows, slots } = tableState(unit);
595
+ const place = slots?.places.get(cell);
596
+ if (!place || (place.rows === 1 && place.cols === 1)) return false;
597
+ const doc = unit.ownerDocument;
598
+ const rowHeader = cell.localName === "th" && cell.getAttribute("scope") === "row";
599
+ return keepWidths(unit, () => {
600
+ const made = [cell];
601
+ for (let r = place.r; r < place.r + place.rows; r++) {
602
+ const before = cellFrom(slots, rows[r], place.c + place.cols);
603
+ for (let c = place.c; c < place.c + place.cols; c++) {
604
+ if (r === place.r && c === place.c) continue;
605
+ const piece = rowHeader ? (c === 0 ? newCell(doc, "th", "row") : newCell(doc)) : newCell(doc, cell.localName, null, cell);
606
+ rows[r].insertBefore(piece, before);
607
+ made.push(piece);
608
+ }
609
+ }
610
+ setSpan(cell, 1, 1);
611
+ return made;
612
+ });
613
+ }
614
+
615
+ // ---------- its columns' widths ----------
616
+
617
+ /**
618
+ * Each column's width (index.mjs COLUMN_WIDTH) as the kit reads it: the first cell of that column
619
+ * alone, top down, that has one; null each where none has; null when no column has one.
620
+ */
621
+ export function columnWidths(unit) {
622
+ const { slots } = tableState(unit);
623
+ if (!slots) return null;
624
+ const widths = widthsOf(slots, widthOf);
625
+ return widths.some(Boolean) ? widths : null;
626
+ }
627
+
628
+ /**
629
+ * The columns' widths (px strings or null each) written where the table's tools write them: on the
630
+ * topmost cell of each column alone (shared/table-slots.mjs widthHolder), off every other cell.
631
+ */
632
+ export function placeWidths(unit, widths) {
633
+ const { slots } = tableState(unit);
634
+ if (!slots) return;
635
+ const holders = new Map(widths.map((width, c) => [widthHolder(slots, c), width]).filter(([cell, width]) => cell && width));
636
+ for (const cell of slots.places.keys()) {
637
+ const width = holders.get(cell) ?? null;
638
+ if (width) cell.style.setProperty(COLUMN_WIDTH, width);
639
+ else if (widthOf(cell)) cell.style.removeProperty(COLUMN_WIDTH);
640
+ if (cell.getAttribute("style") === "") cell.removeAttribute("style");
641
+ }
642
+ }
643
+
644
+ // A change that may take away or merge the cells holding the columns' widths: the widths written
645
+ // again after it, each where its column holds it now.
646
+ function keepWidths(unit, mutate) {
647
+ const widths = columnWidths(unit);
648
+ const out = mutate();
649
+ if (out && widths) placeWidths(unit, widths);
650
+ return out;
651
+ }
652
+
653
+ /**
654
+ * A cell as a td or th (`scope`: a th's, null for none): a new element of that tag in its place,
655
+ * taking its attributes, a copy of its content (the old cell keeps its own, for undo to put back)
656
+ * and its identity (it stays the same cell to the commits); the header row's look taken or lost when
657
+ * the cell comes into or leaves the kind that wears it (wearsHeaderLook): a header column's th wears
658
+ * none, and a cell switched between td and it keeps its looks. A th only given another scope stays
659
+ * itself unless its look changes (a new element then too, so undo puts its classes back).
660
+ */
661
+ export function retagCell(cell, tag, scope = null) {
662
+ if (!cell) return cell;
663
+ const look = wearsHeaderLook(tag, tag === "th" ? scope : null);
664
+ const changes = wearsHeaderLook(cell.localName, cell.getAttribute("scope")) !== look;
665
+ if (cell.localName === tag && !changes) {
666
+ if (tag === "th" && scope) cell.setAttribute("scope", scope);
667
+ else cell.removeAttribute("scope");
668
+ return cell;
669
+ }
670
+ const next = cell.ownerDocument.createElement(tag);
671
+ for (const { name, value } of [...cell.attributes]) if (name !== "scope") next.setAttribute(name, value);
672
+ if (tag === "th" && scope) next.setAttribute("scope", scope);
673
+ if (changes) headerLook(next, look);
674
+ next.append(...[...cell.childNodes].map((node) => node.cloneNode(true)));
675
+ cell.replaceWith(next);
676
+ return next;
677
+ }
678
+
679
+ // A thead left with no rows goes.
680
+ function dropEmptyHead(unit) {
681
+ const { head } = tableParts(unit);
682
+ if (head && head.rows.length === 0) head.remove();
683
+ }