@react-x11/components 0.1.0 → 0.2.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/README.md +979 -21
- package/dist/ansi/cast.d.ts +48 -0
- package/dist/ansi/cast.d.ts.map +1 -0
- package/dist/ansi/cast.js +135 -0
- package/dist/ansi/cast.js.map +1 -0
- package/dist/ansi/index.d.ts +10 -0
- package/dist/ansi/index.d.ts.map +1 -0
- package/dist/ansi/index.js +27 -0
- package/dist/ansi/index.js.map +1 -0
- package/dist/ansi/palette.d.ts +79 -0
- package/dist/ansi/palette.d.ts.map +1 -0
- package/dist/ansi/palette.js +155 -0
- package/dist/ansi/palette.js.map +1 -0
- package/dist/ansi/parse.d.ts +114 -0
- package/dist/ansi/parse.d.ts.map +1 -0
- package/dist/ansi/parse.js +687 -0
- package/dist/ansi/parse.js.map +1 -0
- package/dist/ansi/sgr.d.ts +87 -0
- package/dist/ansi/sgr.d.ts.map +1 -0
- package/dist/ansi/sgr.js +302 -0
- package/dist/ansi/sgr.js.map +1 -0
- package/dist/ansi/utf8.d.ts +15 -0
- package/dist/ansi/utf8.d.ts.map +1 -0
- package/dist/ansi/utf8.js +82 -0
- package/dist/ansi/utf8.js.map +1 -0
- package/dist/calendar/Calendar.d.ts +136 -0
- package/dist/calendar/Calendar.d.ts.map +1 -0
- package/dist/calendar/Calendar.js +460 -0
- package/dist/calendar/Calendar.js.map +1 -0
- package/dist/calendar/DatePicker.d.ts +52 -0
- package/dist/calendar/DatePicker.d.ts.map +1 -0
- package/dist/calendar/DatePicker.js +257 -0
- package/dist/calendar/DatePicker.js.map +1 -0
- package/dist/calendar/dates.d.ts +90 -0
- package/dist/calendar/dates.d.ts.map +1 -0
- package/dist/calendar/dates.js +236 -0
- package/dist/calendar/dates.js.map +1 -0
- package/dist/calendar/index.d.ts +8 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/index.js +15 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/charts/components.d.ts +141 -0
- package/dist/charts/components.d.ts.map +1 -0
- package/dist/charts/components.js +580 -0
- package/dist/charts/components.js.map +1 -0
- package/dist/charts/data.d.ts +198 -0
- package/dist/charts/data.d.ts.map +1 -0
- package/dist/charts/data.js +616 -0
- package/dist/charts/data.js.map +1 -0
- package/dist/charts/hx.d.ts +21 -0
- package/dist/charts/hx.d.ts.map +1 -0
- package/dist/charts/hx.js +15 -0
- package/dist/charts/hx.js.map +1 -0
- package/dist/charts/index.d.ts +27 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +38 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/node.d.ts +96 -0
- package/dist/charts/node.d.ts.map +1 -0
- package/dist/charts/node.js +720 -0
- package/dist/charts/node.js.map +1 -0
- package/dist/charts/render.d.ts +153 -0
- package/dist/charts/render.d.ts.map +1 -0
- package/dist/charts/render.js +762 -0
- package/dist/charts/render.js.map +1 -0
- package/dist/charts/scale.d.ts +42 -0
- package/dist/charts/scale.d.ts.map +1 -0
- package/dist/charts/scale.js +173 -0
- package/dist/charts/scale.js.map +1 -0
- package/dist/charts/spec.d.ts +91 -0
- package/dist/charts/spec.d.ts.map +1 -0
- package/dist/charts/spec.js +33 -0
- package/dist/charts/spec.js.map +1 -0
- package/dist/charts/timers.d.ts +6 -0
- package/dist/charts/timers.d.ts.map +1 -0
- package/dist/charts/timers.js +14 -0
- package/dist/charts/timers.js.map +1 -0
- package/dist/code/hx.d.ts +24 -0
- package/dist/code/hx.d.ts.map +1 -0
- package/dist/code/hx.js +25 -0
- package/dist/code/hx.js.map +1 -0
- package/dist/code/index.d.ts +45 -0
- package/dist/code/index.d.ts.map +1 -0
- package/dist/code/index.js +93 -0
- package/dist/code/index.js.map +1 -0
- package/dist/code-editor/completion.d.ts +26 -0
- package/dist/code-editor/completion.d.ts.map +1 -0
- package/dist/code-editor/completion.js +129 -0
- package/dist/code-editor/completion.js.map +1 -0
- package/dist/code-editor/doc.d.ts +35 -0
- package/dist/code-editor/doc.d.ts.map +1 -0
- package/dist/code-editor/doc.js +162 -0
- package/dist/code-editor/doc.js.map +1 -0
- package/dist/code-editor/hx.d.ts +13 -0
- package/dist/code-editor/hx.d.ts.map +1 -0
- package/dist/code-editor/hx.js +10 -0
- package/dist/code-editor/hx.js.map +1 -0
- package/dist/code-editor/index.d.ts +88 -0
- package/dist/code-editor/index.d.ts.map +1 -0
- package/dist/code-editor/index.js +401 -0
- package/dist/code-editor/index.js.map +1 -0
- package/dist/code-editor/node.d.ts +343 -0
- package/dist/code-editor/node.d.ts.map +1 -0
- package/dist/code-editor/node.js +1521 -0
- package/dist/code-editor/node.js.map +1 -0
- package/dist/code-language/hljs.d.ts +47 -0
- package/dist/code-language/hljs.d.ts.map +1 -0
- package/dist/code-language/hljs.js +211 -0
- package/dist/code-language/hljs.js.map +1 -0
- package/dist/code-language/index.d.ts +22 -0
- package/dist/code-language/index.d.ts.map +1 -0
- package/dist/code-language/index.js +20 -0
- package/dist/code-language/index.js.map +1 -0
- package/dist/code-language/languages/glsl.d.ts +4 -0
- package/dist/code-language/languages/glsl.d.ts.map +1 -0
- package/dist/code-language/languages/glsl.js +99 -0
- package/dist/code-language/languages/glsl.js.map +1 -0
- package/dist/code-language/languages/javascript.d.ts +10 -0
- package/dist/code-language/languages/javascript.d.ts.map +1 -0
- package/dist/code-language/languages/javascript.js +360 -0
- package/dist/code-language/languages/javascript.js.map +1 -0
- package/dist/code-language/languages/json.d.ts +4 -0
- package/dist/code-language/languages/json.d.ts.map +1 -0
- package/dist/code-language/languages/json.js +68 -0
- package/dist/code-language/languages/json.js.map +1 -0
- package/dist/code-language/languages/shell.d.ts +4 -0
- package/dist/code-language/languages/shell.d.ts.map +1 -0
- package/dist/code-language/languages/shell.js +189 -0
- package/dist/code-language/languages/shell.js.map +1 -0
- package/dist/code-language/languages/sql.d.ts +11 -0
- package/dist/code-language/languages/sql.d.ts.map +1 -0
- package/dist/code-language/languages/sql.js +133 -0
- package/dist/code-language/languages/sql.js.map +1 -0
- package/dist/code-language/lezer.d.ts +24 -0
- package/dist/code-language/lezer.d.ts.map +1 -0
- package/dist/code-language/lezer.js +148 -0
- package/dist/code-language/lezer.js.map +1 -0
- package/dist/code-language/registry.d.ts +19 -0
- package/dist/code-language/registry.d.ts.map +1 -0
- package/dist/code-language/registry.js +56 -0
- package/dist/code-language/registry.js.map +1 -0
- package/dist/code-language/runs.d.ts +35 -0
- package/dist/code-language/runs.d.ts.map +1 -0
- package/dist/code-language/runs.js +88 -0
- package/dist/code-language/runs.js.map +1 -0
- package/dist/code-language/stream.d.ts +70 -0
- package/dist/code-language/stream.d.ts.map +1 -0
- package/dist/code-language/stream.js +243 -0
- package/dist/code-language/stream.js.map +1 -0
- package/dist/code-language/textmate.d.ts +27 -0
- package/dist/code-language/textmate.d.ts.map +1 -0
- package/dist/code-language/textmate.js +86 -0
- package/dist/code-language/textmate.js.map +1 -0
- package/dist/code-language/theme.d.ts +26 -0
- package/dist/code-language/theme.d.ts.map +1 -0
- package/dist/code-language/theme.js +108 -0
- package/dist/code-language/theme.js.map +1 -0
- package/dist/code-language/timers.d.ts +7 -0
- package/dist/code-language/timers.d.ts.map +1 -0
- package/dist/code-language/timers.js +22 -0
- package/dist/code-language/timers.js.map +1 -0
- package/dist/code-language/types.d.ts +173 -0
- package/dist/code-language/types.d.ts.map +1 -0
- package/dist/code-language/types.js +41 -0
- package/dist/code-language/types.js.map +1 -0
- package/dist/codeblock/index.d.ts +69 -0
- package/dist/codeblock/index.d.ts.map +1 -0
- package/dist/codeblock/index.js +85 -0
- package/dist/codeblock/index.js.map +1 -0
- package/dist/color-picker/ColorField.d.ts +39 -0
- package/dist/color-picker/ColorField.d.ts.map +1 -0
- package/dist/color-picker/ColorField.js +239 -0
- package/dist/color-picker/ColorField.js.map +1 -0
- package/dist/color-picker/ColorPicker.d.ts +109 -0
- package/dist/color-picker/ColorPicker.d.ts.map +1 -0
- package/dist/color-picker/ColorPicker.js +757 -0
- package/dist/color-picker/ColorPicker.js.map +1 -0
- package/dist/color-picker/color.d.ts +105 -0
- package/dist/color-picker/color.d.ts.map +1 -0
- package/dist/color-picker/color.js +313 -0
- package/dist/color-picker/color.js.map +1 -0
- package/dist/color-picker/index.d.ts +8 -0
- package/dist/color-picker/index.d.ts.map +1 -0
- package/dist/color-picker/index.js +19 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/desktop-calendar/eds.d.ts +102 -0
- package/dist/desktop-calendar/eds.d.ts.map +1 -0
- package/dist/desktop-calendar/eds.js +356 -0
- package/dist/desktop-calendar/eds.js.map +1 -0
- package/dist/desktop-calendar/ical.d.ts +63 -0
- package/dist/desktop-calendar/ical.d.ts.map +1 -0
- package/dist/desktop-calendar/ical.js +57 -0
- package/dist/desktop-calendar/ical.js.map +1 -0
- package/dist/desktop-calendar/index.d.ts +72 -0
- package/dist/desktop-calendar/index.d.ts.map +1 -0
- package/dist/desktop-calendar/index.js +213 -0
- package/dist/desktop-calendar/index.js.map +1 -0
- package/dist/embed/client.d.ts +121 -0
- package/dist/embed/client.d.ts.map +1 -0
- package/dist/embed/client.js +203 -0
- package/dist/embed/client.js.map +1 -0
- package/dist/embed/host.d.ts +96 -0
- package/dist/embed/host.d.ts.map +1 -0
- package/dist/embed/host.js +266 -0
- package/dist/embed/host.js.map +1 -0
- package/dist/embed/index.d.ts +5 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +13 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed/timers.d.ts +6 -0
- package/dist/embed/timers.d.ts.map +1 -0
- package/dist/embed/timers.js +16 -0
- package/dist/embed/timers.js.map +1 -0
- package/dist/flow/draw.d.ts +45 -0
- package/dist/flow/draw.d.ts.map +1 -0
- package/dist/flow/draw.js +295 -0
- package/dist/flow/draw.js.map +1 -0
- package/dist/flow/index.d.ts +64 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +306 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/model.d.ts +158 -0
- package/dist/flow/model.d.ts.map +1 -0
- package/dist/flow/model.js +566 -0
- package/dist/flow/model.js.map +1 -0
- package/dist/flow/node.d.ts +429 -0
- package/dist/flow/node.d.ts.map +1 -0
- package/dist/flow/node.js +3025 -0
- package/dist/flow/node.js.map +1 -0
- package/dist/flow/paths.d.ts +43 -0
- package/dist/flow/paths.d.ts.map +1 -0
- package/dist/flow/paths.js +327 -0
- package/dist/flow/paths.js.map +1 -0
- package/dist/flow/types.d.ts +561 -0
- package/dist/flow/types.d.ts.map +1 -0
- package/dist/flow/types.js +2 -0
- package/dist/flow/types.js.map +1 -0
- package/dist/formula/hx.d.ts +24 -0
- package/dist/formula/hx.d.ts.map +1 -0
- package/dist/formula/hx.js +25 -0
- package/dist/formula/hx.js.map +1 -0
- package/dist/formula/index.d.ts +74 -0
- package/dist/formula/index.d.ts.map +1 -0
- package/dist/formula/index.js +155 -0
- package/dist/formula/index.js.map +1 -0
- package/dist/formula/katex.d.ts +78 -0
- package/dist/formula/katex.d.ts.map +1 -0
- package/dist/formula/katex.js +130 -0
- package/dist/formula/katex.js.map +1 -0
- package/dist/formula/layout.d.ts +103 -0
- package/dist/formula/layout.d.ts.map +1 -0
- package/dist/formula/layout.js +716 -0
- package/dist/formula/layout.js.map +1 -0
- package/dist/formula/node.d.ts +50 -0
- package/dist/formula/node.d.ts.map +1 -0
- package/dist/formula/node.js +351 -0
- package/dist/formula/node.js.map +1 -0
- package/dist/html/controls.d.ts +48 -0
- package/dist/html/controls.d.ts.map +1 -0
- package/dist/html/controls.js +195 -0
- package/dist/html/controls.js.map +1 -0
- package/dist/html/css/cascade.d.ts +51 -0
- package/dist/html/css/cascade.d.ts.map +1 -0
- package/dist/html/css/cascade.js +552 -0
- package/dist/html/css/cascade.js.map +1 -0
- package/dist/html/css/parse.d.ts +74 -0
- package/dist/html/css/parse.d.ts.map +1 -0
- package/dist/html/css/parse.js +464 -0
- package/dist/html/css/parse.js.map +1 -0
- package/dist/html/css/style.d.ts +142 -0
- package/dist/html/css/style.d.ts.map +1 -0
- package/dist/html/css/style.js +1145 -0
- package/dist/html/css/style.js.map +1 -0
- package/dist/html/css/ua.d.ts +5 -0
- package/dist/html/css/ua.d.ts.map +1 -0
- package/dist/html/css/ua.js +171 -0
- package/dist/html/css/ua.js.map +1 -0
- package/dist/html/css/values.d.ts +78 -0
- package/dist/html/css/values.d.ts.map +1 -0
- package/dist/html/css/values.js +330 -0
- package/dist/html/css/values.js.map +1 -0
- package/dist/html/dom.d.ts +112 -0
- package/dist/html/dom.d.ts.map +1 -0
- package/dist/html/dom.js +374 -0
- package/dist/html/dom.js.map +1 -0
- package/dist/html/hx.d.ts +24 -0
- package/dist/html/hx.d.ts.map +1 -0
- package/dist/html/hx.js +29 -0
- package/dist/html/hx.js.map +1 -0
- package/dist/html/index.d.ts +137 -0
- package/dist/html/index.d.ts.map +1 -0
- package/dist/html/index.js +339 -0
- package/dist/html/index.js.map +1 -0
- package/dist/html/layout/block.d.ts +58 -0
- package/dist/html/layout/block.d.ts.map +1 -0
- package/dist/html/layout/block.js +724 -0
- package/dist/html/layout/block.js.map +1 -0
- package/dist/html/layout/boxes.d.ts +261 -0
- package/dist/html/layout/boxes.d.ts.map +1 -0
- package/dist/html/layout/boxes.js +725 -0
- package/dist/html/layout/boxes.js.map +1 -0
- package/dist/html/layout/flex.d.ts +16 -0
- package/dist/html/layout/flex.d.ts.map +1 -0
- package/dist/html/layout/flex.js +242 -0
- package/dist/html/layout/flex.js.map +1 -0
- package/dist/html/layout/floats.d.ts +50 -0
- package/dist/html/layout/floats.d.ts.map +1 -0
- package/dist/html/layout/floats.js +110 -0
- package/dist/html/layout/floats.js.map +1 -0
- package/dist/html/layout/inline.d.ts +44 -0
- package/dist/html/layout/inline.d.ts.map +1 -0
- package/dist/html/layout/inline.js +700 -0
- package/dist/html/layout/inline.js.map +1 -0
- package/dist/html/layout/table.d.ts +5 -0
- package/dist/html/layout/table.d.ts.map +1 -0
- package/dist/html/layout/table.js +340 -0
- package/dist/html/layout/table.js.map +1 -0
- package/dist/html/node.d.ts +149 -0
- package/dist/html/node.d.ts.map +1 -0
- package/dist/html/node.js +861 -0
- package/dist/html/node.js.map +1 -0
- package/dist/html/paint.d.ts +48 -0
- package/dist/html/paint.d.ts.map +1 -0
- package/dist/html/paint.js +495 -0
- package/dist/html/paint.js.map +1 -0
- package/dist/html/resources.d.ts +48 -0
- package/dist/html/resources.d.ts.map +1 -0
- package/dist/html/resources.js +156 -0
- package/dist/html/resources.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/heights.d.ts +88 -0
- package/dist/internal/heights.d.ts.map +1 -0
- package/dist/internal/heights.js +203 -0
- package/dist/internal/heights.js.map +1 -0
- package/dist/internal/hx.d.ts +24 -0
- package/dist/internal/hx.d.ts.map +1 -0
- package/dist/internal/hx.js +27 -0
- package/dist/internal/hx.js.map +1 -0
- package/dist/internal/scroll.d.ts +62 -0
- package/dist/internal/scroll.d.ts.map +1 -0
- package/dist/internal/scroll.js +224 -0
- package/dist/internal/scroll.js.map +1 -0
- package/dist/internal/text.d.ts +6 -0
- package/dist/internal/text.d.ts.map +1 -0
- package/dist/internal/text.js +44 -0
- package/dist/internal/text.js.map +1 -0
- package/dist/internal/timers.d.ts +8 -0
- package/dist/internal/timers.d.ts.map +1 -0
- package/dist/internal/timers.js +22 -0
- package/dist/internal/timers.js.map +1 -0
- package/dist/internal/widget.d.ts +40 -0
- package/dist/internal/widget.d.ts.map +1 -0
- package/dist/internal/widget.js +44 -0
- package/dist/internal/widget.js.map +1 -0
- package/dist/markdown/ast.d.ts +126 -0
- package/dist/markdown/ast.d.ts.map +1 -0
- package/dist/markdown/ast.js +8 -0
- package/dist/markdown/ast.js.map +1 -0
- package/dist/markdown/hx.d.ts +24 -0
- package/dist/markdown/hx.d.ts.map +1 -0
- package/dist/markdown/hx.js +25 -0
- package/dist/markdown/hx.js.map +1 -0
- package/dist/markdown/index.d.ts +90 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +413 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/parse.d.ts +8 -0
- package/dist/markdown/parse.d.ts.map +1 -0
- package/dist/markdown/parse.js +911 -0
- package/dist/markdown/parse.js.map +1 -0
- package/dist/markdown/spans.d.ts +20 -0
- package/dist/markdown/spans.d.ts.map +1 -0
- package/dist/markdown/spans.js +96 -0
- package/dist/markdown/spans.js.map +1 -0
- package/dist/media-player/backends.d.ts +64 -0
- package/dist/media-player/backends.d.ts.map +1 -0
- package/dist/media-player/backends.js +110 -0
- package/dist/media-player/backends.js.map +1 -0
- package/dist/media-player/control.d.ts +40 -0
- package/dist/media-player/control.d.ts.map +1 -0
- package/dist/media-player/control.js +44 -0
- package/dist/media-player/control.js.map +1 -0
- package/dist/media-player/hx.d.ts +24 -0
- package/dist/media-player/hx.d.ts.map +1 -0
- package/dist/media-player/hx.js +25 -0
- package/dist/media-player/hx.js.map +1 -0
- package/dist/media-player/index.d.ts +107 -0
- package/dist/media-player/index.d.ts.map +1 -0
- package/dist/media-player/index.js +219 -0
- package/dist/media-player/index.js.map +1 -0
- package/dist/media-player/mpv.d.ts +4 -0
- package/dist/media-player/mpv.d.ts.map +1 -0
- package/dist/media-player/mpv.js +120 -0
- package/dist/media-player/mpv.js.map +1 -0
- package/dist/media-player/vlc.d.ts +8 -0
- package/dist/media-player/vlc.d.ts.map +1 -0
- package/dist/media-player/vlc.js +83 -0
- package/dist/media-player/vlc.js.map +1 -0
- package/dist/richtext/index.d.ts +19 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +4 -0
- package/dist/richtext/index.js.map +1 -0
- package/dist/richtext/links.d.ts +12 -0
- package/dist/richtext/links.d.ts.map +1 -0
- package/dist/richtext/links.js +64 -0
- package/dist/richtext/links.js.map +1 -0
- package/dist/richtext/menu.d.ts +11 -0
- package/dist/richtext/menu.d.ts.map +1 -0
- package/dist/richtext/menu.js +43 -0
- package/dist/richtext/menu.js.map +1 -0
- package/dist/richtext/node.d.ts +151 -0
- package/dist/richtext/node.d.ts.map +1 -0
- package/dist/richtext/node.js +255 -0
- package/dist/richtext/node.js.map +1 -0
- package/dist/richtext/runs.d.ts +92 -0
- package/dist/richtext/runs.d.ts.map +1 -0
- package/dist/richtext/runs.js +158 -0
- package/dist/richtext/runs.js.map +1 -0
- package/dist/table/hx.d.ts +24 -0
- package/dist/table/hx.d.ts.map +1 -0
- package/dist/table/hx.js +25 -0
- package/dist/table/hx.js.map +1 -0
- package/dist/table/index.d.ts +169 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +890 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/rows.d.ts +136 -0
- package/dist/table/rows.d.ts.map +1 -0
- package/dist/table/rows.js +146 -0
- package/dist/table/rows.js.map +1 -0
- package/dist/terminal/backends.d.ts +105 -0
- package/dist/terminal/backends.d.ts.map +1 -0
- package/dist/terminal/backends.js +185 -0
- package/dist/terminal/backends.js.map +1 -0
- package/dist/terminal/hx.d.ts +24 -0
- package/dist/terminal/hx.d.ts.map +1 -0
- package/dist/terminal/hx.js +25 -0
- package/dist/terminal/hx.js.map +1 -0
- package/dist/terminal/index.d.ts +160 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +344 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/title.d.ts +24 -0
- package/dist/terminal/title.d.ts.map +1 -0
- package/dist/terminal/title.js +129 -0
- package/dist/terminal/title.js.map +1 -0
- package/dist/terminal/vt/colors.d.ts +63 -0
- package/dist/terminal/vt/colors.d.ts.map +1 -0
- package/dist/terminal/vt/colors.js +203 -0
- package/dist/terminal/vt/colors.js.map +1 -0
- package/dist/terminal/vt/diff.d.ts +117 -0
- package/dist/terminal/vt/diff.d.ts.map +1 -0
- package/dist/terminal/vt/diff.js +358 -0
- package/dist/terminal/vt/diff.js.map +1 -0
- package/dist/terminal/vt/fonts.d.ts +92 -0
- package/dist/terminal/vt/fonts.d.ts.map +1 -0
- package/dist/terminal/vt/fonts.js +178 -0
- package/dist/terminal/vt/fonts.js.map +1 -0
- package/dist/terminal/vt/index.d.ts +78 -0
- package/dist/terminal/vt/index.d.ts.map +1 -0
- package/dist/terminal/vt/index.js +312 -0
- package/dist/terminal/vt/index.js.map +1 -0
- package/dist/terminal/vt/keys.d.ts +74 -0
- package/dist/terminal/vt/keys.d.ts.map +1 -0
- package/dist/terminal/vt/keys.js +309 -0
- package/dist/terminal/vt/keys.js.map +1 -0
- package/dist/terminal/vt/mouse.d.ts +44 -0
- package/dist/terminal/vt/mouse.d.ts.map +1 -0
- package/dist/terminal/vt/mouse.js +106 -0
- package/dist/terminal/vt/mouse.js.map +1 -0
- package/dist/terminal/vt/node.d.ts +246 -0
- package/dist/terminal/vt/node.d.ts.map +1 -0
- package/dist/terminal/vt/node.js +1068 -0
- package/dist/terminal/vt/node.js.map +1 -0
- package/dist/terminal/vt/pty.d.ts +81 -0
- package/dist/terminal/vt/pty.d.ts.map +1 -0
- package/dist/terminal/vt/pty.js +201 -0
- package/dist/terminal/vt/pty.js.map +1 -0
- package/dist/terminal/vt/renderer.d.ts +179 -0
- package/dist/terminal/vt/renderer.d.ts.map +1 -0
- package/dist/terminal/vt/renderer.js +357 -0
- package/dist/terminal/vt/renderer.js.map +1 -0
- package/dist/terminal/vt/timers.d.ts +6 -0
- package/dist/terminal/vt/timers.d.ts.map +1 -0
- package/dist/terminal/vt/timers.js +16 -0
- package/dist/terminal/vt/timers.js.map +1 -0
- package/dist/terminal/vt/xterm.d.ts +142 -0
- package/dist/terminal/vt/xterm.d.ts.map +1 -0
- package/dist/terminal/vt/xterm.js +32 -0
- package/dist/terminal/vt/xterm.js.map +1 -0
- package/dist/terminal-output/hx.d.ts +24 -0
- package/dist/terminal-output/hx.d.ts.map +1 -0
- package/dist/terminal-output/hx.js +25 -0
- package/dist/terminal-output/hx.js.map +1 -0
- package/dist/terminal-output/index.d.ts +92 -0
- package/dist/terminal-output/index.d.ts.map +1 -0
- package/dist/terminal-output/index.js +179 -0
- package/dist/terminal-output/index.js.map +1 -0
- package/dist/terminal-output/runs.d.ts +27 -0
- package/dist/terminal-output/runs.d.ts.map +1 -0
- package/dist/terminal-output/runs.js +66 -0
- package/dist/terminal-output/runs.js.map +1 -0
- package/dist/three/canvas.d.ts +46 -0
- package/dist/three/canvas.d.ts.map +1 -0
- package/dist/three/canvas.js +305 -0
- package/dist/three/canvas.js.map +1 -0
- package/dist/three/events.d.ts +64 -0
- package/dist/three/events.d.ts.map +1 -0
- package/dist/three/events.js +146 -0
- package/dist/three/events.js.map +1 -0
- package/dist/three/geometries.d.ts +89 -0
- package/dist/three/geometries.d.ts.map +1 -0
- package/dist/three/geometries.js +345 -0
- package/dist/three/geometries.js.map +1 -0
- package/dist/three/globals.d.ts +7 -0
- package/dist/three/globals.d.ts.map +1 -0
- package/dist/three/globals.js +20 -0
- package/dist/three/globals.js.map +1 -0
- package/dist/three/hx.d.ts +9 -0
- package/dist/three/hx.d.ts.map +1 -0
- package/dist/three/hx.js +10 -0
- package/dist/three/hx.js.map +1 -0
- package/dist/three/index.d.ts +22 -0
- package/dist/three/index.d.ts.map +1 -0
- package/dist/three/index.js +24 -0
- package/dist/three/index.js.map +1 -0
- package/dist/three/jsx-dev-runtime.d.ts +19 -0
- package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/three/jsx-dev-runtime.js +2 -0
- package/dist/three/jsx-dev-runtime.js.map +1 -0
- package/dist/three/jsx-runtime.d.ts +19 -0
- package/dist/three/jsx-runtime.d.ts.map +1 -0
- package/dist/three/jsx-runtime.js +2 -0
- package/dist/three/jsx-runtime.js.map +1 -0
- package/dist/three/jsx.d.ts +198 -0
- package/dist/three/jsx.d.ts.map +1 -0
- package/dist/three/jsx.js +2 -0
- package/dist/three/jsx.js.map +1 -0
- package/dist/three/materials.d.ts +125 -0
- package/dist/three/materials.d.ts.map +1 -0
- package/dist/three/materials.js +229 -0
- package/dist/three/materials.js.map +1 -0
- package/dist/three/math.d.ts +146 -0
- package/dist/three/math.d.ts.map +1 -0
- package/dist/three/math.js +464 -0
- package/dist/three/math.js.map +1 -0
- package/dist/three/objects.d.ts +185 -0
- package/dist/three/objects.d.ts.map +1 -0
- package/dist/three/objects.js +309 -0
- package/dist/three/objects.js.map +1 -0
- package/dist/three/passes.d.ts +54 -0
- package/dist/three/passes.d.ts.map +1 -0
- package/dist/three/passes.js +78 -0
- package/dist/three/passes.js.map +1 -0
- package/dist/three/postprocess.d.ts +85 -0
- package/dist/three/postprocess.d.ts.map +1 -0
- package/dist/three/postprocess.js +503 -0
- package/dist/three/postprocess.js.map +1 -0
- package/dist/three/raycast.d.ts +24 -0
- package/dist/three/raycast.d.ts.map +1 -0
- package/dist/three/raycast.js +138 -0
- package/dist/three/raycast.js.map +1 -0
- package/dist/three/reconciler.d.ts +48 -0
- package/dist/three/reconciler.d.ts.map +1 -0
- package/dist/three/reconciler.js +416 -0
- package/dist/three/reconciler.js.map +1 -0
- package/dist/three/renderer-direct.d.ts +102 -0
- package/dist/three/renderer-direct.d.ts.map +1 -0
- package/dist/three/renderer-direct.js +782 -0
- package/dist/three/renderer-direct.js.map +1 -0
- package/dist/three/renderer-indirect.d.ts +68 -0
- package/dist/three/renderer-indirect.d.ts.map +1 -0
- package/dist/three/renderer-indirect.js +438 -0
- package/dist/three/renderer-indirect.js.map +1 -0
- package/dist/three/store.d.ts +81 -0
- package/dist/three/store.d.ts.map +1 -0
- package/dist/three/store.js +110 -0
- package/dist/three/store.js.map +1 -0
- package/dist/timeline/hx.d.ts +18 -0
- package/dist/timeline/hx.d.ts.map +1 -0
- package/dist/timeline/hx.js +10 -0
- package/dist/timeline/hx.js.map +1 -0
- package/dist/timeline/index.d.ts +152 -0
- package/dist/timeline/index.d.ts.map +1 -0
- package/dist/timeline/index.js +383 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/tray-host/hx.d.ts +24 -0
- package/dist/tray-host/hx.d.ts.map +1 -0
- package/dist/tray-host/hx.js +25 -0
- package/dist/tray-host/hx.js.map +1 -0
- package/dist/tray-host/index.d.ts +110 -0
- package/dist/tray-host/index.d.ts.map +1 -0
- package/dist/tray-host/index.js +191 -0
- package/dist/tray-host/index.js.map +1 -0
- package/dist/tray-host/manager.d.ts +137 -0
- package/dist/tray-host/manager.d.ts.map +1 -0
- package/dist/tray-host/manager.js +462 -0
- package/dist/tray-host/manager.js.map +1 -0
- package/dist/tray-host/notify.d.ts +22 -0
- package/dist/tray-host/notify.d.ts.map +1 -0
- package/dist/tray-host/notify.js +74 -0
- package/dist/tray-host/notify.js.map +1 -0
- package/dist/tray-host/protocol.d.ts +106 -0
- package/dist/tray-host/protocol.d.ts.map +1 -0
- package/dist/tray-host/protocol.js +191 -0
- package/dist/tray-host/protocol.js.map +1 -0
- package/dist/tree/hx.d.ts +24 -0
- package/dist/tree/hx.d.ts.map +1 -0
- package/dist/tree/hx.js +25 -0
- package/dist/tree/hx.js.map +1 -0
- package/dist/tree/index.d.ts +221 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +751 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/internal.d.ts +18 -0
- package/dist/tree/internal.d.ts.map +1 -0
- package/dist/tree/internal.js +66 -0
- package/dist/tree/internal.js.map +1 -0
- package/dist/tree/rows.d.ts +177 -0
- package/dist/tree/rows.d.ts.map +1 -0
- package/dist/tree/rows.js +179 -0
- package/dist/tree/rows.js.map +1 -0
- package/package.json +166 -12
- package/src/ansi/cast.ts +159 -0
- package/src/ansi/index.ts +53 -0
- package/src/ansi/palette.ts +226 -0
- package/src/ansi/parse.ts +780 -0
- package/src/ansi/sgr.ts +380 -0
- package/src/ansi/utf8.ts +84 -0
- package/src/calendar/Calendar.ts +744 -0
- package/src/calendar/DatePicker.ts +368 -0
- package/src/calendar/dates.ts +307 -0
- package/src/calendar/index.ts +51 -0
- package/src/charts/components.ts +864 -0
- package/src/charts/data.ts +776 -0
- package/src/charts/hx.ts +39 -0
- package/src/charts/index.ts +99 -0
- package/src/charts/node.ts +932 -0
- package/src/charts/render.ts +982 -0
- package/src/charts/scale.ts +214 -0
- package/src/charts/spec.ts +122 -0
- package/src/charts/timers.ts +24 -0
- package/src/code/hx.ts +51 -0
- package/src/code/index.ts +174 -0
- package/src/code-editor/completion.ts +161 -0
- package/src/code-editor/doc.ts +198 -0
- package/src/code-editor/hx.ts +26 -0
- package/src/code-editor/index.ts +615 -0
- package/src/code-editor/node.ts +1926 -0
- package/src/code-language/hljs.ts +302 -0
- package/src/code-language/index.ts +51 -0
- package/src/code-language/languages/glsl.ts +120 -0
- package/src/code-language/languages/javascript.ts +419 -0
- package/src/code-language/languages/json.ts +72 -0
- package/src/code-language/languages/shell.ts +221 -0
- package/src/code-language/languages/sql.ts +165 -0
- package/src/code-language/lezer.ts +190 -0
- package/src/code-language/registry.ts +66 -0
- package/src/code-language/runs.ts +128 -0
- package/src/code-language/stream.ts +306 -0
- package/src/code-language/textmate.ts +134 -0
- package/src/code-language/theme.ts +124 -0
- package/src/code-language/timers.ts +36 -0
- package/src/code-language/types.ts +252 -0
- package/src/codeblock/index.ts +146 -0
- package/src/color-picker/ColorField.ts +333 -0
- package/src/color-picker/ColorPicker.ts +1069 -0
- package/src/color-picker/color.ts +399 -0
- package/src/color-picker/index.ts +50 -0
- package/src/desktop-calendar/eds.ts +484 -0
- package/src/desktop-calendar/ical.ts +119 -0
- package/src/desktop-calendar/index.ts +287 -0
- package/src/embed/client.ts +311 -0
- package/src/embed/host.ts +432 -0
- package/src/embed/index.ts +33 -0
- package/src/embed/timers.ts +32 -0
- package/src/flow/draw.ts +418 -0
- package/src/flow/index.ts +473 -0
- package/src/flow/model.ts +687 -0
- package/src/flow/node.ts +3694 -0
- package/src/flow/paths.ts +403 -0
- package/src/flow/types.ts +634 -0
- package/src/formula/hx.ts +51 -0
- package/src/formula/index.ts +243 -0
- package/src/formula/katex.ts +209 -0
- package/src/formula/layout.ts +876 -0
- package/src/formula/node.ts +467 -0
- package/src/html/controls.ts +244 -0
- package/src/html/css/cascade.ts +606 -0
- package/src/html/css/parse.ts +500 -0
- package/src/html/css/style.ts +1371 -0
- package/src/html/css/ua.ts +174 -0
- package/src/html/css/values.ts +358 -0
- package/src/html/dom.ts +410 -0
- package/src/html/hx.ts +55 -0
- package/src/html/index.ts +545 -0
- package/src/html/layout/block.ts +876 -0
- package/src/html/layout/boxes.ts +981 -0
- package/src/html/layout/flex.ts +297 -0
- package/src/html/layout/floats.ts +125 -0
- package/src/html/layout/inline.ts +870 -0
- package/src/html/layout/table.ts +380 -0
- package/src/html/node.ts +967 -0
- package/src/html/paint.ts +605 -0
- package/src/html/resources.ts +214 -0
- package/src/index.ts +638 -0
- package/src/internal/heights.ts +222 -0
- package/src/internal/hx.ts +53 -0
- package/src/internal/scroll.ts +288 -0
- package/src/internal/text.ts +44 -0
- package/src/internal/timers.ts +44 -0
- package/src/internal/widget.ts +92 -0
- package/src/markdown/ast.ts +163 -0
- package/src/markdown/hx.ts +51 -0
- package/src/markdown/index.ts +686 -0
- package/src/markdown/parse.ts +1037 -0
- package/src/markdown/spans.ts +143 -0
- package/src/media-player/backends.ts +155 -0
- package/src/media-player/control.ts +70 -0
- package/src/media-player/hx.ts +51 -0
- package/src/media-player/index.ts +378 -0
- package/src/media-player/mpv.ts +146 -0
- package/src/media-player/vlc.ts +97 -0
- package/src/richtext/index.ts +42 -0
- package/src/richtext/links.ts +78 -0
- package/src/richtext/menu.ts +49 -0
- package/src/richtext/node.ts +406 -0
- package/src/richtext/runs.ts +253 -0
- package/src/table/hx.ts +51 -0
- package/src/table/index.ts +1270 -0
- package/src/table/rows.ts +275 -0
- package/src/terminal/backends.ts +242 -0
- package/src/terminal/hx.ts +51 -0
- package/src/terminal/index.ts +574 -0
- package/src/terminal/title.ts +172 -0
- package/src/terminal/vt/colors.ts +247 -0
- package/src/terminal/vt/diff.ts +467 -0
- package/src/terminal/vt/fonts.ts +233 -0
- package/src/terminal/vt/index.ts +443 -0
- package/src/terminal/vt/keys.ts +369 -0
- package/src/terminal/vt/mouse.ts +144 -0
- package/src/terminal/vt/node.ts +1242 -0
- package/src/terminal/vt/pty.ts +334 -0
- package/src/terminal/vt/renderer.ts +555 -0
- package/src/terminal/vt/timers.ts +31 -0
- package/src/terminal/vt/xterm.ts +193 -0
- package/src/terminal-output/hx.ts +51 -0
- package/src/terminal-output/index.ts +340 -0
- package/src/terminal-output/runs.ts +79 -0
- package/src/three/canvas.ts +451 -0
- package/src/three/events.ts +197 -0
- package/src/three/geometries.ts +429 -0
- package/src/three/globals.ts +34 -0
- package/src/three/hx.ts +22 -0
- package/src/three/index.ts +98 -0
- package/src/three/jsx-dev-runtime.ts +27 -0
- package/src/three/jsx-runtime.ts +38 -0
- package/src/three/jsx.ts +275 -0
- package/src/three/materials.ts +270 -0
- package/src/three/math.ts +585 -0
- package/src/three/objects.ts +397 -0
- package/src/three/passes.ts +90 -0
- package/src/three/postprocess.ts +677 -0
- package/src/three/raycast.ts +189 -0
- package/src/three/react-reconciler.d.ts +50 -0
- package/src/three/reconciler.ts +624 -0
- package/src/three/renderer-direct.ts +1055 -0
- package/src/three/renderer-indirect.ts +570 -0
- package/src/three/store.ts +207 -0
- package/src/timeline/hx.ts +31 -0
- package/src/timeline/index.ts +603 -0
- package/src/tray-host/hx.ts +51 -0
- package/src/tray-host/index.ts +331 -0
- package/src/tray-host/manager.ts +639 -0
- package/src/tray-host/notify.ts +102 -0
- package/src/tray-host/protocol.ts +235 -0
- package/src/tree/hx.ts +51 -0
- package/src/tree/index.ts +1127 -0
- package/src/tree/internal.ts +87 -0
- package/src/tree/rows.ts +334 -0
- package/src/index.d.ts +0 -2
- package/src/index.js +0 -9
- package/src/sparkline/index.d.ts +0 -29
- package/src/sparkline/index.js +0 -50
- package/src/sparkline/node.js +0 -72
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
// Following a link in a document.
|
|
2
|
+
//
|
|
3
|
+
// The only part of the old gesture hook that survived react-x11#291: core
|
|
4
|
+
// selects, copies and takes PRIMARY on its own now, but it left hover and
|
|
5
|
+
// `cursorAt` out deliberately, so which run is a link and what a click on
|
|
6
|
+
// one means are still this package's to answer.
|
|
7
|
+
//
|
|
8
|
+
// It lived in `../markdown/` until `<TerminalOutput>` needed it for OSC 8
|
|
9
|
+
// hyperlinks, and it moved here rather than being copied: there is no
|
|
10
|
+
// markdown in it at all. It is about `TextRun.href` and `hrefAtPoint`, both
|
|
11
|
+
// of which are this module's — the same "extract when the second consumer
|
|
12
|
+
// arrives" move `../codeblock/` was.
|
|
13
|
+
//
|
|
14
|
+
// The third consumer, `<Html>`, is what made the node test structural: it
|
|
15
|
+
// answers `hrefAtPoint` from a document it laid out itself and is not a
|
|
16
|
+
// `RichTextNode`. Asking for the method rather than the class is also what
|
|
17
|
+
// keeps this module from importing `node.ts`, so a surface that wants link
|
|
18
|
+
// clicks and nothing else does not pull the element in behind them.
|
|
19
|
+
//
|
|
20
|
+
// The whole problem is that a press on a link is also the start of a drag,
|
|
21
|
+
// and the two are told apart only at the release: a pointer that has barely
|
|
22
|
+
// moved and left nothing selected was a click, and anything else was a
|
|
23
|
+
// selection that happened to begin on a link. These handlers never call
|
|
24
|
+
// `preventDefault`, so core's own selection still runs after them.
|
|
25
|
+
import { useRef } from 'react';
|
|
26
|
+
/** How far the pointer may travel and still count as a click, in pixels. */
|
|
27
|
+
const CLICK_SLOP = 3;
|
|
28
|
+
/**
|
|
29
|
+
* Mouse handlers for a document root that follows links. Returns handlers
|
|
30
|
+
* that do nothing when `onLink` is absent — the component never navigates by
|
|
31
|
+
* itself, and a document with no handler simply has inert link text.
|
|
32
|
+
*/
|
|
33
|
+
export function useLinkClicks(onLink) {
|
|
34
|
+
const press = useRef(null);
|
|
35
|
+
return {
|
|
36
|
+
onMouseDown: (ev) => {
|
|
37
|
+
press.current = null;
|
|
38
|
+
if (!onLink || ev.button !== 1)
|
|
39
|
+
return;
|
|
40
|
+
const target = ev.target;
|
|
41
|
+
const href = typeof target?.hrefAtPoint === 'function'
|
|
42
|
+
? target.hrefAtPoint(ev.x, ev.y)
|
|
43
|
+
: null;
|
|
44
|
+
if (href != null)
|
|
45
|
+
press.current = { x: ev.x, y: ev.y, href };
|
|
46
|
+
},
|
|
47
|
+
onMouseUp: (ev) => {
|
|
48
|
+
const start = press.current;
|
|
49
|
+
press.current = null;
|
|
50
|
+
if (!onLink || !start || ev.button !== 1)
|
|
51
|
+
return;
|
|
52
|
+
if (Math.abs(ev.x - start.x) > CLICK_SLOP ||
|
|
53
|
+
Math.abs(ev.y - start.y) > CLICK_SLOP) {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
// a drag that ended where it began still selected something; that was
|
|
57
|
+
// a selection gesture, not a click
|
|
58
|
+
if (!(ev.currentTarget?.textSelection?.isCollapsed ?? true))
|
|
59
|
+
return;
|
|
60
|
+
onLink(start.href, ev);
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=links.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"links.js","sourceRoot":"","sources":["../../src/richtext/links.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,EAAE;AACF,0EAA0E;AAC1E,0EAA0E;AAC1E,0EAA0E;AAC1E,gDAAgD;AAChD,EAAE;AACF,0EAA0E;AAC1E,sEAAsE;AACtE,4EAA4E;AAC5E,0EAA0E;AAC1E,qCAAqC;AACrC,EAAE;AACF,0EAA0E;AAC1E,wEAAwE;AACxE,2EAA2E;AAC3E,2EAA2E;AAC3E,oEAAoE;AACpE,EAAE;AACF,2EAA2E;AAC3E,4EAA4E;AAC5E,uEAAuE;AACvE,wEAAwE;AACxE,mEAAmE;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAS/B,4EAA4E;AAC5E,MAAM,UAAU,GAAG,CAAC,CAAC;AAOrB;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAA6D;IAE7D,MAAM,KAAK,GAAG,MAAM,CAAgD,IAAI,CAAC,CAAC;IAC1E,OAAO;QACL,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE;YAClB,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACvC,MAAM,MAAM,GAAG,EAAE,CAAC,MAA2B,CAAC;YAC9C,MAAM,IAAI,GACR,OAAO,MAAM,EAAE,WAAW,KAAK,UAAU;gBACvC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;gBAChC,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,IAAI,IAAI,IAAI;gBAAE,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QAC/D,CAAC;QACD,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC;YAC5B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACjD,IACE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU;gBACrC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,EACrC,CAAC;gBACD,OAAO;YACT,CAAC;YACD,sEAAsE;YACtE,mCAAmC;YACnC,IAAI,CAAC,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,IAAI,IAAI,CAAC;gBAAE,OAAO;YACpE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
|
|
2
|
+
export interface SelectionMenuHandlers {
|
|
3
|
+
onContextMenu: (ev: X11MouseEvent<DrawnNode>) => void;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* The context-menu handler for a `selectable` root. Spread onto the same
|
|
7
|
+
* `<box>` the `selectable` prop is on — the menu's verbs are read off that
|
|
8
|
+
* node, which is the surface.
|
|
9
|
+
*/
|
|
10
|
+
export declare function useSelectionMenu(enabled?: boolean): SelectionMenuHandlers;
|
|
11
|
+
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/richtext/menu.ts"],"names":[],"mappings":"AAcA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,IAAI,aAAa,EAAE,MAAM,WAAW,CAAC;AAExE,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,CAAC,EAAE,EAAE,aAAa,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;CACvD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,UAAO,GAAG,qBAAqB,CAuBtE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
// Right-click on a selectable surface.
|
|
2
|
+
//
|
|
3
|
+
// Core selects, copies and takes PRIMARY by itself (react-x11#291), and it
|
|
4
|
+
// opens the standard edit menu by itself for `<textinput>` — but a
|
|
5
|
+
// `selectable` surface has no default context menu, because which verbs a
|
|
6
|
+
// surface offers is the surface's to say. A read-only document offers two:
|
|
7
|
+
// Copy, and Select all.
|
|
8
|
+
//
|
|
9
|
+
// `openEditMenu` is core's own (react-x11#289), so what is left here is the
|
|
10
|
+
// verb list. Everything else about the menu — which rows are enabled, Paste
|
|
11
|
+
// watching selection ownership rather than asking the server, the arrow
|
|
12
|
+
// keys, Escape, the pointer grab that dismisses it, handing the keyboard
|
|
13
|
+
// back afterwards — is core's and shared with the field.
|
|
14
|
+
import { openEditMenu, useClipboard } from 'react-x11';
|
|
15
|
+
/**
|
|
16
|
+
* The context-menu handler for a `selectable` root. Spread onto the same
|
|
17
|
+
* `<box>` the `selectable` prop is on — the menu's verbs are read off that
|
|
18
|
+
* node, which is the surface.
|
|
19
|
+
*/
|
|
20
|
+
export function useSelectionMenu(enabled = true) {
|
|
21
|
+
const clipboard = useClipboard();
|
|
22
|
+
return {
|
|
23
|
+
onContextMenu: (ev) => {
|
|
24
|
+
if (!enabled)
|
|
25
|
+
return;
|
|
26
|
+
const surface = ev.currentTarget;
|
|
27
|
+
if (!surface)
|
|
28
|
+
return;
|
|
29
|
+
openEditMenu(surface, { x: ev.x, y: ev.y }, {
|
|
30
|
+
// A verb left out is a row that is not there rather than a greyed
|
|
31
|
+
// one, so a read-only surface simply never mentions Cut or Paste.
|
|
32
|
+
hasSelection: !(surface.textSelection?.isCollapsed ?? true),
|
|
33
|
+
copy: () => {
|
|
34
|
+
const text = surface.selectedText();
|
|
35
|
+
if (text)
|
|
36
|
+
clipboard.write(text).catch(() => { });
|
|
37
|
+
},
|
|
38
|
+
selectAll: () => surface.selectAll(),
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/richtext/menu.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,0EAA0E;AAC1E,2EAA2E;AAC3E,wBAAwB;AACxB,EAAE;AACF,4EAA4E;AAC5E,4EAA4E;AAC5E,wEAAwE;AACxE,yEAAyE;AACzE,yDAAyD;AACzD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAOvD;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAO,GAAG,IAAI;IAC7C,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,OAAO;QACL,aAAa,EAAE,CAAC,EAAE,EAAE,EAAE;YACpB,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;YACjC,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,YAAY,CACV,OAAO,EACP,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,EACpB;gBACE,kEAAkE;gBAClE,kEAAkE;gBAClE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,WAAW,IAAI,IAAI,CAAC;gBAC3D,IAAI,EAAE,GAAG,EAAE;oBACT,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;oBACpC,IAAI,IAAI;wBAAE,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAClD,CAAC;gBACD,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,EAAE;aACrC,CACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Node } from 'react-x11/node';
|
|
2
|
+
import type { Context2D, MeasureConstraints, MeasuredSize } from 'react-x11/node';
|
|
3
|
+
import type { Rect } from 'react-x11';
|
|
4
|
+
import type { Style } from 'react-x11/style';
|
|
5
|
+
/** The element name — registration key, `node.kind` and JSX tag alike. */
|
|
6
|
+
export declare const ELEMENT = "richtext";
|
|
7
|
+
/**
|
|
8
|
+
* Register `<richtext>`. Called at module scope by every component index
|
|
9
|
+
* that renders the element — never at this module's own scope, so the
|
|
10
|
+
* shared module stays side-effect free. Idempotent on purpose:
|
|
11
|
+
* `registerElement` throws on a second registration without `override`,
|
|
12
|
+
* which is the right default for two *packages* fighting over a name — but a
|
|
13
|
+
* lockfile skew that puts two copies of this package in one app should not
|
|
14
|
+
* fail to boot over it.
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerRichText(): void;
|
|
17
|
+
/** The ntk connection a node is built against. Derived from `Node`'s own
|
|
18
|
+
* constructor rather than named, so it cannot drift from core's. */
|
|
19
|
+
export type NtkApp = ConstructorParameters<typeof Node>[2];
|
|
20
|
+
/**
|
|
21
|
+
* One styled run. `text`/`family`/`size`/`weight`/`style`/`color` are
|
|
22
|
+
* ntk-span vocabulary and pass straight through to `fonts.layout`; the
|
|
23
|
+
* rest ride along unread by ntk and come back on the laid-out runs, which
|
|
24
|
+
* is how the paint pass knows where code backgrounds, link underlines and
|
|
25
|
+
* strikethroughs go (the same trick ntk's own MarkdownView used).
|
|
26
|
+
*/
|
|
27
|
+
export interface TextRun {
|
|
28
|
+
text: string;
|
|
29
|
+
family?: string;
|
|
30
|
+
size?: number;
|
|
31
|
+
weight?: number | 'normal' | 'bold';
|
|
32
|
+
style?: 'normal' | 'italic';
|
|
33
|
+
color?: string;
|
|
34
|
+
/** Fill painted behind the run — the inline-code chip. */
|
|
35
|
+
bg?: string;
|
|
36
|
+
/**
|
|
37
|
+
* How `bg` is painted. `'chip'` (the default) insets the fill to the run's
|
|
38
|
+
* ink and pads it slightly, which is what an inline-code background wants.
|
|
39
|
+
*
|
|
40
|
+
* `'line'` fills the run's exact width and the line's full height instead,
|
|
41
|
+
* so adjacent runs abut with no seam and no bleed — what a terminal's
|
|
42
|
+
* background colours need, where a two-pixel overhang would paint over the
|
|
43
|
+
* neighbouring cell and a fill that stops at the descender would leave a
|
|
44
|
+
* gap between rows.
|
|
45
|
+
*/
|
|
46
|
+
bgFill?: 'chip' | 'line';
|
|
47
|
+
/** 1px rule under the baseline, in this colour — links. */
|
|
48
|
+
underline?: string;
|
|
49
|
+
/** The rule `underline` draws. Default `'single'`; the rest are SGR 4's
|
|
50
|
+
* sub-parameters, which a captured terminal session carries. Ignored
|
|
51
|
+
* without `underline`, which is what says the rule exists at all. */
|
|
52
|
+
underlineStyle?: 'single' | 'double' | 'curly' | 'dotted' | 'dashed';
|
|
53
|
+
/** 1px rule through the x-height, in this colour — `~~del~~`. */
|
|
54
|
+
strike?: string;
|
|
55
|
+
/** Link target. `null` is a link still streaming in (not clickable). */
|
|
56
|
+
href?: string | null;
|
|
57
|
+
}
|
|
58
|
+
/** The props `<richtext>` takes. */
|
|
59
|
+
export interface RichTextProps {
|
|
60
|
+
/** The styled runs. Give a stable array identity — the layout cache and
|
|
61
|
+
* the streaming path both key off it. */
|
|
62
|
+
runs: TextRun[];
|
|
63
|
+
/** False lays the text out at its natural width, unwrapped — code. */
|
|
64
|
+
wrap?: boolean;
|
|
65
|
+
style?: Style | Style[];
|
|
66
|
+
}
|
|
67
|
+
interface FontMetricsLike {
|
|
68
|
+
ascent: number;
|
|
69
|
+
descent: number;
|
|
70
|
+
}
|
|
71
|
+
interface LaidRunLike {
|
|
72
|
+
x: number;
|
|
73
|
+
width: number;
|
|
74
|
+
/** Extent within the paragraph, in **code units** (ntk's run vocabulary). */
|
|
75
|
+
start: number;
|
|
76
|
+
end: number;
|
|
77
|
+
span: TextRun;
|
|
78
|
+
run: {
|
|
79
|
+
font: {
|
|
80
|
+
metrics(size: number): FontMetricsLike;
|
|
81
|
+
};
|
|
82
|
+
size: number;
|
|
83
|
+
direction?: 'ltr' | 'rtl';
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
interface LineLike {
|
|
87
|
+
x: number;
|
|
88
|
+
y: number;
|
|
89
|
+
height: number;
|
|
90
|
+
baseline: number;
|
|
91
|
+
width: number;
|
|
92
|
+
ascent: number;
|
|
93
|
+
descent: number;
|
|
94
|
+
/** The line's extent, in code units, like its runs'. */
|
|
95
|
+
start: number;
|
|
96
|
+
end: number;
|
|
97
|
+
runs: LaidRunLike[];
|
|
98
|
+
}
|
|
99
|
+
export interface TextLayoutLike {
|
|
100
|
+
width: number;
|
|
101
|
+
height: number;
|
|
102
|
+
lines: LineLike[];
|
|
103
|
+
draw(ctx: unknown, x?: number, y?: number): void;
|
|
104
|
+
caretPosition(index: number): {
|
|
105
|
+
x: number;
|
|
106
|
+
y: number;
|
|
107
|
+
height: number;
|
|
108
|
+
line: number;
|
|
109
|
+
};
|
|
110
|
+
indexAt(x: number, y: number): number;
|
|
111
|
+
}
|
|
112
|
+
export declare class RichTextNode extends Node {
|
|
113
|
+
private _layouts;
|
|
114
|
+
private _text;
|
|
115
|
+
constructor(props: Record<string, unknown>, app: NtkApp);
|
|
116
|
+
/**
|
|
117
|
+
* The size the laid-out runs come to. An unbounded axis arrives as
|
|
118
|
+
* `Infinity`, which is also what `wrap={false}` wants, so the wrap flag is
|
|
119
|
+
* the only branch left — and an answer wider than the offer overflows
|
|
120
|
+
* rather than being clamped, which is what makes a non-wrapping run
|
|
121
|
+
* scrollable inside its parent. `null` is the mock backend, where there is
|
|
122
|
+
* no font manager to measure through.
|
|
123
|
+
*/
|
|
124
|
+
measureContent({ width }: MeasureConstraints): MeasuredSize;
|
|
125
|
+
private _runs;
|
|
126
|
+
/**
|
|
127
|
+
* Lay the runs out at a width, memoized. The mock backend's app has no
|
|
128
|
+
* font manager; every caller treats `null` as "skip the geometry", the
|
|
129
|
+
* same convention core's rich nodes use.
|
|
130
|
+
*/
|
|
131
|
+
private _layoutFor;
|
|
132
|
+
/**
|
|
133
|
+
* The layout this node is currently painted with — and, because it is the
|
|
134
|
+
* one thing every accessor below answers from, the reason a caret rect and
|
|
135
|
+
* a glyph cannot disagree (docs/extending.md, "answer from what you draw").
|
|
136
|
+
*/
|
|
137
|
+
private _paintLayout;
|
|
138
|
+
applyProps(nextProps: Record<string, unknown>, prevProps: Record<string, unknown>): void;
|
|
139
|
+
destroySubtree(): void;
|
|
140
|
+
textContent(): string;
|
|
141
|
+
textIndexAt(x: number, y: number): number;
|
|
142
|
+
textCaretRect(index: number): Rect | null;
|
|
143
|
+
textRangeRects(start: number, end: number): Rect[];
|
|
144
|
+
/** The run's link target under a point, if any — for click-to-follow.
|
|
145
|
+
* Not part of the selection seam: core deliberately left hover and
|
|
146
|
+
* `cursorAt` out of #291, so following a link stays this package's. */
|
|
147
|
+
hrefAtPoint(x: number, y: number): string | null;
|
|
148
|
+
paint(ctx: Context2D): void;
|
|
149
|
+
}
|
|
150
|
+
export {};
|
|
151
|
+
//# sourceMappingURL=node.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/richtext/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
// The retained node behind `<richtext>` — one wrapped, styled run of inline
|
|
2
|
+
// text: a paragraph, a heading, a list item's line, a table cell, a code
|
|
3
|
+
// block. `<Markdown>` and `<Code>` compose documents out of these plus plain
|
|
4
|
+
// `<box>`es.
|
|
5
|
+
//
|
|
6
|
+
// This directory is a shared module, not a component: registration is a
|
|
7
|
+
// function (`registerRichText()`), called at module scope by each component
|
|
8
|
+
// whose index.ts uses the element, so the "a component registers its element
|
|
9
|
+
// in its own index.ts" tree-shaking rule keeps holding — an app that imports
|
|
10
|
+
// neither `<Markdown>` nor `<Code>` never registers or ships any of this.
|
|
11
|
+
//
|
|
12
|
+
// **Why the element still exists, now that core selects text.** react-x11#291
|
|
13
|
+
// gave every node the four text accessors and made `selectable` a core
|
|
14
|
+
// service, which is what this directory used to implement itself (a whole
|
|
15
|
+
// `TextSelection` controller and a gestures hook, both deleted with it). What
|
|
16
|
+
// core's `<text>` still does not do is paint *per-run decoration*: the
|
|
17
|
+
// inline-code chip's background, a link's underline, `~~del~~`'s rule — and
|
|
18
|
+
// it composes mixed styles by nesting spans rather than laying out one array
|
|
19
|
+
// of styled runs, which is the shape a markdown inline sequence and a
|
|
20
|
+
// tokenized line of code both already have. So the element is a painter that
|
|
21
|
+
// answers for its own text, which is exactly the seam docs/extending.md
|
|
22
|
+
// describes: implement the four accessors and a document selects across you,
|
|
23
|
+
// with no registration call.
|
|
24
|
+
import { registerElement, registeredElements } from 'react-x11/host';
|
|
25
|
+
import { Node } from 'react-x11/node';
|
|
26
|
+
import { canFill, lineBands, paintRunBackgrounds, paintRunRules, } from './runs.js';
|
|
27
|
+
import { codeUnitOffsets } from '../internal/text.js';
|
|
28
|
+
/** The element name — registration key, `node.kind` and JSX tag alike. */
|
|
29
|
+
export const ELEMENT = 'richtext';
|
|
30
|
+
/**
|
|
31
|
+
* Register `<richtext>`. Called at module scope by every component index
|
|
32
|
+
* that renders the element — never at this module's own scope, so the
|
|
33
|
+
* shared module stays side-effect free. Idempotent on purpose:
|
|
34
|
+
* `registerElement` throws on a second registration without `override`,
|
|
35
|
+
* which is the right default for two *packages* fighting over a name — but a
|
|
36
|
+
* lockfile skew that puts two copies of this package in one app should not
|
|
37
|
+
* fail to boot over it.
|
|
38
|
+
*/
|
|
39
|
+
export function registerRichText() {
|
|
40
|
+
if (registeredElements().includes(ELEMENT))
|
|
41
|
+
return;
|
|
42
|
+
registerElement(ELEMENT, {
|
|
43
|
+
create: (props, app) => new RichTextNode(props, app),
|
|
44
|
+
// neither is a style name today, but `wrap` reads like one — declaring
|
|
45
|
+
// everything the element owns keeps the DEV assertion honest even if
|
|
46
|
+
// core's style vocabulary grows underneath us
|
|
47
|
+
semanticNames: ['runs', 'wrap'],
|
|
48
|
+
childrenAllowed: false,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* The bands a highlight over `[start, end)` fills, in layout coordinates —
|
|
53
|
+
* one per line, and more than one on a line that changes direction. The
|
|
54
|
+
* per-line work is `runs.ts`'s, which is also what `<Html>` calls with its
|
|
55
|
+
* own line placement.
|
|
56
|
+
*/
|
|
57
|
+
function rangeBands(layout, text, start, end) {
|
|
58
|
+
const lines = layout.lines;
|
|
59
|
+
if (!lines?.length || end <= start)
|
|
60
|
+
return [];
|
|
61
|
+
const offsets = codeUnitOffsets(text);
|
|
62
|
+
const last = offsets.length - 1;
|
|
63
|
+
const from = offsets[Math.max(0, Math.min(start, last))];
|
|
64
|
+
const to = offsets[Math.max(0, Math.min(end, last))];
|
|
65
|
+
if (to <= from)
|
|
66
|
+
return [];
|
|
67
|
+
const bands = [];
|
|
68
|
+
for (const line of lines) {
|
|
69
|
+
if (line.end <= from || line.start >= to)
|
|
70
|
+
continue;
|
|
71
|
+
for (const band of lineBands(layout, line, offsets, from, to)) {
|
|
72
|
+
bands.push({
|
|
73
|
+
x: band.x,
|
|
74
|
+
y: line.y,
|
|
75
|
+
width: band.width,
|
|
76
|
+
height: line.height,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return bands;
|
|
81
|
+
}
|
|
82
|
+
export class RichTextNode extends Node {
|
|
83
|
+
_layouts = new Map();
|
|
84
|
+
_text = null;
|
|
85
|
+
constructor(props, app) {
|
|
86
|
+
super(ELEMENT, props, app);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* The size the laid-out runs come to. An unbounded axis arrives as
|
|
90
|
+
* `Infinity`, which is also what `wrap={false}` wants, so the wrap flag is
|
|
91
|
+
* the only branch left — and an answer wider than the offer overflows
|
|
92
|
+
* rather than being clamped, which is what makes a non-wrapping run
|
|
93
|
+
* scrollable inside its parent. `null` is the mock backend, where there is
|
|
94
|
+
* no font manager to measure through.
|
|
95
|
+
*/
|
|
96
|
+
measureContent({ width }) {
|
|
97
|
+
const wrap = this.props.wrap !== false;
|
|
98
|
+
const layout = this._layoutFor(wrap ? width : Infinity);
|
|
99
|
+
if (!layout)
|
|
100
|
+
return { width: 0, height: 0 };
|
|
101
|
+
return {
|
|
102
|
+
width: Math.ceil(layout.width),
|
|
103
|
+
height: Math.ceil(layout.height),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
_runs() {
|
|
107
|
+
const runs = this.props.runs;
|
|
108
|
+
return Array.isArray(runs) ? runs : [];
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Lay the runs out at a width, memoized. The mock backend's app has no
|
|
112
|
+
* font manager; every caller treats `null` as "skip the geometry", the
|
|
113
|
+
* same convention core's rich nodes use.
|
|
114
|
+
*/
|
|
115
|
+
_layoutFor(maxWidth) {
|
|
116
|
+
const key = String(maxWidth);
|
|
117
|
+
const hit = this._layouts.get(key);
|
|
118
|
+
if (hit !== undefined)
|
|
119
|
+
return hit;
|
|
120
|
+
const fonts = this.app?.fonts;
|
|
121
|
+
let layout = null;
|
|
122
|
+
if (fonts) {
|
|
123
|
+
layout = fonts.layout(this._runs(), { family: 'sans-serif', size: 14 }, {
|
|
124
|
+
maxWidth: Number.isFinite(maxWidth) ? maxWidth : undefined,
|
|
125
|
+
lineHeight: this.style.lineHeight,
|
|
126
|
+
align: this.style.textAlign,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (this._layouts.size > 32)
|
|
130
|
+
this._layouts.clear();
|
|
131
|
+
this._layouts.set(key, layout);
|
|
132
|
+
return layout;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* The layout this node is currently painted with — and, because it is the
|
|
136
|
+
* one thing every accessor below answers from, the reason a caret rect and
|
|
137
|
+
* a glyph cannot disagree (docs/extending.md, "answer from what you draw").
|
|
138
|
+
*/
|
|
139
|
+
_paintLayout() {
|
|
140
|
+
const wrap = this.props.wrap !== false;
|
|
141
|
+
return this._layoutFor(wrap ? this.abs.width : Infinity);
|
|
142
|
+
}
|
|
143
|
+
applyProps(nextProps, prevProps) {
|
|
144
|
+
super.applyProps(nextProps, prevProps);
|
|
145
|
+
if (nextProps.runs !== prevProps.runs ||
|
|
146
|
+
nextProps.wrap !== prevProps.wrap) {
|
|
147
|
+
this._layouts.clear();
|
|
148
|
+
this._text = null;
|
|
149
|
+
this.invalidateMeasure('content');
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
destroySubtree() {
|
|
153
|
+
this._layouts.clear();
|
|
154
|
+
super.destroySubtree();
|
|
155
|
+
}
|
|
156
|
+
// --- answering for our own text ------------------------------------------
|
|
157
|
+
//
|
|
158
|
+
// The four accessors from react-x11#291. Implementing them is the whole of
|
|
159
|
+
// joining a `selectable` document: core walks the subtree, asks, and pushes
|
|
160
|
+
// back a `selectionRange` for `paint` to fill. Indices are **code points**
|
|
161
|
+
// and rectangles are in the **owning window's** coordinates, which is the
|
|
162
|
+
// space `abs` and a mouse event's `x`/`y` are already in.
|
|
163
|
+
textContent() {
|
|
164
|
+
if (this._text === null) {
|
|
165
|
+
this._text = this._runs()
|
|
166
|
+
.map((r) => r.text)
|
|
167
|
+
.join('');
|
|
168
|
+
}
|
|
169
|
+
return this._text;
|
|
170
|
+
}
|
|
171
|
+
textIndexAt(x, y) {
|
|
172
|
+
const layout = this._paintLayout();
|
|
173
|
+
if (!layout)
|
|
174
|
+
return 0;
|
|
175
|
+
const i = layout.indexAt(x - this.abs.x, y - this.abs.y);
|
|
176
|
+
return Math.max(0, Math.min([...this.textContent()].length, i));
|
|
177
|
+
}
|
|
178
|
+
textCaretRect(index) {
|
|
179
|
+
const layout = this._paintLayout();
|
|
180
|
+
if (!layout)
|
|
181
|
+
return null;
|
|
182
|
+
const caret = layout.caretPosition(index);
|
|
183
|
+
return {
|
|
184
|
+
x: this.abs.x + caret.x,
|
|
185
|
+
y: this.abs.y + caret.y,
|
|
186
|
+
width: 0,
|
|
187
|
+
height: caret.height,
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
textRangeRects(start, end) {
|
|
191
|
+
const layout = this._paintLayout();
|
|
192
|
+
if (!layout)
|
|
193
|
+
return [];
|
|
194
|
+
return rangeBands(layout, this.textContent(), start, end).map((band) => ({
|
|
195
|
+
x: this.abs.x + band.x,
|
|
196
|
+
y: this.abs.y + band.y,
|
|
197
|
+
width: band.width,
|
|
198
|
+
height: band.height,
|
|
199
|
+
}));
|
|
200
|
+
}
|
|
201
|
+
/** The run's link target under a point, if any — for click-to-follow.
|
|
202
|
+
* Not part of the selection seam: core deliberately left hover and
|
|
203
|
+
* `cursorAt` out of #291, so following a link stays this package's. */
|
|
204
|
+
hrefAtPoint(x, y) {
|
|
205
|
+
const layout = this._paintLayout();
|
|
206
|
+
if (!layout)
|
|
207
|
+
return null;
|
|
208
|
+
const lx = x - this.abs.x;
|
|
209
|
+
const ly = y - this.abs.y;
|
|
210
|
+
for (const line of layout.lines) {
|
|
211
|
+
if (ly < line.y || ly >= line.y + line.height)
|
|
212
|
+
continue;
|
|
213
|
+
for (const r of line.runs) {
|
|
214
|
+
const href = r.span.href;
|
|
215
|
+
if (href == null)
|
|
216
|
+
continue;
|
|
217
|
+
if (lx >= line.x + r.x && lx <= line.x + r.x + r.width)
|
|
218
|
+
return href;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
return null;
|
|
222
|
+
}
|
|
223
|
+
// --- paint ---------------------------------------------------------------
|
|
224
|
+
paint(ctx) {
|
|
225
|
+
super.paint(ctx); // background, border, clip to `abs`
|
|
226
|
+
const layout = this._paintLayout();
|
|
227
|
+
if (!layout || !canFill(ctx))
|
|
228
|
+
return;
|
|
229
|
+
const { x, y } = this.abs;
|
|
230
|
+
ctx.save();
|
|
231
|
+
// 1. run decorations that sit under everything: the code chip, and the
|
|
232
|
+
// terminal's cell backgrounds
|
|
233
|
+
for (const line of layout.lines)
|
|
234
|
+
paintRunBackgrounds(ctx, line, x, y);
|
|
235
|
+
// 2. the band the document selection has claimed of this element's text,
|
|
236
|
+
// translucent so the ink keeps its contrast on either palette (the
|
|
237
|
+
// same reasoning as `<textarea>`'s). The range and the colour both
|
|
238
|
+
// arrive from the surface above; `textRangeRects` is what a custom
|
|
239
|
+
// element and core's own `<text>` both fill, so they cannot drift.
|
|
240
|
+
const range = this.selectionRange;
|
|
241
|
+
if (range && range.end > range.start) {
|
|
242
|
+
ctx.fillStyle = this.selectionColor;
|
|
243
|
+
for (const r of this.textRangeRects(range.start, range.end)) {
|
|
244
|
+
ctx.fillRect(Math.round(r.x), Math.round(r.y), Math.ceil(r.width), Math.ceil(r.height));
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
// 3. the ink
|
|
248
|
+
layout.draw(ctx, x, y);
|
|
249
|
+
// 4. rules over the ink: link underlines, strikethrough
|
|
250
|
+
for (const line of layout.lines)
|
|
251
|
+
paintRunRules(ctx, line, x, y);
|
|
252
|
+
ctx.restore();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/richtext/node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { codePointAtOffset, codeUnitOffsets } from '../internal/text.js';
|
|
2
|
+
import type { TextRun } from './node.js';
|
|
3
|
+
/** The 2d context slice a decoration needs. The mock backend has no
|
|
4
|
+
* `fillRect`, which is why every caller checks before drawing. */
|
|
5
|
+
export interface FillContext {
|
|
6
|
+
fillStyle: unknown;
|
|
7
|
+
save(): void;
|
|
8
|
+
restore(): void;
|
|
9
|
+
fillRect(x: number, y: number, w: number, h: number): void;
|
|
10
|
+
}
|
|
11
|
+
export declare function canFill(ctx: unknown): ctx is FillContext;
|
|
12
|
+
/** One run of one laid-out line, as much of it as decoration reads. */
|
|
13
|
+
export interface LaidRun {
|
|
14
|
+
x: number;
|
|
15
|
+
width: number;
|
|
16
|
+
/** Extent within the laid-out text, in **code units** (ntk's vocabulary). */
|
|
17
|
+
start: number;
|
|
18
|
+
end: number;
|
|
19
|
+
span: TextRun;
|
|
20
|
+
run: {
|
|
21
|
+
font: {
|
|
22
|
+
metrics(size: number): {
|
|
23
|
+
ascent: number;
|
|
24
|
+
descent: number;
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
size: number;
|
|
28
|
+
direction?: 'ltr' | 'rtl';
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
/** One laid-out line, as much of it as decoration reads. */
|
|
32
|
+
export interface LaidLine {
|
|
33
|
+
x: number;
|
|
34
|
+
y: number;
|
|
35
|
+
height: number;
|
|
36
|
+
baseline: number;
|
|
37
|
+
start: number;
|
|
38
|
+
end: number;
|
|
39
|
+
runs: LaidRun[];
|
|
40
|
+
}
|
|
41
|
+
/** What a caret query needs — a layout, narrowed to the one method. */
|
|
42
|
+
export interface CaretSource {
|
|
43
|
+
caretPosition(index: number): {
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
height: number;
|
|
47
|
+
line: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The fills that sit **under** the glyphs: the inline-code chip, a
|
|
52
|
+
* terminal's cell backgrounds, a highlighted `<span>`.
|
|
53
|
+
*
|
|
54
|
+
* `dx`/`dy` translate the line's own coordinates into the target space, so a
|
|
55
|
+
* caller that placed this line itself passes where it placed it.
|
|
56
|
+
*/
|
|
57
|
+
export declare function paintRunBackgrounds(ctx: FillContext, line: LaidLine, dx: number, dy: number): void;
|
|
58
|
+
/** The rules that sit **over** the glyphs: link underlines, strikethrough. */
|
|
59
|
+
export declare function paintRunRules(ctx: FillContext, line: LaidLine, dx: number, dy: number): void;
|
|
60
|
+
/**
|
|
61
|
+
* The rule under a run, in one of SGR 4's five styles.
|
|
62
|
+
*
|
|
63
|
+
* All five are built from 1px rectangles rather than a stroked path: the mock
|
|
64
|
+
* backend has no path API, and a hairline stroke on a text baseline is not
|
|
65
|
+
* worth an antialiased path even where there is one. The curl is a two-level
|
|
66
|
+
* square wave — at a text size it reads as a squiggle, which is the entire
|
|
67
|
+
* job.
|
|
68
|
+
*/
|
|
69
|
+
export declare function underlineRule(ctx: FillContext, x: number, y: number, width: number, style: NonNullable<TextRun['underlineStyle']>): void;
|
|
70
|
+
/** A selected empty line still shows as a sliver, so a selection spanning a
|
|
71
|
+
* blank line does not appear to skip it. Core's own width for the same. */
|
|
72
|
+
export declare const EMPTY_LINE_BAND = 4;
|
|
73
|
+
/**
|
|
74
|
+
* The horizontal stretches of one line that a range `[from, to)` — in **code
|
|
75
|
+
* units** of the laid-out text — covers.
|
|
76
|
+
*
|
|
77
|
+
* More than one on a line that changes direction, because a selection is
|
|
78
|
+
* contiguous in *logical* order while a line is laid out in *visual* order: a
|
|
79
|
+
* range crossing from Latin into Arabic covers two disjoint stretches of
|
|
80
|
+
* pixels, and a single rectangle drawn between the two caret positions paints
|
|
81
|
+
* over text nobody selected. So this walks the line's runs and intersects
|
|
82
|
+
* each with the range rather than interpolating between carets.
|
|
83
|
+
*
|
|
84
|
+
* Core's `<text>` does the same thing with the same code (react-x11#291's
|
|
85
|
+
* `rangeBands`), which is not on its exports map; when it is, delete this.
|
|
86
|
+
*/
|
|
87
|
+
export declare function lineBands(layout: CaretSource, line: LaidLine, offsets: number[], from: number, to: number): {
|
|
88
|
+
x: number;
|
|
89
|
+
width: number;
|
|
90
|
+
}[];
|
|
91
|
+
export { codePointAtOffset, codeUnitOffsets };
|
|
92
|
+
//# sourceMappingURL=runs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/richtext/runs.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACzE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC;mEACmE;AACnE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,IAAI,IAAI,CAAC;IACb,OAAO,IAAI,IAAI,CAAC;IAChB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5D;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,WAAW,CAExD;AAED,uEAAuE;AACvE,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE;QACH,IAAI,EAAE;YAAE,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,MAAM,EAAE,MAAM,CAAC;gBAAC,OAAO,EAAE,MAAM,CAAA;aAAE,CAAA;SAAE,CAAC;QACrE,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;KAC3B,CAAC;CACH;AAED,4DAA4D;AAC5D,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,EAAE,CAAC;CACjB;AAED,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;QAC5B,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,IAAI,CA2BN;AAED,8EAA8E;AAC9E,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,IAAI,EAAE,QAAQ,EACd,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,GACT,IAAI,CAwBN;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,WAAW,EAChB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,GAC5C,IAAI,CA2BN;AAED;4EAC4E;AAC5E,eAAO,MAAM,eAAe,IAAI,CAAC;AAEjC;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,WAAW,EACnB,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,GACT;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CA0ChC;AAED,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,CAAC"}
|