@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,236 @@
|
|
|
1
|
+
// Taken over from notion-lite (its src/ui/media-picker/upload.js): its structure and behaviour as there,
|
|
2
|
+
// what it imports Gallery's own (support.mjs, src/shared/emoji/), and since 2026-11 its look (styles.mjs:
|
|
3
|
+
// the editor's palette, no blue). Its notes, below, are notion-lite's, the colors changed.
|
|
4
|
+
/* 上传图片做图标 / 添加自定义表情(963369 CustomEmojiUploadPopup;数值、文案照源码,文案取自中文语言包)。两处用:
|
|
5
|
+
* 图标选择器的“上传”页签(569553 custom → customEmoji 页签:没有标题、大预览、能粘贴链接、可以勾“添加到表情符号库”)
|
|
6
|
+
* 表情页的“添加表情符号”浮层(749527 tM:有标题、小预览、不能粘贴链接、直接存成自定义表情;浮层最小宽 280)
|
|
7
|
+
* 布局(外层左右 16、14px,从上到下):
|
|
8
|
+
* 标题(上 14、14px / 600)+ 说明(上 2、12px、--ge-tx2)——只有浮层有
|
|
9
|
+
* 放图片的区域(上 16、--ge-field 底、1px --ge-edge 内框、圆角 8;拖文件进来时灰底加深,不变蓝):
|
|
10
|
+
* 没图片:整块是一个按钮(内边距 18 14、间距 8、14px / 500、--ge-tx2、居中):图片图标 +“上传图片”
|
|
11
|
+
* 有图片:一列居中(内边距 16 / 12,有“替换”时下 4,间距 4):“预览”(12px、--ge-tx2、下 4)+ 一亮一暗两张(间距 6;
|
|
12
|
+
* 80 / 48 见方、内边距 6 / 8、圆角 8、1px --ge-edge;存成表情时 contain、否则 cover)+ 灰色“替换”(能粘贴链接时没有)
|
|
13
|
+
* 把文件拖进来:只收图片,别的显示“仅支持图片”
|
|
14
|
+
* 粘贴提示(上 10、12px、--ge-tx3、居中)“或Ctrl+V粘贴图片或链接”——能粘贴链接、还没图片、没出错时
|
|
15
|
+
* 错误(上 10、12px、红、居中)
|
|
16
|
+
* 勾选框(上 12、间距 8、14px;框 14,勾上是 --ge-tx2 底、白勾)“添加到表情符号库”——能勾、有图片时
|
|
17
|
+
* 表情符号名称(上 20;标签 12px / 500 / --ge-tx2、下 6;输入框;错误 上 10、12px、红)——要存成表情、
|
|
18
|
+
* 并且(不能粘贴链接,或者已经有图片)时;选了文件、名字还空着(或者还是上一个文件名生成的)就用文件名生成
|
|
19
|
+
* 底部(上 16 下 12、两端对齐、间距 8):左边灰色“返回”(能粘贴链接、有图片时:全部清掉重来)或“取消”(关掉);右边“保存”(文字按钮,500,不能点时淡灰)
|
|
20
|
+
* 保存(963369 r 的保存按钮):
|
|
21
|
+
* 要存成表情(浮层;或者勾了“添加到表情符号库”):名字必填、合法、不重名,才能点;图片存到本地 → 记进表情库 →
|
|
22
|
+
* 提示“已将 {name} 添加到表情符号库” → onDone(表情字符串);失败提示“无法保存此表情符号。请重试。”
|
|
23
|
+
* 不存成表情:有图片就能点 → onDone(图片网址);失败提示“出了些问题。”(recordIcon.uploadFileTab.uploadError.message)
|
|
24
|
+
* 一开始就调 onStart()(Notion 上传开始就关掉选择器,401558 QM 的 onStart → 569553 p)
|
|
25
|
+
* 粘贴(能粘贴链接、还没图片时,963369 onPaste):剪贴板里有图片文件就用它,别的文件“仅支持图片”;
|
|
26
|
+
* 是文字就当图片链接试着加载,加载不了显示“粘贴的链接不包含图像。使用Ctrl+V粘贴其他链接”
|
|
27
|
+
* 本地化(和 Notion 的差别):图片存进本地(../storage 接到 model/local-store:上传的文件存 local-data/files/,粘贴的链接也下载一份,
|
|
28
|
+
* 下载不了才记原网址);“工作空间表情符号库”说成“表情符号库”,浮层说明改成本机;没有数量上限、没有手机版的链接输入框。
|
|
29
|
+
* createUploadForm(opts) → { el, focus(), paste(e) }
|
|
30
|
+
* opts:{ showTitle, largeEmoji, allowUrlPaste, confirmToAdd, onCancel(), onStart(), onDone(value) }
|
|
31
|
+
* 依赖:lib/dom、ui(storage、icons、snackbar、tooltip)、ui/emoji/custom
|
|
32
|
+
*/
|
|
33
|
+
import { esc } from './support.mjs';
|
|
34
|
+
import { uiStorage } from './support.mjs';
|
|
35
|
+
import { icon } from './support.mjs';
|
|
36
|
+
import { showSnackbar } from './support.mjs';
|
|
37
|
+
import { shortcut } from '../tooltip.mjs';
|
|
38
|
+
import { addCustomEmoji, validateCustomEmojiName, nameFromFileName, prepareNameCheck } from '../../../shared/emoji/custom.mjs';
|
|
39
|
+
import { t } from "../../../shared/i18n/index.mjs";
|
|
40
|
+
|
|
41
|
+
/* 963369 y:选文件时收的类型;149646 Dn:图片 */
|
|
42
|
+
const ACCEPT = 'image/jpeg, image/png, image/gif, image/webp, image/avif, image/svg+xml';
|
|
43
|
+
/* 链接里的文件名(不带扩展名,存的时候按类型补):下载到本地时用 */
|
|
44
|
+
const urlBaseName = url => { try { return decodeURIComponent(new URL(url, location.href).pathname.split('/').pop()).replace(/\.[a-z0-9]{1,5}$/i, '') || 'image'; } catch { return 'image'; } };
|
|
45
|
+
const isImage = file => /^image\//.test(file?.type || '');
|
|
46
|
+
const PASTE = shortcut('mod+v'); // 406410 dK({ name: "paste" })
|
|
47
|
+
/* 名字为什么不行(shared/emoji/custom.mjs validateCustomEmojiName 的原因),界面的语言 */
|
|
48
|
+
const NAME_ERRORS = { chars: t("名称只能包含小写字母、数字、连字符或下划线"), long: t("名称必须少于 50 个字符"), taken: t("名称已被占用") };
|
|
49
|
+
|
|
50
|
+
const T = {
|
|
51
|
+
title: t("添加自定义表情符号"),
|
|
52
|
+
description: t("本机所有页面都可以使用自定义表情符号"),
|
|
53
|
+
upload: t("上传图片"),
|
|
54
|
+
replace: t("替换"),
|
|
55
|
+
preview: t("预览"),
|
|
56
|
+
pastePrompt: t("或{0}粘贴图片或链接", PASTE),
|
|
57
|
+
imageError: t("仅支持图片"),
|
|
58
|
+
urlPasteHintImageError: t("粘贴的链接不包含图像。<br>使用{0}粘贴其他链接", esc(PASTE)),
|
|
59
|
+
confirmToAdd: t("添加到表情符号库"),
|
|
60
|
+
nameLabel: t("表情符号名称"),
|
|
61
|
+
namePlaceholder: t("搭建快乐!"),
|
|
62
|
+
back: t("返回"),
|
|
63
|
+
cancel: t("取消"),
|
|
64
|
+
save: t("保存"),
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export function createUploadForm({ showTitle = false, largeEmoji = false, allowUrlPaste = false, confirmToAdd = false, onCancel, onStart, onDone }) {
|
|
68
|
+
const el = document.createElement('div');
|
|
69
|
+
el.className = 'nmm-upload' + (largeEmoji ? ' large' : '');
|
|
70
|
+
el.innerHTML =
|
|
71
|
+
(showTitle ? `<div class="nmm-upload-title">${T.title}</div><div class="nmm-upload-description">${T.description}</div>` : '') +
|
|
72
|
+
`<div class="nmm-upload-zone-wrap"><div class="nmm-upload-zone"></div></div>` +
|
|
73
|
+
`<div class="nmm-upload-paste" hidden>${esc(T.pastePrompt)}</div>` +
|
|
74
|
+
`<div class="nmm-upload-error" hidden></div>` +
|
|
75
|
+
`<label class="nmm-upload-confirm" hidden><div role="checkbox" tabindex="0" aria-checked="false" class="nmm-upload-checkbox"></div>${T.confirmToAdd}</label>` +
|
|
76
|
+
`<label class="nmm-upload-name" hidden><div class="nmm-upload-name-label">${T.nameLabel}</div>` +
|
|
77
|
+
`<div class="nmm-upload-input"><input type="text" placeholder="${T.namePlaceholder}" autocomplete="off" spellcheck="false"></div>` +
|
|
78
|
+
`<div class="nmm-upload-name-error" hidden></div></label>` +
|
|
79
|
+
`<div class="nmm-upload-footer"><div role="button" tabindex="0" class="nmm-upload-secondary" data-act="secondary"></div>` +
|
|
80
|
+
`<div role="button" tabindex="0" class="nmm-upload-save" data-act="save">${T.save}</div></div>` +
|
|
81
|
+
`<input type="file" accept="${ACCEPT}" hidden>`;
|
|
82
|
+
|
|
83
|
+
const zone = el.querySelector('.nmm-upload-zone'), wrap = el.querySelector('.nmm-upload-zone-wrap');
|
|
84
|
+
const paste = el.querySelector('.nmm-upload-paste'), error = el.querySelector('.nmm-upload-error');
|
|
85
|
+
const confirm = el.querySelector('.nmm-upload-confirm'), checkbox = el.querySelector('.nmm-upload-checkbox');
|
|
86
|
+
const nameBox = el.querySelector('.nmm-upload-name'), nameInput = nameBox.querySelector('input'), nameError = el.querySelector('.nmm-upload-name-error');
|
|
87
|
+
const secondary = el.querySelector('[data-act="secondary"]'), save = el.querySelector('[data-act="save"]');
|
|
88
|
+
const fileInput = el.querySelector('input[type="file"]');
|
|
89
|
+
|
|
90
|
+
/* 963369 r 的状态:image { type: 'file', file } | { type: 'url', url };preview 是预览图地址 */
|
|
91
|
+
let image = null, preview = null, errorHTML = null, name = '', nameErr = null, checked = false, busy = false;
|
|
92
|
+
const savingAsEmoji = () => !confirmToAdd || checked; // 963369 D
|
|
93
|
+
const disabled = () => busy || (savingAsEmoji() ? !name || !image || !!nameErr : !image); // 963369 H
|
|
94
|
+
|
|
95
|
+
function update() {
|
|
96
|
+
const hadFocus = el.contains(document.activeElement); // 重画放图片的区域时焦点别丢(Esc、粘贴还要接着用)
|
|
97
|
+
zone.innerHTML = preview
|
|
98
|
+
? `<div class="nmm-upload-preview${allowUrlPaste ? '' : ' with-replace'}"><div class="nmm-upload-preview-label">${T.preview}</div>` +
|
|
99
|
+
`<div class="nmm-upload-preview-row"><img class="light" alt="Light Mode Image" src="${esc(preview)}"><img class="dark" alt="Dark Mode Image" src="${esc(preview)}"></div>` +
|
|
100
|
+
(allowUrlPaste ? '' : `<div role="button" tabindex="0" class="nmm-upload-replace" data-act="choose" aria-label="${T.replace}">${icon('arrowCircleLoopBackwardSmall', 14)}<div>${T.replace}</div></div>`) + `</div>`
|
|
101
|
+
: `<div role="button" tabindex="0" class="nmm-upload-button" data-act="choose">${icon('photo', 20)}<span>${T.upload}</span></div>`;
|
|
102
|
+
zone.classList.toggle('contain', savingAsEmoji());
|
|
103
|
+
paste.hidden = !(allowUrlPaste && !image && !errorHTML);
|
|
104
|
+
error.hidden = !errorHTML;
|
|
105
|
+
error.innerHTML = errorHTML || '';
|
|
106
|
+
confirm.hidden = !(confirmToAdd && image);
|
|
107
|
+
checkbox.setAttribute('aria-checked', String(checked));
|
|
108
|
+
checkbox.innerHTML = checked ? `<svg viewBox="0 0 16 16" width="12" height="12" aria-hidden="true"><path d="m3.5 8.5 3 3 6-7"/></svg>` : '';
|
|
109
|
+
const showName = savingAsEmoji() && (!allowUrlPaste || !!image);
|
|
110
|
+
const wasHidden = nameBox.hidden;
|
|
111
|
+
nameBox.hidden = !showName;
|
|
112
|
+
nameError.hidden = !nameErr;
|
|
113
|
+
nameError.textContent = nameErr ? NAME_ERRORS[nameErr] : '';
|
|
114
|
+
secondary.textContent = allowUrlPaste && image ? T.back : T.cancel;
|
|
115
|
+
save.classList.toggle('disabled', disabled());
|
|
116
|
+
save.setAttribute('aria-disabled', String(disabled()));
|
|
117
|
+
if (showName && wasHidden) nameInput.focus(); // 963369 G:名称输入框 autoFocus
|
|
118
|
+
else if (hadFocus && (!el.contains(document.activeElement) || document.activeElement === save && disabled())) {
|
|
119
|
+
(el.querySelector('[data-act="choose"]') || save).focus({ preventScroll: true });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/* 963369 F:空格换成“-”,再校验 */
|
|
124
|
+
function setName(value) {
|
|
125
|
+
name = value.replace(/ /g, '-');
|
|
126
|
+
if (nameInput.value !== name) nameInput.value = name;
|
|
127
|
+
nameErr = validateCustomEmojiName(name);
|
|
128
|
+
update();
|
|
129
|
+
}
|
|
130
|
+
prepareNameCheck().then(() => { if (name) setName(name); }); // 查重的数据到了再校验一次
|
|
131
|
+
|
|
132
|
+
/* 963369 N 的 onFileChanged:名字还空着,或者还是上一个文件名生成的,就用这个文件名 */
|
|
133
|
+
function setFile(file) {
|
|
134
|
+
errorHTML = null;
|
|
135
|
+
const prevDerived = image?.type === 'file' ? nameFromFileName(image.file.name) : null;
|
|
136
|
+
if (file.name && (name === '' || prevDerived === name)) setName(nameFromFileName(file.name));
|
|
137
|
+
image = { type: 'file', file };
|
|
138
|
+
const reader = new FileReader();
|
|
139
|
+
reader.onload = () => { if (image?.file === file) { preview = reader.result; update(); } };
|
|
140
|
+
reader.readAsDataURL(file);
|
|
141
|
+
update();
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* 963369 U:当图片链接试着加载 */
|
|
145
|
+
function tryUrl(text) {
|
|
146
|
+
const url = text.trim(), probe = new Image();
|
|
147
|
+
probe.onload = () => { image = { type: 'url', url }; preview = url; errorHTML = null; update(); };
|
|
148
|
+
probe.onerror = () => { errorHTML = T.urlPasteHintImageError; update(); };
|
|
149
|
+
probe.src = url;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function reset() { // “返回”
|
|
153
|
+
image = null; preview = null; errorHTML = null; name = ''; nameErr = null; checked = false;
|
|
154
|
+
nameInput.value = '';
|
|
155
|
+
update();
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/* 图片存到本地:文件 → local-data/files;链接 → 下载一份,下载不了记原网址 */
|
|
159
|
+
async function storeImage() {
|
|
160
|
+
if (image.type === 'file') return uiStorage.saveFile(image.file, image.file.name || 'image');
|
|
161
|
+
return (await uiStorage.importImage(image.url, name || urlBaseName(image.url))) || image.url;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
async function submit() {
|
|
165
|
+
if (disabled()) return;
|
|
166
|
+
busy = true;
|
|
167
|
+
update();
|
|
168
|
+
const asEmoji = savingAsEmoji(), emojiName = name;
|
|
169
|
+
onStart?.();
|
|
170
|
+
try {
|
|
171
|
+
const url = await storeImage();
|
|
172
|
+
if (!asEmoji) return onDone(url);
|
|
173
|
+
const value = await addCustomEmoji({ name: emojiName, url });
|
|
174
|
+
showSnackbar(t("已将 {0} 添加到表情符号库", emojiName)); // uploadCustomEmoji.success(本地化:工作空间 → 表情符号库)
|
|
175
|
+
onDone(value);
|
|
176
|
+
} catch {
|
|
177
|
+
showSnackbar(asEmoji ? t("无法保存此表情符号。请重试。") : t("出了些问题。"));
|
|
178
|
+
} finally {
|
|
179
|
+
busy = false;
|
|
180
|
+
if (el.isConnected) update();
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
const choose = () => { fileInput.value = ''; fileInput.click(); };
|
|
185
|
+
fileInput.addEventListener('change', () => {
|
|
186
|
+
const file = fileInput.files?.[0];
|
|
187
|
+
if (!file) return;
|
|
188
|
+
if (!isImage(file)) { errorHTML = T.imageError; update(); return; } // 149646 B7
|
|
189
|
+
setFile(file);
|
|
190
|
+
});
|
|
191
|
+
el.addEventListener('click', e => {
|
|
192
|
+
const act = e.target.closest('[data-act]')?.dataset.act;
|
|
193
|
+
if (act === 'choose') choose();
|
|
194
|
+
else if (act === 'save') submit();
|
|
195
|
+
else if (act === 'secondary') { if (allowUrlPaste && image) reset(); else onCancel?.(); }
|
|
196
|
+
else if (e.target.closest('.nmm-upload-confirm')) { e.preventDefault(); checked = !checked; update(); }
|
|
197
|
+
});
|
|
198
|
+
el.addEventListener('keydown', e => {
|
|
199
|
+
if (e.key === 'Enter' && e.target === nameInput) { e.preventDefault(); submit(); return; }
|
|
200
|
+
if ((e.key === 'Enter' || e.key === ' ') && e.target.matches('[role="button"], [role="checkbox"]')) { e.preventDefault(); e.target.click(); }
|
|
201
|
+
});
|
|
202
|
+
nameInput.addEventListener('input', () => setName(nameInput.value));
|
|
203
|
+
|
|
204
|
+
/* 777875:拖文件进来(只收第一个;不是图片“仅支持图片”) */
|
|
205
|
+
const hasFiles = e => [...(e.dataTransfer?.types || [])].includes('Files');
|
|
206
|
+
wrap.addEventListener('dragover', e => { if (!hasFiles(e)) return; e.preventDefault(); e.stopPropagation(); wrap.classList.add('dragover'); });
|
|
207
|
+
wrap.addEventListener('dragleave', e => { if (!wrap.contains(e.relatedTarget)) wrap.classList.remove('dragover'); });
|
|
208
|
+
wrap.addEventListener('drop', e => {
|
|
209
|
+
if (!hasFiles(e)) return;
|
|
210
|
+
e.preventDefault(); e.stopPropagation();
|
|
211
|
+
wrap.classList.remove('dragover');
|
|
212
|
+
const file = e.dataTransfer.files[0];
|
|
213
|
+
if (!file) return;
|
|
214
|
+
if (!isImage(file)) { errorHTML = T.imageError; update(); return; }
|
|
215
|
+
setFile(file);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
update();
|
|
219
|
+
return {
|
|
220
|
+
el,
|
|
221
|
+
focus() { (nameBox.hidden ? el.querySelector('[data-act="choose"]') : nameInput)?.focus({ preventScroll: true }); },
|
|
222
|
+
/* 963369 onPaste(451753 u:先看文件,再看文字) */
|
|
223
|
+
paste(e) {
|
|
224
|
+
if (!allowUrlPaste || image || e.target === nameInput) return;
|
|
225
|
+
e.preventDefault();
|
|
226
|
+
const files = [...(e.clipboardData?.files || [])];
|
|
227
|
+
if (files.length) {
|
|
228
|
+
if (!isImage(files[0])) { errorHTML = T.imageError; update(); return; }
|
|
229
|
+
setFile(files[0]);
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
const text = e.clipboardData?.getData('text/plain');
|
|
233
|
+
if (text) tryUrl(text);
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { say } from "./notices.mjs";
|
|
2
|
+
import { failure, postJson } from "./post.mjs";
|
|
3
|
+
import { t } from "../../shared/i18n/index.mjs";
|
|
4
|
+
|
|
5
|
+
// Exporting the report. Saving itself is autosave.mjs.
|
|
6
|
+
|
|
7
|
+
// "导出报告" builds the offline file from the saved source (exports/<slug>.html); the editor saves
|
|
8
|
+
// whatever waits first. The view copy with the reading state is the kit's "导出当前视图副本" (ui.js).
|
|
9
|
+
|
|
10
|
+
/** Export the report (map: slug, token); returns { ok, path } or { ok: false, reason, message }. */
|
|
11
|
+
export async function exportReport(map) {
|
|
12
|
+
say(t("正在导出…"), "prompt");
|
|
13
|
+
try {
|
|
14
|
+
const response = await postJson("/__gallery/workspace/export", map.token, { slug: map.slug });
|
|
15
|
+
const result = await response.json().catch(() => ({ ok: false, reason: "server", message: String(response.status) }));
|
|
16
|
+
if (result.ok) say(t("已导出 {0}", result.path), "note", 6000);
|
|
17
|
+
else say(t("未导出:{0}", failure(result, result.reason)), "error");
|
|
18
|
+
return result;
|
|
19
|
+
} catch {
|
|
20
|
+
say(t("未导出:连不上 Gallery 的服务(gallery open 会启动它)"), "error");
|
|
21
|
+
return { ok: false, reason: "offline", message: t("无法连接预览服务器") };
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { IN_LAYER } from "../../shared/layers.mjs";
|
|
2
|
+
import { drawOver, fillRectOf, reachOf, shapeOf } from "./overlay-layer.mjs";
|
|
3
|
+
import { own } from "./overlays.mjs";
|
|
4
|
+
import { addStyle, element } from "./ui.mjs";
|
|
5
|
+
|
|
6
|
+
// The fills laid over blocks (docs/editor.md, "Overlays"), one painter for all of them: the blocks
|
|
7
|
+
// selected (selection/), the blocks of the 批注 whose card shows (annotate/) and the blocks an Agent added
|
|
8
|
+
// or changed (changes/). There is one fill per
|
|
9
|
+
// block, in the editor's own layer for that block (overlay-layer.mjs), never inside it, and what it
|
|
10
|
+
// covers is the block's own to say: where it shows (a list item with its marker), how far the fill
|
|
11
|
+
// reaches past it (reachOf), the room its neighbours leave (roomOf), its corners and what cuts it. Only
|
|
12
|
+
// the colour is the caller's.
|
|
13
|
+
|
|
14
|
+
const STYLE = `
|
|
15
|
+
/* A block's fill, as a box selection's rectangle: blue for the blocks selected, warm for a 批注's, green for what an Agent added or changed (changes/). */
|
|
16
|
+
.ge-halo, .ge-note-halo, .ge-diff-halo { position: absolute; left: 0; top: 0; z-index: ${IN_LAYER.halo}; pointer-events: none; }
|
|
17
|
+
.ge-halo { background: var(--ge-halo); }
|
|
18
|
+
.ge-note-halo { background: var(--ge-note); }
|
|
19
|
+
.ge-diff-halo { background: var(--ge-diff-add-fill); }
|
|
20
|
+
`;
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* The fills of one colour. kind: what the overlays call them; className: the colour; stands(block):
|
|
24
|
+
* whether a block's fill still stands for something, besides the block being on the page. Returns
|
|
25
|
+
* { paint(blocks), clear(), count }: paint draws a fill on each of `blocks` that shows, where it is now,
|
|
26
|
+
* and takes away those of any other block at once; clear takes every fill down; count is how many there are.
|
|
27
|
+
*/
|
|
28
|
+
export function createFills({ kind, className, stands }) {
|
|
29
|
+
addStyle(STYLE);
|
|
30
|
+
const fills = new Map(); // block -> its fill
|
|
31
|
+
|
|
32
|
+
function paint(blocks) {
|
|
33
|
+
const wanted = new Set(blocks);
|
|
34
|
+
for (const [block, fill] of fills) {
|
|
35
|
+
if (wanted.has(block)) continue;
|
|
36
|
+
fill.remove();
|
|
37
|
+
fills.delete(block);
|
|
38
|
+
}
|
|
39
|
+
for (const block of wanted) {
|
|
40
|
+
const shape = shapeOf(block);
|
|
41
|
+
let fill = fills.get(block);
|
|
42
|
+
if (!shape) { // not shown now (another Sheet, a closed disclosure)
|
|
43
|
+
fill?.remove();
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
if (!fill) {
|
|
47
|
+
const made = element("div", { class: className });
|
|
48
|
+
own(made, kind, { owner: block, alive: () => fills.get(block) === made && block.isConnected && stands(block), expected: () => fillRectOf(block) });
|
|
49
|
+
fills.set(block, made);
|
|
50
|
+
fill = made;
|
|
51
|
+
}
|
|
52
|
+
drawOver(fill, shape, reachOf(shape.radius, shape.reach, shape.room));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function clear() {
|
|
57
|
+
for (const fill of fills.values()) fill.remove();
|
|
58
|
+
fills.clear();
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return { paint, clear, get count() { return fills.size; } };
|
|
62
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { addStyle } from "../ui.mjs";
|
|
2
|
+
|
|
3
|
+
// A report opened from 搜索文档 at a hit (the workbench's search, shared/search.mjs): the page finds
|
|
4
|
+
// the words again in its text (the time they occur after the same text as the hit's, else the hit's
|
|
5
|
+
// nth time, else the first), scrolls them to the window's upper middle and marks them in Notion's
|
|
6
|
+
// search yellow (the CSS Custom Highlight API: nothing in the page changes) until the reader
|
|
7
|
+
// presses or types, or 4 seconds pass. Words in a detail card: it opens, and they are scrolled so in
|
|
8
|
+
// its content. Words in a closed disclosure or a hidden panel: what holds them is brought into view
|
|
9
|
+
// instead. The text is read as the server reads the file: a line a block, the header and formulas
|
|
10
|
+
// left out, runs of spaces as one, case alike.
|
|
11
|
+
|
|
12
|
+
const NAME = "ge-found";
|
|
13
|
+
const STYLE = `
|
|
14
|
+
::highlight(${NAME}) { color: inherit; background-color: rgba(255, 203, 0, .42); }
|
|
15
|
+
:root[data-doc-theme="dark"] ::highlight(${NAME}) { background-color: rgba(255, 196, 0, .32); }
|
|
16
|
+
`;
|
|
17
|
+
const SKIP = "script, style, template, noscript, svg, .katex, main > header";
|
|
18
|
+
const BLOCK = "p, li, h1, h2, h3, h4, h5, h6, td, th, caption, summary, figcaption, pre, blockquote, dt, dd, div, section, figure, details";
|
|
19
|
+
|
|
20
|
+
// The page's text as one string, its blocks a line each, and where each of its characters comes from.
|
|
21
|
+
function pageText(root) {
|
|
22
|
+
let text = "";
|
|
23
|
+
const at = []; // index in text -> { node, offset } (null for a line's end)
|
|
24
|
+
let block = null;
|
|
25
|
+
const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, {
|
|
26
|
+
acceptNode: (node) => (node.parentElement?.closest(SKIP) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT),
|
|
27
|
+
});
|
|
28
|
+
for (let node = walker.nextNode(); node; node = walker.nextNode()) {
|
|
29
|
+
const own = node.parentElement.closest(BLOCK);
|
|
30
|
+
if (own !== block && text && !text.endsWith("\n")) {
|
|
31
|
+
text += "\n";
|
|
32
|
+
at.push(null);
|
|
33
|
+
}
|
|
34
|
+
block = own;
|
|
35
|
+
const value = node.nodeValue;
|
|
36
|
+
for (let offset = 0; offset < value.length; offset++) {
|
|
37
|
+
let char = value[offset];
|
|
38
|
+
if (char === "\u200b") continue;
|
|
39
|
+
if (/\s/.test(char)) {
|
|
40
|
+
if (!text || text.endsWith(" ") || text.endsWith("\n")) continue;
|
|
41
|
+
char = " ";
|
|
42
|
+
}
|
|
43
|
+
text += char;
|
|
44
|
+
at.push({ node, offset });
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return { text, at };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let clear = null;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Show `words` where the hit was ({ before, index }): { ok, shown }. `open(node)`: what opens by
|
|
54
|
+
* itself to show `node` opened, the box it scrolls in returned, or null (dialog/page.mjs show).
|
|
55
|
+
*/
|
|
56
|
+
export function revealText({ text: words, before = "", index = 0 }, open = () => null) {
|
|
57
|
+
clear?.();
|
|
58
|
+
const query = String(words ?? "").replace(/\s+/g, " ").trim().toLowerCase();
|
|
59
|
+
const main = document.querySelector("main");
|
|
60
|
+
if (!query || !main) return { ok: false, reason: "missing" };
|
|
61
|
+
addStyle(STYLE);
|
|
62
|
+
const { text, at } = pageText(main);
|
|
63
|
+
const lower = text.toLowerCase();
|
|
64
|
+
const found = [];
|
|
65
|
+
for (let from = lower.indexOf(query); from >= 0; from = lower.indexOf(query, from + query.length)) found.push(from);
|
|
66
|
+
if (!found.length) return { ok: false, reason: "missing" };
|
|
67
|
+
const context = String(before).replace(/\s+/g, " ").toLowerCase();
|
|
68
|
+
const start = (context ? found.find((from) => lower.slice(Math.max(0, from - context.length), from).endsWith(context)) : undefined) ?? found[index] ?? found[0];
|
|
69
|
+
const first = at[start];
|
|
70
|
+
const last = at[start + query.length - 1];
|
|
71
|
+
if (!first || !last) return { ok: false, reason: "missing" };
|
|
72
|
+
const range = document.createRange();
|
|
73
|
+
range.setStart(first.node, first.offset);
|
|
74
|
+
range.setEnd(last.node, last.offset + 1);
|
|
75
|
+
const box = open(first.node);
|
|
76
|
+
|
|
77
|
+
// Hidden (a closed disclosure, a panel not shown): its nearest shown container is what comes into view.
|
|
78
|
+
let shown = range.getClientRects().length > 0;
|
|
79
|
+
let target = range;
|
|
80
|
+
if (!shown) {
|
|
81
|
+
for (let node = first.node.parentElement; node && node !== main; node = node.parentElement) {
|
|
82
|
+
if (node.getClientRects().length) {
|
|
83
|
+
target = node;
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const rect = target.getBoundingClientRect();
|
|
89
|
+
if (box) box.scrollTop += rect.top - box.getBoundingClientRect().top - box.clientHeight * 0.35;
|
|
90
|
+
else scrollTo({ top: Math.max(0, scrollY + rect.top - innerHeight * 0.35), behavior: "instant" });
|
|
91
|
+
if (!shown) return { ok: true, shown: false };
|
|
92
|
+
|
|
93
|
+
const highlight = new Highlight(range);
|
|
94
|
+
CSS.highlights.set(NAME, highlight);
|
|
95
|
+
const timer = setTimeout(() => clear?.(), 4000);
|
|
96
|
+
const done = () => {
|
|
97
|
+
clearTimeout(timer);
|
|
98
|
+
if (CSS.highlights.get(NAME) === highlight) CSS.highlights.delete(NAME);
|
|
99
|
+
removeEventListener("pointerdown", done, true);
|
|
100
|
+
removeEventListener("keydown", done, true);
|
|
101
|
+
clear = null;
|
|
102
|
+
};
|
|
103
|
+
addEventListener("pointerdown", done, true);
|
|
104
|
+
addEventListener("keydown", done, true);
|
|
105
|
+
clear = done;
|
|
106
|
+
return { ok: true, shown: true };
|
|
107
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { IN_LAYER } from "../../shared/layers.mjs";
|
|
2
|
+
import { FOLLOW, task } from "./frames.mjs";
|
|
3
|
+
import { fillExtentOf } from "./geometry.mjs";
|
|
4
|
+
import { drawOver, shapeOf } from "./overlay-layer.mjs";
|
|
5
|
+
import { onSettle, own } from "./overlays.mjs";
|
|
6
|
+
import { addStyle, element } from "./ui.mjs";
|
|
7
|
+
|
|
8
|
+
// The red frame round a block the page cannot save as it is (docs/editor.md, "Conflicts"): a block
|
|
9
|
+
// in conflict (data-ge-flag="conflict", conflicts.mjs) or a new block that has no place in the file
|
|
10
|
+
// yet (data-ge-flag="check", editor.mjs). Drawn in the editor's layer like every other frame (frame.mjs,
|
|
11
|
+
// selection/), 2px past the block, so it follows its corners, its list marker and what clips it, and
|
|
12
|
+
// no rule of the report's own elements (the outline some of them take off) can undo it. It stands
|
|
13
|
+
// for the attribute: each flagged block shown has one, and it goes with the flag or the block.
|
|
14
|
+
|
|
15
|
+
const REACH = 2;
|
|
16
|
+
const STYLE = `
|
|
17
|
+
.ge-flag { position: absolute; left: 0; top: 0; z-index: ${IN_LAYER.frame}; box-sizing: border-box; border: ${REACH}px solid var(--doc-danger, #c04848); pointer-events: none; }
|
|
18
|
+
`;
|
|
19
|
+
|
|
20
|
+
/** editing(): whether the page is being edited. */
|
|
21
|
+
export function createFlags(editing) {
|
|
22
|
+
addStyle(STYLE);
|
|
23
|
+
const frames = new Map(); // flagged block -> its frame
|
|
24
|
+
|
|
25
|
+
const reach = (shape) => ({ x: REACH, y: REACH, radius: shape.radius > 0 ? shape.radius + REACH : 4 });
|
|
26
|
+
const outset = (box) => box && { left: box.left - REACH, top: box.top - REACH, right: box.right + REACH, bottom: box.bottom + REACH };
|
|
27
|
+
|
|
28
|
+
function takeDown() {
|
|
29
|
+
for (const frame of frames.values()) frame.remove();
|
|
30
|
+
frames.clear();
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
function run() {
|
|
34
|
+
const flagged = new Set(editing() ? document.querySelectorAll("[data-ge-flag]") : []);
|
|
35
|
+
for (const [block, frame] of frames) {
|
|
36
|
+
if (flagged.has(block) && block.isConnected) continue;
|
|
37
|
+
frame.remove();
|
|
38
|
+
frames.delete(block);
|
|
39
|
+
}
|
|
40
|
+
for (const block of flagged) {
|
|
41
|
+
const shape = shapeOf(block);
|
|
42
|
+
let frame = frames.get(block);
|
|
43
|
+
if (!shape) { // not shown now (another Sheet, a closed disclosure)
|
|
44
|
+
frame?.remove();
|
|
45
|
+
frames.delete(block);
|
|
46
|
+
continue;
|
|
47
|
+
}
|
|
48
|
+
if (!frame) {
|
|
49
|
+
frame = element("div", { class: "ge-flag" });
|
|
50
|
+
const mine = frame;
|
|
51
|
+
own(mine, "flag", { owner: block, alive: () => frames.get(block) === mine && block.isConnected && block.hasAttribute("data-ge-flag") && editing(), expected: () => outset(fillExtentOf(block)) });
|
|
52
|
+
frames.set(block, frame);
|
|
53
|
+
}
|
|
54
|
+
drawOver(frame, shape, reach(shape));
|
|
55
|
+
}
|
|
56
|
+
return frames.size > 0 ? FOLLOW : false; // drawn again when a flagged block may have moved (frames.mjs)
|
|
57
|
+
}
|
|
58
|
+
const drawing = task("flag", { run, fail: takeDown });
|
|
59
|
+
|
|
60
|
+
// A flag set or taken off, editing begun or ended: draw again. Blocks taken off the page go at once.
|
|
61
|
+
new MutationObserver(() => drawing.wake()).observe(document.documentElement, { attributes: true, subtree: true, attributeFilter: ["data-ge-flag", "data-ge-editing"] });
|
|
62
|
+
onSettle(() => {
|
|
63
|
+
for (const [block, frame] of frames) {
|
|
64
|
+
if (block.isConnected) continue;
|
|
65
|
+
frame.remove();
|
|
66
|
+
frames.delete(block);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
drawing.wake();
|
|
70
|
+
}
|