@react-x11/components 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +81 -0
- package/dist/internal/heights.d.ts.map +1 -0
- package/dist/internal/heights.js +193 -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/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 +844 -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 +716 -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 +211 -0
- package/src/internal/hx.ts +53 -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 +1219 -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 +1087 -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,545 @@
|
|
|
1
|
+
// `<Html>` — a static HTML + CSS renderer with selectable text, a resource
|
|
2
|
+
// seam, a script seam, and real widgets for form controls.
|
|
3
|
+
//
|
|
4
|
+
// The engine is `node.ts` and the files under `css/` and `layout/`; this file
|
|
5
|
+
// is the React half: props, the theme, the seams, and the controls mounted
|
|
6
|
+
// beside the element. See `docs/prd-html.md` for why the element draws the
|
|
7
|
+
// document rather than composing it out of `<box>`es, and `docs/components/
|
|
8
|
+
// html.md` for the reference.
|
|
9
|
+
//
|
|
10
|
+
// **What it is not.** It does not fetch anything, it does not execute
|
|
11
|
+
// anything, and it never will: `onResource` and `onScript` are how an
|
|
12
|
+
// application supplies both, and a document rendered without them cannot
|
|
13
|
+
// reach the network or the disk. That is the whole security posture, and it
|
|
14
|
+
// is a property of the design rather than a setting.
|
|
15
|
+
import React from 'react';
|
|
16
|
+
import type { ReactElement, ReactNode } from 'react';
|
|
17
|
+
import {
|
|
18
|
+
Button,
|
|
19
|
+
Checkbox,
|
|
20
|
+
Radio,
|
|
21
|
+
RadioGroup,
|
|
22
|
+
Select,
|
|
23
|
+
useTheme,
|
|
24
|
+
} from 'react-x11';
|
|
25
|
+
import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
|
|
26
|
+
import { tint } from 'react-x11/style';
|
|
27
|
+
import type { Style } from 'react-x11/style';
|
|
28
|
+
|
|
29
|
+
import type {} from 'react-x11/jsx-runtime';
|
|
30
|
+
|
|
31
|
+
import { useLinkClicks, useSelectionMenu } from '../richtext/index.js';
|
|
32
|
+
import { hx } from './hx.js';
|
|
33
|
+
import { attr } from './dom.js';
|
|
34
|
+
import type { Document, Element } from './dom.js';
|
|
35
|
+
import { ELEMENT, HtmlViewNode, registerHtmlView } from './node.js';
|
|
36
|
+
import type { HtmlViewProps, ScriptRequest } from './node.js';
|
|
37
|
+
import type { RootLook } from './css/style.js';
|
|
38
|
+
import {
|
|
39
|
+
buttonLabel,
|
|
40
|
+
optionsOf,
|
|
41
|
+
selectedOption,
|
|
42
|
+
textareaValue,
|
|
43
|
+
} from './controls.js';
|
|
44
|
+
import type { ControlRect } from './controls.js';
|
|
45
|
+
import type { ResourceRequest, ResourceResult } from './resources.js';
|
|
46
|
+
|
|
47
|
+
export {
|
|
48
|
+
ELEMENT as HTMLVIEW_ELEMENT,
|
|
49
|
+
HtmlViewNode,
|
|
50
|
+
registerHtmlView,
|
|
51
|
+
} from './node.js';
|
|
52
|
+
export type { HtmlViewProps, ScriptRequest } from './node.js';
|
|
53
|
+
export type { ResourceRequest, ResourceResult } from './resources.js';
|
|
54
|
+
export type { ControlRect } from './controls.js';
|
|
55
|
+
export type { ComputedStyle, RootLook } from './css/style.js';
|
|
56
|
+
export type {
|
|
57
|
+
AnyNode,
|
|
58
|
+
ChildNode,
|
|
59
|
+
Document,
|
|
60
|
+
Element,
|
|
61
|
+
ParentNode,
|
|
62
|
+
} from './dom.js';
|
|
63
|
+
export {
|
|
64
|
+
appendChild,
|
|
65
|
+
createElement as createHtmlElement,
|
|
66
|
+
createText,
|
|
67
|
+
parseFragment,
|
|
68
|
+
removeNode,
|
|
69
|
+
replaceNode,
|
|
70
|
+
} from './dom.js';
|
|
71
|
+
|
|
72
|
+
const h = React.createElement;
|
|
73
|
+
|
|
74
|
+
// The one side effect, at this component's own module scope — the rule the
|
|
75
|
+
// whole tree-shaking contract rests on (AGENTS.md).
|
|
76
|
+
registerHtmlView();
|
|
77
|
+
|
|
78
|
+
// --- props -----------------------------------------------------------------
|
|
79
|
+
|
|
80
|
+
/** What the document may do to the outside world. Nothing, by default. */
|
|
81
|
+
export interface HtmlProps {
|
|
82
|
+
/** The HTML. Append to it as chunks stream in. */
|
|
83
|
+
source: string;
|
|
84
|
+
/**
|
|
85
|
+
* Whether more source may still arrive (default true, matching
|
|
86
|
+
* `<Markdown partial>`). While true the parser is left open and a `source`
|
|
87
|
+
* that extends the last one is written as a delta, so the nodes already
|
|
88
|
+
* parsed keep their identity and their layout. Set false when the stream
|
|
89
|
+
* ends.
|
|
90
|
+
*/
|
|
91
|
+
partial?: boolean;
|
|
92
|
+
/** Mouse selection, Ctrl+A / Ctrl+C, PRIMARY. Default true. */
|
|
93
|
+
selectable?: boolean;
|
|
94
|
+
/** Extra author stylesheets, applied after the document's own. */
|
|
95
|
+
stylesheet?: string | string[];
|
|
96
|
+
/**
|
|
97
|
+
* An external resource is wanted — an `<img src>`, a `<link rel=stylesheet>`
|
|
98
|
+
* or an `@import`. Return the bytes or the text, or a promise of them, or
|
|
99
|
+
* `null` to decline.
|
|
100
|
+
*
|
|
101
|
+
* **Absent, nothing loads.** This component has no network and no
|
|
102
|
+
* filesystem of its own; images render as a frame and linked stylesheets
|
|
103
|
+
* are skipped. The host is the one that knows its cache, its proxy and
|
|
104
|
+
* whether this document is trusted.
|
|
105
|
+
*/
|
|
106
|
+
onResource?: (
|
|
107
|
+
request: ResourceRequest,
|
|
108
|
+
) => Promise<ResourceResult | null> | ResourceResult | null;
|
|
109
|
+
/**
|
|
110
|
+
* A `<script>` was found. Handed over **unparsed and unevaluated** — the
|
|
111
|
+
* type, the `src`, the text, the element — for an application that brings
|
|
112
|
+
* its own engine. Nothing here reads it.
|
|
113
|
+
*/
|
|
114
|
+
onScript?: (script: ScriptRequest) => void;
|
|
115
|
+
/**
|
|
116
|
+
* A link was activated. Absent means clicks do nothing: this component
|
|
117
|
+
* never navigates by itself.
|
|
118
|
+
*/
|
|
119
|
+
onLink?: (href: string, ev: X11MouseEvent<DrawnNode>) => void;
|
|
120
|
+
/** The parsed document, each time it is re-parsed — the DOM handle. */
|
|
121
|
+
onDocument?: (document: Document) => void;
|
|
122
|
+
/**
|
|
123
|
+
* A form control changed. The element is the one in the DOM, so a handler
|
|
124
|
+
* that wants to keep the value writes it back with `setAttribute`-shaped
|
|
125
|
+
* mutation and calls the handle's `refresh()`.
|
|
126
|
+
*/
|
|
127
|
+
onControlChange?: (element: Element, value: string | boolean) => void;
|
|
128
|
+
/** Base text style. Defaults: theme `fontSize` (14), `sans-serif`. */
|
|
129
|
+
fontSize?: number;
|
|
130
|
+
fontFamily?: string;
|
|
131
|
+
/** Code font. Default `'monospace'` — there is no theme token for it. */
|
|
132
|
+
monoFamily?: string;
|
|
133
|
+
/** Selection band fill. Default: theme accent at 35% opacity. */
|
|
134
|
+
selectionColor?: string;
|
|
135
|
+
/** The root `<box>`'s style. */
|
|
136
|
+
style?: Style | Style[];
|
|
137
|
+
/**
|
|
138
|
+
* A handle on the element — what `useHtmlHandle()` supplies. React 19
|
|
139
|
+
* takes `ref` as an ordinary prop on a function component, so it is
|
|
140
|
+
* declared here rather than needing `forwardRef`; it is forwarded to
|
|
141
|
+
* `<htmlview>`, so what lands in it is the node that owns the document.
|
|
142
|
+
*/
|
|
143
|
+
ref?: React.Ref<unknown>;
|
|
144
|
+
'data-testname'?: string;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** What an application holds to read or change the document it rendered. */
|
|
148
|
+
export interface HtmlHandle {
|
|
149
|
+
/** The live DOM. Mutable: this is domhandler's tree, and `domutils` speaks
|
|
150
|
+
* it, as do the helpers this module re-exports. */
|
|
151
|
+
readonly document: Document | null;
|
|
152
|
+
/**
|
|
153
|
+
* The DOM changed — restyle, re-lay-out and repaint.
|
|
154
|
+
*
|
|
155
|
+
* Explicit rather than observed, and that is the trade the component makes
|
|
156
|
+
* on purpose: watching a plain object graph for mutations costs a proxy per
|
|
157
|
+
* node, which would tax the static render that this is built to make fast
|
|
158
|
+
* in order to speed up the path it is not. Mutation is supported; it is not
|
|
159
|
+
* what the performance budget was spent on.
|
|
160
|
+
*/
|
|
161
|
+
refresh(): void;
|
|
162
|
+
/** The element under a point, in the window's coordinates. */
|
|
163
|
+
elementAt(x: number, y: number): Element | null;
|
|
164
|
+
/** The document's `<title>`, if it had one. */
|
|
165
|
+
readonly title: string | null;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// --- the look ---------------------------------------------------------------
|
|
169
|
+
|
|
170
|
+
function deriveLook(
|
|
171
|
+
theme: Record<string, unknown>,
|
|
172
|
+
props: HtmlProps,
|
|
173
|
+
): RootLook {
|
|
174
|
+
const text = String(theme.text ?? '#2d3436');
|
|
175
|
+
return {
|
|
176
|
+
color: text,
|
|
177
|
+
fontFamily: props.fontFamily ?? 'sans-serif',
|
|
178
|
+
fontSize: props.fontSize ?? Number(theme.fontSize ?? 14),
|
|
179
|
+
monoFamily: props.monoFamily ?? 'monospace',
|
|
180
|
+
linkColor: String(theme.accent ?? '#2980b9'),
|
|
181
|
+
borderColor: String(theme.border ?? '#b2bec3'),
|
|
182
|
+
mutedColor: String(theme.textMuted ?? '#7f8c8d'),
|
|
183
|
+
background: String(theme.background ?? 'white'),
|
|
184
|
+
surface: String(theme.surface ?? theme.background ?? 'white'),
|
|
185
|
+
controlPadY: Number(theme.paddingY ?? 6),
|
|
186
|
+
controlBorder: Number(theme.borderWidth ?? 1),
|
|
187
|
+
controlRadius: Number(theme.radius ?? 4),
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// --- the component ----------------------------------------------------------
|
|
192
|
+
|
|
193
|
+
/**
|
|
194
|
+
* A rendered HTML document. Text selects across the whole of it — mouse
|
|
195
|
+
* (double/triple click for word and block), Ctrl+A, Ctrl+C, and X11 PRIMARY
|
|
196
|
+
* on release.
|
|
197
|
+
*
|
|
198
|
+
* ```jsx
|
|
199
|
+
* <box style={{ overflow: 'scroll', flexGrow: 1 }}>
|
|
200
|
+
* <Html source={html}
|
|
201
|
+
* onLink={(href) => openInBrowser(href)}
|
|
202
|
+
* onResource={(r) => r.kind === 'image' ? loadImage(r.url) : null} />
|
|
203
|
+
* </box>
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
export function Html(props: HtmlProps): ReactElement {
|
|
207
|
+
const {
|
|
208
|
+
source,
|
|
209
|
+
partial = true,
|
|
210
|
+
selectable = true,
|
|
211
|
+
stylesheet,
|
|
212
|
+
onLink,
|
|
213
|
+
onResource,
|
|
214
|
+
onScript,
|
|
215
|
+
onDocument,
|
|
216
|
+
onControlChange,
|
|
217
|
+
style,
|
|
218
|
+
} = props;
|
|
219
|
+
|
|
220
|
+
const theme = useTheme() as unknown as Record<string, unknown>;
|
|
221
|
+
const links = useLinkClicks(onLink);
|
|
222
|
+
const menu = useSelectionMenu(selectable);
|
|
223
|
+
|
|
224
|
+
const look = React.useMemo(
|
|
225
|
+
() => deriveLook(theme, props),
|
|
226
|
+
[theme, props.fontSize, props.fontFamily, props.monoFamily],
|
|
227
|
+
);
|
|
228
|
+
|
|
229
|
+
const documentRef = React.useRef<Document | null>(null);
|
|
230
|
+
const [controls, setControls] = React.useState<ControlRect[]>([]);
|
|
231
|
+
const [domRevision, setDomRevision] = React.useState(0);
|
|
232
|
+
|
|
233
|
+
const handleDocument = React.useCallback(
|
|
234
|
+
(doc: Document) => {
|
|
235
|
+
documentRef.current = doc;
|
|
236
|
+
onDocument?.(doc);
|
|
237
|
+
},
|
|
238
|
+
[onDocument],
|
|
239
|
+
);
|
|
240
|
+
|
|
241
|
+
// The controls the element reports are held as state because they are React
|
|
242
|
+
// elements: the element decides *where* a widget goes, React decides what it
|
|
243
|
+
// is. Same split as `<Flow onNodeBodies>`, and for the same reason — a
|
|
244
|
+
// painted control is a picture of a control.
|
|
245
|
+
const handleControls = React.useCallback((rects: ControlRect[]) => {
|
|
246
|
+
setControls(rects);
|
|
247
|
+
}, []);
|
|
248
|
+
|
|
249
|
+
const selectionColor =
|
|
250
|
+
props.selectionColor ?? tint(String(theme.accent ?? '#2980b9'), 0.35);
|
|
251
|
+
|
|
252
|
+
const viewProps: HtmlViewProps & { ref?: React.Ref<unknown> } = {
|
|
253
|
+
source,
|
|
254
|
+
complete: !partial,
|
|
255
|
+
stylesheet,
|
|
256
|
+
look,
|
|
257
|
+
selectionColor,
|
|
258
|
+
onResource,
|
|
259
|
+
onScript,
|
|
260
|
+
onDocument: handleDocument,
|
|
261
|
+
onControls: handleControls,
|
|
262
|
+
domRevision,
|
|
263
|
+
ref: props.ref as React.Ref<unknown>,
|
|
264
|
+
style: { alignSelf: 'stretch' },
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
const children: ReactNode[] = [
|
|
268
|
+
h(ELEMENT, { key: 'view', ...viewProps } as Record<string, unknown>),
|
|
269
|
+
];
|
|
270
|
+
for (const rect of controls) {
|
|
271
|
+
children.push(
|
|
272
|
+
renderControl(
|
|
273
|
+
rect,
|
|
274
|
+
look,
|
|
275
|
+
() => setDomRevision((n) => n + 1),
|
|
276
|
+
onControlChange,
|
|
277
|
+
),
|
|
278
|
+
);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const rootStyle: Style = { flexDirection: 'column', position: 'relative' };
|
|
282
|
+
return hx(
|
|
283
|
+
'box',
|
|
284
|
+
{
|
|
285
|
+
style: style
|
|
286
|
+
? [rootStyle, ...(Array.isArray(style) ? style : [style])]
|
|
287
|
+
: rootStyle,
|
|
288
|
+
// The whole selection: a drag across the document, word and block
|
|
289
|
+
// granularity, Ctrl+A, Ctrl+C, PRIMARY on release, and one visible
|
|
290
|
+
// selection per application. One element answers for every paragraph,
|
|
291
|
+
// so there is nothing per-block to thread through.
|
|
292
|
+
selectable,
|
|
293
|
+
selectionColor: props.selectionColor,
|
|
294
|
+
...links,
|
|
295
|
+
...menu,
|
|
296
|
+
'data-testname': props['data-testname'],
|
|
297
|
+
} as Record<string, unknown>,
|
|
298
|
+
...children,
|
|
299
|
+
);
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/**
|
|
303
|
+
* A handle on a rendered document, for reading or changing it.
|
|
304
|
+
*
|
|
305
|
+
* ```jsx
|
|
306
|
+
* const handle = useHtmlHandle();
|
|
307
|
+
* <Html source={html} ref={handle.ref} />
|
|
308
|
+
* // later
|
|
309
|
+
* handle.document?.children … // domhandler's tree
|
|
310
|
+
* handle.refresh(); // and the view catches up
|
|
311
|
+
* ```
|
|
312
|
+
*/
|
|
313
|
+
export function useHtmlHandle(): HtmlHandle & { ref: React.Ref<unknown> } {
|
|
314
|
+
const nodeRef = React.useRef<HtmlViewNode | null>(null);
|
|
315
|
+
const [, force] = React.useReducer((n: number) => n + 1, 0);
|
|
316
|
+
return React.useMemo(
|
|
317
|
+
() => ({
|
|
318
|
+
ref: nodeRef as unknown as React.Ref<unknown>,
|
|
319
|
+
get document() {
|
|
320
|
+
return nodeRef.current?.document ?? null;
|
|
321
|
+
},
|
|
322
|
+
get title() {
|
|
323
|
+
return nodeRef.current?.title ?? null;
|
|
324
|
+
},
|
|
325
|
+
refresh: () => {
|
|
326
|
+
nodeRef.current?.touchDocument();
|
|
327
|
+
force();
|
|
328
|
+
},
|
|
329
|
+
elementAt: (x: number, y: number) =>
|
|
330
|
+
nodeRef.current?.elementAtPoint(x, y) ?? null,
|
|
331
|
+
}),
|
|
332
|
+
[],
|
|
333
|
+
);
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
// --- the widgets ------------------------------------------------------------
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* One form control, as a real widget at the rectangle layout reserved for it.
|
|
340
|
+
*
|
|
341
|
+
* Every one of these is a **core** widget rather than something drawn here:
|
|
342
|
+
* a `<select>` in a document drops the same menu as a `<Select>` in the
|
|
343
|
+
* window around it, a `<textinput>` gets the same caret, the same IME and the
|
|
344
|
+
* same edit menu, and all of them join the window's focus order. The
|
|
345
|
+
* alternative — drawing them in the paint pass — would be a picture of a form.
|
|
346
|
+
*/
|
|
347
|
+
function renderControl(
|
|
348
|
+
rect: ControlRect,
|
|
349
|
+
look: RootLook,
|
|
350
|
+
touch: () => void,
|
|
351
|
+
onChange: HtmlProps['onControlChange'],
|
|
352
|
+
): ReactNode {
|
|
353
|
+
const el = rect.element;
|
|
354
|
+
const key = `${rect.kind}:${rect.x},${rect.y}`;
|
|
355
|
+
const disabled = attr(el, 'disabled') !== undefined;
|
|
356
|
+
const readOnly = attr(el, 'readonly') !== undefined;
|
|
357
|
+
const frame: Style = {
|
|
358
|
+
position: 'absolute',
|
|
359
|
+
left: Math.round(rect.x),
|
|
360
|
+
top: Math.round(rect.y),
|
|
361
|
+
width: Math.round(rect.width),
|
|
362
|
+
height: Math.round(rect.height),
|
|
363
|
+
};
|
|
364
|
+
const report = (value: string | boolean): void => {
|
|
365
|
+
onChange?.(el, value);
|
|
366
|
+
touch();
|
|
367
|
+
};
|
|
368
|
+
// A text edit does NOT touch: the value lives in the widget and is echoed
|
|
369
|
+
// into the DOM attribute, and neither changes any box — while `touch()`
|
|
370
|
+
// would re-run the cascade and relayout the whole document *per
|
|
371
|
+
// keystroke*. This also matches HTML's own semantics: typing updates the
|
|
372
|
+
// value property, not the attribute selectors match against. The
|
|
373
|
+
// checkables keep the full touch, because `[checked]` is a selector
|
|
374
|
+
// documents really use.
|
|
375
|
+
const reportText = (value: string): void => {
|
|
376
|
+
onChange?.(el, value);
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
let widget: ReactNode;
|
|
380
|
+
switch (rect.kind) {
|
|
381
|
+
case 'checkbox':
|
|
382
|
+
widget = h(Checkbox, {
|
|
383
|
+
checked: attr(el, 'checked') !== undefined,
|
|
384
|
+
disabled,
|
|
385
|
+
onChange: (ev) => {
|
|
386
|
+
const next = ev.value;
|
|
387
|
+
if (next) el.attribs.checked = '';
|
|
388
|
+
else delete el.attribs.checked;
|
|
389
|
+
report(next);
|
|
390
|
+
},
|
|
391
|
+
});
|
|
392
|
+
break;
|
|
393
|
+
case 'radio': {
|
|
394
|
+
// Core's radio is a group member and HTML's is a free-standing input
|
|
395
|
+
// that happens to share a `name`. Each one is therefore its own
|
|
396
|
+
// one-member `RadioGroup`, and the exclusivity that makes it a group
|
|
397
|
+
// is done where HTML actually keeps it: in the DOM.
|
|
398
|
+
const value = attr(el, 'value') ?? 'on';
|
|
399
|
+
widget = h(
|
|
400
|
+
RadioGroup,
|
|
401
|
+
{
|
|
402
|
+
value: attr(el, 'checked') !== undefined ? value : undefined,
|
|
403
|
+
onChange: () => {
|
|
404
|
+
clearRadioGroup(el);
|
|
405
|
+
el.attribs.checked = '';
|
|
406
|
+
report(value);
|
|
407
|
+
},
|
|
408
|
+
},
|
|
409
|
+
h(Radio, { key: 'r', value, disabled }),
|
|
410
|
+
);
|
|
411
|
+
break;
|
|
412
|
+
}
|
|
413
|
+
case 'button':
|
|
414
|
+
widget = h(Button, {
|
|
415
|
+
label: buttonLabel(el),
|
|
416
|
+
disabled,
|
|
417
|
+
style: { width: '100%', height: '100%' },
|
|
418
|
+
onPress: () => report(attr(el, 'value') ?? ''),
|
|
419
|
+
});
|
|
420
|
+
break;
|
|
421
|
+
case 'select': {
|
|
422
|
+
const options = optionsOf(el);
|
|
423
|
+
widget = h(Select, {
|
|
424
|
+
options: options.map((o) => ({ value: o.value, label: o.label })),
|
|
425
|
+
value: selectedOption(el) ?? undefined,
|
|
426
|
+
disabled,
|
|
427
|
+
style: { width: '100%', height: '100%' },
|
|
428
|
+
onChange: (ev) => {
|
|
429
|
+
const next = String(ev.value ?? '');
|
|
430
|
+
setSelectedOption(el, next);
|
|
431
|
+
report(next);
|
|
432
|
+
},
|
|
433
|
+
});
|
|
434
|
+
break;
|
|
435
|
+
}
|
|
436
|
+
case 'textarea':
|
|
437
|
+
// Uncontrolled on purpose: the widget owns the live text the way a
|
|
438
|
+
// browser's does, and a re-render from any other cause remounts it
|
|
439
|
+
// with whatever was last echoed into the DOM.
|
|
440
|
+
widget = hx('textarea', {
|
|
441
|
+
defaultValue: textareaValue(el),
|
|
442
|
+
style: [fieldChrome(look), { width: '100%', height: '100%' }],
|
|
443
|
+
onChange: readOnly ? undefined : (ev) => reportText(ev.value),
|
|
444
|
+
});
|
|
445
|
+
break;
|
|
446
|
+
case 'input': {
|
|
447
|
+
const type = (attr(el, 'type') ?? 'text').toLowerCase();
|
|
448
|
+
widget = hx('textinput', {
|
|
449
|
+
defaultValue: attr(el, 'value') ?? '',
|
|
450
|
+
placeholder: attr(el, 'placeholder'),
|
|
451
|
+
// Core's word for a password field: nothing in it reaches a
|
|
452
|
+
// selection, PRIMARY included.
|
|
453
|
+
sensitive: type === 'password',
|
|
454
|
+
style: [fieldChrome(look), { width: '100%', height: '100%' }],
|
|
455
|
+
onChange: readOnly
|
|
456
|
+
? undefined
|
|
457
|
+
: (ev) => {
|
|
458
|
+
el.attribs.value = ev.value;
|
|
459
|
+
reportText(ev.value);
|
|
460
|
+
},
|
|
461
|
+
});
|
|
462
|
+
break;
|
|
463
|
+
}
|
|
464
|
+
default:
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
return hx('box', { key, style: frame, selectable: false }, widget);
|
|
468
|
+
}
|
|
469
|
+
|
|
470
|
+
/**
|
|
471
|
+
* The chrome a text field needs.
|
|
472
|
+
*
|
|
473
|
+
* `<textinput>` and `<textarea>` are core *elements* rather than components,
|
|
474
|
+
* so they draw no frame of their own — an application supplies one, which is
|
|
475
|
+
* why core's own `<Button>` and `<Select>` are components and these are not.
|
|
476
|
+
* The values are the palette's, so a field in a document and a `<Select>`
|
|
477
|
+
* beside it are the same height with the same corner and the same edge.
|
|
478
|
+
*/
|
|
479
|
+
function fieldChrome(look: RootLook): Style {
|
|
480
|
+
return {
|
|
481
|
+
backgroundColor: look.surface,
|
|
482
|
+
borderWidth: look.controlBorder,
|
|
483
|
+
borderColor: look.borderColor,
|
|
484
|
+
borderRadius: look.controlRadius,
|
|
485
|
+
paddingLeft: 6,
|
|
486
|
+
paddingRight: 6,
|
|
487
|
+
color: look.color,
|
|
488
|
+
fontFamily: look.fontFamily,
|
|
489
|
+
fontSize: look.fontSize,
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
function clearRadioGroup(el: Element): void {
|
|
494
|
+
const name = attr(el, 'name');
|
|
495
|
+
if (!name) return;
|
|
496
|
+
let root: Element | null = el;
|
|
497
|
+
while (root?.parent && root.parent.type === 'tag')
|
|
498
|
+
root = root.parent as Element;
|
|
499
|
+
if (!root) return;
|
|
500
|
+
const walk = (node: Element): void => {
|
|
501
|
+
for (const child of node.children) {
|
|
502
|
+
if (child.type !== 'tag') continue;
|
|
503
|
+
const tag = child.name.toLowerCase();
|
|
504
|
+
if (
|
|
505
|
+
tag === 'input' &&
|
|
506
|
+
(child.attribs.type ?? '').toLowerCase() === 'radio' &&
|
|
507
|
+
child.attribs.name === name
|
|
508
|
+
) {
|
|
509
|
+
delete child.attribs.checked;
|
|
510
|
+
}
|
|
511
|
+
walk(child);
|
|
512
|
+
}
|
|
513
|
+
};
|
|
514
|
+
walk(root);
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
function setSelectedOption(el: Element, value: string): void {
|
|
518
|
+
const walk = (node: Element): void => {
|
|
519
|
+
for (const child of node.children) {
|
|
520
|
+
if (child.type !== 'tag') continue;
|
|
521
|
+
if (child.name.toLowerCase() === 'option') {
|
|
522
|
+
let label = '';
|
|
523
|
+
for (const kid of child.children) {
|
|
524
|
+
if (kid.type === 'text') label += kid.data;
|
|
525
|
+
}
|
|
526
|
+
const own = child.attribs.value ?? label.trim();
|
|
527
|
+
if (own === value) child.attribs.selected = '';
|
|
528
|
+
else delete child.attribs.selected;
|
|
529
|
+
}
|
|
530
|
+
walk(child);
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
walk(el);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
declare module 'react-x11/jsx-runtime' {
|
|
537
|
+
namespace JSX {
|
|
538
|
+
interface IntrinsicElements {
|
|
539
|
+
htmlview: HtmlViewProps & {
|
|
540
|
+
key?: string | number;
|
|
541
|
+
ref?: React.Ref<unknown>;
|
|
542
|
+
};
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
}
|