@heycys/gallery 0.0.0-stage → 0.1.0
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 +3253 -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 +39 -0
- package/browser/editor/components/callout/page.mjs +13 -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 +297 -0
- package/browser/editor/components/details/index.mjs +72 -0
- package/browser/editor/components/details/page.mjs +86 -0
- package/browser/editor/components/dialog/index.mjs +83 -0
- package/browser/editor/components/dialog/page.mjs +219 -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 +33 -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 +51 -0
- package/browser/editor/components/highlight/index.mjs +79 -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 +45 -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 +133 -0
- package/browser/editor/components/installed/page.mjs +422 -0
- package/browser/editor/components/installed/served.mjs +35 -0
- package/browser/editor/components/kit.mjs +64 -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 +162 -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 +833 -0
- package/browser/editor/components/rows.mjs +16 -0
- package/browser/editor/components/section/index.mjs +41 -0
- package/browser/editor/components/section/page.mjs +141 -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 +306 -0
- package/browser/editor/components/table/page.mjs +672 -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 +229 -0
- package/browser/editor/page/annotate/card.mjs +102 -0
- package/browser/editor/page/annotate/index.mjs +1629 -0
- package/browser/editor/page/at-menu/index.mjs +317 -0
- package/browser/editor/page/autosave.mjs +977 -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 +82 -0
- package/browser/editor/page/block-menu/index.mjs +215 -0
- package/browser/editor/page/blocks.mjs +246 -0
- package/browser/editor/page/caret.mjs +679 -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 +797 -0
- package/browser/editor/page/clipboard/own/blocks.mjs +202 -0
- package/browser/editor/page/clipboard/own/chart-keys.mjs +58 -0
- package/browser/editor/page/clipboard/own/describe.mjs +115 -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 +326 -0
- package/browser/editor/page/columns/index.mjs +360 -0
- package/browser/editor/page/commit.mjs +1798 -0
- package/browser/editor/page/conflicts.mjs +269 -0
- package/browser/editor/page/convert.mjs +830 -0
- package/browser/editor/page/core.mjs +1655 -0
- package/browser/editor/page/drag/drop.mjs +307 -0
- package/browser/editor/page/drag/index.mjs +335 -0
- package/browser/editor/page/drag/preview.mjs +121 -0
- package/browser/editor/page/edge-scroll.mjs +50 -0
- package/browser/editor/page/editor.mjs +1725 -0
- package/browser/editor/page/emoji-picker/emoji-tab.mjs +278 -0
- package/browser/editor/page/emoji-picker/glyph-html.mjs +26 -0
- package/browser/editor/page/emoji-picker/grid.mjs +79 -0
- package/browser/editor/page/emoji-picker/icon-tab.mjs +217 -0
- package/browser/editor/page/emoji-picker/icons.mjs +32 -0
- package/browser/editor/page/emoji-picker/index.mjs +164 -0
- package/browser/editor/page/emoji-picker/styles.mjs +2 -0
- package/browser/editor/page/emoji-picker/support.mjs +202 -0
- package/browser/editor/page/emoji-picker/upload.mjs +235 -0
- package/browser/editor/page/export-report.mjs +23 -0
- package/browser/editor/page/fills.mjs +60 -0
- package/browser/editor/page/find/index.mjs +107 -0
- package/browser/editor/page/flags.mjs +70 -0
- package/browser/editor/page/format-bar/bar.mjs +448 -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 +400 -0
- package/browser/editor/page/gesture.mjs +45 -0
- package/browser/editor/page/handle/index.mjs +639 -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 +243 -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/look.mjs +65 -0
- package/browser/editor/page/made.mjs +24 -0
- package/browser/editor/page/margin.mjs +352 -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 +500 -0
- package/browser/editor/page/merge.mjs +100 -0
- package/browser/editor/page/notices.mjs +142 -0
- package/browser/editor/page/offered.mjs +32 -0
- package/browser/editor/page/outline/folds.mjs +52 -0
- package/browser/editor/page/outline/index.mjs +697 -0
- package/browser/editor/page/outline/list.mjs +172 -0
- package/browser/editor/page/outline/read.mjs +201 -0
- package/browser/editor/page/outline/strip.mjs +281 -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 +64 -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 +59 -0
- package/browser/editor/page/selection/index.mjs +157 -0
- package/browser/editor/page/selection/marquee.mjs +174 -0
- package/browser/editor/page/session.mjs +117 -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 +138 -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 +985 -0
- package/browser/editor/page/table/lists.mjs +187 -0
- package/browser/editor/page/table/widths.mjs +308 -0
- package/browser/editor/page/tex.mjs +32 -0
- package/browser/editor/page/text-select/index.mjs +656 -0
- package/browser/editor/page/tooltip.mjs +98 -0
- package/browser/editor/page/type-grid.mjs +82 -0
- package/browser/editor/page/typing/code-edges.mjs +228 -0
- package/browser/editor/page/typing/index.mjs +276 -0
- package/browser/editor/page/typing/leave.mjs +68 -0
- package/browser/editor/page/ui.mjs +160 -0
- package/browser/shared/annotations.mjs +571 -0
- package/browser/shared/code-folds.mjs +10 -0
- package/browser/shared/code-languages.mjs +70 -0
- package/browser/shared/code-lines.mjs +30 -0
- package/browser/shared/colors.mjs +28 -0
- package/browser/shared/component-catalog.mjs +559 -0
- package/browser/shared/components/bookmark.mjs +26 -0
- package/browser/shared/components/callout.mjs +7 -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 +342 -0
- package/browser/shared/components/installed.mjs +162 -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 +37 -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/emoji/custom.mjs +91 -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 +26 -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 +196 -0
- package/browser/shared/emoji/emoji.mjs +37 -0
- package/browser/shared/emoji/glyphs.mjs +134 -0
- package/browser/shared/emoji/icon-value.mjs +90 -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 +53 -0
- package/browser/shared/http.mjs +22 -0
- package/browser/shared/i18n/en.mjs +1164 -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/media.mjs +162 -0
- package/browser/shared/new-names.mjs +64 -0
- package/browser/shared/number-reading.mjs +92 -0
- package/browser/shared/old-names.mjs +143 -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 +110 -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 +76 -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.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-2PBALTR3.mjs +57 -0
- package/dist/chunk-342HXE3Q.mjs +2 -0
- package/dist/chunk-3LA3EMDE.mjs +15 -0
- package/dist/chunk-43B75J5T.mjs +2 -0
- package/dist/chunk-4K5KC6V2.mjs +2 -0
- package/dist/chunk-5FRMCDPY.mjs +16 -0
- package/dist/chunk-5L7RYZCL.mjs +2 -0
- package/dist/chunk-5LEK2CBS.mjs +2 -0
- package/dist/chunk-5OFN5AHC.mjs +2 -0
- package/dist/chunk-5SIYS5HN.mjs +2 -0
- package/dist/chunk-5TEK3RAD.mjs +2 -0
- package/dist/chunk-6CYG3Z4V.mjs +2 -0
- package/dist/chunk-6U2SLSDN.mjs +3 -0
- package/dist/chunk-742D2WWJ.mjs +19 -0
- package/dist/chunk-7GHT2UCA.mjs +15 -0
- package/dist/chunk-7QQBR7PB.mjs +2 -0
- package/dist/chunk-A55HN5OK.mjs +2 -0
- package/dist/chunk-ACOPDCNB.mjs +2 -0
- package/dist/chunk-AGDILNWB.mjs +2 -0
- package/dist/chunk-ATCJYAR4.mjs +2 -0
- package/dist/chunk-B3VTYBYR.mjs +960 -0
- package/dist/chunk-C564NU2H.mjs +77 -0
- package/dist/chunk-C7HWOBIF.mjs +2 -0
- package/dist/chunk-DB4WKGYF.mjs +7 -0
- package/dist/chunk-E7VYDG2X.mjs +2 -0
- package/dist/chunk-EUX7IC5J.mjs +48 -0
- package/dist/chunk-EVJ3BX3M.mjs +2 -0
- package/dist/chunk-EZY3WC6Z.mjs +15 -0
- package/dist/chunk-FQGQH4KM.mjs +2 -0
- package/dist/chunk-G7TOXONE.mjs +6 -0
- package/dist/chunk-GPF4YWWB.mjs +9 -0
- package/dist/chunk-GRAXKKG4.mjs +2 -0
- package/dist/chunk-GYQV7Y4J.mjs +120 -0
- package/dist/chunk-HMHK3EQ6.mjs +2 -0
- package/dist/chunk-HQQMJCQJ.mjs +10 -0
- package/dist/chunk-HYMEEXKN.mjs +4 -0
- package/dist/chunk-IERUOGC3.mjs +6 -0
- package/dist/chunk-ITNLYXXV.mjs +3 -0
- package/dist/chunk-L4DVONOG.mjs +2 -0
- package/dist/chunk-LAE5NQ4B.mjs +2 -0
- package/dist/chunk-LC7YNQFG.mjs +2 -0
- package/dist/chunk-LHTFLRB6.mjs +4 -0
- package/dist/chunk-LKX55H76.mjs +2 -0
- package/dist/chunk-MAFIGVXY.mjs +2 -0
- package/dist/chunk-NFIBI4IP.mjs +26 -0
- package/dist/chunk-NSKUTQ5J.mjs +5 -0
- package/dist/chunk-O52JMOCZ.mjs +2 -0
- package/dist/chunk-P2CAZPDP.mjs +3 -0
- package/dist/chunk-QAIHRH3I.mjs +13 -0
- package/dist/chunk-QMQUXTU4.mjs +12 -0
- package/dist/chunk-QR6A54KJ.mjs +3 -0
- package/dist/chunk-QVWVFC5K.mjs +6 -0
- package/dist/chunk-QYKCJ7FG.mjs +8 -0
- package/dist/chunk-QZY6Q64C.mjs +2 -0
- package/dist/chunk-TDQP3DKQ.mjs +10 -0
- package/dist/chunk-TMYZB6AV.mjs +2 -0
- package/dist/chunk-TX6JH7TR.mjs +2 -0
- package/dist/chunk-U3SSPL4K.mjs +8 -0
- package/dist/chunk-UH4SIXTR.mjs +2 -0
- package/dist/chunk-UNUEWH4S.mjs +2 -0
- package/dist/chunk-UXUK4PMC.mjs +27 -0
- package/dist/chunk-V4CPWKMZ.mjs +2 -0
- package/dist/chunk-V6XZ4VIR.mjs +2 -0
- package/dist/chunk-VACRB2NE.mjs +3 -0
- package/dist/chunk-W63L7367.mjs +7 -0
- package/dist/chunk-W7CXPCRV.mjs +6 -0
- package/dist/chunk-W7XHE4CT.mjs +2 -0
- package/dist/chunk-XINNG4F2.mjs +4 -0
- package/dist/chunk-Y34NR5JL.mjs +2 -0
- package/dist/chunk-YEY3RSFQ.mjs +2 -0
- package/dist/chunk-YL2DPWVS.mjs +4 -0
- package/dist/chunk-YXAUQPVK.mjs +8 -0
- package/dist/chunk-YZ5Z6H4W.mjs +4 -0
- package/dist/chunk-Z52HTUW7.mjs +4 -0
- package/dist/chunk-ZBIM6ARY.mjs +216 -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 +1988 -0
- package/kit/report.css +2821 -0
- package/kit/runtime.js +1707 -0
- package/kit/sheets.js +123 -0
- package/kit/state.js +217 -0
- package/kit/tables.js +1449 -0
- package/kit/tokens.js +29 -0
- package/kit/ui.js +561 -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 +141 -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 +138 -0
- package/skill/agents/openai.yaml +5 -0
- package/skill/references/building-components.md +327 -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 +141 -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-B6Ai3wsa.js +13 -0
- package/web/assets/index-SYPC3EZy.css +1 -0
- package/web/index.html +14 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
// Inline formatting of a selection inside one block: bold, italic, underline, strikethrough, inline
|
|
2
|
+
// code, text color and highlight (DOM only; tested with jsdom). Only the selected part is split
|
|
3
|
+
// and wrapped, so the rest of the block keeps its markup, including the author's attributes, as
|
|
4
|
+
// it was.
|
|
5
|
+
|
|
6
|
+
import { COLOR_NAMES } from "../../shared/colors.mjs";
|
|
7
|
+
import { HELD_TAGS } from "../../shared/components/list.mjs";
|
|
8
|
+
import { ZWSP, blank } from "../../shared/inline-spacing.mjs";
|
|
9
|
+
|
|
10
|
+
// The kit's colors (styles/base.css: Notion's nine, src/shared/colors.mjs), in the order the toolbar's panel shows them.
|
|
11
|
+
export const TEXT_COLORS = COLOR_NAMES;
|
|
12
|
+
export const HIGHLIGHTS = TEXT_COLORS;
|
|
13
|
+
const INK = new RegExp(`^doc-(text-(${TEXT_COLORS.join("|")})|highlight-(${HIGHLIGHTS.join("|")}))$`);
|
|
14
|
+
|
|
15
|
+
/** A class of the shared kit's text colors and highlights (kept by the serializer and the server). */
|
|
16
|
+
export const isInkClass = (name) => INK.test(name);
|
|
17
|
+
|
|
18
|
+
// What an underline's line may take besides its default, red and 2px (styles/base.css): a color
|
|
19
|
+
// ("plain": the text's own) and a weight, each a class of the u element itself.
|
|
20
|
+
export const UNDERLINE_COLORS = ["orange", "blue", "purple", "plain"];
|
|
21
|
+
export const UNDERLINE_WEIGHTS = ["thin", "thick"]; // 1px, 3px
|
|
22
|
+
const UNDERLINE_CLASS = new RegExp(`^doc-underline-(${[...UNDERLINE_COLORS, ...UNDERLINE_WEIGHTS].join("|")})$`);
|
|
23
|
+
|
|
24
|
+
/** A class of the kit's underline colors and weights (kept by the serializer on a u). */
|
|
25
|
+
export const isUnderlineClass = (name) => UNDERLINE_CLASS.test(name);
|
|
26
|
+
|
|
27
|
+
// Tag families are on or off; color families carry a value (the color name) as a span's class;
|
|
28
|
+
// an underline's color and weight are facets of the u element itself, a class each ("default":
|
|
29
|
+
// none, the red and 2px), the values each takes listed in `own`.
|
|
30
|
+
const FAMILIES = {
|
|
31
|
+
bold: { tags: ["STRONG", "B"], tag: "strong" },
|
|
32
|
+
italic: { tags: ["EM", "I"], tag: "em" },
|
|
33
|
+
underline: { tags: ["U"], tag: "u" },
|
|
34
|
+
strike: { tags: ["S", "STRIKE", "DEL"], tag: "s" },
|
|
35
|
+
code: { tags: ["CODE"], tag: "code" },
|
|
36
|
+
text: { prefix: "doc-text-" },
|
|
37
|
+
highlight: { prefix: "doc-highlight-" },
|
|
38
|
+
underlineColor: { tags: ["U"], tag: "u", prefix: "doc-underline-", own: UNDERLINE_COLORS },
|
|
39
|
+
underlineWeight: { tags: ["U"], tag: "u", prefix: "doc-underline-", own: UNDERLINE_WEIGHTS },
|
|
40
|
+
};
|
|
41
|
+
const ATOM = "[data-ge-atom]";
|
|
42
|
+
|
|
43
|
+
// The family's value carried by this element, or null.
|
|
44
|
+
function valueIn(element, family) {
|
|
45
|
+
if (element.nodeType !== 1 || element.hasAttribute("data-ge-atom")) return null;
|
|
46
|
+
if (family.own) {
|
|
47
|
+
if (!family.tags.includes(element.tagName)) return null;
|
|
48
|
+
const name = [...element.classList].find((entry) => entry.startsWith(family.prefix) && family.own.includes(entry.slice(family.prefix.length)));
|
|
49
|
+
return name ? name.slice(family.prefix.length) : "default";
|
|
50
|
+
}
|
|
51
|
+
if (family.tags) return family.tags.includes(element.tagName) ? true : null;
|
|
52
|
+
if (element.tagName !== "SPAN") return null;
|
|
53
|
+
const name = [...element.classList].find((entry) => entry.startsWith(family.prefix) && isInkClass(entry));
|
|
54
|
+
return name ? name.slice(family.prefix.length) : null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Elements of the block's own markup (not the rendered insides of formula chips).
|
|
58
|
+
const inlineElements = (host) => [...host.querySelectorAll("*")].filter((node) => !node.parentElement.closest(ATOM));
|
|
59
|
+
|
|
60
|
+
// Text nodes and formula chips with at least one character inside the range, in document order.
|
|
61
|
+
function leavesIn(host, range) {
|
|
62
|
+
const leaves = [];
|
|
63
|
+
const visit = (node) => {
|
|
64
|
+
for (const child of node.childNodes) {
|
|
65
|
+
if (!range.intersectsNode(child)) continue;
|
|
66
|
+
if (child.nodeType === 3) {
|
|
67
|
+
const start = child === range.startContainer ? range.startOffset : 0;
|
|
68
|
+
const end = child === range.endContainer ? range.endOffset : child.length;
|
|
69
|
+
if (end > start) leaves.push({ node: child, size: end - start });
|
|
70
|
+
} else if (child.nodeType === 1) {
|
|
71
|
+
if (child.hasAttribute("data-ge-atom")) leaves.push({ node: child, size: 1 });
|
|
72
|
+
else visit(child);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
};
|
|
76
|
+
visit(host);
|
|
77
|
+
return leaves;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The value every selected character shares for a family: true for bold, italic or code, the
|
|
82
|
+
* color name for text and highlight; null when some character lacks it or values differ.
|
|
83
|
+
*/
|
|
84
|
+
export function markValue(host, range, name) {
|
|
85
|
+
const family = FAMILIES[name];
|
|
86
|
+
let shared = null;
|
|
87
|
+
for (const [index, { node }] of leavesIn(host, fit(host, range)).entries()) {
|
|
88
|
+
let value = null;
|
|
89
|
+
for (let parent = node.parentNode; parent && parent !== host && value === null; parent = parent.parentNode) value = valueIn(parent, family);
|
|
90
|
+
if (value === null || (index > 0 && value !== shared)) return null;
|
|
91
|
+
shared = value;
|
|
92
|
+
}
|
|
93
|
+
return shared;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/** Whether text typed at `node` (a point of the caret, in `host`) lands inside an element of a tag family (bold, italic, underline, strike, code): what the browser gives it. */
|
|
97
|
+
export function markAround(host, node, name) {
|
|
98
|
+
const family = FAMILIES[name];
|
|
99
|
+
for (let parent = node.nodeType === 3 ? node.parentNode : node; parent && parent !== host; parent = parent.parentNode) if (valueIn(parent, family) === true) return true;
|
|
100
|
+
return false;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Set a family on the selected text: `value` true or a color name applies it (replacing another
|
|
105
|
+
* color; for an underline's facets, "default" is the red and 2px), false or null removes it.
|
|
106
|
+
* Returns the range covering the same text afterwards.
|
|
107
|
+
*/
|
|
108
|
+
export function formatRange(host, range, name, value) {
|
|
109
|
+
const family = FAMILIES[name];
|
|
110
|
+
const doc = host.ownerDocument;
|
|
111
|
+
// The other facet of an underline (its weight when its color changes, and the other way round)
|
|
112
|
+
// stays as the selected text had it.
|
|
113
|
+
const kept = family.own ? Object.entries(FAMILIES)
|
|
114
|
+
.filter(([, other]) => other.own && other !== family && other.tag === family.tag)
|
|
115
|
+
.map(([other, facet]) => [facet, markValue(host, range, other)]) : [];
|
|
116
|
+
dropPads(host, range);
|
|
117
|
+
const selection = fit(host, range);
|
|
118
|
+
if (selection.collapsed) return selection;
|
|
119
|
+
const start = doc.createComment("");
|
|
120
|
+
const end = doc.createComment("");
|
|
121
|
+
const tail = selection.cloneRange();
|
|
122
|
+
tail.collapse(false);
|
|
123
|
+
tail.insertNode(end);
|
|
124
|
+
selection.insertNode(start);
|
|
125
|
+
|
|
126
|
+
// No element of the family may straddle a boundary: split it there.
|
|
127
|
+
for (const marker of [start, end]) {
|
|
128
|
+
const ancestors = [];
|
|
129
|
+
for (let node = marker.parentNode; node !== host; node = node.parentNode) ancestors.push(node);
|
|
130
|
+
for (const ancestor of ancestors) if (valueIn(ancestor, family) !== null) splitAround(ancestor, marker);
|
|
131
|
+
}
|
|
132
|
+
const between = () => {
|
|
133
|
+
const inner = doc.createRange();
|
|
134
|
+
inner.setStartAfter(start);
|
|
135
|
+
inner.setEndBefore(end);
|
|
136
|
+
return inner;
|
|
137
|
+
};
|
|
138
|
+
const inside = between();
|
|
139
|
+
for (const element of inlineElements(host)) {
|
|
140
|
+
if (valueIn(element, family) !== null && contains(inside, element)) strip(element, family);
|
|
141
|
+
}
|
|
142
|
+
if (value !== null && value !== false) {
|
|
143
|
+
const wrapper = doc.createElement(family.tag ?? "span");
|
|
144
|
+
const classes = family.prefix && value !== "default" ? [family.prefix + value] : [];
|
|
145
|
+
for (const [facet, facetValue] of kept) if (facetValue && facetValue !== "default") classes.push(facet.prefix + facetValue);
|
|
146
|
+
if (classes.length > 0) wrapper.className = classes.join(" ");
|
|
147
|
+
const content = between();
|
|
148
|
+
wrapper.append(content.extractContents());
|
|
149
|
+
content.insertNode(wrapper);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// Remember the selection as character offsets, tidy up, and find it again.
|
|
153
|
+
const offsets = [offsetAt(host, start.parentNode, indexOf(start)), offsetAt(host, end.parentNode, indexOf(end))];
|
|
154
|
+
start.remove();
|
|
155
|
+
end.remove();
|
|
156
|
+
tidy(host, family);
|
|
157
|
+
return rangeAt(host, offsets);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/** A range as character offsets in the block (a formula counts as one), e.g. to restore it after undo. */
|
|
161
|
+
export function rangeOffsets(host, range) {
|
|
162
|
+
const fitted = fit(host, range);
|
|
163
|
+
return [offsetAt(host, fitted.startContainer, fitted.startOffset), offsetAt(host, fitted.endContainer, fitted.endOffset)];
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
export function rangeAt(host, [from, to]) {
|
|
167
|
+
const range = host.ownerDocument.createRange();
|
|
168
|
+
range.setStart(...pointAt(host, from, true));
|
|
169
|
+
range.setEnd(...pointAt(host, to, false));
|
|
170
|
+
return range;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// The range inside the block, with no boundary inside a formula chip.
|
|
174
|
+
function fit(host, range) {
|
|
175
|
+
const fitted = range.cloneRange();
|
|
176
|
+
if (!host.contains(fitted.startContainer)) fitted.setStart(host, 0);
|
|
177
|
+
if (!host.contains(fitted.endContainer)) fitted.setEnd(host, ownEnd(host));
|
|
178
|
+
const atom = (node) => (node.nodeType === 1 ? node : node.parentElement)?.closest(ATOM);
|
|
179
|
+
const first = atom(fitted.startContainer);
|
|
180
|
+
if (first && host.contains(first)) fitted.setStartBefore(first);
|
|
181
|
+
const last = atom(fitted.endContainer);
|
|
182
|
+
if (last && host.contains(last)) fitted.setEndAfter(last);
|
|
183
|
+
return fitted;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Split `element` at `marker` into two copies and leave the marker between them.
|
|
187
|
+
function splitAround(element, marker) {
|
|
188
|
+
const tail = element.ownerDocument.createRange();
|
|
189
|
+
tail.setStartAfter(marker);
|
|
190
|
+
tail.setEnd(element, element.childNodes.length);
|
|
191
|
+
const rest = element.cloneNode(false);
|
|
192
|
+
rest.append(tail.extractContents());
|
|
193
|
+
element.after(marker, rest);
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
const indexOf = (node) => [...node.parentNode.childNodes].indexOf(node);
|
|
197
|
+
|
|
198
|
+
function contains(range, node) {
|
|
199
|
+
const index = indexOf(node);
|
|
200
|
+
return range.comparePoint(node.parentNode, index) === 0 && range.comparePoint(node.parentNode, index + 1) === 0;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
function strip(element, family) {
|
|
204
|
+
if (family.prefix && !family.own) {
|
|
205
|
+
[...element.classList].filter((entry) => entry.startsWith(family.prefix)).forEach((entry) => element.classList.remove(entry));
|
|
206
|
+
if (element.classList.length > 0) return; // still carries the other color family
|
|
207
|
+
}
|
|
208
|
+
element.replaceWith(...element.childNodes);
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// The editor's pads (pads.mjs: a zero-width space that only holds a caret, as inside inline code at
|
|
212
|
+
// its start) go before a selection is formatted, its ends kept on the text: one left in a piece split
|
|
213
|
+
// off would keep that piece, drawn as an empty box (inline code cleared, its start's pad left in a
|
|
214
|
+
// <code> of its own).
|
|
215
|
+
function dropPads(host, range) {
|
|
216
|
+
const pads = [];
|
|
217
|
+
const walk = (node) => {
|
|
218
|
+
for (const child of node.childNodes) {
|
|
219
|
+
if (child.nodeType === 3 && child.data === ZWSP) pads.push(child);
|
|
220
|
+
else if (child.nodeType === 1 && !child.hasAttribute("data-ge-atom")) walk(child);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
223
|
+
walk(host);
|
|
224
|
+
for (const pad of pads) {
|
|
225
|
+
if (range.startContainer === pad) range.setStartAfter(pad);
|
|
226
|
+
if (range.endContainer === pad) range.setEndBefore(pad);
|
|
227
|
+
pad.remove();
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// The inline elements text carries its marks in: the format bar's (bold… a color), a link.
|
|
232
|
+
const MARKS = new Set(["STRONG", "B", "EM", "I", "U", "INS", "S", "STRIKE", "DEL", "CODE", "KBD", "SAMP", "SUP", "SUB", "A", "SPAN", "MARK"]);
|
|
233
|
+
/** Whether `node` is an element text carries a mark in (bold… a color, a link; not a chip). */
|
|
234
|
+
export const isMark = (node) => node?.nodeType === 1 && MARKS.has(node.tagName) && !node.hasAttribute("data-ge-atom");
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* A collapsed `range` in `host` taken out of the marks around it, each split there (a half left
|
|
238
|
+
* holding nothing goes): what goes in there carries its own marks alone, as notion-lite's pasted
|
|
239
|
+
* text keeps its own (the caret's are not added to it). Returns a range at that place.
|
|
240
|
+
*/
|
|
241
|
+
export function outOfMarks(host, range) {
|
|
242
|
+
const doc = host.ownerDocument;
|
|
243
|
+
const marker = doc.createComment("");
|
|
244
|
+
range.insertNode(marker);
|
|
245
|
+
while (marker.parentNode !== host && isMark(marker.parentNode)) {
|
|
246
|
+
const mark = marker.parentNode;
|
|
247
|
+
splitAround(mark, marker);
|
|
248
|
+
const rest = marker.nextSibling;
|
|
249
|
+
if (holdsNothing(mark)) mark.remove();
|
|
250
|
+
if (isMark(rest) && holdsNothing(rest)) rest.remove();
|
|
251
|
+
}
|
|
252
|
+
const at = doc.createRange();
|
|
253
|
+
at.setStartBefore(marker);
|
|
254
|
+
at.collapse(true);
|
|
255
|
+
marker.remove();
|
|
256
|
+
return at;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
// What makes two marks the same: their tag and attributes (a link's address too).
|
|
260
|
+
const markSignature = (node) => `${node.tagName} ${[...node.attributes].filter((entry) => entry.name !== "data-ge-src").map((entry) => `${entry.name}=${entry.value}`).sort().join(" ")}`;
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* Two neighbours `left` and `right` (right after it) that are the same mark made one, and so on
|
|
264
|
+
* inward where their insides meet (bold pasted beside bold is one bold, notion-lite's text normalized).
|
|
265
|
+
* Returns the mark kept (`left`), or null when they are not the same.
|
|
266
|
+
*/
|
|
267
|
+
export function joinMarks(left, right) {
|
|
268
|
+
if (!isMark(left) || !isMark(right) || left.nextSibling !== right || markSignature(left) !== markSignature(right)) return null;
|
|
269
|
+
for (let [a, b] = [left, right]; isMark(a) && isMark(b) && a.nextSibling === b && markSignature(a) === markSignature(b);) {
|
|
270
|
+
const [inner, next] = [a.lastChild, b.firstChild];
|
|
271
|
+
a.append(...b.childNodes);
|
|
272
|
+
b.remove();
|
|
273
|
+
[a, b] = [inner, next];
|
|
274
|
+
}
|
|
275
|
+
left.normalize();
|
|
276
|
+
return left;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
/** Whether an inline element holds nothing: no text but pads, no formula, no break (and is no break or formula itself). */
|
|
280
|
+
export const holdsNothing = (element) => element.tagName !== "BR" && !element.hasAttribute("data-ge-atom") && element.textContent.replaceAll(ZWSP, "") === "" && !element.querySelector(`${ATOM}, br`);
|
|
281
|
+
|
|
282
|
+
// Unwrap elements left empty by the splits, merge neighbours that now carry the same mark, and
|
|
283
|
+
// join adjacent text nodes.
|
|
284
|
+
function tidy(host, family) {
|
|
285
|
+
for (const element of inlineElements(host)) if (holdsNothing(element)) element.replaceWith(...element.childNodes);
|
|
286
|
+
host.normalize(); // drops the empty text nodes the splits leave between neighbours
|
|
287
|
+
const signature = (node) => [...node.attributes].filter((entry) => entry.name !== "data-ge-src").map((entry) => `${entry.name}=${entry.value}`).sort().join(" ");
|
|
288
|
+
for (const element of inlineElements(host)) {
|
|
289
|
+
if (!element.isConnected || valueIn(element, family) === null) continue;
|
|
290
|
+
for (let next = element.nextSibling; next?.nodeType === 1 && next.tagName === element.tagName && signature(next) === signature(element); next = element.nextSibling) {
|
|
291
|
+
element.append(...next.childNodes);
|
|
292
|
+
next.remove();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
host.normalize();
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
// What makes two pieces of inline code the same: their attributes, the editor's marks aside.
|
|
299
|
+
const codeSignature = (node) => [...node.attributes].filter((entry) => !/^(data-ge-|contenteditable$)/.test(entry.name))
|
|
300
|
+
.map((entry) => `${entry.name}=${entry.value}`).sort().join(" ");
|
|
301
|
+
/**
|
|
302
|
+
* Inline code right after inline code, nothing between them (what stood between deleted, two
|
|
303
|
+
* blocks joined), is one piece, as Feishu's: the second's text goes into the first. A caret that
|
|
304
|
+
* was between them (or in a pad of the second) goes to the join, inside; one in the second's text
|
|
305
|
+
* stays where it was. Returns whether any were joined.
|
|
306
|
+
*/
|
|
307
|
+
export function joinCode(host) {
|
|
308
|
+
const selection = host.ownerDocument.getSelection();
|
|
309
|
+
let joined = false;
|
|
310
|
+
for (const code of [...host.querySelectorAll("code")]) {
|
|
311
|
+
if (!code.isConnected || code.parentElement.closest(ATOM)) continue;
|
|
312
|
+
for (;;) {
|
|
313
|
+
const between = [];
|
|
314
|
+
let next = code.nextSibling;
|
|
315
|
+
for (; blank(next); next = next.nextSibling) between.push(next);
|
|
316
|
+
if (next?.nodeName !== "CODE" || codeSignature(next) !== codeSignature(code)) break;
|
|
317
|
+
const saved = selection?.rangeCount ? [selection.anchorNode, selection.anchorOffset, selection.focusNode, selection.focusOffset] : null;
|
|
318
|
+
const siblings = [...code.parentNode.childNodes];
|
|
319
|
+
const going = (node, offset) => between.includes(node) || node === next || (blank(node) && next.contains(node))
|
|
320
|
+
|| (node === code.parentNode && offset > siblings.indexOf(code) && offset <= siblings.indexOf(next));
|
|
321
|
+
const toJoin = saved && selection.isCollapsed && going(saved[0], saved[1]);
|
|
322
|
+
const last = textsOf(code).at(-1);
|
|
323
|
+
const join = last ? [last, last.data.length] : [code, code.childNodes.length];
|
|
324
|
+
between.forEach((node) => node.remove());
|
|
325
|
+
code.append(...[...next.childNodes].filter((node) => !blank(node)));
|
|
326
|
+
next.remove();
|
|
327
|
+
joined = true;
|
|
328
|
+
if (toJoin) selection.setBaseAndExtent(join[0], join[1], join[0], join[1]);
|
|
329
|
+
else if (saved && saved[0].isConnected && saved[2].isConnected) selection.setBaseAndExtent(...saved);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return joined;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
// The text nodes with something more than a pad's space in them, in order.
|
|
336
|
+
function textsOf(node) {
|
|
337
|
+
const texts = [];
|
|
338
|
+
for (const child of node.childNodes) {
|
|
339
|
+
if (child.nodeType === 3 && !blank(child)) texts.push(child);
|
|
340
|
+
else if (child.nodeType === 1) texts.push(...textsOf(child));
|
|
341
|
+
}
|
|
342
|
+
return texts;
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
// Characters (a formula chip counts as one) between the block start and a boundary point.
|
|
346
|
+
function offsetAt(host, container, offset) {
|
|
347
|
+
const before = host.ownerDocument.createRange();
|
|
348
|
+
before.setStart(host, 0);
|
|
349
|
+
before.setEnd(container, offset);
|
|
350
|
+
return leavesIn(host, before).reduce((sum, leaf) => sum + leaf.size, 0);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// The point `count` characters into the block. At a node boundary a start prefers the next
|
|
354
|
+
// node and an end the previous one, so the selection stays inside what was just formatted.
|
|
355
|
+
function pointAt(host, count, forward) {
|
|
356
|
+
const everything = host.ownerDocument.createRange();
|
|
357
|
+
everything.setStart(host, 0);
|
|
358
|
+
everything.setEnd(host, ownEnd(host));
|
|
359
|
+
const leaves = leavesIn(host, everything);
|
|
360
|
+
for (const { node, size } of leaves) {
|
|
361
|
+
if (count < size || (count === size && !forward)) {
|
|
362
|
+
return node.nodeType === 3 ? [node, count] : [node.parentNode, indexOf(node) + count];
|
|
363
|
+
}
|
|
364
|
+
count -= size;
|
|
365
|
+
}
|
|
366
|
+
// No text to count in at all (an emptied block, its placeholder <br> alone): at its start, before
|
|
367
|
+
// the <br>, where an empty block's caret is (caret.mjs atEdge reads it there as the block's start,
|
|
368
|
+
// so Backspace in an emptied item moved out a level still works); past the text, at its end.
|
|
369
|
+
return leaves.length === 0 ? [host, 0] : [host, ownEnd(host)];
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
// Where a block's own content ends: a list item's text stops before the blocks it holds (its lists, a
|
|
373
|
+
// paragraph, a task board…), so that no offset of its counts their words.
|
|
374
|
+
function ownEnd(host) {
|
|
375
|
+
const index = host.tagName === "LI" ? [...host.childNodes].findIndex((node) => node.nodeType === 1 && HELD_TAGS.has(node.localName)) : -1;
|
|
376
|
+
return index < 0 ? host.childNodes.length : index;
|
|
377
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { closePopup, esc, openPopup, showSnackbar, style } from "../emoji-picker/support.mjs";
|
|
2
|
+
import { addStyle } from "../ui.mjs";
|
|
3
|
+
import { t } from "../../../shared/i18n/index.mjs";
|
|
4
|
+
|
|
5
|
+
// The 上传 / 链接 menu of media blocks (notion-lite's ui/media-menu.js, Notion's 353650: images,
|
|
6
|
+
// files, bookmarks and embeds), right below the block's placeholder (or the block), centered:
|
|
7
|
+
// tabs (上传, 链接) when there are two, then the tab's content. 上传: a button
|
|
8
|
+
// choosing a file (a file dropped on the menu goes too); 链接: a field, a blue button under it and a
|
|
9
|
+
// line of gray text; Enter goes too. Esc or a press outside closes it. Drawn in the icon picker's
|
|
10
|
+
// popup layer (emoji-picker/support.mjs: Notion's tokens, light and dark); carries data-doc-dev.
|
|
11
|
+
//
|
|
12
|
+
// openMediaMenu(anchor, options): anchor, the element it opens below;
|
|
13
|
+
// tabs [{ key: "upload" | "link", label }], in that order, the first shown first
|
|
14
|
+
// upload { label, accept, primary, caption }: the button's text, the file types it takes; primary: the
|
|
15
|
+
// blue button (a file block's 选择文件) instead of the outlined one, with a gray line under it (caption)
|
|
16
|
+
// width the menu's, in px (300 for a file, a bookmark and an embed, 360 for an image)
|
|
17
|
+
// link { placeholder, button, caption, invalid }: the field's placeholder, the button's text,
|
|
18
|
+
// the gray line under it, what an address that is no link says
|
|
19
|
+
// onUpload(file), onEmbed(url): what was chosen (the menu closed already)
|
|
20
|
+
|
|
21
|
+
const STYLE = `
|
|
22
|
+
.nmedia-menu { max-width: calc(100vw - 24px); border-radius: 10px; background: var(--c-popBac); box-shadow: var(--c-shaOutLg); overflow: hidden; color: var(--c-texPri); user-select: none; }
|
|
23
|
+
.nmedia-menu-tabs { display: flex; height: 40px; padding: 0 8px; box-shadow: inset 0 -1px 0 var(--ca-borSecTra); font-size: 14px; }
|
|
24
|
+
.nmedia-menu-tab-wrap { position: relative; padding: 6px 0; }
|
|
25
|
+
.nmedia-menu-tab { display: inline-flex; align-items: center; height: 28px; padding: 0 8px; border-radius: 6px; line-height: 1.2; color: var(--c-texTer); cursor: pointer; white-space: nowrap; transition: background 20ms ease-in; }
|
|
26
|
+
.nmedia-menu-tab:hover { background: var(--ca-bacIntTra); }
|
|
27
|
+
.nmedia-menu-tab.active { color: var(--c-texPri); }
|
|
28
|
+
.nmedia-menu-tab.active::after { content: ""; position: absolute; left: 8px; right: 8px; bottom: 0; border-bottom: 2px solid var(--c-texPri); }
|
|
29
|
+
.nmedia-menu-body { padding: 12px 12px 10px; }
|
|
30
|
+
.nmedia-menu-inner { display: flex; justify-content: center; padding: 4px; }
|
|
31
|
+
.nmedia-menu-upload { display: flex; align-items: center; justify-content: center; width: 100%; height: 32px; padding: 0 12px; border-radius: 6px; border: 1px solid var(--ca-borPriTra); font-size: 14px; font-weight: 500; line-height: 1.2; cursor: pointer; transition: background 20ms ease-in; }
|
|
32
|
+
.nmedia-menu-upload:hover { background: var(--ca-bacIntTra); }
|
|
33
|
+
.nmedia-menu-link { flex-direction: column; align-items: stretch; gap: 8px; }
|
|
34
|
+
.nmedia-menu-input { display: flex; align-items: center; gap: 4px; width: 100%; height: 28px; padding: 3px 6px; border-radius: 6px; background: var(--ca-bacSecTra); box-shadow: 0 0 0 1px var(--ca-borPriTra); box-sizing: border-box; }
|
|
35
|
+
.nmedia-menu-input:focus-within { box-shadow: var(--c-inpBluFocRin); }
|
|
36
|
+
.nmedia-menu-input input { flex: 1; min-width: 0; border: none; outline: none; background: transparent; padding: 0; font: inherit; font-size: 14px; line-height: 20px; color: var(--c-texPri); }
|
|
37
|
+
.nmedia-menu-input input::placeholder { color: var(--c-texTer); }
|
|
38
|
+
.nmedia-menu-embed { display: flex; align-items: center; justify-content: center; width: 100%; max-width: 300px; margin: 0 auto; height: 28px; padding: 0 8px; border-radius: 6px; background: var(--c-bluBacAccPri); color: #fff; font-size: 14px; font-weight: 500; cursor: pointer; box-sizing: border-box; }
|
|
39
|
+
.nmedia-menu-embed:hover { filter: brightness(.94); }
|
|
40
|
+
.nmedia-menu-caption { margin: -6px 0 4px; padding: 4px 0; font-size: 12px; line-height: 1.4; color: var(--c-texSec); text-align: center; }
|
|
41
|
+
.nmedia-menu.dragover .nmedia-menu-body { background: var(--ca-bluBacSecTra); }
|
|
42
|
+
.nmedia-menu-choose { margin-top: 8px; }
|
|
43
|
+
`;
|
|
44
|
+
|
|
45
|
+
let menu = null; // the popup open
|
|
46
|
+
|
|
47
|
+
/** An address as a link: a scheme added where none was written; { url, error }. */
|
|
48
|
+
function normalizeLink(raw) {
|
|
49
|
+
let url = String(raw ?? "").trim();
|
|
50
|
+
if (!url) return { url: "" };
|
|
51
|
+
if (!/^[a-z][\w+.-]*:/i.test(url) && /^[\w-]+(\.[\w-]+)+(:\d+)?(\/|\?|#|$)/.test(url)) url = `https://${url}`;
|
|
52
|
+
if (!/^(https?:\/\/[^\s]+\.[^\s]+|https?:\/\/localhost[^\s]*)/i.test(url)) return { url, error: t("请输入有效的链接。") };
|
|
53
|
+
return { url };
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Choose a file (of `accept`'s types); `done(file)`. */
|
|
57
|
+
function pickFile(accept, done) {
|
|
58
|
+
const input = document.createElement("input");
|
|
59
|
+
input.type = "file";
|
|
60
|
+
if (accept) input.accept = accept;
|
|
61
|
+
input.addEventListener("change", () => { const file = input.files?.[0]; if (file) done(file); });
|
|
62
|
+
input.click();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export function openMediaMenu(anchor, { tabs, width, upload = {}, link = {}, onUpload, onEmbed }) {
|
|
66
|
+
closeMediaMenu();
|
|
67
|
+
style();
|
|
68
|
+
addStyle(STYLE);
|
|
69
|
+
const el = document.createElement("div");
|
|
70
|
+
el.className = "nmedia-menu";
|
|
71
|
+
el.style.width = `${width}px`;
|
|
72
|
+
el.setAttribute("role", "dialog");
|
|
73
|
+
el.setAttribute("data-doc-dev", "");
|
|
74
|
+
const render = (current) => {
|
|
75
|
+
el.innerHTML = (tabs.length > 1 ? `<div class="nmedia-menu-tabs" role="tablist">${tabs.map(({ key, label }) =>
|
|
76
|
+
`<div class="nmedia-menu-tab-wrap"><div role="tab" class="nmedia-menu-tab${key === current ? " active" : ""}" aria-selected="${key === current}" data-tab="${key}">${esc(label)}</div></div>`).join("")}</div>` : "")
|
|
77
|
+
+ `<div class="nmedia-menu-body">${current === "upload"
|
|
78
|
+
? (upload.primary
|
|
79
|
+
? `<div class="nmedia-menu-inner nmedia-menu-link"><div role="button" tabindex="0" class="nmedia-menu-embed nmedia-menu-choose" data-do="upload">${esc(upload.label ?? t("选择文件"))}</div>${upload.caption ? `<div class="nmedia-menu-caption">${esc(upload.caption)}</div>` : ""}</div>`
|
|
80
|
+
: `<div class="nmedia-menu-inner"><div role="button" tabindex="0" class="nmedia-menu-upload" data-do="upload">${esc(upload.label ?? t("上传文件"))}</div></div>`)
|
|
81
|
+
: `<div class="nmedia-menu-inner nmedia-menu-link"><div class="nmedia-menu-input"><input type="url" placeholder="${esc(link.placeholder ?? t("粘贴链接…"))}" autocomplete="off"></div>`
|
|
82
|
+
+ `<div role="button" tabindex="0" class="nmedia-menu-embed" data-do="embed">${esc(link.button ?? t("嵌入链接"))}</div>`
|
|
83
|
+
+ (link.caption ? `<div class="nmedia-menu-caption">${esc(link.caption)}</div>` : "") + "</div>"}</div>`;
|
|
84
|
+
const input = el.querySelector("input");
|
|
85
|
+
if (input) {
|
|
86
|
+
input.addEventListener("keydown", (event) => {
|
|
87
|
+
if (event.key === "Enter") {
|
|
88
|
+
event.preventDefault();
|
|
89
|
+
embed();
|
|
90
|
+
} else if (event.key === "Escape") {
|
|
91
|
+
event.preventDefault();
|
|
92
|
+
event.stopPropagation();
|
|
93
|
+
closeMediaMenu();
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
requestAnimationFrame(() => input.focus({ preventScroll: true }));
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const embed = () => {
|
|
100
|
+
const { url, error } = normalizeLink(el.querySelector("input")?.value);
|
|
101
|
+
if (!url) return;
|
|
102
|
+
if (error) return showSnackbar(link.invalid ?? error);
|
|
103
|
+
closeMediaMenu();
|
|
104
|
+
onEmbed(url);
|
|
105
|
+
};
|
|
106
|
+
el.addEventListener("mousedown", (event) => { if (!event.target.closest("input")) event.preventDefault(); });
|
|
107
|
+
// A file dropped on the menu's 上传 tab goes as one chosen.
|
|
108
|
+
const hasFiles = (event) => [...(event.dataTransfer?.types ?? [])].includes("Files") && el.querySelector('[data-do="upload"]');
|
|
109
|
+
el.addEventListener("dragover", (event) => {
|
|
110
|
+
if (!hasFiles(event)) return;
|
|
111
|
+
event.preventDefault();
|
|
112
|
+
event.stopPropagation();
|
|
113
|
+
el.classList.add("dragover");
|
|
114
|
+
});
|
|
115
|
+
el.addEventListener("dragleave", (event) => { if (!el.contains(event.relatedTarget)) el.classList.remove("dragover"); });
|
|
116
|
+
el.addEventListener("drop", (event) => {
|
|
117
|
+
if (!hasFiles(event)) return;
|
|
118
|
+
event.preventDefault();
|
|
119
|
+
event.stopPropagation();
|
|
120
|
+
el.classList.remove("dragover");
|
|
121
|
+
const file = event.dataTransfer.files?.[0];
|
|
122
|
+
if (file) {
|
|
123
|
+
closeMediaMenu();
|
|
124
|
+
onUpload(file);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
el.addEventListener("click", (event) => {
|
|
128
|
+
const tabNode = event.target.closest("[data-tab]");
|
|
129
|
+
if (tabNode) return render(tabNode.dataset.tab);
|
|
130
|
+
const act = event.target.closest("[data-do]")?.dataset.do;
|
|
131
|
+
if (act === "upload") pickFile(upload.accept, (file) => {
|
|
132
|
+
closeMediaMenu();
|
|
133
|
+
onUpload(file);
|
|
134
|
+
});
|
|
135
|
+
else if (act === "embed") embed();
|
|
136
|
+
});
|
|
137
|
+
render(tabs[0].key);
|
|
138
|
+
const rect = anchor.getBoundingClientRect();
|
|
139
|
+
const popup = openPopup({ origin: { left: rect.left, right: rect.right, top: rect.top, bottom: rect.bottom, width: rect.width, height: rect.height }, placement: "bottom", align: "center", gap: 0, content: el });
|
|
140
|
+
menu = popup;
|
|
141
|
+
const onKey = (event) => {
|
|
142
|
+
if (event.key !== "Escape" || menu !== popup) return;
|
|
143
|
+
event.preventDefault();
|
|
144
|
+
event.stopPropagation();
|
|
145
|
+
closeMediaMenu();
|
|
146
|
+
};
|
|
147
|
+
document.addEventListener("keydown", onKey, true);
|
|
148
|
+
popup.onClose = () => {
|
|
149
|
+
document.removeEventListener("keydown", onKey, true);
|
|
150
|
+
if (menu === popup) menu = null;
|
|
151
|
+
};
|
|
152
|
+
return popup;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
export function closeMediaMenu() {
|
|
156
|
+
if (menu && !menu.closed) closePopup(menu);
|
|
157
|
+
menu = null;
|
|
158
|
+
}
|