@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,193 @@
|
|
|
1
|
+
// `@xterm/headless`, as an interface.
|
|
2
|
+
//
|
|
3
|
+
// The emulator core is an **optional dependency**: it installs by default
|
|
4
|
+
// (nothing else would bring it, and the terminal is a flagship), but an app
|
|
5
|
+
// that ran `npm install --no-optional` must still type-check against this
|
|
6
|
+
// package. `import type { Terminal } from '@xterm/headless'` would put the
|
|
7
|
+
// package in the type graph and break exactly that app, so the slice we use
|
|
8
|
+
// is written out structurally here — the rule `../../desktop-calendar/ical.ts`
|
|
9
|
+
// established for `ical.js`, for the same reason.
|
|
10
|
+
//
|
|
11
|
+
// Everything below is public API in the 6.0.0 typings. Nothing here reaches
|
|
12
|
+
// into `term._core`: xterm.js internals churn between majors, and a renderer
|
|
13
|
+
// that depends on them is a renderer that breaks on an upgrade nobody made.
|
|
14
|
+
|
|
15
|
+
/** What every xterm listener registration hands back. */
|
|
16
|
+
export interface XtermDisposable {
|
|
17
|
+
dispose(): void;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/** xterm's event shape: call it with a listener, get a disposable. */
|
|
21
|
+
export type XtermEvent<T> = (listener: (arg: T) => void) => XtermDisposable;
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* One cell of the buffer.
|
|
25
|
+
*
|
|
26
|
+
* The `is*` predicates return numbers rather than booleans (the attribute
|
|
27
|
+
* bits, unshifted) — `isUnderline()` in particular carries the *style*
|
|
28
|
+
* variant, which is why it is read as a number here too.
|
|
29
|
+
*/
|
|
30
|
+
export interface XtermCell {
|
|
31
|
+
getWidth(): number;
|
|
32
|
+
getChars(): string;
|
|
33
|
+
getCode(): number;
|
|
34
|
+
getFgColor(): number;
|
|
35
|
+
getBgColor(): number;
|
|
36
|
+
getFgColorMode(): number;
|
|
37
|
+
getBgColorMode(): number;
|
|
38
|
+
isFgRGB(): boolean;
|
|
39
|
+
isBgRGB(): boolean;
|
|
40
|
+
isFgPalette(): boolean;
|
|
41
|
+
isBgPalette(): boolean;
|
|
42
|
+
isFgDefault(): boolean;
|
|
43
|
+
isBgDefault(): boolean;
|
|
44
|
+
isBold(): number;
|
|
45
|
+
isDim(): number;
|
|
46
|
+
isItalic(): number;
|
|
47
|
+
isUnderline(): number;
|
|
48
|
+
isBlink(): number;
|
|
49
|
+
isInverse(): number;
|
|
50
|
+
isInvisible(): number;
|
|
51
|
+
isStrikethrough(): number;
|
|
52
|
+
isOverline(): number;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface XtermLine {
|
|
56
|
+
readonly isWrapped: boolean;
|
|
57
|
+
readonly length: number;
|
|
58
|
+
/**
|
|
59
|
+
* `cell` is the reuse slot the diff loop depends on: one work cell for the
|
|
60
|
+
* whole viewport instead of an object per cell per frame. The API documents
|
|
61
|
+
* the reuse, so this is the intended shape rather than a trick.
|
|
62
|
+
*/
|
|
63
|
+
getCell(x: number, cell?: XtermCell): XtermCell | undefined;
|
|
64
|
+
translateToString(
|
|
65
|
+
trimRight?: boolean,
|
|
66
|
+
startColumn?: number,
|
|
67
|
+
endColumn?: number,
|
|
68
|
+
): string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export interface XtermBuffer {
|
|
72
|
+
readonly type: 'normal' | 'alternate';
|
|
73
|
+
readonly cursorX: number;
|
|
74
|
+
readonly cursorY: number;
|
|
75
|
+
/** Buffer-absolute index of the line at the top of the viewport. */
|
|
76
|
+
readonly viewportY: number;
|
|
77
|
+
/** Buffer-absolute index of the top of the bottom page. */
|
|
78
|
+
readonly baseY: number;
|
|
79
|
+
readonly length: number;
|
|
80
|
+
getLine(y: number): XtermLine | undefined;
|
|
81
|
+
getNullCell(): XtermCell;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export interface XtermBuffers {
|
|
85
|
+
readonly active: XtermBuffer;
|
|
86
|
+
readonly normal: XtermBuffer;
|
|
87
|
+
readonly alternate: XtermBuffer;
|
|
88
|
+
readonly onBufferChange: XtermEvent<XtermBuffer>;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** The modes the encoders branch on. All public in `IModes`. */
|
|
92
|
+
export interface XtermModes {
|
|
93
|
+
readonly applicationCursorKeysMode: boolean;
|
|
94
|
+
readonly applicationKeypadMode: boolean;
|
|
95
|
+
readonly bracketedPasteMode: boolean;
|
|
96
|
+
readonly insertMode: boolean;
|
|
97
|
+
readonly mouseTrackingMode: 'none' | 'x10' | 'vt200' | 'drag' | 'any';
|
|
98
|
+
readonly originMode: boolean;
|
|
99
|
+
readonly reverseWraparoundMode: boolean;
|
|
100
|
+
readonly sendFocusMode: boolean;
|
|
101
|
+
readonly wraparoundMode: boolean;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export interface XtermFunctionIdentifier {
|
|
105
|
+
prefix?: string;
|
|
106
|
+
intermediates?: string;
|
|
107
|
+
final: string;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface XtermParser {
|
|
111
|
+
registerCsiHandler(
|
|
112
|
+
id: XtermFunctionIdentifier,
|
|
113
|
+
callback: (params: (number | number[])[]) => boolean,
|
|
114
|
+
): XtermDisposable;
|
|
115
|
+
registerOscHandler(
|
|
116
|
+
ident: number,
|
|
117
|
+
callback: (data: string) => boolean,
|
|
118
|
+
): XtermDisposable;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** The options we set. A subset — xterm has many more, none of them ours. */
|
|
122
|
+
export interface XtermOptions {
|
|
123
|
+
cols?: number;
|
|
124
|
+
rows?: number;
|
|
125
|
+
scrollback?: number;
|
|
126
|
+
cursorStyle?: 'block' | 'underline' | 'bar';
|
|
127
|
+
cursorBlink?: boolean;
|
|
128
|
+
drawBoldTextInBrightColors?: boolean;
|
|
129
|
+
allowProposedApi?: boolean;
|
|
130
|
+
convertEol?: boolean;
|
|
131
|
+
windowsPty?: unknown;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* The emulator itself: bytes in, screen state out, and the events that say
|
|
136
|
+
* something changed.
|
|
137
|
+
*
|
|
138
|
+
* `onData` is the *reply* channel — DA, DSR, focus reports, mouse reports the
|
|
139
|
+
* core encodes itself — and it has to reach the pty, or an application that
|
|
140
|
+
* asks the terminal a question waits forever.
|
|
141
|
+
*/
|
|
142
|
+
export interface XtermTerminal {
|
|
143
|
+
readonly cols: number;
|
|
144
|
+
readonly rows: number;
|
|
145
|
+
readonly buffer: XtermBuffers;
|
|
146
|
+
readonly parser: XtermParser;
|
|
147
|
+
readonly modes: XtermModes;
|
|
148
|
+
options: XtermOptions;
|
|
149
|
+
|
|
150
|
+
readonly onBell: XtermEvent<void>;
|
|
151
|
+
readonly onBinary: XtermEvent<string>;
|
|
152
|
+
readonly onCursorMove: XtermEvent<void>;
|
|
153
|
+
readonly onData: XtermEvent<string>;
|
|
154
|
+
readonly onLineFeed: XtermEvent<void>;
|
|
155
|
+
readonly onResize: XtermEvent<{ cols: number; rows: number }>;
|
|
156
|
+
readonly onScroll: XtermEvent<number>;
|
|
157
|
+
readonly onTitleChange: XtermEvent<string>;
|
|
158
|
+
readonly onWriteParsed: XtermEvent<void>;
|
|
159
|
+
|
|
160
|
+
write(data: string | Uint8Array, callback?: () => void): void;
|
|
161
|
+
input(data: string, wasUserInput?: boolean): void;
|
|
162
|
+
resize(cols: number, rows: number): void;
|
|
163
|
+
scrollLines(amount: number): void;
|
|
164
|
+
scrollToBottom(): void;
|
|
165
|
+
scrollToTop(): void;
|
|
166
|
+
clear(): void;
|
|
167
|
+
reset(): void;
|
|
168
|
+
dispose(): void;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** The module's shape: one constructor. */
|
|
172
|
+
export interface XtermModule {
|
|
173
|
+
Terminal: new (options?: XtermOptions) => XtermTerminal;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
/**
|
|
177
|
+
* Load `@xterm/headless`, or answer `null` if it is not installed.
|
|
178
|
+
*
|
|
179
|
+
* A dynamic `import()` that is allowed to fail, exactly like
|
|
180
|
+
* `../../desktop-calendar/ical.ts`: "the optional dependency is missing" is an
|
|
181
|
+
* ordinary state of a healthy machine, and the component reports it as
|
|
182
|
+
* `status: 'unavailable'` plus the `fallback`, never as a throw.
|
|
183
|
+
*/
|
|
184
|
+
let cached: Promise<XtermModule | null> | null = null;
|
|
185
|
+
export function loadXterm(): Promise<XtermModule | null> {
|
|
186
|
+
cached ??= import('@xterm/headless')
|
|
187
|
+
.then((mod) => {
|
|
188
|
+
const m = mod as unknown as Partial<XtermModule>;
|
|
189
|
+
return typeof m.Terminal === 'function' ? (m as XtermModule) : null;
|
|
190
|
+
})
|
|
191
|
+
.catch(() => null);
|
|
192
|
+
return cached;
|
|
193
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// `React.createElement`, typed against react-x11's host elements.
|
|
2
|
+
//
|
|
3
|
+
// The library writes `h(...)` rather than JSX — a convention inherited from
|
|
4
|
+
// core, and worth keeping so moving code between the two repos stays a
|
|
5
|
+
// rename. But `React.createElement`'s own overloads are `@types/react`'s, and
|
|
6
|
+
// they describe the DOM: a `<box onKeyDown>` handler is checked against
|
|
7
|
+
// React's `KeyboardEvent`, not react-x11's, and the whole props object is
|
|
8
|
+
// measured against `DOMAttributes`. Everything interesting fails.
|
|
9
|
+
//
|
|
10
|
+
// So the element name is looked up in react-x11's own element table instead.
|
|
11
|
+
// `hx('box', …)` gets `<box>`'s real props — `ev.keysym` on a key handler,
|
|
12
|
+
// `onDraw` on a `<canvas>` — and `hx('div', …)` is an error, which is the
|
|
13
|
+
// same guarantee the JSX namespace gives `examples/` and `test/types/`.
|
|
14
|
+
import React from 'react';
|
|
15
|
+
import type { Key, ReactElement, ReactNode } from 'react';
|
|
16
|
+
import type { ReactX11Elements, Theme } from 'react-x11';
|
|
17
|
+
|
|
18
|
+
/** The host elements, by name. */
|
|
19
|
+
export type Host = ReactX11Elements;
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* What every element takes on top of its own props.
|
|
23
|
+
*
|
|
24
|
+
* `theme` is honoured by **every** node — `Node.theme` merges `props.theme`
|
|
25
|
+
* over the inherited palette, whatever the kind — but react-x11's element
|
|
26
|
+
* declarations only put it on `<window>`. A widget re-declares the theme it
|
|
27
|
+
* read from context onto its own root so that `$token` values still resolve
|
|
28
|
+
* inside a `<popup>`, which is a separate window and does not inherit the
|
|
29
|
+
* trigger's node tree. So the prop is real; only the declaration is narrow.
|
|
30
|
+
*/
|
|
31
|
+
interface CommonProps {
|
|
32
|
+
key?: Key;
|
|
33
|
+
/** `Theme` is listed alongside the record because it is an interface, and
|
|
34
|
+
* an interface has no implicit index signature — so the palette `useTheme`
|
|
35
|
+
* hands back is not assignable to the record react-x11 declares. */
|
|
36
|
+
theme?: Theme | Record<string, string | number>;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export function hx<K extends keyof Host>(
|
|
40
|
+
type: K,
|
|
41
|
+
// `theme` is dropped from the element's own props before the merge:
|
|
42
|
+
// `<window>` and `<popup>` already declare it, narrower, and intersecting
|
|
43
|
+
// the two would demand a value satisfying both.
|
|
44
|
+
props?: (Omit<Host[K], 'theme'> & CommonProps) | null,
|
|
45
|
+
...children: ReactNode[]
|
|
46
|
+
): ReactElement {
|
|
47
|
+
// The cast is the whole point of the wrapper: `createElement`'s string
|
|
48
|
+
// overload insists on DOM props, and the signature above has already
|
|
49
|
+
// checked these against the element that will actually receive them.
|
|
50
|
+
return React.createElement(type as string, props as never, ...children);
|
|
51
|
+
}
|
|
@@ -0,0 +1,340 @@
|
|
|
1
|
+
// <TerminalOutput> — a captured terminal session, rendered.
|
|
2
|
+
//
|
|
3
|
+
// The static, read-only sibling of `<Terminal>`, exactly as `<Code>` is the
|
|
4
|
+
// static sibling of `<CodeEditor>`: bytes a program wrote to a pty go in, and
|
|
5
|
+
// what the terminal would have drawn comes out. No pty, no process, no input,
|
|
6
|
+
// no `write()` — there is nothing on the other end to write to.
|
|
7
|
+
//
|
|
8
|
+
// The composition is `<Code>`'s: one `<richtext>` for the whole capture in a
|
|
9
|
+
// horizontally scrolling viewport, plus an optional line-number gutter, all
|
|
10
|
+
// inside a `selectable` root. Selection, copy, Ctrl+A and PRIMARY are core's
|
|
11
|
+
// since react-x11#291; what is left here is saying which parts are chrome, so
|
|
12
|
+
// the gutter is `selectable={false}` and a copied log carries no numbering.
|
|
13
|
+
//
|
|
14
|
+
// Registers no element of its own — `<richtext>` is the shared module's, and
|
|
15
|
+
// this calls `registerRichText()` at module scope the way every component
|
|
16
|
+
// that draws one does.
|
|
17
|
+
//
|
|
18
|
+
// **Why a log is a document rather than a grid** is the design decision
|
|
19
|
+
// behind the whole thing, and it is in `docs/prd-terminal-output.md` along
|
|
20
|
+
// with what this model can and cannot represent. The short version: a build
|
|
21
|
+
// log has lines, not rows, and no column count of its own, so rendering it on
|
|
22
|
+
// a grid means inventing a `cols` the capture never had and then wrapping at
|
|
23
|
+
// it. A capture that genuinely wanted a screen says so — `needsScreen` on the
|
|
24
|
+
// document `onDocument` hands over — and rendering *that* is phase 2.
|
|
25
|
+
import React from 'react';
|
|
26
|
+
import type { ReactElement } from 'react';
|
|
27
|
+
import { useTheme } from 'react-x11';
|
|
28
|
+
import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
|
|
29
|
+
import type { Style } from 'react-x11/style';
|
|
30
|
+
|
|
31
|
+
import { ansiPalette, parseAnsi } from '../ansi/index.js';
|
|
32
|
+
import type {
|
|
33
|
+
AnsiDocument,
|
|
34
|
+
AnsiInput,
|
|
35
|
+
AnsiPaletteOptions,
|
|
36
|
+
} from '../ansi/index.js';
|
|
37
|
+
import {
|
|
38
|
+
registerRichText,
|
|
39
|
+
RICHTEXT_ELEMENT,
|
|
40
|
+
useLinkClicks,
|
|
41
|
+
useSelectionMenu,
|
|
42
|
+
} from '../richtext/index.js';
|
|
43
|
+
import type { RichTextProps, TextRun } from '../richtext/index.js';
|
|
44
|
+
import {
|
|
45
|
+
codeBlockLook,
|
|
46
|
+
codeBlockStyle,
|
|
47
|
+
codeTextStyle,
|
|
48
|
+
} from '../codeblock/index.js';
|
|
49
|
+
import { documentRuns } from './runs.js';
|
|
50
|
+
import { hx } from './hx.js';
|
|
51
|
+
|
|
52
|
+
const h = React.createElement;
|
|
53
|
+
|
|
54
|
+
// The shared-module registration, at this component's own module scope — see
|
|
55
|
+
// the note in `../richtext/node.ts`.
|
|
56
|
+
registerRichText();
|
|
57
|
+
|
|
58
|
+
/** What `data` accepts on top of raw bytes: a document parsed elsewhere. */
|
|
59
|
+
export type TerminalOutputSource = AnsiInput | AnsiDocument;
|
|
60
|
+
|
|
61
|
+
export interface TerminalOutputProps {
|
|
62
|
+
/**
|
|
63
|
+
* The capture.
|
|
64
|
+
*
|
|
65
|
+
* **Bytes are preferred over a string.** A `.toString()` on whatever
|
|
66
|
+
* boundary a reader chose cuts a multi-byte character in half, and no care
|
|
67
|
+
* downstream repairs it — the same rule `PtyHost.onData` carries for the
|
|
68
|
+
* live terminal. A `Uint8Array` (a node `Buffer` is one) is decoded across
|
|
69
|
+
* chunk boundaries, so passing an array of them is safe.
|
|
70
|
+
*
|
|
71
|
+
* An **array** is also the incremental path: when it grows and its existing
|
|
72
|
+
* elements keep their identity, only the new ones are parsed. A growing
|
|
73
|
+
* *string* is handled too, by prefix, which is cheaper than re-parsing but
|
|
74
|
+
* not free — push chunks into an array for a live tail.
|
|
75
|
+
*
|
|
76
|
+
* An `AnsiDocument` is taken as-is, for an app that parsed off the render
|
|
77
|
+
* path or is scrubbing a recording.
|
|
78
|
+
*/
|
|
79
|
+
data: TerminalOutputSource;
|
|
80
|
+
/**
|
|
81
|
+
* Which renderer. `'auto'` (the default) and `'flow'` are the same today:
|
|
82
|
+
* the capture is rendered as a document of styled spans.
|
|
83
|
+
*
|
|
84
|
+
* `'screen'` — a real cell grid, for a capture that addressed the cursor —
|
|
85
|
+
* joins this union in phase 2, at which point `'auto'` starts following the
|
|
86
|
+
* bytes. Pin `'flow'` if a log should stay a document whatever it contains.
|
|
87
|
+
*/
|
|
88
|
+
mode?: 'auto' | 'flow';
|
|
89
|
+
/**
|
|
90
|
+
* The palette. `<Terminal>`'s `colors` minus `cursor`, which a static
|
|
91
|
+
* render has no use for — the same object works for both.
|
|
92
|
+
*
|
|
93
|
+
* By default the ink is the theme's text colour and the block wears the
|
|
94
|
+
* same faint tint a `<Code>` block does, so a log sits in a page rather
|
|
95
|
+
* than punching a dark rectangle into it. Pass `background` and
|
|
96
|
+
* `foreground` to get a terminal pane instead.
|
|
97
|
+
*/
|
|
98
|
+
colors?: AnsiPaletteOptions;
|
|
99
|
+
/** Default 8, the terminal's. */
|
|
100
|
+
tabWidth?: number;
|
|
101
|
+
/** Keep only the last N lines. Unbounded by default: the app read the
|
|
102
|
+
* file, so the app decided how big it is. */
|
|
103
|
+
maxLines?: number;
|
|
104
|
+
/** Wrap long lines instead of scrolling horizontally. Default false —
|
|
105
|
+
* a terminal's lines are the length they are. */
|
|
106
|
+
wrap?: boolean;
|
|
107
|
+
/** A line-number gutter. Numbers are not part of the selection, so a
|
|
108
|
+
* copied log pastes clean. Ignored when `wrap` is on, for the reason
|
|
109
|
+
* `<Code>` ignores it: a wrapped line puts the numbering out of register. */
|
|
110
|
+
lineNumbers?: boolean;
|
|
111
|
+
/** Mouse selection, Ctrl+A / Ctrl+C, PRIMARY. Default true. */
|
|
112
|
+
selectable?: boolean;
|
|
113
|
+
/** Selection band fill. Default: the theme accent at 35% opacity. */
|
|
114
|
+
selectionColor?: string;
|
|
115
|
+
/** Default: 0.9 × the theme `fontSize`, matching `<Code>` and
|
|
116
|
+
* `<Markdown>`'s fenced blocks. */
|
|
117
|
+
fontSize?: number;
|
|
118
|
+
/** Default `'monospace'` — there is no theme token for it, and a capture
|
|
119
|
+
* was made in a monospace font whatever the app is set in. */
|
|
120
|
+
monoFamily?: string;
|
|
121
|
+
/** An OSC 8 hyperlink was clicked. Without a handler the link text is
|
|
122
|
+
* styled and inert; this component never opens anything by itself. */
|
|
123
|
+
onLink?: (href: string, ev: X11MouseEvent<DrawnNode>) => void;
|
|
124
|
+
/**
|
|
125
|
+
* The parse, whenever it changes.
|
|
126
|
+
*
|
|
127
|
+
* This is where a capture reports what it could not say in a document:
|
|
128
|
+
* `needsScreen` is true when the bytes addressed the cursor, entered the
|
|
129
|
+
* alternate screen or scrolled a region, and `dropped` names every sequence
|
|
130
|
+
* that went unhonoured with a count. `title` is the OSC 0/2 title, which is
|
|
131
|
+
* usually what a tab should be called.
|
|
132
|
+
*/
|
|
133
|
+
onDocument?: (document: AnsiDocument) => void;
|
|
134
|
+
/** The root `<box>`'s style — width, margins, `flexGrow`. */
|
|
135
|
+
style?: Style | Style[];
|
|
136
|
+
'data-testname'?: string;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
function isDocument(source: TerminalOutputSource): source is AnsiDocument {
|
|
140
|
+
return (
|
|
141
|
+
typeof source === 'object' &&
|
|
142
|
+
source !== null &&
|
|
143
|
+
!(source instanceof Uint8Array) &&
|
|
144
|
+
!Array.isArray(source) &&
|
|
145
|
+
'lines' in source
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** How far into a new value the append check will look before giving up and
|
|
150
|
+
* re-parsing. A prefix compare is a memcmp and a parse is not, but neither
|
|
151
|
+
* is free, and past this the array form is the answer. */
|
|
152
|
+
const MAX_PREFIX_SCAN = 8 * 1024 * 1024;
|
|
153
|
+
|
|
154
|
+
interface ParseCache {
|
|
155
|
+
source: TerminalOutputSource;
|
|
156
|
+
document: AnsiDocument;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Parse `data`, continuing the previous parse where the new value extends it.
|
|
161
|
+
*
|
|
162
|
+
* The two extendable shapes are the two ways a capture grows: an array whose
|
|
163
|
+
* earlier chunks kept their identity, and a string the app appended to. Both
|
|
164
|
+
* resume from the held reducer state, so a partial escape sequence or a
|
|
165
|
+
* half-arrived UTF-8 character at the boundary is carried rather than mangled
|
|
166
|
+
* — the same rule `<Markdown>` follows for an unterminated tail.
|
|
167
|
+
*/
|
|
168
|
+
function parseIncremental(
|
|
169
|
+
data: TerminalOutputSource,
|
|
170
|
+
previous: ParseCache | null,
|
|
171
|
+
options: { tabWidth?: number; maxLines?: number },
|
|
172
|
+
): AnsiDocument {
|
|
173
|
+
if (isDocument(data)) return data;
|
|
174
|
+
const before = previous?.source;
|
|
175
|
+
|
|
176
|
+
if (
|
|
177
|
+
Array.isArray(data) &&
|
|
178
|
+
Array.isArray(before) &&
|
|
179
|
+
before.length < data.length
|
|
180
|
+
) {
|
|
181
|
+
let shared = true;
|
|
182
|
+
for (let i = 0; i < before.length; i++) {
|
|
183
|
+
if (before[i] !== data[i]) {
|
|
184
|
+
shared = false;
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
if (shared) {
|
|
189
|
+
return parseAnsi(data.slice(before.length), { from: previous!.document });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (
|
|
194
|
+
typeof data === 'string' &&
|
|
195
|
+
typeof before === 'string' &&
|
|
196
|
+
before.length > 0 &&
|
|
197
|
+
before.length < data.length &&
|
|
198
|
+
before.length <= MAX_PREFIX_SCAN &&
|
|
199
|
+
data.startsWith(before)
|
|
200
|
+
) {
|
|
201
|
+
return parseAnsi(data.slice(before.length), { from: previous!.document });
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
return parseAnsi(data, options);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* A captured terminal session.
|
|
209
|
+
*
|
|
210
|
+
* ```jsx
|
|
211
|
+
* <TerminalOutput data={log} lineNumbers />
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
export function TerminalOutput(props: TerminalOutputProps): ReactElement {
|
|
215
|
+
const {
|
|
216
|
+
data,
|
|
217
|
+
colors,
|
|
218
|
+
tabWidth,
|
|
219
|
+
maxLines,
|
|
220
|
+
wrap = false,
|
|
221
|
+
selectable = true,
|
|
222
|
+
selectionColor,
|
|
223
|
+
onDocument,
|
|
224
|
+
} = props;
|
|
225
|
+
const lineNumbers = (props.lineNumbers ?? false) && !wrap;
|
|
226
|
+
// `Theme` is an interface, so it has no implicit index signature — the same
|
|
227
|
+
// widening `hx.ts` documents for the `theme` prop.
|
|
228
|
+
const theme = useTheme() as unknown as Record<string, unknown>;
|
|
229
|
+
const menu = useSelectionMenu(selectable);
|
|
230
|
+
const links = useLinkClicks(props.onLink);
|
|
231
|
+
|
|
232
|
+
const cache = React.useRef<ParseCache | null>(null);
|
|
233
|
+
const document = React.useMemo(() => {
|
|
234
|
+
const parsed = parseIncremental(data, cache.current, {
|
|
235
|
+
tabWidth,
|
|
236
|
+
maxLines,
|
|
237
|
+
});
|
|
238
|
+
cache.current = { source: data, document: parsed };
|
|
239
|
+
return parsed;
|
|
240
|
+
}, [data, tabWidth, maxLines]);
|
|
241
|
+
|
|
242
|
+
// Reported off the render, and only when it changed: `dropped` and
|
|
243
|
+
// `needsScreen` are what an app builds a "this recording wanted a screen"
|
|
244
|
+
// notice out of, and a notice that re-fires every paint is a notice
|
|
245
|
+
// nobody keeps.
|
|
246
|
+
const report = React.useRef(onDocument);
|
|
247
|
+
report.current = onDocument;
|
|
248
|
+
React.useEffect(() => {
|
|
249
|
+
report.current?.(document);
|
|
250
|
+
}, [document]);
|
|
251
|
+
|
|
252
|
+
const look = React.useMemo(
|
|
253
|
+
() =>
|
|
254
|
+
codeBlockLook(theme, {
|
|
255
|
+
fontSize: props.fontSize,
|
|
256
|
+
monoFamily: props.monoFamily,
|
|
257
|
+
}),
|
|
258
|
+
[theme, props.fontSize, props.monoFamily],
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
// The colour maths (dim, inverse, conceal) resolves against the *page*
|
|
262
|
+
// rather than against the block's tint: the tint is translucent, and an
|
|
263
|
+
// inverted run should read as a hole in the page, which is what it is.
|
|
264
|
+
const palette = React.useMemo(
|
|
265
|
+
() =>
|
|
266
|
+
ansiPalette({
|
|
267
|
+
...colors,
|
|
268
|
+
foreground: colors?.foreground ?? look.color,
|
|
269
|
+
background: colors?.background ?? String(theme.background ?? '#ffffff'),
|
|
270
|
+
}),
|
|
271
|
+
[colors, look.color, theme.background],
|
|
272
|
+
);
|
|
273
|
+
|
|
274
|
+
const runs: TextRun[] = React.useMemo(
|
|
275
|
+
() =>
|
|
276
|
+
documentRuns(document, { family: look.family, size: look.size }, palette),
|
|
277
|
+
[document, look.family, look.size, palette],
|
|
278
|
+
);
|
|
279
|
+
|
|
280
|
+
const outputProps: RichTextProps = { runs, style: codeTextStyle(look) };
|
|
281
|
+
if (!wrap) outputProps.wrap = false;
|
|
282
|
+
|
|
283
|
+
const lineCount = document.lines.length;
|
|
284
|
+
const gutter = lineNumbers
|
|
285
|
+
? h(RICHTEXT_ELEMENT, {
|
|
286
|
+
// One richtext for all the numbers: same font, same line height, so
|
|
287
|
+
// it stays in register with the output beside it. `selectable={false}`
|
|
288
|
+
// is what keeps it out of a drag and out of the copied text.
|
|
289
|
+
selectable: false,
|
|
290
|
+
runs: Array.from({ length: lineCount }, (_, i) => ({
|
|
291
|
+
text: i === lineCount - 1 ? `${i + 1}` : `${i + 1}\n`,
|
|
292
|
+
family: look.family,
|
|
293
|
+
size: look.size,
|
|
294
|
+
color: look.dim,
|
|
295
|
+
})),
|
|
296
|
+
wrap: false,
|
|
297
|
+
style: {
|
|
298
|
+
lineHeight: look.lineHeight,
|
|
299
|
+
textAlign: 'right',
|
|
300
|
+
minWidth:
|
|
301
|
+
Math.max(String(lineCount).length, 2) * Math.ceil(look.size * 0.62),
|
|
302
|
+
marginRight: look.padding,
|
|
303
|
+
flexShrink: 0,
|
|
304
|
+
},
|
|
305
|
+
} as Record<string, unknown>)
|
|
306
|
+
: null;
|
|
307
|
+
|
|
308
|
+
const rootStyle: Style = {
|
|
309
|
+
...codeBlockStyle(look),
|
|
310
|
+
...(colors?.background ? { backgroundColor: colors.background } : null),
|
|
311
|
+
flexDirection: 'row',
|
|
312
|
+
alignItems: 'stretch',
|
|
313
|
+
};
|
|
314
|
+
|
|
315
|
+
return hx(
|
|
316
|
+
'box',
|
|
317
|
+
{
|
|
318
|
+
style: props.style
|
|
319
|
+
? [
|
|
320
|
+
rootStyle,
|
|
321
|
+
...(Array.isArray(props.style) ? props.style : [props.style]),
|
|
322
|
+
]
|
|
323
|
+
: rootStyle,
|
|
324
|
+
// The whole feature: a drag selects across everything below, a double
|
|
325
|
+
// click takes a word, Ctrl+C copies, PRIMARY follows the release.
|
|
326
|
+
selectable,
|
|
327
|
+
selectionColor,
|
|
328
|
+
'aria-label': 'Terminal output',
|
|
329
|
+
...menu,
|
|
330
|
+
...links,
|
|
331
|
+
'data-testname': props['data-testname'],
|
|
332
|
+
} as Record<string, unknown>,
|
|
333
|
+
gutter,
|
|
334
|
+
hx(
|
|
335
|
+
'box',
|
|
336
|
+
{ style: { overflow: 'scroll', flexDirection: 'column', flexGrow: 1 } },
|
|
337
|
+
h(RICHTEXT_ELEMENT, outputProps as unknown as Record<string, unknown>),
|
|
338
|
+
),
|
|
339
|
+
);
|
|
340
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// A parsed capture, as `<richtext>` runs. Pure — no React, no theme lookup,
|
|
2
|
+
// no element — so what a span becomes is asserted directly.
|
|
3
|
+
//
|
|
4
|
+
// This is the second half of the "colour is intent, not pixels" split: the
|
|
5
|
+
// parser said "ANSI 2", `../ansi/palette.ts` said which pixels that is, and
|
|
6
|
+
// here it becomes a run the text layout can take.
|
|
7
|
+
import { resolveAnsiColors } from '../ansi/index.js';
|
|
8
|
+
import type { AnsiDocument, AnsiPalette, AnsiSpan } from '../ansi/index.js';
|
|
9
|
+
import type { TextRun } from '../richtext/index.js';
|
|
10
|
+
|
|
11
|
+
/** The font a capture is set in. The palette is separate because it changes
|
|
12
|
+
* for a different reason — a theme flip rather than a size prop. */
|
|
13
|
+
export interface OutputFont {
|
|
14
|
+
family: string;
|
|
15
|
+
size: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* One span as one run.
|
|
20
|
+
*
|
|
21
|
+
* `bgFill: 'line'` is the whole reason `../richtext/` grew the field: a
|
|
22
|
+
* terminal's backgrounds have to abut exactly and fill the row, where an
|
|
23
|
+
* inline-code chip is inset and padded. Adjacent runs with the chip fill
|
|
24
|
+
* overlap by two pixels each side, which paints over the neighbour.
|
|
25
|
+
*/
|
|
26
|
+
export function spanRun(
|
|
27
|
+
span: AnsiSpan,
|
|
28
|
+
font: OutputFont,
|
|
29
|
+
palette: AnsiPalette,
|
|
30
|
+
): TextRun {
|
|
31
|
+
const { fg, bg } = resolveAnsiColors(span, palette);
|
|
32
|
+
const run: TextRun = {
|
|
33
|
+
text: span.text,
|
|
34
|
+
family: font.family,
|
|
35
|
+
size: font.size,
|
|
36
|
+
color: fg,
|
|
37
|
+
};
|
|
38
|
+
if (bg !== undefined) {
|
|
39
|
+
run.bg = bg;
|
|
40
|
+
run.bgFill = 'line';
|
|
41
|
+
}
|
|
42
|
+
if (span.bold) run.weight = 'bold';
|
|
43
|
+
if (span.italic) run.style = 'italic';
|
|
44
|
+
if (span.underline) {
|
|
45
|
+
run.underline = span.underlineColor
|
|
46
|
+
? resolveAnsiColors({ fg: span.underlineColor }, palette).fg
|
|
47
|
+
: fg;
|
|
48
|
+
run.underlineStyle = span.underline;
|
|
49
|
+
}
|
|
50
|
+
if (span.strike) run.strike = fg;
|
|
51
|
+
if (span.href) run.href = span.href;
|
|
52
|
+
return run;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The whole document as runs, which concatenate to exactly its text.
|
|
57
|
+
*
|
|
58
|
+
* The newline between two lines is a run of its own rather than the tail of
|
|
59
|
+
* the line before it: a line that ends in a coloured background would
|
|
60
|
+
* otherwise paint that colour across the line break, which is a stripe the
|
|
61
|
+
* terminal never drew.
|
|
62
|
+
*/
|
|
63
|
+
export function documentRuns(
|
|
64
|
+
document: AnsiDocument,
|
|
65
|
+
font: OutputFont,
|
|
66
|
+
palette: AnsiPalette,
|
|
67
|
+
): TextRun[] {
|
|
68
|
+
const runs: TextRun[] = [];
|
|
69
|
+
const { lines } = document;
|
|
70
|
+
for (let i = 0; i < lines.length; i++) {
|
|
71
|
+
for (const span of lines[i]!.spans) {
|
|
72
|
+
if (span.text) runs.push(spanRun(span, font, palette));
|
|
73
|
+
}
|
|
74
|
+
if (i < lines.length - 1) {
|
|
75
|
+
runs.push({ text: '\n', family: font.family, size: font.size });
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return runs;
|
|
79
|
+
}
|