@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.
- package/LICENSE +21 -0
- package/README.md +50 -2
- package/THIRD-PARTY-NOTICES.md +3303 -0
- package/assets/writing-preferences.md +107 -0
- package/bin/gallery.mjs +10 -0
- package/browser/editor/components/bookmark/icons.mjs +6 -0
- package/browser/editor/components/bookmark/index.mjs +80 -0
- package/browser/editor/components/bookmark/page.mjs +147 -0
- package/browser/editor/components/builders.mjs +19 -0
- package/browser/editor/components/callout/index.mjs +64 -0
- package/browser/editor/components/code/index.mjs +327 -0
- package/browser/editor/components/code/page.mjs +561 -0
- package/browser/editor/components/colors.mjs +50 -0
- package/browser/editor/components/columns/index.mjs +104 -0
- package/browser/editor/components/columns/page.mjs +310 -0
- package/browser/editor/components/details/index.mjs +73 -0
- package/browser/editor/components/details/page.mjs +86 -0
- package/browser/editor/components/dialog/index.mjs +84 -0
- package/browser/editor/components/dialog/page.mjs +201 -0
- package/browser/editor/components/divider/index.mjs +48 -0
- package/browser/editor/components/embed/icons.mjs +11 -0
- package/browser/editor/components/embed/index.mjs +123 -0
- package/browser/editor/components/embed/page.mjs +309 -0
- package/browser/editor/components/figure/index.mjs +87 -0
- package/browser/editor/components/figure/page.mjs +42 -0
- package/browser/editor/components/file/icons.mjs +14 -0
- package/browser/editor/components/file/index.mjs +77 -0
- package/browser/editor/components/file/page.mjs +114 -0
- package/browser/editor/components/flowchart/add.mjs +123 -0
- package/browser/editor/components/flowchart/index.mjs +246 -0
- package/browser/editor/components/flowchart/page.mjs +453 -0
- package/browser/editor/components/heading/index.mjs +53 -0
- package/browser/editor/components/heading/page.mjs +6 -0
- package/browser/editor/components/highlight/index.mjs +63 -0
- package/browser/editor/components/icon/index.mjs +57 -0
- package/browser/editor/components/icon/page.mjs +286 -0
- package/browser/editor/components/icons.mjs +48 -0
- package/browser/editor/components/image/crop.mjs +189 -0
- package/browser/editor/components/image/index.mjs +104 -0
- package/browser/editor/components/image/page.mjs +385 -0
- package/browser/editor/components/image/viewer.mjs +213 -0
- package/browser/editor/components/installed/index.mjs +179 -0
- package/browser/editor/components/installed/page.mjs +523 -0
- package/browser/editor/components/installed/served.mjs +35 -0
- package/browser/editor/components/kit.mjs +67 -0
- package/browser/editor/components/list/index.mjs +194 -0
- package/browser/editor/components/list/join.mjs +68 -0
- package/browser/editor/components/list/numbers.mjs +107 -0
- package/browser/editor/components/list/page.mjs +632 -0
- package/browser/editor/components/math/index.mjs +88 -0
- package/browser/editor/components/math/page.mjs +236 -0
- package/browser/editor/components/math/tex-logo.mjs +6 -0
- package/browser/editor/components/media/icons.mjs +19 -0
- package/browser/editor/components/media/page.mjs +192 -0
- package/browser/editor/components/media/parts.mjs +60 -0
- package/browser/editor/components/media/size.mjs +20 -0
- package/browser/editor/components/media/toolbar.mjs +37 -0
- package/browser/editor/components/media/write.mjs +7 -0
- package/browser/editor/components/pages.mjs +46 -0
- package/browser/editor/components/paragraph/index.mjs +43 -0
- package/browser/editor/components/paragraph/page.mjs +52 -0
- package/browser/editor/components/placeholder-bar.mjs +17 -0
- package/browser/editor/components/placeholder.mjs +128 -0
- package/browser/editor/components/quote/index.mjs +33 -0
- package/browser/editor/components/registry.mjs +859 -0
- package/browser/editor/components/rows.mjs +16 -0
- package/browser/editor/components/section/index.mjs +42 -0
- package/browser/editor/components/section/page.mjs +141 -0
- package/browser/editor/components/set-apart.mjs +24 -0
- package/browser/editor/components/sheets/index.mjs +137 -0
- package/browser/editor/components/sheets/page.mjs +227 -0
- package/browser/editor/components/sheets/pills.mjs +226 -0
- package/browser/editor/components/table/grid.mjs +73 -0
- package/browser/editor/components/table/index.mjs +308 -0
- package/browser/editor/components/table/page.mjs +683 -0
- package/browser/editor/components/table/slots.mjs +41 -0
- package/browser/editor/components/widget/index.mjs +50 -0
- package/browser/editor/page/annotate/anchors.mjs +230 -0
- package/browser/editor/page/annotate/card.mjs +102 -0
- package/browser/editor/page/annotate/index.mjs +1656 -0
- package/browser/editor/page/at-menu/index.mjs +317 -0
- package/browser/editor/page/autosave.mjs +1023 -0
- package/browser/editor/page/beside.mjs +21 -0
- package/browser/editor/page/block-info.mjs +63 -0
- package/browser/editor/page/block-menu/colors.mjs +84 -0
- package/browser/editor/page/block-menu/index.mjs +217 -0
- package/browser/editor/page/blocks.mjs +255 -0
- package/browser/editor/page/caret.mjs +682 -0
- package/browser/editor/page/changes/bar.mjs +102 -0
- package/browser/editor/page/changes/ghost.mjs +206 -0
- package/browser/editor/page/changes/gone-words.mjs +94 -0
- package/browser/editor/page/changes/index.mjs +447 -0
- package/browser/editor/page/changes/words.mjs +27 -0
- package/browser/editor/page/chip-fills.mjs +126 -0
- package/browser/editor/page/clipboard/import/colors.mjs +192 -0
- package/browser/editor/page/clipboard/import/html.mjs +792 -0
- package/browser/editor/page/clipboard/import/inline.mjs +232 -0
- package/browser/editor/page/clipboard/import/languages.mjs +42 -0
- package/browser/editor/page/clipboard/import/markdown.mjs +760 -0
- package/browser/editor/page/clipboard/import/math.mjs +100 -0
- package/browser/editor/page/clipboard/import/office.mjs +245 -0
- package/browser/editor/page/clipboard/import/read.mjs +120 -0
- package/browser/editor/page/clipboard/import/rich.mjs +29 -0
- package/browser/editor/page/clipboard/import/to-blocks.mjs +290 -0
- package/browser/editor/page/clipboard/index.mjs +816 -0
- package/browser/editor/page/clipboard/own/blocks.mjs +211 -0
- package/browser/editor/page/clipboard/own/chart-keys.mjs +58 -0
- package/browser/editor/page/clipboard/own/describe.mjs +124 -0
- package/browser/editor/page/clipboard/own/export.mjs +167 -0
- package/browser/editor/page/clipboard/own/ids.mjs +39 -0
- package/browser/editor/page/clipboard/own/index.mjs +13 -0
- package/browser/editor/page/clipboard/own/rules.mjs +44 -0
- package/browser/editor/page/clipboard/own/selection.mjs +159 -0
- package/browser/editor/page/clipboard/own/writers.mjs +315 -0
- package/browser/editor/page/columns/index.mjs +360 -0
- package/browser/editor/page/commit.mjs +1813 -0
- package/browser/editor/page/conflicts.mjs +249 -0
- package/browser/editor/page/convert.mjs +831 -0
- package/browser/editor/page/core.mjs +1693 -0
- package/browser/editor/page/drag/drop.mjs +307 -0
- package/browser/editor/page/drag/index.mjs +351 -0
- package/browser/editor/page/drag/preview.mjs +126 -0
- package/browser/editor/page/edge-scroll.mjs +50 -0
- package/browser/editor/page/editor.mjs +1780 -0
- package/browser/editor/page/emoji-picker/emoji-tab.mjs +287 -0
- package/browser/editor/page/emoji-picker/glyph-html.mjs +26 -0
- package/browser/editor/page/emoji-picker/grid.mjs +81 -0
- package/browser/editor/page/emoji-picker/icon-tab.mjs +217 -0
- package/browser/editor/page/emoji-picker/icons.mjs +31 -0
- package/browser/editor/page/emoji-picker/index.mjs +166 -0
- package/browser/editor/page/emoji-picker/styles.mjs +161 -0
- package/browser/editor/page/emoji-picker/support.mjs +204 -0
- package/browser/editor/page/emoji-picker/upload.mjs +236 -0
- package/browser/editor/page/export-report.mjs +23 -0
- package/browser/editor/page/fills.mjs +62 -0
- package/browser/editor/page/find/index.mjs +107 -0
- package/browser/editor/page/flags.mjs +70 -0
- package/browser/editor/page/fold/index.mjs +348 -0
- package/browser/editor/page/fold/rule.mjs +125 -0
- package/browser/editor/page/folded.mjs +23 -0
- package/browser/editor/page/format-bar/bar.mjs +449 -0
- package/browser/editor/page/format-bar/brush.mjs +77 -0
- package/browser/editor/page/format-bar/colors.mjs +46 -0
- package/browser/editor/page/format-bar/index.mjs +404 -0
- package/browser/editor/page/formula/index.mjs +236 -0
- package/browser/editor/page/formula/panel.mjs +336 -0
- package/browser/editor/page/formula/symbols.mjs +156 -0
- package/browser/editor/page/frame.mjs +74 -0
- package/browser/editor/page/frames.mjs +196 -0
- package/browser/editor/page/geometry.mjs +402 -0
- package/browser/editor/page/gesture.mjs +45 -0
- package/browser/editor/page/handle/index.mjs +650 -0
- package/browser/editor/page/handle-sizes.mjs +14 -0
- package/browser/editor/page/hints/index.mjs +84 -0
- package/browser/editor/page/history.mjs +401 -0
- package/browser/editor/page/insert/index.mjs +256 -0
- package/browser/editor/page/kept.mjs +38 -0
- package/browser/editor/page/links/address.mjs +40 -0
- package/browser/editor/page/links/index.mjs +866 -0
- package/browser/editor/page/links/pages.mjs +131 -0
- package/browser/editor/page/links/views.mjs +369 -0
- package/browser/editor/page/long-runs.mjs +75 -0
- package/browser/editor/page/look.mjs +77 -0
- package/browser/editor/page/made.mjs +24 -0
- package/browser/editor/page/margin.mjs +373 -0
- package/browser/editor/page/markdown/index.mjs +88 -0
- package/browser/editor/page/markdown/rules.mjs +33 -0
- package/browser/editor/page/marks.mjs +377 -0
- package/browser/editor/page/media-menu/index.mjs +158 -0
- package/browser/editor/page/menu.mjs +544 -0
- package/browser/editor/page/merge.mjs +124 -0
- package/browser/editor/page/notices.mjs +142 -0
- package/browser/editor/page/offered.mjs +32 -0
- package/browser/editor/page/outline/folds.mjs +53 -0
- package/browser/editor/page/outline/index.mjs +783 -0
- package/browser/editor/page/outline/list.mjs +184 -0
- package/browser/editor/page/outline/read.mjs +201 -0
- package/browser/editor/page/outline/strip.mjs +287 -0
- package/browser/editor/page/outline/tree.mjs +248 -0
- package/browser/editor/page/overlay-layer.mjs +227 -0
- package/browser/editor/page/overlays.mjs +205 -0
- package/browser/editor/page/own.mjs +28 -0
- package/browser/editor/page/pads.mjs +71 -0
- package/browser/editor/page/page-objects.mjs +105 -0
- package/browser/editor/page/panel.mjs +65 -0
- package/browser/editor/page/placement.mjs +58 -0
- package/browser/editor/page/post.mjs +41 -0
- package/browser/editor/page/present-links.mjs +50 -0
- package/browser/editor/page/quiet.mjs +48 -0
- package/browser/editor/page/resize/index.mjs +327 -0
- package/browser/editor/page/select-all/index.mjs +262 -0
- package/browser/editor/page/selection/delete.mjs +61 -0
- package/browser/editor/page/selection/index.mjs +164 -0
- package/browser/editor/page/selection/marquee.mjs +174 -0
- package/browser/editor/page/session.mjs +168 -0
- package/browser/editor/page/slash-menu/index.mjs +291 -0
- package/browser/editor/page/storage.mjs +48 -0
- package/browser/editor/page/sync-state.mjs +267 -0
- package/browser/editor/page/table/aligns.mjs +29 -0
- package/browser/editor/page/table/cell-bar.mjs +141 -0
- package/browser/editor/page/table/cells.mjs +527 -0
- package/browser/editor/page/table/icons.mjs +40 -0
- package/browser/editor/page/table/index.mjs +990 -0
- package/browser/editor/page/table/lists.mjs +187 -0
- package/browser/editor/page/table/widths.mjs +313 -0
- package/browser/editor/page/tex.mjs +32 -0
- package/browser/editor/page/text-select/index.mjs +671 -0
- package/browser/editor/page/tooltip.mjs +98 -0
- package/browser/editor/page/type-grid.mjs +83 -0
- package/browser/editor/page/typing/code-edges.mjs +274 -0
- package/browser/editor/page/typing/index.mjs +282 -0
- package/browser/editor/page/typing/leave.mjs +68 -0
- package/browser/editor/page/ui.mjs +160 -0
- package/browser/shared/annotations.mjs +569 -0
- package/browser/shared/code-folds.mjs +14 -0
- package/browser/shared/code-languages.mjs +70 -0
- package/browser/shared/code-lines.mjs +30 -0
- package/browser/shared/colors.mjs +30 -0
- package/browser/shared/component-catalog.mjs +573 -0
- package/browser/shared/components/bookmark.mjs +26 -0
- package/browser/shared/components/callout.mjs +9 -0
- package/browser/shared/components/chart.mjs +20 -0
- package/browser/shared/components/code.mjs +37 -0
- package/browser/shared/components/columns.mjs +16 -0
- package/browser/shared/components/details.mjs +15 -0
- package/browser/shared/components/dialog.mjs +28 -0
- package/browser/shared/components/diff.mjs +18 -0
- package/browser/shared/components/divider.mjs +6 -0
- package/browser/shared/components/embed.mjs +25 -0
- package/browser/shared/components/figure.mjs +14 -0
- package/browser/shared/components/file.mjs +23 -0
- package/browser/shared/components/heading.mjs +6 -0
- package/browser/shared/components/highlight.mjs +9 -0
- package/browser/shared/components/icon.mjs +18 -0
- package/browser/shared/components/image.mjs +39 -0
- package/browser/shared/components/index.mjs +396 -0
- package/browser/shared/components/installed.mjs +232 -0
- package/browser/shared/components/list.mjs +146 -0
- package/browser/shared/components/math.mjs +49 -0
- package/browser/shared/components/mention.mjs +33 -0
- package/browser/shared/components/page.mjs +46 -0
- package/browser/shared/components/paragraph.mjs +9 -0
- package/browser/shared/components/quote.mjs +6 -0
- package/browser/shared/components/section.mjs +8 -0
- package/browser/shared/components/sheets.mjs +80 -0
- package/browser/shared/components/state.mjs +20 -0
- package/browser/shared/components/table.mjs +49 -0
- package/browser/shared/components/text.mjs +14 -0
- package/browser/shared/components/widget.mjs +10 -0
- package/browser/shared/copy-ids.mjs +72 -0
- package/browser/shared/css-references.mjs +110 -0
- package/browser/shared/document-look.mjs +178 -0
- package/browser/shared/emoji/custom.mjs +91 -0
- package/browser/shared/emoji/data/LICENSE-lucide.txt +43 -0
- package/browser/shared/emoji/data/LICENSE-mingcute.txt +202 -0
- package/browser/shared/emoji/data/LICENSE-tabler.txt +21 -0
- package/browser/shared/emoji/data/README.md +28 -0
- package/browser/shared/emoji/data/categories.json +1 -0
- package/browser/shared/emoji/data/icons.json +1 -0
- package/browser/shared/emoji/data/keywords-en.json +1 -0
- package/browser/shared/emoji/data/keywords-zh.json +1 -0
- package/browser/shared/emoji/data/names.json +1 -0
- package/browser/shared/emoji/data/positions.json +1 -0
- package/browser/shared/emoji/data/twemoji-index.json +1 -0
- package/browser/shared/emoji/data/twemoji-svg.bin +0 -0
- package/browser/shared/emoji/data.mjs +194 -0
- package/browser/shared/emoji/emoji.mjs +38 -0
- package/browser/shared/emoji/glyphs.mjs +134 -0
- package/browser/shared/emoji/icon-value.mjs +91 -0
- package/browser/shared/escape.mjs +20 -0
- package/browser/shared/export-wrap.mjs +89 -0
- package/browser/shared/files.mjs +33 -0
- package/browser/shared/html-tree.mjs +59 -0
- package/browser/shared/http.mjs +22 -0
- package/browser/shared/i18n/en.mjs +1223 -0
- package/browser/shared/i18n/index.mjs +132 -0
- package/browser/shared/ids.mjs +24 -0
- package/browser/shared/import-types.mjs +23 -0
- package/browser/shared/inline-spacing.mjs +97 -0
- package/browser/shared/layers.mjs +42 -0
- package/browser/shared/long-runs.mjs +39 -0
- package/browser/shared/media.mjs +162 -0
- package/browser/shared/new-names.mjs +67 -0
- package/browser/shared/number-reading.mjs +92 -0
- package/browser/shared/old-names.mjs +143 -0
- package/browser/shared/outline.mjs +194 -0
- package/browser/shared/page-address.mjs +140 -0
- package/browser/shared/page-links.mjs +86 -0
- package/browser/shared/paths.mjs +73 -0
- package/browser/shared/preferences.mjs +116 -0
- package/browser/shared/preview-server.mjs +247 -0
- package/browser/shared/qa-levels.mjs +93 -0
- package/browser/shared/reading-place.mjs +91 -0
- package/browser/shared/renamed-storage.mjs +220 -0
- package/browser/shared/reports.mjs +46 -0
- package/browser/shared/search.mjs +85 -0
- package/browser/shared/session.mjs +77 -0
- package/browser/shared/table-chart.mjs +113 -0
- package/browser/shared/table-hides.mjs +120 -0
- package/browser/shared/table-slots.mjs +75 -0
- package/browser/shared/words.mjs +23 -0
- package/browser/shared/workspace-look.mjs +91 -0
- package/browser/shared/workspace.mjs +535 -0
- package/browser/shared/writing-preferences.mjs +68 -0
- package/browser/shared/zoom.mjs +57 -0
- package/dist/chunk-2B5E4CDJ.mjs +2 -0
- package/dist/chunk-342HXE3Q.mjs +2 -0
- package/dist/chunk-3HIRPVLU.mjs +2 -0
- package/dist/chunk-43B75J5T.mjs +2 -0
- package/dist/chunk-4FS7Z7WR.mjs +2 -0
- package/dist/chunk-4K5KC6V2.mjs +2 -0
- package/dist/chunk-5L7RYZCL.mjs +2 -0
- package/dist/chunk-5MHMDLZD.mjs +4 -0
- package/dist/chunk-5ZKJ3H4P.mjs +8 -0
- package/dist/chunk-64K7IPLO.mjs +255 -0
- package/dist/chunk-6QXGZM36.mjs +8 -0
- package/dist/chunk-6RGJOMJP.mjs +16 -0
- package/dist/chunk-742D2WWJ.mjs +19 -0
- package/dist/chunk-7DTINW6U.mjs +48 -0
- package/dist/chunk-A55HN5OK.mjs +2 -0
- package/dist/chunk-AGDILNWB.mjs +2 -0
- package/dist/chunk-AJ73XJF3.mjs +2 -0
- package/dist/chunk-AUZGSZJH.mjs +13 -0
- package/dist/chunk-BFE45AKL.mjs +2 -0
- package/dist/chunk-BGGDRNYQ.mjs +10 -0
- package/dist/chunk-BXO2ZY5P.mjs +2 -0
- package/dist/chunk-C564NU2H.mjs +77 -0
- package/dist/chunk-CEH4MRCC.mjs +2 -0
- package/dist/chunk-CY2FNNAB.mjs +16 -0
- package/dist/chunk-DFUDV4LX.mjs +2 -0
- package/dist/chunk-DKXG4XDG.mjs +2 -0
- package/dist/chunk-E7LWZRXY.mjs +4 -0
- package/dist/chunk-EZQ34M3F.mjs +124 -0
- package/dist/chunk-EZY3WC6Z.mjs +15 -0
- package/dist/chunk-FDLXYYG4.mjs +4 -0
- package/dist/chunk-FUKQNOQS.mjs +9 -0
- package/dist/chunk-GB5SOYQJ.mjs +7 -0
- package/dist/chunk-GRAXKKG4.mjs +2 -0
- package/dist/chunk-HYMEEXKN.mjs +4 -0
- package/dist/chunk-IVDLMMBD.mjs +2 -0
- package/dist/chunk-JPOSLGOC.mjs +6 -0
- package/dist/chunk-JVHHHGEA.mjs +3 -0
- package/dist/chunk-L3QKH4OK.mjs +26 -0
- package/dist/chunk-LAE5NQ4B.mjs +2 -0
- package/dist/chunk-LCTHTZIL.mjs +960 -0
- package/dist/chunk-LEF6DRCK.mjs +59 -0
- package/dist/chunk-LKX55H76.mjs +2 -0
- package/dist/chunk-LS4F7JUM.mjs +2 -0
- package/dist/chunk-MAFIGVXY.mjs +2 -0
- package/dist/chunk-NO5NJCHO.mjs +2 -0
- package/dist/chunk-NQPVAU63.mjs +2 -0
- package/dist/chunk-NSKUTQ5J.mjs +5 -0
- package/dist/chunk-O35FIXRB.mjs +2 -0
- package/dist/chunk-P2CAZPDP.mjs +3 -0
- package/dist/chunk-PL6GHLGD.mjs +15 -0
- package/dist/chunk-QAIHRH3I.mjs +13 -0
- package/dist/chunk-QJIR2BLP.mjs +6 -0
- package/dist/chunk-QR6A54KJ.mjs +3 -0
- package/dist/chunk-QUPLVPB2.mjs +7 -0
- package/dist/chunk-R7BNENLY.mjs +4 -0
- package/dist/chunk-S6O4UHLC.mjs +2 -0
- package/dist/chunk-SGJWQKEI.mjs +2 -0
- package/dist/chunk-SYGN7GLU.mjs +2 -0
- package/dist/chunk-TMYZB6AV.mjs +2 -0
- package/dist/chunk-TX6JH7TR.mjs +2 -0
- package/dist/chunk-TYK6VNAB.mjs +10 -0
- package/dist/chunk-U3SSPL4K.mjs +8 -0
- package/dist/chunk-U6KNPJPR.mjs +2 -0
- package/dist/chunk-UALRNVSE.mjs +4 -0
- package/dist/chunk-UH4SIXTR.mjs +2 -0
- package/dist/chunk-UMHUSOPJ.mjs +2 -0
- package/dist/chunk-V3HXVQEM.mjs +2 -0
- package/dist/chunk-V5JTW2LH.mjs +27 -0
- package/dist/chunk-V5VXUJKG.mjs +2 -0
- package/dist/chunk-V6XZ4VIR.mjs +2 -0
- package/dist/chunk-VBXMADMP.mjs +2 -0
- package/dist/chunk-VNV55RUA.mjs +2 -0
- package/dist/chunk-VPD2PS35.mjs +2 -0
- package/dist/chunk-W3BGBJQW.mjs +2 -0
- package/dist/chunk-W4VKN3GF.mjs +7 -0
- package/dist/chunk-W5BXXPDJ.mjs +3 -0
- package/dist/chunk-W7XHE4CT.mjs +2 -0
- package/dist/chunk-XNROSH2T.mjs +4 -0
- package/dist/chunk-XUNHRCOG.mjs +6 -0
- package/dist/chunk-Y34NR5JL.mjs +2 -0
- package/dist/chunk-Y6RLRPG3.mjs +3 -0
- package/dist/chunk-YEY3RSFQ.mjs +2 -0
- package/dist/cli.mjs +2 -0
- package/dist/server.mjs +2 -0
- package/dist/worker.mjs +5 -0
- package/kit/charts.js +355 -0
- package/kit/code.js +164 -0
- package/kit/dialogs.js +157 -0
- package/kit/math.js +2004 -0
- package/kit/report.css +2932 -0
- package/kit/runtime.js +1782 -0
- package/kit/sheets.js +123 -0
- package/kit/state.js +217 -0
- package/kit/tables.js +1499 -0
- package/kit/tokens.js +29 -0
- package/kit/ui.js +658 -0
- package/package.json +41 -4
- package/release.json +25 -0
- package/sdk/column-widths.d.ts +56 -0
- package/sdk/doc-charts.d.ts +82 -0
- package/sdk/doc-code.d.ts +28 -0
- package/sdk/doc-dialogs.d.ts +4 -0
- package/sdk/doc-kit.d.ts +147 -0
- package/sdk/doc-math.d.ts +3 -0
- package/sdk/doc-sheets.d.ts +15 -0
- package/sdk/doc-state.d.ts +41 -0
- package/sdk/doc-tables.d.ts +24 -0
- package/sdk/doc-tokens.d.ts +22 -0
- package/sdk/index.d.ts +30 -0
- package/skill/SKILL.md +150 -0
- package/skill/agents/openai.yaml +5 -0
- package/skill/references/building-components.md +367 -0
- package/skill/references/example-report.html +356 -0
- package/skill/references/writing-html.md +187 -0
- package/skill/sdk/column-widths.d.ts +56 -0
- package/skill/sdk/doc-charts.d.ts +82 -0
- package/skill/sdk/doc-code.d.ts +28 -0
- package/skill/sdk/doc-dialogs.d.ts +4 -0
- package/skill/sdk/doc-kit.d.ts +147 -0
- package/skill/sdk/doc-math.d.ts +3 -0
- package/skill/sdk/doc-sheets.d.ts +15 -0
- package/skill/sdk/doc-state.d.ts +41 -0
- package/skill/sdk/doc-tables.d.ts +24 -0
- package/skill/sdk/doc-tokens.d.ts +22 -0
- package/skill/sdk/index.d.ts +30 -0
- package/starter/doc.html +21 -0
- package/starter/doc.json +5 -0
- package/vendor/d3.v7.9.0.min.js +2 -0
- package/vendor/katex/auto-render.min.js +1 -0
- package/vendor/katex/contrib/mhchem.min.js +1 -0
- package/vendor/katex/fonts/KaTeX_AMS-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Caligraphic-Bold.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Caligraphic-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Fraktur-Bold.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Fraktur-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Main-Bold.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Main-BoldItalic.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Main-Italic.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Main-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Math-BoldItalic.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Math-Italic.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_SansSerif-Bold.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_SansSerif-Italic.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_SansSerif-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Script-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Size1-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Size2-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Size3-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Size4-Regular.woff2 +0 -0
- package/vendor/katex/fonts/KaTeX_Typewriter-Regular.woff2 +0 -0
- package/vendor/katex/katex.min.css +1 -0
- package/vendor/katex/katex.min.js +1 -0
- package/vendor/pdfjs/LICENSE +177 -0
- package/vendor/pdfjs/cmaps/78-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78ms-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/78ms-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/83pv-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/90ms-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/90ms-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/90msp-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/90msp-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/90pv-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/90pv-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Add-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Add-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Add-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Add-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-0.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-1.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-3.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-4.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-5.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-6.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-CNS1-UCS2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-0.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-1.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-3.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-4.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-5.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-GB1-UCS2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-0.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-1.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-3.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-4.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-5.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-6.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Japan1-UCS2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Korea1-0.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Korea1-1.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Korea1-2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Adobe-Korea1-UCS2.bcmap +0 -0
- package/vendor/pdfjs/cmaps/B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/B5pc-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/B5pc-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/CNS-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/CNS-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/CNS1-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/CNS1-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/CNS2-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/CNS2-V.bcmap +3 -0
- package/vendor/pdfjs/cmaps/ETHK-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/ETHK-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/ETen-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/ETen-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/ETenms-B5-H.bcmap +3 -0
- package/vendor/pdfjs/cmaps/ETenms-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Ext-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Ext-RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Ext-RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Ext-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GB-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GB-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GB-H.bcmap +4 -0
- package/vendor/pdfjs/cmaps/GB-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBK-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBK-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBK2K-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBK2K-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBKp-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBKp-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBT-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBT-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBT-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBT-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBTpc-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBTpc-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBpc-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/GBpc-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKdla-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKdla-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKdlb-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKdlb-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKgccs-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKgccs-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKm314-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKm314-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKm471-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKm471-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKscs-B5-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/HKscs-B5-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Hankaku.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Hiragana.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSC-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSC-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSC-Johab-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSC-Johab-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSCms-UHC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSCms-UHC-HW-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSCms-UHC-HW-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSCms-UHC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSCpc-EUC-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/KSCpc-EUC-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Katakana.bcmap +0 -0
- package/vendor/pdfjs/cmaps/LICENSE +36 -0
- package/vendor/pdfjs/cmaps/NWP-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/NWP-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/RKSJ-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/RKSJ-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/Roman.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UCS2-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UCS2-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UTF16-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UTF16-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UTF8-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniCNS-UTF8-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UCS2-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UCS2-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UTF16-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UTF16-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UTF8-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniGB-UTF8-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UCS2-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UCS2-HW-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UCS2-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UTF16-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UTF16-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UTF8-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS-UTF8-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS2004-UTF16-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS2004-UTF16-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS2004-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS2004-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS2004-UTF8-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJIS2004-UTF8-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISPro-UCS2-HW-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISPro-UCS2-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISPro-UTF8-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISX0213-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISX0213-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniJISX02132004-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UCS2-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UCS2-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UTF16-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UTF16-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UTF32-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UTF32-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UTF8-H.bcmap +0 -0
- package/vendor/pdfjs/cmaps/UniKS-UTF8-V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/V.bcmap +0 -0
- package/vendor/pdfjs/cmaps/WP-Symbol.bcmap +0 -0
- package/vendor/pdfjs/legacy/build/pdf.min.mjs +27 -0
- package/vendor/pdfjs/legacy/build/pdf.worker.min.mjs +27 -0
- package/vendor/pdfjs/standard_fonts/FoxitDingbats.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitFixed.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitFixedBold.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitFixedBoldItalic.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitFixedItalic.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitSerif.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitSerifBold.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitSerifBoldItalic.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitSerifItalic.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/FoxitSymbol.pfb +0 -0
- package/vendor/pdfjs/standard_fonts/LICENSE_FOXIT +27 -0
- package/vendor/pdfjs/standard_fonts/LICENSE_LIBERATION +363 -0
- package/vendor/pdfjs/standard_fonts/LiberationSans-Bold.ttf +0 -0
- package/vendor/pdfjs/standard_fonts/LiberationSans-BoldItalic.ttf +0 -0
- package/vendor/pdfjs/standard_fonts/LiberationSans-Italic.ttf +0 -0
- package/vendor/pdfjs/standard_fonts/LiberationSans-Regular.ttf +0 -0
- package/vendor/types/@types/d3/LICENSE +21 -0
- package/vendor/types/@types/d3/index.d.ts +39 -0
- package/vendor/types/@types/d3/package.json +81 -0
- package/vendor/types/@types/d3-array/LICENSE +21 -0
- package/vendor/types/@types/d3-array/index.d.ts +1118 -0
- package/vendor/types/@types/d3-array/package.json +56 -0
- package/vendor/types/@types/d3-axis/LICENSE +21 -0
- package/vendor/types/@types/d3-axis/index.d.ts +293 -0
- package/vendor/types/@types/d3-axis/package.json +47 -0
- package/vendor/types/@types/d3-brush/LICENSE +21 -0
- package/vendor/types/@types/d3-brush/index.d.ts +255 -0
- package/vendor/types/@types/d3-brush/package.json +42 -0
- package/vendor/types/@types/d3-chord/LICENSE +21 -0
- package/vendor/types/@types/d3-chord/index.d.ts +471 -0
- package/vendor/types/@types/d3-chord/package.json +40 -0
- package/vendor/types/@types/d3-color/LICENSE +21 -0
- package/vendor/types/@types/d3-color/index.d.ts +669 -0
- package/vendor/types/@types/d3-color/package.json +55 -0
- package/vendor/types/@types/d3-contour/LICENSE +21 -0
- package/vendor/types/@types/d3-contour/index.d.ts +222 -0
- package/vendor/types/@types/d3-contour/package.json +38 -0
- package/vendor/types/@types/d3-delaunay/LICENSE +21 -0
- package/vendor/types/@types/d3-delaunay/index.d.ts +316 -0
- package/vendor/types/@types/d3-delaunay/package.json +30 -0
- package/vendor/types/@types/d3-dispatch/LICENSE +21 -0
- package/vendor/types/@types/d3-dispatch/index.d.ts +96 -0
- package/vendor/types/@types/d3-dispatch/package.json +51 -0
- package/vendor/types/@types/d3-drag/LICENSE +21 -0
- package/vendor/types/@types/d3-drag/index.d.ts +395 -0
- package/vendor/types/@types/d3-drag/package.json +42 -0
- package/vendor/types/@types/d3-dsv/LICENSE +21 -0
- package/vendor/types/@types/d3-dsv/index.d.ts +482 -0
- package/vendor/types/@types/d3-dsv/package.json +45 -0
- package/vendor/types/@types/d3-ease/LICENSE +21 -0
- package/vendor/types/@types/d3-ease/index.d.ts +316 -0
- package/vendor/types/@types/d3-ease/package.json +40 -0
- package/vendor/types/@types/d3-fetch/LICENSE +21 -0
- package/vendor/types/@types/d3-fetch/index.d.ts +282 -0
- package/vendor/types/@types/d3-fetch/package.json +37 -0
- package/vendor/types/@types/d3-force/LICENSE +21 -0
- package/vendor/types/@types/d3-force/index.d.ts +899 -0
- package/vendor/types/@types/d3-force/package.json +45 -0
- package/vendor/types/@types/d3-format/LICENSE +21 -0
- package/vendor/types/@types/d3-format/index.d.ts +337 -0
- package/vendor/types/@types/d3-format/package.json +45 -0
- package/vendor/types/@types/d3-geo/LICENSE +21 -0
- package/vendor/types/@types/d3-geo/index.d.ts +1371 -0
- package/vendor/types/@types/d3-geo/package.json +48 -0
- package/vendor/types/@types/d3-hierarchy/LICENSE +21 -0
- package/vendor/types/@types/d3-hierarchy/index.d.ts +928 -0
- package/vendor/types/@types/d3-hierarchy/package.json +50 -0
- package/vendor/types/@types/d3-interpolate/LICENSE +21 -0
- package/vendor/types/@types/d3-interpolate/index.d.ts +387 -0
- package/vendor/types/@types/d3-interpolate/package.json +47 -0
- package/vendor/types/@types/d3-path/LICENSE +21 -0
- package/vendor/types/@types/d3-path/index.d.ts +108 -0
- package/vendor/types/@types/d3-path/package.json +41 -0
- package/vendor/types/@types/d3-polygon/LICENSE +21 -0
- package/vendor/types/@types/d3-polygon/index.d.ts +41 -0
- package/vendor/types/@types/d3-polygon/package.json +40 -0
- package/vendor/types/@types/d3-quadtree/LICENSE +21 -0
- package/vendor/types/@types/d3-quadtree/index.d.ts +204 -0
- package/vendor/types/@types/d3-quadtree/package.json +45 -0
- package/vendor/types/@types/d3-random/LICENSE +21 -0
- package/vendor/types/@types/d3-random/index.d.ts +313 -0
- package/vendor/types/@types/d3-random/package.json +41 -0
- package/vendor/types/@types/d3-scale/LICENSE +21 -0
- package/vendor/types/@types/d3-scale/index.d.ts +2669 -0
- package/vendor/types/@types/d3-scale/package.json +53 -0
- package/vendor/types/@types/d3-scale-chromatic/LICENSE +21 -0
- package/vendor/types/@types/d3-scale-chromatic/index.d.ts +520 -0
- package/vendor/types/@types/d3-scale-chromatic/package.json +46 -0
- package/vendor/types/@types/d3-selection/LICENSE +21 -0
- package/vendor/types/@types/d3-selection/index.d.ts +1210 -0
- package/vendor/types/@types/d3-selection/package.json +56 -0
- package/vendor/types/@types/d3-shape/LICENSE +21 -0
- package/vendor/types/@types/d3-shape/index.d.ts +2792 -0
- package/vendor/types/@types/d3-shape/package.json +53 -0
- package/vendor/types/@types/d3-time/LICENSE +21 -0
- package/vendor/types/@types/d3-time/index.d.ts +697 -0
- package/vendor/types/@types/d3-time/package.json +46 -0
- package/vendor/types/@types/d3-time-format/LICENSE +21 -0
- package/vendor/types/@types/d3-time-format/index.d.ts +202 -0
- package/vendor/types/@types/d3-time-format/package.json +40 -0
- package/vendor/types/@types/d3-timer/LICENSE +21 -0
- package/vendor/types/@types/d3-timer/index.d.ts +68 -0
- package/vendor/types/@types/d3-timer/package.json +45 -0
- package/vendor/types/@types/d3-transition/LICENSE +21 -0
- package/vendor/types/@types/d3-transition/index.d.ts +664 -0
- package/vendor/types/@types/d3-transition/package.json +47 -0
- package/vendor/types/@types/d3-zoom/LICENSE +21 -0
- package/vendor/types/@types/d3-zoom/index.d.ts +611 -0
- package/vendor/types/@types/d3-zoom/package.json +48 -0
- package/vendor/types/@types/geojson/LICENSE +21 -0
- package/vendor/types/@types/geojson/index.d.ts +202 -0
- package/vendor/types/@types/geojson/package.json +46 -0
- package/vendor/typescript/LICENSE.txt +55 -0
- package/vendor/typescript/lib.decorators.d.ts +384 -0
- package/vendor/typescript/lib.decorators.legacy.d.ts +22 -0
- package/vendor/typescript/lib.dom.d.ts +39429 -0
- package/vendor/typescript/lib.dom.iterable.d.ts +571 -0
- package/vendor/typescript/lib.es2015.collection.d.ts +147 -0
- package/vendor/typescript/lib.es2015.core.d.ts +597 -0
- package/vendor/typescript/lib.es2015.d.ts +28 -0
- package/vendor/typescript/lib.es2015.generator.d.ts +77 -0
- package/vendor/typescript/lib.es2015.iterable.d.ts +605 -0
- package/vendor/typescript/lib.es2015.promise.d.ts +81 -0
- package/vendor/typescript/lib.es2015.proxy.d.ts +128 -0
- package/vendor/typescript/lib.es2015.reflect.d.ts +144 -0
- package/vendor/typescript/lib.es2015.symbol.d.ts +46 -0
- package/vendor/typescript/lib.es2015.symbol.wellknown.d.ts +326 -0
- package/vendor/typescript/lib.es2016.array.include.d.ts +116 -0
- package/vendor/typescript/lib.es2016.d.ts +21 -0
- package/vendor/typescript/lib.es2016.intl.d.ts +31 -0
- package/vendor/typescript/lib.es2017.arraybuffer.d.ts +21 -0
- package/vendor/typescript/lib.es2017.d.ts +26 -0
- package/vendor/typescript/lib.es2017.date.d.ts +31 -0
- package/vendor/typescript/lib.es2017.intl.d.ts +44 -0
- package/vendor/typescript/lib.es2017.object.d.ts +49 -0
- package/vendor/typescript/lib.es2017.sharedmemory.d.ts +135 -0
- package/vendor/typescript/lib.es2017.string.d.ts +45 -0
- package/vendor/typescript/lib.es2017.typedarrays.d.ts +53 -0
- package/vendor/typescript/lib.es2018.asyncgenerator.d.ts +77 -0
- package/vendor/typescript/lib.es2018.asynciterable.d.ts +53 -0
- package/vendor/typescript/lib.es2018.d.ts +24 -0
- package/vendor/typescript/lib.es2018.intl.d.ts +83 -0
- package/vendor/typescript/lib.es2018.promise.d.ts +30 -0
- package/vendor/typescript/lib.es2018.regexp.d.ts +37 -0
- package/vendor/typescript/lib.es2019.array.d.ts +79 -0
- package/vendor/typescript/lib.es2019.d.ts +24 -0
- package/vendor/typescript/lib.es2019.intl.d.ts +23 -0
- package/vendor/typescript/lib.es2019.object.d.ts +33 -0
- package/vendor/typescript/lib.es2019.string.d.ts +37 -0
- package/vendor/typescript/lib.es2019.symbol.d.ts +24 -0
- package/vendor/typescript/lib.es2020.bigint.d.ts +765 -0
- package/vendor/typescript/lib.es2020.d.ts +27 -0
- package/vendor/typescript/lib.es2020.date.d.ts +42 -0
- package/vendor/typescript/lib.es2020.intl.d.ts +474 -0
- package/vendor/typescript/lib.es2020.number.d.ts +28 -0
- package/vendor/typescript/lib.es2020.promise.d.ts +47 -0
- package/vendor/typescript/lib.es2020.sharedmemory.d.ts +99 -0
- package/vendor/typescript/lib.es2020.string.d.ts +44 -0
- package/vendor/typescript/lib.es2020.symbol.wellknown.d.ts +41 -0
- package/vendor/typescript/lib.es2021.d.ts +23 -0
- package/vendor/typescript/lib.es2021.intl.d.ts +166 -0
- package/vendor/typescript/lib.es2021.promise.d.ts +48 -0
- package/vendor/typescript/lib.es2021.string.d.ts +33 -0
- package/vendor/typescript/lib.es2021.weakref.d.ts +78 -0
- package/vendor/typescript/lib.es2022.array.d.ts +121 -0
- package/vendor/typescript/lib.es2022.d.ts +25 -0
- package/vendor/typescript/lib.es2022.error.d.ts +75 -0
- package/vendor/typescript/lib.es2022.intl.d.ts +145 -0
- package/vendor/typescript/lib.es2022.object.d.ts +26 -0
- package/vendor/typescript/lib.es2022.regexp.d.ts +39 -0
- package/vendor/typescript/lib.es2022.string.d.ts +25 -0
- package/vendor/typescript/lib.es5.d.ts +4601 -0
- package/vendor/typescript/package.json +4 -0
- package/vendor/typescript/typescript.js +446 -0
- package/web/assets/index-Bh74DfsV.css +1 -0
- package/web/assets/index-UW0RyFFt.js +13 -0
- package/web/index.html +14 -0
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
import { IN_LAYER } from "../../../shared/layers.mjs";
|
|
2
|
+
import { FOLD_ARROW } from "../../../shared/code-folds.mjs";
|
|
3
|
+
import { t } from "../../../shared/i18n/index.mjs";
|
|
4
|
+
import { ELEMENT_ID, UNIT, identityOf, unitsOf, withLeads } from "../core.mjs";
|
|
5
|
+
import { caretAt } from "../caret.mjs";
|
|
6
|
+
import { HEADING } from "../outline/read.mjs";
|
|
7
|
+
import { foldsOf, keepFolds } from "../outline/folds.mjs";
|
|
8
|
+
import { drawAt, shapeOf } from "../overlay-layer.mjs";
|
|
9
|
+
import { own } from "../overlays.mjs";
|
|
10
|
+
import { local } from "../storage.mjs";
|
|
11
|
+
import { shortcut, tooltip } from "../tooltip.mjs";
|
|
12
|
+
import { addStyle, element } from "../ui.mjs";
|
|
13
|
+
import { FOLDED, hiddenByFold, setFoldOpener } from "../folded.mjs";
|
|
14
|
+
import { foldable, headingOf, keyOf, sectionAfter, stepOver, takenWith } from "./rule.mjs";
|
|
15
|
+
|
|
16
|
+
// Folding a heading's section (docs/editor.md, "Folding a heading's section"): a small rounded triangle
|
|
17
|
+
// a gap right of a heading's last line, shown while the pointer is at the heading (always while it is
|
|
18
|
+
// folded), folds what the heading's section is (rule.mjs: the outline's nesting, in its box) out of
|
|
19
|
+
// sight; Ctrl/⌘+Enter in its words does the same (components/heading/page.mjs). A fold is the reader's
|
|
20
|
+
// view, never the file's: no undo step, no commit; kept per report in the browser
|
|
21
|
+
// (gallery-edit:heading-folds, as the outline's folds are), so the page shown again after an Agent's
|
|
22
|
+
// write folds what was folded. While the page lives, what is folded is the headings' identities
|
|
23
|
+
// (data-ge-id: a heading turned into another level, or put back by undo, stays folded); what a fold
|
|
24
|
+
// hides is marked data-ge-folded (the outermost folded heading's identity), shown as nothing.
|
|
25
|
+
//
|
|
26
|
+
// What asks it: the block tools (blocks.mjs) draw the triangles each frame (place, beside the handle:
|
|
27
|
+
// handle.pointed), and take a folded heading's section with it wherever blocks are taken away whole
|
|
28
|
+
// (takenWith: drag/, selection/delete.mjs, clipboard/, block-menu/'s 组成新分区; groupsOf and
|
|
29
|
+
// stepOver: drag/ moveBy; withHidden: a row of columns made around it, columns/ and drag/);
|
|
30
|
+
// selection/ keeps what is hidden out of the selection; typing/ opens a fold before Backspace or
|
|
31
|
+
// Delete would join hidden words; editor.mjs opens the folds around the caret, and
|
|
32
|
+
// every path that opens what hides a block goes through reveal() (page/folded.mjs). One rule opens a fold
|
|
33
|
+
// of itself: a block a change of the page puts into a folded section (or one that was in sight and is not
|
|
34
|
+
// now) opens it, unless the block came onto the page with its heading in that same change (undo
|
|
35
|
+
// putting a folded section back, a folded section dragged).
|
|
36
|
+
|
|
37
|
+
const STORE = "gallery-edit:heading-folds";
|
|
38
|
+
// The button is what a press finds, drawn as nothing but its triangle; 16px (it was 20, filled under the
|
|
39
|
+
// pointer: the user's, 2026-11-07), its triangle's middle 14px past the words as before.
|
|
40
|
+
const SIZE = 16;
|
|
41
|
+
const GAP = 6; // from the end of the heading's last line to the button
|
|
42
|
+
// A press held that began off the triangles (words being selected, a box drawn, a block dragged): the
|
|
43
|
+
// triangles take no pointer until it ends. Under the pointer one stood for the place of the drag: the
|
|
44
|
+
// browser, finding a node outside the heading's editable text, put the selection's moving end at the
|
|
45
|
+
// heading's start (the whole heading selected while the pointer crossed the triangle, the user's
|
|
46
|
+
// 2026-11-07 第 6 条), and it darkened as if it were to be pressed.
|
|
47
|
+
const HELD = "data-ge-fold-held";
|
|
48
|
+
// What a fold hides is display: none !important: none of it shows, whatever display its blocks have
|
|
49
|
+
// of their own (a row of columns' grid, a card's flex, a rule of the report's own).
|
|
50
|
+
const STYLE = `
|
|
51
|
+
[data-ge-editing] [${FOLDED}] { display: none !important; }
|
|
52
|
+
.ge-fold { position: absolute; left: 0; top: 0; z-index: ${IN_LAYER.button}; box-sizing: border-box; display: flex; align-items: center; justify-content: center; width: ${SIZE}px; height: ${SIZE}px; border-radius: 4px; color: var(--ge-ico3); cursor: pointer; pointer-events: auto; user-select: none; }
|
|
53
|
+
html[${HELD}] .ge-fold { pointer-events: none; }
|
|
54
|
+
/* No fill under the pointer, the triangle darker (as the outline's), a short one while pressed (as a code block's arrow). */
|
|
55
|
+
.ge-fold:hover { color: var(--ge-ico2); }
|
|
56
|
+
.ge-fold:active { background: var(--ge-press); }
|
|
57
|
+
/* Open it points down; folded, left, at the heading's words (it stands right of them), turned clockwise. */
|
|
58
|
+
.ge-fold svg { display: block; width: 12px; height: 12px; fill: currentColor; transition: transform .2s ease-out; }
|
|
59
|
+
.ge-fold[aria-expanded="false"] svg { transform: rotate(90deg); }
|
|
60
|
+
@media (prefers-reduced-motion: reduce) { .ge-fold svg { transition: none; } }
|
|
61
|
+
`;
|
|
62
|
+
|
|
63
|
+
/** Where a heading's button stands (window coordinates): 6px right of its last line's end, on that line's middle; null where it shows no words. */
|
|
64
|
+
export function foldRectOf(heading) {
|
|
65
|
+
const range = document.createRange();
|
|
66
|
+
range.selectNodeContents(heading);
|
|
67
|
+
const end = [...range.getClientRects()].filter((rect) => rect.width > 0 && rect.height > 0).at(-1);
|
|
68
|
+
if (!end) return null;
|
|
69
|
+
const left = end.right + GAP;
|
|
70
|
+
const top = (end.top + end.bottom) / 2 - SIZE / 2;
|
|
71
|
+
return { left, top, right: left + SIZE, bottom: top + SIZE };
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* slug: the report's. selection: selection/index.mjs (what is hidden leaves it). active(): whether
|
|
76
|
+
* the block tools may show. schedule(): the block tools' next frame.
|
|
77
|
+
*/
|
|
78
|
+
export function createFolds({ slug, selection, active, schedule }) {
|
|
79
|
+
addStyle(STYLE);
|
|
80
|
+
const folded = new Set(); // the identities of the headings folded
|
|
81
|
+
let heads = []; // the folded headings on the page at the last apply, in document order
|
|
82
|
+
let hidden = new Set(); // the units hidden at the last apply
|
|
83
|
+
let started = false;
|
|
84
|
+
let observer = null;
|
|
85
|
+
const buttons = new Map(); // heading -> its button
|
|
86
|
+
const holds = (node) => [...buttons.values()].some((button) => button.contains(node));
|
|
87
|
+
|
|
88
|
+
const main = () => document.querySelector("main");
|
|
89
|
+
const idOf = (node) => node?.getAttribute?.(ELEMENT_ID) ?? null;
|
|
90
|
+
const isFolded = (node) => node?.nodeType === 1 && folded.has(idOf(node)) && foldable(node);
|
|
91
|
+
const headings = () => [...(main()?.querySelectorAll(HEADING) ?? [])].filter(foldable);
|
|
92
|
+
// The units a folded heading hides (with those of folds inside it): those of its box marked with it.
|
|
93
|
+
const hiddenBy = (heading) => (heading.parentElement ? unitsOf(heading.parentElement).filter((unit) => unit.getAttribute(FOLDED) === idOf(heading)) : []);
|
|
94
|
+
|
|
95
|
+
function load() {
|
|
96
|
+
const keys = foldsOf(local, slug, STORE);
|
|
97
|
+
if (keys.size === 0) return;
|
|
98
|
+
const all = headings();
|
|
99
|
+
for (const key of keys) {
|
|
100
|
+
const heading = headingOf(key, all);
|
|
101
|
+
if (heading) folded.add(identityOf(heading));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
// What is folded, kept by the keys the headings have now (only those still on the page).
|
|
106
|
+
function save() {
|
|
107
|
+
if (!started) return;
|
|
108
|
+
const all = headings();
|
|
109
|
+
keepFolds(local, slug, new Set(all.filter((heading) => folded.has(idOf(heading))).map((heading) => keyOf(heading, all))), null, STORE);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// What each folded heading hides now: unit -> the outermost folded heading over it. A folded heading
|
|
113
|
+
// with no words is folded no more; one hidden by a fold around it starts no section of its own.
|
|
114
|
+
function wanted(root) {
|
|
115
|
+
const want = new Map();
|
|
116
|
+
const found = [];
|
|
117
|
+
for (const heading of root.querySelectorAll(HEADING)) {
|
|
118
|
+
const id = idOf(heading);
|
|
119
|
+
if (!folded.has(id)) continue;
|
|
120
|
+
if (!foldable(heading)) {
|
|
121
|
+
folded.delete(id);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
found.push(heading);
|
|
125
|
+
let under = false;
|
|
126
|
+
for (let node = heading; node && node !== root && !under; node = node.parentElement) under = want.has(node);
|
|
127
|
+
if (under) continue;
|
|
128
|
+
for (const unit of sectionAfter(heading)) want.set(unit, heading);
|
|
129
|
+
}
|
|
130
|
+
return { want, found };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* The marks set again as the folds are now. `added`: the elements a change of the page put in (null:
|
|
135
|
+
* a fold toggled, or the page begun), for the rule that opens a fold: a unit hidden now that was not
|
|
136
|
+
* opens the folds over it, unless it came in with its heading.
|
|
137
|
+
*/
|
|
138
|
+
function apply({ added = null } = {}) {
|
|
139
|
+
const root = main();
|
|
140
|
+
if (!root) return;
|
|
141
|
+
const within = (node) => {
|
|
142
|
+
for (let at = node; at && at !== root; at = at.parentElement) if (added.has(at)) return true;
|
|
143
|
+
return false;
|
|
144
|
+
};
|
|
145
|
+
const count = folded.size;
|
|
146
|
+
let result;
|
|
147
|
+
for (let round = 0; round < 16; round++) {
|
|
148
|
+
result = wanted(root);
|
|
149
|
+
if (added === null) break;
|
|
150
|
+
const opened = new Set();
|
|
151
|
+
for (const [unit, heading] of result.want) {
|
|
152
|
+
if (!hidden.has(unit) && !(within(unit) && within(heading))) opened.add(heading);
|
|
153
|
+
}
|
|
154
|
+
if (opened.size === 0) break;
|
|
155
|
+
for (const heading of opened) folded.delete(idOf(heading));
|
|
156
|
+
}
|
|
157
|
+
const marks = new Map();
|
|
158
|
+
for (const [unit, heading] of result.want) for (const part of withLeads(unit)) marks.set(part, idOf(heading));
|
|
159
|
+
for (const node of root.querySelectorAll(`[${FOLDED}]`)) if (!marks.has(node)) node.removeAttribute(FOLDED);
|
|
160
|
+
for (const [node, id] of marks) if (node.getAttribute(FOLDED) !== id) node.setAttribute(FOLDED, id);
|
|
161
|
+
heads = result.found;
|
|
162
|
+
hidden = new Set(result.want.keys());
|
|
163
|
+
if (added !== null && folded.size !== count) save(); // a fold opened of itself
|
|
164
|
+
schedule();
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
// A change of the page: blocks put in or taken out (a container's children, or a node that is or
|
|
168
|
+
// holds a block) apply the folds again; words typed in a heading too (emptied, its fold opens; a
|
|
169
|
+
// heading in a box may now end a section). Words typed elsewhere are nothing to it.
|
|
170
|
+
function changed(records) {
|
|
171
|
+
if (folded.size === 0 && hidden.size === 0) return;
|
|
172
|
+
const added = new Set();
|
|
173
|
+
let again = false;
|
|
174
|
+
for (const record of records) {
|
|
175
|
+
const target = record.target.nodeType === 1 ? record.target : record.target.parentElement;
|
|
176
|
+
if (target?.closest?.(HEADING)) again = true;
|
|
177
|
+
if (record.type !== "childList") continue;
|
|
178
|
+
if (target?.hasAttribute?.("data-ge-box")) again = true;
|
|
179
|
+
for (const node of record.addedNodes) {
|
|
180
|
+
if (node.nodeType !== 1) continue;
|
|
181
|
+
added.add(node);
|
|
182
|
+
if (!again && (node.matches(UNIT) || node.querySelector(UNIT))) again = true;
|
|
183
|
+
}
|
|
184
|
+
if (!again) for (const node of record.removedNodes) if (node.nodeType === 1 && (node.matches(UNIT) || node.querySelector(UNIT))) again = true;
|
|
185
|
+
}
|
|
186
|
+
if (again) apply({ added });
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// The caret, or an end of a text selection, in what a fold now hides goes to the end of its heading;
|
|
190
|
+
// what is selected of it leaves the selection.
|
|
191
|
+
function stepOut(heading) {
|
|
192
|
+
const picked = selection.picked;
|
|
193
|
+
const kept = picked.filter((node) => !hiddenByFold(node));
|
|
194
|
+
if (kept.length !== picked.length) {
|
|
195
|
+
if (kept.length) selection.select(kept, { quiet: true });
|
|
196
|
+
else selection.clear();
|
|
197
|
+
}
|
|
198
|
+
const text = getSelection();
|
|
199
|
+
if (text?.rangeCount && (hiddenByFold(text.anchorNode) || hiddenByFold(text.focusNode))) caretAt(heading, "end");
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
/** Fold or unfold a heading's section. Whether it is one that folds. */
|
|
203
|
+
function toggle(heading) {
|
|
204
|
+
if (!started || !foldable(heading)) return false;
|
|
205
|
+
const id = identityOf(heading);
|
|
206
|
+
if (!folded.delete(id)) folded.add(id);
|
|
207
|
+
apply();
|
|
208
|
+
if (folded.has(id)) stepOut(heading);
|
|
209
|
+
save();
|
|
210
|
+
return true;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
/** The folds over `node` opened, outermost first, until it shows. Whether any was. */
|
|
214
|
+
function showAround(node) {
|
|
215
|
+
let opened = false;
|
|
216
|
+
for (let round = 0; round < 16 && hiddenByFold(node); round++) {
|
|
217
|
+
const marked = (node.nodeType === 1 ? node : node.parentElement).closest(`[${FOLDED}]`);
|
|
218
|
+
if (!folded.delete(marked.getAttribute(FOLDED))) marked.removeAttribute(FOLDED); // no fold of this page's
|
|
219
|
+
opened = true;
|
|
220
|
+
apply();
|
|
221
|
+
}
|
|
222
|
+
if (opened) save();
|
|
223
|
+
return opened;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// ---------- the buttons ----------
|
|
227
|
+
|
|
228
|
+
// A press held that began off the triangles (HELD): set on the window before any tool sees the
|
|
229
|
+
// press, gone with the press (let go, cancelled, the window left, or a move with no button down
|
|
230
|
+
// where its end was missed). The triangles shown stay shown, as the handle's block stays while a
|
|
231
|
+
// button is down (handle/ onMove), and take the pointer again once it is let go.
|
|
232
|
+
let held = false;
|
|
233
|
+
const hold = (on) => {
|
|
234
|
+
if (held === on) return;
|
|
235
|
+
held = on;
|
|
236
|
+
document.documentElement.toggleAttribute(HELD, on);
|
|
237
|
+
};
|
|
238
|
+
addEventListener("pointerdown", (event) => hold(!holds(event.target)), true);
|
|
239
|
+
for (const type of ["pointerup", "pointercancel"]) addEventListener(type, () => hold(false), true);
|
|
240
|
+
addEventListener("blur", () => hold(false));
|
|
241
|
+
addEventListener("pointermove", (event) => { if (held && event.buttons === 0) hold(false); }, { capture: true, passive: true });
|
|
242
|
+
|
|
243
|
+
function make(heading) {
|
|
244
|
+
const node = element("div", { class: "ge-fold", role: "button", html: FOLD_ARROW });
|
|
245
|
+
tooltip(node, () => (isFolded(heading) ? t("展开") : t("折叠")), shortcut("mod+enter"));
|
|
246
|
+
// No caret moves, no box selection starts, the focus stays (blocks.mjs passes presses on it by).
|
|
247
|
+
node.addEventListener("pointerdown", (event) => event.preventDefault());
|
|
248
|
+
node.addEventListener("click", (event) => {
|
|
249
|
+
event.preventDefault();
|
|
250
|
+
toggle(heading);
|
|
251
|
+
});
|
|
252
|
+
own(node, "heading fold", { owner: heading, alive: () => buttons.get(heading) === node && heading.isConnected && started && active(), expected: () => foldRectOf(heading) });
|
|
253
|
+
return node;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
function drop(heading) {
|
|
257
|
+
buttons.get(heading)?.remove();
|
|
258
|
+
buttons.delete(heading);
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/** A frame: a button by each folded heading in sight, and by the heading the pointer is at (`pointed`). */
|
|
262
|
+
function place(pointed) {
|
|
263
|
+
const want = new Set(started ? heads.filter((heading) => heading.isConnected && isFolded(heading)) : []);
|
|
264
|
+
if (started && pointed && foldable(pointed) && !hiddenByFold(pointed)) want.add(pointed);
|
|
265
|
+
for (const heading of [...buttons.keys()]) if (!want.has(heading)) drop(heading);
|
|
266
|
+
for (const heading of want) {
|
|
267
|
+
const shape = shapeOf(heading);
|
|
268
|
+
const rect = shape && foldRectOf(heading);
|
|
269
|
+
if (!rect) {
|
|
270
|
+
drop(heading);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
let node = buttons.get(heading);
|
|
274
|
+
if (!node) {
|
|
275
|
+
node = make(heading);
|
|
276
|
+
buttons.set(heading, node);
|
|
277
|
+
}
|
|
278
|
+
const open = !isFolded(heading);
|
|
279
|
+
if (node.getAttribute("aria-expanded") !== String(open)) {
|
|
280
|
+
node.setAttribute("aria-expanded", String(open));
|
|
281
|
+
node.setAttribute("aria-label", open ? t("折叠") : t("展开"));
|
|
282
|
+
}
|
|
283
|
+
drawAt(node, shape.layer, rect.left - shape.origin.left, rect.top - shape.origin.top);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
function hide() {
|
|
288
|
+
for (const heading of [...buttons.keys()]) drop(heading);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const folds = {
|
|
292
|
+
/** Editing begins: what was folded folded again, in the task editing begins in (no frame shows it open). */
|
|
293
|
+
start() {
|
|
294
|
+
if (started) return;
|
|
295
|
+
started = true;
|
|
296
|
+
setFoldOpener(showAround);
|
|
297
|
+
load();
|
|
298
|
+
apply();
|
|
299
|
+
observer = new MutationObserver(changed);
|
|
300
|
+
const root = main();
|
|
301
|
+
if (root) observer.observe(root, { childList: true, subtree: true, characterData: true });
|
|
302
|
+
addEventListener("pagehide", save);
|
|
303
|
+
},
|
|
304
|
+
/** Editing ends: every fold shown open (what is folded is kept). */
|
|
305
|
+
stop() {
|
|
306
|
+
if (!started) return;
|
|
307
|
+
save();
|
|
308
|
+
started = false;
|
|
309
|
+
observer?.disconnect();
|
|
310
|
+
for (const node of document.querySelectorAll(`[${FOLDED}]`)) node.removeAttribute(FOLDED);
|
|
311
|
+
heads = [];
|
|
312
|
+
hidden = new Set();
|
|
313
|
+
hide();
|
|
314
|
+
},
|
|
315
|
+
place,
|
|
316
|
+
hide,
|
|
317
|
+
/** A button shows (the frames go on following the headings). */
|
|
318
|
+
get showing() { return buttons.size > 0; },
|
|
319
|
+
holds,
|
|
320
|
+
toggle,
|
|
321
|
+
isFolded,
|
|
322
|
+
hidden: hiddenByFold,
|
|
323
|
+
showAround,
|
|
324
|
+
/** `units` with what each folded heading among them hides (a section it covers whole instead): rule.mjs takenWith. */
|
|
325
|
+
takenWith: (units) => takenWith(units, { isFolded, hiddenBy }),
|
|
326
|
+
/** A block with what it hides (a folded heading's section, folds inside it too), in document order: what goes into a column with it (columns/ split, drag/ besideTo). */
|
|
327
|
+
withHidden: (unit) => (isFolded(unit) ? [unit, ...hiddenBy(unit)] : [unit]),
|
|
328
|
+
/** The last block of a block and what it hides (a folded heading's last hidden block), for a place after it. */
|
|
329
|
+
lastOf: (unit) => (isFolded(unit) ? hiddenBy(unit).at(-1) ?? unit : unit),
|
|
330
|
+
/** The blocks of `list` as the reader sees them: each shown block, a folded heading with what it hides. */
|
|
331
|
+
groupsOf(list) {
|
|
332
|
+
const groups = [];
|
|
333
|
+
for (const unit of list) {
|
|
334
|
+
if (unit.hasAttribute(FOLDED) && groups.length > 0) groups.at(-1).push(unit);
|
|
335
|
+
else groups.push([unit]);
|
|
336
|
+
}
|
|
337
|
+
return groups;
|
|
338
|
+
},
|
|
339
|
+
/** Where Ctrl+Shift+↑/↓ takes a folded heading (rule.mjs stepOver). */
|
|
340
|
+
stepOver,
|
|
341
|
+
/** What the status line calls `targets` taken for `picked` (named: block-info.mjs's): 标题和折叠的 N 块. */
|
|
342
|
+
namedWith(picked, targets, named) {
|
|
343
|
+
const extra = targets.length - picked.length;
|
|
344
|
+
return extra > 0 && picked.every((node) => targets.includes(node)) ? t("{0}和折叠的 {1} 块", named(picked), extra) : named(targets);
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
return folds;
|
|
348
|
+
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { HEADING, LEFT_OUT, headingText } from "../outline/read.mjs";
|
|
2
|
+
import { UNIT, unitsOf } from "../core.mjs";
|
|
3
|
+
import { CHAPTER, LEADS_CHAPTER } from "../../components/registry.mjs";
|
|
4
|
+
import { FOLDED } from "../folded.mjs";
|
|
5
|
+
|
|
6
|
+
// What folding a heading's section takes (docs/editor.md, "Folding a heading's section"), pure so the
|
|
7
|
+
// unit tests hold it (tests/unit/heading-folds.mjs); the tool that folds is index.mjs. A heading the
|
|
8
|
+
// outline lists, standing straight in a box, folds what follows it in that box up to the first block
|
|
9
|
+
// that ends it: a heading of its level or higher, or a block holding one the outline lists (a section,
|
|
10
|
+
// a tabs area, a row of columns, a disclosure, a highlight block…), the outline's rule of what nests
|
|
11
|
+
// under a heading (outline/tree.mjs treeOf), so the fold and the outline say the same of a section.
|
|
12
|
+
|
|
13
|
+
export { FOLDED };
|
|
14
|
+
|
|
15
|
+
/** A heading's level, 1-4. */
|
|
16
|
+
export const levelOf = (heading) => Number(heading.localName[1]);
|
|
17
|
+
|
|
18
|
+
const kindOf = (node) => node.getAttribute("data-ge-unit-kind");
|
|
19
|
+
|
|
20
|
+
/** Whether a node is a heading that folds: one the outline lists, standing straight in a box, with words. */
|
|
21
|
+
export function foldable(node) {
|
|
22
|
+
return node?.nodeType === 1 && node.matches(HEADING) && node.matches(UNIT) && !node.closest(LEFT_OUT)
|
|
23
|
+
&& Boolean(node.parentElement?.hasAttribute("data-ge-box")) && headingText(node) !== "";
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Whether `unit` ends a section of level `level`: a heading of that level or higher, or a block holding one the outline lists. */
|
|
27
|
+
export function ends(unit, level) {
|
|
28
|
+
if (unit.matches(HEADING)) return levelOf(unit) <= level;
|
|
29
|
+
for (const heading of unit.querySelectorAll(HEADING)) {
|
|
30
|
+
if (levelOf(heading) <= level && !heading.closest(LEFT_OUT) && headingText(heading) !== "") return true;
|
|
31
|
+
}
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** The units after `heading` in its box that are its section (at `level`, its own by default), the one ending it not among them. */
|
|
36
|
+
export function sectionAfter(heading, level = levelOf(heading)) {
|
|
37
|
+
const box = heading.parentElement;
|
|
38
|
+
if (!box) return [];
|
|
39
|
+
const out = [];
|
|
40
|
+
let past = false;
|
|
41
|
+
for (const unit of unitsOf(box)) {
|
|
42
|
+
if (!past) {
|
|
43
|
+
past = unit === heading;
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (ends(unit, level)) break;
|
|
47
|
+
out.push(unit);
|
|
48
|
+
}
|
|
49
|
+
return out;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Nodes in document order, each once, none inside another. */
|
|
53
|
+
export function inOrder(nodes) {
|
|
54
|
+
const set = [...new Set(nodes)];
|
|
55
|
+
return set.filter((node) => !set.some((other) => other !== node && other.contains(node)))
|
|
56
|
+
.sort((a, b) => (a.compareDocumentPosition(b) & 4 ? -1 : 1)); // 4: DOCUMENT_POSITION_FOLLOWING
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* What an operation that takes blocks away whole takes for `units`: each folded heading with what it
|
|
61
|
+
* hides (isFolded(heading), hiddenBy(heading): the units its fold hides, those of folds inside it too),
|
|
62
|
+
* in document order. A folded heading whose box is a chapter (a section) of which it and what it hides
|
|
63
|
+
* are every unit, but for dividers before it, stands for that section: the section is taken.
|
|
64
|
+
*/
|
|
65
|
+
export function takenWith(units, { isFolded, hiddenBy }) {
|
|
66
|
+
const out = [];
|
|
67
|
+
for (const unit of units) {
|
|
68
|
+
out.push(unit);
|
|
69
|
+
if (isFolded(unit)) out.push(...hiddenBy(unit));
|
|
70
|
+
}
|
|
71
|
+
for (const unit of [...out]) {
|
|
72
|
+
const box = unit.parentElement;
|
|
73
|
+
if (!isFolded(unit) || !box?.matches(UNIT) || !CHAPTER.has(kindOf(box))) continue;
|
|
74
|
+
const covered = new Set([unit, ...hiddenBy(unit)]);
|
|
75
|
+
const all = unitsOf(box);
|
|
76
|
+
const at = all.indexOf(unit);
|
|
77
|
+
if (all.every((each, index) => covered.has(each) || (index < at && LEADS_CHAPTER.has(kindOf(each))))) out.push(box);
|
|
78
|
+
}
|
|
79
|
+
return inOrder(out);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* Where Ctrl+Shift+↑/↓ takes a folded heading (its section with it): past the next section of its
|
|
84
|
+
* level going down (the block after what it hides, which ends it, and what follows that up to the
|
|
85
|
+
* next block ending a section of its level), past the one before going up (back to the block ending a
|
|
86
|
+
* section of its level, or the box's first block, up to the block before it). `list`: the blocks it
|
|
87
|
+
* moves among, in order. { first, last } of what it goes past, or null where there is none.
|
|
88
|
+
*/
|
|
89
|
+
export function stepOver(heading, delta, list = unitsOf(heading.parentElement)) {
|
|
90
|
+
const level = levelOf(heading);
|
|
91
|
+
const at = list.indexOf(heading);
|
|
92
|
+
if (at < 0) return null;
|
|
93
|
+
if (delta > 0) {
|
|
94
|
+
const from = at + 1 + sectionAfter(heading).length;
|
|
95
|
+
if (from >= list.length) return null;
|
|
96
|
+
let to = from;
|
|
97
|
+
while (to + 1 < list.length && !ends(list[to + 1], level)) to++;
|
|
98
|
+
return { first: list[from], last: list[to] };
|
|
99
|
+
}
|
|
100
|
+
if (at === 0) return null;
|
|
101
|
+
let from = at - 1;
|
|
102
|
+
while (from > 0 && !ends(list[from], level)) from--;
|
|
103
|
+
return { first: list[from], last: list[at - 1] };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* The key a folded heading is kept by: `b:<block id>`, or with none `t:<tag>:<words>#<n>`, n its place
|
|
108
|
+
* among the foldable headings of its tag and words (`all`, in document order; with an id or not).
|
|
109
|
+
*/
|
|
110
|
+
export function keyOf(heading, all) {
|
|
111
|
+
const id = heading.getAttribute("data-block-id");
|
|
112
|
+
if (id) return `b:${id}`;
|
|
113
|
+
const text = headingText(heading);
|
|
114
|
+
const same = all.filter((each) => each.localName === heading.localName && headingText(each) === text);
|
|
115
|
+
return `t:${heading.localName}:${text}#${Math.max(0, same.indexOf(heading))}`;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** The heading of `all` a key names (keyOf), or null: by its block id, or the n-th of its tag and words, with an id or not. */
|
|
119
|
+
export function headingOf(key, all) {
|
|
120
|
+
if (key.startsWith("b:")) return all.find((each) => each.getAttribute("data-block-id") === key.slice(2)) ?? null;
|
|
121
|
+
const match = /^t:(h[1-4]):([\s\S]*)#(\d+)$/.exec(key);
|
|
122
|
+
if (!match) return null;
|
|
123
|
+
const [, tag, text, n] = match;
|
|
124
|
+
return all.filter((each) => each.localName === tag && headingText(each) === text)[Number(n)] ?? null;
|
|
125
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// What the other tools ask of the headings' folds (fold/ folds a heading's section, docs/editor.md
|
|
2
|
+
// "Folding a heading's section"): the mark on what a fold hides, whether a node is hidden by one, and
|
|
3
|
+
// reveal(), what every path that brings a block into sight goes through (a link to a block, the
|
|
4
|
+
// outline, a 批注, a conflict's card): the folds over it opened, then what the kit opens.
|
|
5
|
+
|
|
6
|
+
/** What marks a unit (and its leads) a fold hides: the identity (data-ge-id) of the outermost heading folded over it. */
|
|
7
|
+
export const FOLDED = "data-ge-folded";
|
|
8
|
+
|
|
9
|
+
/** Whether a node (or the block it is in) is hidden by a fold. */
|
|
10
|
+
export const hiddenByFold = (node) => Boolean((node?.nodeType === 1 ? node : node?.parentElement)?.closest?.(`[${FOLDED}]`));
|
|
11
|
+
|
|
12
|
+
let opener = null; // the page's fold tool's showAround, once editing begins
|
|
13
|
+
|
|
14
|
+
/** The page's fold tool: what opens the folds over a node (fold/ showAround). */
|
|
15
|
+
export function setFoldOpener(open) {
|
|
16
|
+
opener = open;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/** What hides `target` opened: the folds over it first, then what the kit opens (DocKit.reveal: a disclosure, a tab, a detail card). */
|
|
20
|
+
export function reveal(target) {
|
|
21
|
+
opener?.(target);
|
|
22
|
+
globalThis.DocKit?.reveal(target);
|
|
23
|
+
}
|