@react-x11/components 0.9.0 → 0.11.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 +10 -4
- package/dist/charts/node.d.ts +11 -1
- package/dist/charts/node.d.ts.map +1 -1
- package/dist/charts/node.js +44 -14
- package/dist/charts/node.js.map +1 -1
- package/dist/charts/render.d.ts +12 -3
- package/dist/charts/render.d.ts.map +1 -1
- package/dist/charts/render.js +94 -25
- package/dist/charts/render.js.map +1 -1
- package/dist/code/index.d.ts.map +1 -1
- package/dist/code/index.js +27 -24
- package/dist/code/index.js.map +1 -1
- package/dist/code-editor/completion.d.ts.map +1 -1
- package/dist/code-editor/completion.js +3 -2
- package/dist/code-editor/completion.js.map +1 -1
- package/dist/code-editor/index.d.ts.map +1 -1
- package/dist/code-editor/index.js +19 -0
- package/dist/code-editor/index.js.map +1 -1
- package/dist/code-editor/node.d.ts +177 -7
- package/dist/code-editor/node.d.ts.map +1 -1
- package/dist/code-editor/node.js +1329 -164
- package/dist/code-editor/node.js.map +1 -1
- package/dist/code-language/index.d.ts +1 -1
- package/dist/code-language/index.d.ts.map +1 -1
- package/dist/code-language/index.js +1 -1
- package/dist/code-language/index.js.map +1 -1
- package/dist/code-language/languages/glsl.d.ts.map +1 -1
- package/dist/code-language/languages/glsl.js +10 -2
- package/dist/code-language/languages/glsl.js.map +1 -1
- package/dist/code-language/languages/javascript.d.ts.map +1 -1
- package/dist/code-language/languages/javascript.js +18 -3
- package/dist/code-language/languages/javascript.js.map +1 -1
- package/dist/code-language/languages/json.d.ts.map +1 -1
- package/dist/code-language/languages/json.js +10 -2
- package/dist/code-language/languages/json.js.map +1 -1
- package/dist/code-language/languages/shell.d.ts.map +1 -1
- package/dist/code-language/languages/shell.js +10 -2
- package/dist/code-language/languages/shell.js.map +1 -1
- package/dist/code-language/languages/sql.d.ts.map +1 -1
- package/dist/code-language/languages/sql.js +20 -2
- package/dist/code-language/languages/sql.js.map +1 -1
- package/dist/code-language/runs.d.ts +31 -0
- package/dist/code-language/runs.d.ts.map +1 -1
- package/dist/code-language/runs.js +105 -0
- package/dist/code-language/runs.js.map +1 -1
- package/dist/code-language/stream.d.ts +22 -0
- package/dist/code-language/stream.d.ts.map +1 -1
- package/dist/code-language/stream.js +259 -9
- package/dist/code-language/stream.js.map +1 -1
- package/dist/code-language/types.d.ts +5 -4
- package/dist/code-language/types.d.ts.map +1 -1
- package/dist/codeblock/index.d.ts +26 -2
- package/dist/codeblock/index.d.ts.map +1 -1
- package/dist/codeblock/index.js +57 -4
- package/dist/codeblock/index.js.map +1 -1
- package/dist/flow/draw.d.ts +50 -0
- package/dist/flow/draw.d.ts.map +1 -1
- package/dist/flow/draw.js +132 -33
- package/dist/flow/draw.js.map +1 -1
- package/dist/flow/gl/color.d.ts +13 -0
- package/dist/flow/gl/color.d.ts.map +1 -0
- package/dist/flow/gl/color.js +82 -0
- package/dist/flow/gl/color.js.map +1 -0
- package/dist/flow/gl/index.d.ts +60 -0
- package/dist/flow/gl/index.d.ts.map +1 -0
- package/dist/flow/gl/index.js +283 -0
- package/dist/flow/gl/index.js.map +1 -0
- package/dist/flow/gl/pack.d.ts +133 -0
- package/dist/flow/gl/pack.d.ts.map +1 -0
- package/dist/flow/gl/pack.js +408 -0
- package/dist/flow/gl/pack.js.map +1 -0
- package/dist/flow/gl/renderer.d.ts +95 -0
- package/dist/flow/gl/renderer.d.ts.map +1 -0
- package/dist/flow/gl/renderer.js +459 -0
- package/dist/flow/gl/renderer.js.map +1 -0
- package/dist/flow/gl/shaders.d.ts +79 -0
- package/dist/flow/gl/shaders.d.ts.map +1 -0
- package/dist/flow/gl/shaders.js +346 -0
- package/dist/flow/gl/shaders.js.map +1 -0
- package/dist/flow/gl/text.d.ts +318 -0
- package/dist/flow/gl/text.d.ts.map +1 -0
- package/dist/flow/gl/text.js +1103 -0
- package/dist/flow/gl/text.js.map +1 -0
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.d.ts.map +1 -1
- package/dist/flow/index.js +619 -64
- package/dist/flow/index.js.map +1 -1
- package/dist/flow/node.d.ts +621 -72
- package/dist/flow/node.d.ts.map +1 -1
- package/dist/flow/node.js +2253 -1018
- package/dist/flow/node.js.map +1 -1
- package/dist/flow/paint.d.ts +35 -0
- package/dist/flow/paint.d.ts.map +1 -0
- package/dist/flow/paint.js +393 -0
- package/dist/flow/paint.js.map +1 -0
- package/dist/flow/paths.d.ts +14 -0
- package/dist/flow/paths.d.ts.map +1 -1
- package/dist/flow/paths.js +45 -19
- package/dist/flow/paths.js.map +1 -1
- package/dist/flow/scene.d.ts +584 -0
- package/dist/flow/scene.d.ts.map +1 -0
- package/dist/flow/scene.js +1453 -0
- package/dist/flow/scene.js.map +1 -0
- package/dist/flow/types.d.ts +111 -1
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/html/controls.d.ts +28 -0
- package/dist/html/controls.d.ts.map +1 -1
- package/dist/html/controls.js +52 -2
- package/dist/html/controls.js.map +1 -1
- package/dist/html/css/calc.d.ts +14 -0
- package/dist/html/css/calc.d.ts.map +1 -0
- package/dist/html/css/calc.js +344 -0
- package/dist/html/css/calc.js.map +1 -0
- package/dist/html/css/cascade.d.ts +262 -6
- package/dist/html/css/cascade.d.ts.map +1 -1
- package/dist/html/css/cascade.js +1373 -67
- package/dist/html/css/cascade.js.map +1 -1
- package/dist/html/css/color.d.ts +23 -0
- package/dist/html/css/color.d.ts.map +1 -0
- package/dist/html/css/color.js +740 -0
- package/dist/html/css/color.js.map +1 -0
- package/dist/html/css/content.d.ts +92 -0
- package/dist/html/css/content.d.ts.map +1 -0
- package/dist/html/css/content.js +388 -0
- package/dist/html/css/content.js.map +1 -0
- package/dist/html/css/counter-styles.d.ts +76 -0
- package/dist/html/css/counter-styles.d.ts.map +1 -0
- package/dist/html/css/counter-styles.js +893 -0
- package/dist/html/css/counter-styles.js.map +1 -0
- package/dist/html/css/decode.d.ts +12 -0
- package/dist/html/css/decode.d.ts.map +1 -0
- package/dist/html/css/decode.js +116 -0
- package/dist/html/css/decode.js.map +1 -0
- package/dist/html/css/parse.d.ts +110 -10
- package/dist/html/css/parse.d.ts.map +1 -1
- package/dist/html/css/parse.js +1473 -180
- package/dist/html/css/parse.js.map +1 -1
- package/dist/html/css/style.d.ts +501 -15
- package/dist/html/css/style.d.ts.map +1 -1
- package/dist/html/css/style.js +3729 -206
- package/dist/html/css/style.js.map +1 -1
- package/dist/html/css/ua.d.ts.map +1 -1
- package/dist/html/css/ua.js +65 -16
- package/dist/html/css/ua.js.map +1 -1
- package/dist/html/css/values.d.ts +37 -3
- package/dist/html/css/values.d.ts.map +1 -1
- package/dist/html/css/values.js +122 -48
- package/dist/html/css/values.js.map +1 -1
- package/dist/html/css/vars.d.ts +52 -0
- package/dist/html/css/vars.d.ts.map +1 -0
- package/dist/html/css/vars.js +358 -0
- package/dist/html/css/vars.js.map +1 -0
- package/dist/html/dom.d.ts +30 -4
- package/dist/html/dom.d.ts.map +1 -1
- package/dist/html/dom.js +278 -17
- package/dist/html/dom.js.map +1 -1
- package/dist/html/fonts.d.ts +106 -0
- package/dist/html/fonts.d.ts.map +1 -0
- package/dist/html/fonts.js +565 -0
- package/dist/html/fonts.js.map +1 -0
- package/dist/html/gif.d.ts +15 -0
- package/dist/html/gif.d.ts.map +1 -0
- package/dist/html/gif.js +229 -0
- package/dist/html/gif.js.map +1 -0
- package/dist/html/index.d.ts +50 -11
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +115 -9
- package/dist/html/index.js.map +1 -1
- package/dist/html/layout/block.d.ts +226 -3
- package/dist/html/layout/block.d.ts.map +1 -1
- package/dist/html/layout/block.js +3077 -219
- package/dist/html/layout/block.js.map +1 -1
- package/dist/html/layout/boxes.d.ts +367 -17
- package/dist/html/layout/boxes.d.ts.map +1 -1
- package/dist/html/layout/boxes.js +1742 -182
- package/dist/html/layout/boxes.js.map +1 -1
- package/dist/html/layout/cache.d.ts +58 -0
- package/dist/html/layout/cache.d.ts.map +1 -0
- package/dist/html/layout/cache.js +224 -0
- package/dist/html/layout/cache.js.map +1 -0
- package/dist/html/layout/collapse.d.ts +45 -0
- package/dist/html/layout/collapse.d.ts.map +1 -0
- package/dist/html/layout/collapse.js +246 -0
- package/dist/html/layout/collapse.js.map +1 -0
- package/dist/html/layout/css-grid.d.ts +7 -0
- package/dist/html/layout/css-grid.d.ts.map +1 -0
- package/dist/html/layout/css-grid.js +900 -0
- package/dist/html/layout/css-grid.js.map +1 -0
- package/dist/html/layout/flex.d.ts.map +1 -1
- package/dist/html/layout/flex.js +1025 -89
- package/dist/html/layout/flex.js.map +1 -1
- package/dist/html/layout/floats.d.ts +45 -6
- package/dist/html/layout/floats.d.ts.map +1 -1
- package/dist/html/layout/floats.js +113 -14
- package/dist/html/layout/floats.js.map +1 -1
- package/dist/html/layout/grid-lines.d.ts +39 -0
- package/dist/html/layout/grid-lines.d.ts.map +1 -0
- package/dist/html/layout/grid-lines.js +119 -0
- package/dist/html/layout/grid-lines.js.map +1 -0
- package/dist/html/layout/grid.d.ts +53 -0
- package/dist/html/layout/grid.d.ts.map +1 -0
- package/dist/html/layout/grid.js +153 -0
- package/dist/html/layout/grid.js.map +1 -0
- package/dist/html/layout/inline.d.ts +154 -1
- package/dist/html/layout/inline.d.ts.map +1 -1
- package/dist/html/layout/inline.js +3598 -175
- package/dist/html/layout/inline.js.map +1 -1
- package/dist/html/layout/shaping.d.ts +6 -0
- package/dist/html/layout/shaping.d.ts.map +1 -0
- package/dist/html/layout/shaping.js +100 -0
- package/dist/html/layout/shaping.js.map +1 -0
- package/dist/html/layout/table.d.ts +3 -0
- package/dist/html/layout/table.d.ts.map +1 -1
- package/dist/html/layout/table.js +681 -175
- package/dist/html/layout/table.js.map +1 -1
- package/dist/html/layout/tracks.d.ts +44 -0
- package/dist/html/layout/tracks.d.ts.map +1 -0
- package/dist/html/layout/tracks.js +349 -0
- package/dist/html/layout/tracks.js.map +1 -0
- package/dist/html/node.d.ts +169 -4
- package/dist/html/node.d.ts.map +1 -1
- package/dist/html/node.js +1429 -137
- package/dist/html/node.js.map +1 -1
- package/dist/html/paint.d.ts +92 -3
- package/dist/html/paint.d.ts.map +1 -1
- package/dist/html/paint.js +3635 -107
- package/dist/html/paint.js.map +1 -1
- package/dist/html/resources.d.ts +60 -14
- package/dist/html/resources.d.ts.map +1 -1
- package/dist/html/resources.js +122 -36
- package/dist/html/resources.js.map +1 -1
- package/dist/html/surfaces.d.ts +23 -0
- package/dist/html/surfaces.d.ts.map +1 -0
- package/dist/html/surfaces.js +68 -0
- package/dist/html/surfaces.js.map +1 -0
- package/dist/html/svg.d.ts +80 -0
- package/dist/html/svg.d.ts.map +1 -0
- package/dist/html/svg.js +442 -0
- package/dist/html/svg.js.map +1 -0
- package/dist/html/url.d.ts +23 -0
- package/dist/html/url.d.ts.map +1 -0
- package/dist/html/url.js +80 -0
- package/dist/html/url.js.map +1 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/codelines.d.ts +42 -0
- package/dist/internal/codelines.d.ts.map +1 -0
- package/dist/internal/codelines.js +170 -0
- package/dist/internal/codelines.js.map +1 -0
- package/dist/internal/collate.d.ts +3 -0
- package/dist/internal/collate.d.ts.map +1 -0
- package/dist/internal/collate.js +11 -0
- package/dist/internal/collate.js.map +1 -0
- package/dist/internal/markdown/ast.d.ts +11 -0
- package/dist/internal/markdown/ast.d.ts.map +1 -1
- package/dist/internal/markdown/parse.d.ts.map +1 -1
- package/dist/internal/markdown/parse.js +109 -8
- package/dist/internal/markdown/parse.js.map +1 -1
- package/dist/internal/prewarm.d.ts +18 -0
- package/dist/internal/prewarm.d.ts.map +1 -0
- package/dist/internal/prewarm.js +42 -0
- package/dist/internal/prewarm.js.map +1 -0
- package/dist/internal/sdf.d.ts +20 -0
- package/dist/internal/sdf.d.ts.map +1 -0
- package/dist/internal/sdf.js +216 -0
- package/dist/internal/sdf.js.map +1 -0
- package/dist/internal/splice.d.ts +12 -0
- package/dist/internal/splice.d.ts.map +1 -0
- package/dist/internal/splice.js +23 -0
- package/dist/internal/splice.js.map +1 -0
- package/dist/internal/window.d.ts +12 -0
- package/dist/internal/window.d.ts.map +1 -1
- package/dist/internal/window.js +23 -6
- package/dist/internal/window.js.map +1 -1
- package/dist/maps/anchors.d.ts +6 -1
- package/dist/maps/anchors.d.ts.map +1 -1
- package/dist/maps/anchors.js +260 -1
- package/dist/maps/anchors.js.map +1 -1
- package/dist/maps/controller.d.ts +57 -0
- package/dist/maps/controller.d.ts.map +1 -1
- package/dist/maps/controller.js +97 -18
- package/dist/maps/controller.js.map +1 -1
- package/dist/maps/gl/buckets.d.ts +5 -1
- package/dist/maps/gl/buckets.d.ts.map +1 -1
- package/dist/maps/gl/buckets.js +5 -2
- package/dist/maps/gl/buckets.js.map +1 -1
- package/dist/maps/gl/build-worker.d.ts +2 -0
- package/dist/maps/gl/build-worker.d.ts.map +1 -1
- package/dist/maps/gl/build-worker.js +1 -1
- package/dist/maps/gl/build-worker.js.map +1 -1
- package/dist/maps/gl/cover.d.ts +23 -4
- package/dist/maps/gl/cover.d.ts.map +1 -1
- package/dist/maps/gl/cover.js +61 -48
- package/dist/maps/gl/cover.js.map +1 -1
- package/dist/maps/gl/placement.d.ts +21 -8
- package/dist/maps/gl/placement.d.ts.map +1 -1
- package/dist/maps/gl/placement.js +133 -58
- package/dist/maps/gl/placement.js.map +1 -1
- package/dist/maps/gl/renderer.d.ts +36 -4
- package/dist/maps/gl/renderer.d.ts.map +1 -1
- package/dist/maps/gl/renderer.js +81 -24
- package/dist/maps/gl/renderer.js.map +1 -1
- package/dist/maps/gl/shaders.d.ts +18 -17
- package/dist/maps/gl/shaders.d.ts.map +1 -1
- package/dist/maps/gl/shaders.js +34 -32
- package/dist/maps/gl/shaders.js.map +1 -1
- package/dist/maps/gl/store.d.ts +10 -0
- package/dist/maps/gl/store.d.ts.map +1 -1
- package/dist/maps/gl/store.js +47 -4
- package/dist/maps/gl/store.js.map +1 -1
- package/dist/maps/gl/text.d.ts +153 -24
- package/dist/maps/gl/text.d.ts.map +1 -1
- package/dist/maps/gl/text.js +379 -63
- package/dist/maps/gl/text.js.map +1 -1
- package/dist/maps/gl/view.d.ts +293 -2
- package/dist/maps/gl/view.d.ts.map +1 -1
- package/dist/maps/gl/view.js +317 -82
- package/dist/maps/gl/view.js.map +1 -1
- package/dist/maps/icons.d.ts +32 -0
- package/dist/maps/icons.d.ts.map +1 -0
- package/dist/maps/icons.js +151 -0
- package/dist/maps/icons.js.map +1 -0
- package/dist/maps/index.d.ts +2 -0
- package/dist/maps/index.d.ts.map +1 -1
- package/dist/maps/index.js +2 -0
- package/dist/maps/index.js.map +1 -1
- package/dist/maps/labels.d.ts +56 -4
- package/dist/maps/labels.d.ts.map +1 -1
- package/dist/maps/labels.js +213 -46
- package/dist/maps/labels.js.map +1 -1
- package/dist/maps/node.d.ts +17 -0
- package/dist/maps/node.d.ts.map +1 -1
- package/dist/maps/node.js +64 -30
- package/dist/maps/node.js.map +1 -1
- package/dist/maps/proj.d.ts +48 -0
- package/dist/maps/proj.d.ts.map +1 -1
- package/dist/maps/proj.js +73 -0
- package/dist/maps/proj.js.map +1 -1
- package/dist/maps/sources.d.ts +5 -3
- package/dist/maps/sources.d.ts.map +1 -1
- package/dist/maps/sources.js +5 -3
- package/dist/maps/sources.js.map +1 -1
- package/dist/maps/style.d.ts +35 -0
- package/dist/maps/style.d.ts.map +1 -1
- package/dist/maps/style.js.map +1 -1
- package/dist/maps/styles.d.ts +12 -0
- package/dist/maps/styles.d.ts.map +1 -1
- package/dist/maps/styles.js +120 -6
- package/dist/maps/styles.js.map +1 -1
- package/dist/maps/tiles.d.ts +31 -11
- package/dist/maps/tiles.d.ts.map +1 -1
- package/dist/maps/tiles.js +61 -27
- package/dist/maps/tiles.js.map +1 -1
- package/dist/maps/types.d.ts +28 -4
- package/dist/maps/types.d.ts.map +1 -1
- package/dist/markdown/index.d.ts.map +1 -1
- package/dist/markdown/index.js +209 -68
- package/dist/markdown/index.js.map +1 -1
- package/dist/markdown/spans.d.ts.map +1 -1
- package/dist/markdown/spans.js +6 -0
- package/dist/markdown/spans.js.map +1 -1
- package/dist/qml/containers.d.ts.map +1 -1
- package/dist/qml/containers.js +6 -1
- package/dist/qml/containers.js.map +1 -1
- package/dist/qml/interaction.d.ts.map +1 -1
- package/dist/qml/interaction.js +38 -5
- package/dist/qml/interaction.js.map +1 -1
- package/dist/qml/layouts.d.ts.map +1 -1
- package/dist/qml/layouts.js +21 -6
- package/dist/qml/layouts.js.map +1 -1
- package/dist/qml/qtquick.d.ts.map +1 -1
- package/dist/qml/qtquick.js +9 -2
- package/dist/qml/qtquick.js.map +1 -1
- package/dist/qml/react.d.ts.map +1 -1
- package/dist/qml/react.js +9 -7
- package/dist/qml/react.js.map +1 -1
- package/dist/reorder/clock.d.ts +7 -0
- package/dist/reorder/clock.d.ts.map +1 -0
- package/dist/reorder/clock.js +26 -0
- package/dist/reorder/clock.js.map +1 -0
- package/dist/reorder/index.d.ts +25 -3
- package/dist/reorder/index.d.ts.map +1 -1
- package/dist/reorder/index.js +64 -19
- package/dist/reorder/index.js.map +1 -1
- package/dist/rich-text-editor/index.d.ts +0 -11
- package/dist/rich-text-editor/index.d.ts.map +1 -1
- package/dist/rich-text-editor/index.js +38 -9
- package/dist/rich-text-editor/index.js.map +1 -1
- package/dist/rich-text-editor/keymap.d.ts.map +1 -1
- package/dist/rich-text-editor/keymap.js +2 -1
- package/dist/rich-text-editor/keymap.js.map +1 -1
- package/dist/rich-text-editor/keys.d.ts +17 -6
- package/dist/rich-text-editor/keys.d.ts.map +1 -1
- package/dist/rich-text-editor/keys.js +135 -26
- package/dist/rich-text-editor/keys.js.map +1 -1
- package/dist/rich-text-editor/markdown.d.ts.map +1 -1
- package/dist/rich-text-editor/markdown.js +30 -1
- package/dist/rich-text-editor/markdown.js.map +1 -1
- package/dist/rich-text-editor/marks.d.ts +9 -0
- package/dist/rich-text-editor/marks.d.ts.map +1 -0
- package/dist/rich-text-editor/marks.js +83 -0
- package/dist/rich-text-editor/marks.js.map +1 -0
- package/dist/rich-text-editor/render.d.ts.map +1 -1
- package/dist/rich-text-editor/render.js +28 -10
- package/dist/rich-text-editor/render.js.map +1 -1
- package/dist/rich-text-editor/replace.d.ts +13 -0
- package/dist/rich-text-editor/replace.d.ts.map +1 -0
- package/dist/rich-text-editor/replace.js +64 -0
- package/dist/rich-text-editor/replace.js.map +1 -0
- package/dist/rich-text-editor/toolbar.d.ts.map +1 -1
- package/dist/rich-text-editor/toolbar.js +1 -1
- package/dist/rich-text-editor/toolbar.js.map +1 -1
- package/dist/rich-text-editor/virtual.d.ts.map +1 -1
- package/dist/rich-text-editor/virtual.js +17 -0
- package/dist/rich-text-editor/virtual.js.map +1 -1
- package/dist/richtext/node.d.ts +46 -2
- package/dist/richtext/node.d.ts.map +1 -1
- package/dist/richtext/node.js +187 -4
- package/dist/richtext/node.js.map +1 -1
- package/dist/richtext/runs.d.ts +13 -8
- package/dist/richtext/runs.d.ts.map +1 -1
- package/dist/richtext/runs.js +18 -8
- package/dist/richtext/runs.js.map +1 -1
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/index.js +23 -0
- package/dist/table/index.js.map +1 -1
- package/dist/table/rows.d.ts +3 -2
- package/dist/table/rows.d.ts.map +1 -1
- package/dist/table/rows.js +20 -6
- package/dist/table/rows.js.map +1 -1
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +4 -0
- package/dist/terminal/index.js.map +1 -1
- package/dist/terminal/vt/pty.d.ts +13 -2
- package/dist/terminal/vt/pty.d.ts.map +1 -1
- package/dist/terminal/vt/pty.js +18 -3
- package/dist/terminal/vt/pty.js.map +1 -1
- package/dist/terminal-output/index.d.ts.map +1 -1
- package/dist/terminal-output/index.js +103 -23
- package/dist/terminal-output/index.js.map +1 -1
- package/dist/terminal-output/runs.d.ts +4 -1
- package/dist/terminal-output/runs.d.ts.map +1 -1
- package/dist/terminal-output/runs.js +5 -1
- package/dist/terminal-output/runs.js.map +1 -1
- package/dist/three/canvas.d.ts.map +1 -1
- package/dist/three/canvas.js +85 -7
- package/dist/three/canvas.js.map +1 -1
- package/dist/three/events.d.ts +22 -4
- package/dist/three/events.d.ts.map +1 -1
- package/dist/three/events.js +34 -4
- package/dist/three/events.js.map +1 -1
- package/dist/tree/index.d.ts.map +1 -1
- package/dist/tree/index.js +17 -0
- package/dist/tree/index.js.map +1 -1
- package/package.json +42 -33
- package/src/charts/node.ts +62 -26
- package/src/charts/render.ts +120 -30
- package/src/code/index.ts +36 -32
- package/src/code-editor/completion.ts +3 -2
- package/src/code-editor/index.ts +19 -0
- package/src/code-editor/node.ts +1574 -184
- package/src/code-language/index.ts +1 -1
- package/src/code-language/languages/glsl.ts +12 -2
- package/src/code-language/languages/javascript.ts +21 -4
- package/src/code-language/languages/json.ts +12 -2
- package/src/code-language/languages/shell.ts +12 -2
- package/src/code-language/languages/sql.ts +22 -2
- package/src/code-language/runs.ts +111 -1
- package/src/code-language/stream.ts +257 -17
- package/src/code-language/types.ts +5 -4
- package/src/codeblock/index.ts +68 -4
- package/src/flow/draw.ts +167 -41
- package/src/flow/gl/color.ts +85 -0
- package/src/flow/gl/index.ts +342 -0
- package/src/flow/gl/pack.ts +585 -0
- package/src/flow/gl/renderer.ts +679 -0
- package/src/flow/gl/shaders.ts +371 -0
- package/src/flow/gl/text.ts +1295 -0
- package/src/flow/index.ts +794 -67
- package/src/flow/node.ts +2496 -1256
- package/src/flow/paint.ts +511 -0
- package/src/flow/paths.ts +80 -15
- package/src/flow/scene.ts +2199 -0
- package/src/flow/types.ts +113 -1
- package/src/html/controls.ts +73 -2
- package/src/html/css/calc.ts +385 -0
- package/src/html/css/cascade.ts +1481 -62
- package/src/html/css/color.ts +755 -0
- package/src/html/css/content.ts +417 -0
- package/src/html/css/counter-styles.ts +973 -0
- package/src/html/css/decode.ts +130 -0
- package/src/html/css/parse.ts +1514 -160
- package/src/html/css/style.ts +4131 -223
- package/src/html/css/ua.ts +66 -17
- package/src/html/css/values.ts +150 -50
- package/src/html/css/vars.ts +348 -0
- package/src/html/dom.ts +284 -17
- package/src/html/fonts.ts +641 -0
- package/src/html/gif.ts +233 -0
- package/src/html/index.ts +180 -20
- package/src/html/layout/block.ts +3560 -208
- package/src/html/layout/boxes.ts +2141 -190
- package/src/html/layout/cache.ts +289 -0
- package/src/html/layout/collapse.ts +317 -0
- package/src/html/layout/css-grid.ts +1063 -0
- package/src/html/layout/flex.ts +1115 -106
- package/src/html/layout/floats.ts +128 -14
- package/src/html/layout/grid-lines.ts +141 -0
- package/src/html/layout/grid.ts +181 -0
- package/src/html/layout/inline.ts +4187 -192
- package/src/html/layout/shaping.ts +140 -0
- package/src/html/layout/table.ts +696 -186
- package/src/html/layout/tracks.ts +437 -0
- package/src/html/node.ts +1585 -156
- package/src/html/paint.ts +4582 -267
- package/src/html/resources.ts +161 -50
- package/src/html/surfaces.ts +81 -0
- package/src/html/svg.ts +504 -0
- package/src/html/url.ts +86 -0
- package/src/index.ts +2 -0
- package/src/internal/codelines.ts +200 -0
- package/src/internal/collate.ts +12 -0
- package/src/internal/markdown/ast.ts +11 -0
- package/src/internal/markdown/parse.ts +154 -11
- package/src/internal/prewarm.ts +45 -0
- package/src/internal/sdf.ts +227 -0
- package/src/internal/splice.ts +25 -0
- package/src/internal/window.ts +36 -5
- package/src/maps/anchors.ts +307 -1
- package/src/maps/controller.ts +116 -31
- package/src/maps/gl/buckets.ts +5 -1
- package/src/maps/gl/build-worker.ts +13 -2
- package/src/maps/gl/cover.ts +79 -44
- package/src/maps/gl/placement.ts +221 -69
- package/src/maps/gl/renderer.ts +104 -20
- package/src/maps/gl/shaders.ts +35 -32
- package/src/maps/gl/store.ts +66 -17
- package/src/maps/gl/text.ts +444 -71
- package/src/maps/gl/view.ts +361 -96
- package/src/maps/icons.ts +183 -0
- package/src/maps/index.ts +4 -0
- package/src/maps/labels.ts +269 -49
- package/src/maps/node.ts +82 -49
- package/src/maps/proj.ts +87 -0
- package/src/maps/sources.ts +5 -3
- package/src/maps/style.ts +32 -0
- package/src/maps/styles.ts +215 -4
- package/src/maps/tiles.ts +64 -31
- package/src/maps/types.ts +28 -4
- package/src/markdown/index.ts +293 -92
- package/src/markdown/spans.ts +5 -0
- package/src/qml/containers.tsx +6 -1
- package/src/qml/interaction.tsx +42 -5
- package/src/qml/layouts.tsx +21 -6
- package/src/qml/qtquick.tsx +9 -2
- package/src/qml/react.tsx +7 -5
- package/src/reorder/clock.ts +27 -0
- package/src/reorder/index.ts +100 -27
- package/src/rich-text-editor/index.ts +37 -12
- package/src/rich-text-editor/keymap.ts +1 -1
- package/src/rich-text-editor/keys.ts +135 -26
- package/src/rich-text-editor/markdown.ts +36 -1
- package/src/rich-text-editor/marks.ts +101 -0
- package/src/rich-text-editor/render.ts +49 -12
- package/src/rich-text-editor/replace.ts +85 -0
- package/src/rich-text-editor/toolbar.ts +1 -1
- package/src/rich-text-editor/virtual.ts +25 -0
- package/src/richtext/node.ts +235 -14
- package/src/richtext/runs.ts +23 -12
- package/src/table/index.ts +29 -0
- package/src/table/rows.ts +18 -8
- package/src/terminal/index.ts +4 -0
- package/src/terminal/vt/pty.ts +16 -2
- package/src/terminal-output/index.ts +129 -31
- package/src/terminal-output/runs.ts +16 -2
- package/src/three/canvas.ts +102 -8
- package/src/three/events.ts +49 -9
- package/src/tree/index.ts +19 -0
|
@@ -32,6 +32,7 @@ import { ansiPalette, parseAnsi } from '../ansi/index.js';
|
|
|
32
32
|
import type {
|
|
33
33
|
AnsiDocument,
|
|
34
34
|
AnsiInput,
|
|
35
|
+
AnsiLine,
|
|
35
36
|
AnsiPaletteOptions,
|
|
36
37
|
} from '../ansi/index.js';
|
|
37
38
|
import {
|
|
@@ -40,14 +41,15 @@ import {
|
|
|
40
41
|
useLinkClicks,
|
|
41
42
|
useSelectionMenu,
|
|
42
43
|
} from '../richtext/index.js';
|
|
43
|
-
import type { RichTextProps
|
|
44
|
+
import type { RichTextProps } from '../richtext/index.js';
|
|
44
45
|
import {
|
|
45
46
|
codeBlockLook,
|
|
46
47
|
codeBlockStyle,
|
|
47
48
|
codeTextStyle,
|
|
48
49
|
} from '../codeblock/index.js';
|
|
49
|
-
import {
|
|
50
|
+
import { linesRuns } from './runs.js';
|
|
50
51
|
import { hx } from './hx.js';
|
|
52
|
+
import { useFontPrewarm } from '../internal/prewarm.js';
|
|
51
53
|
|
|
52
54
|
const h = React.createElement;
|
|
53
55
|
|
|
@@ -55,6 +57,27 @@ const h = React.createElement;
|
|
|
55
57
|
// the note in `../richtext/node.ts`.
|
|
56
58
|
registerRichText();
|
|
57
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Lines a block of output holds.
|
|
62
|
+
*
|
|
63
|
+
* The output is a column of blocks rather than one element, so an append
|
|
64
|
+
* lays out again the block it lands in and not the whole capture: one
|
|
65
|
+
* `<richtext>` for all of it was laid out whole for every line appended,
|
|
66
|
+
* 0.9 s an append at 20,000 lines. A block keeps its element while its lines
|
|
67
|
+
* are the same objects, which the parser shares from one snapshot to the
|
|
68
|
+
* next. Blocks start at multiples of this in the capture's own numbering,
|
|
69
|
+
* `truncated` counted in, so `maxLines` dropping lines off the top changes
|
|
70
|
+
* only the first block.
|
|
71
|
+
*/
|
|
72
|
+
const BLOCK_LINES = 256;
|
|
73
|
+
|
|
74
|
+
/** One block's lines, and the elements they were drawn as. */
|
|
75
|
+
interface Block {
|
|
76
|
+
lines: readonly AnsiLine[];
|
|
77
|
+
output: ReactElement;
|
|
78
|
+
gutter: ReactElement | null;
|
|
79
|
+
}
|
|
80
|
+
|
|
58
81
|
/** What `data` accepts on top of raw bytes: a document parsed elsewhere. */
|
|
59
82
|
export type TerminalOutputSource = AnsiInput | AnsiDocument;
|
|
60
83
|
|
|
@@ -257,6 +280,7 @@ export function TerminalOutput(props: TerminalOutputProps): ReactElement {
|
|
|
257
280
|
}),
|
|
258
281
|
[theme, props.fontSize, props.monoFamily],
|
|
259
282
|
);
|
|
283
|
+
useFontPrewarm(look.family);
|
|
260
284
|
|
|
261
285
|
// The colour maths (dim, inverse, conceal) resolves against the *page*
|
|
262
286
|
// rather than against the block's tint: the tint is translucent, and an
|
|
@@ -271,38 +295,105 @@ export function TerminalOutput(props: TerminalOutputProps): ReactElement {
|
|
|
271
295
|
[colors, look.color, theme.background],
|
|
272
296
|
);
|
|
273
297
|
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
298
|
+
// Kept across renders while what a block is drawn with holds.
|
|
299
|
+
const blocks = React.useRef<{
|
|
300
|
+
look: typeof look;
|
|
301
|
+
palette: typeof palette;
|
|
302
|
+
wrap: boolean;
|
|
303
|
+
lineNumbers: boolean;
|
|
304
|
+
byIndex: Map<number, Block>;
|
|
305
|
+
} | null>(null);
|
|
306
|
+
if (
|
|
307
|
+
blocks.current?.look !== look ||
|
|
308
|
+
blocks.current.palette !== palette ||
|
|
309
|
+
blocks.current.wrap !== wrap ||
|
|
310
|
+
blocks.current.lineNumbers !== lineNumbers
|
|
311
|
+
) {
|
|
312
|
+
blocks.current = { look, palette, wrap, lineNumbers, byIndex: new Map() };
|
|
313
|
+
}
|
|
314
|
+
const byIndex = blocks.current.byIndex;
|
|
315
|
+
const font = { family: look.family, size: look.size };
|
|
316
|
+
const outputStyle = codeTextStyle(look, wrap);
|
|
317
|
+
const gutterStyle: Style = {
|
|
318
|
+
lineHeight: look.lineHeight,
|
|
319
|
+
textAlign: 'right',
|
|
320
|
+
};
|
|
279
321
|
|
|
280
|
-
|
|
281
|
-
|
|
322
|
+
// The capture's own numbering: the first line shown is the one after
|
|
323
|
+
// every line `maxLines` has dropped.
|
|
324
|
+
const first = document.truncated;
|
|
325
|
+
const end = first + document.lines.length;
|
|
326
|
+
const outputs: ReactElement[] = [];
|
|
327
|
+
const gutters: ReactElement[] = [];
|
|
328
|
+
const kept = new Set<number>();
|
|
329
|
+
for (
|
|
330
|
+
let start = first - (first % BLOCK_LINES);
|
|
331
|
+
start < end || outputs.length === 0;
|
|
332
|
+
start += BLOCK_LINES
|
|
333
|
+
) {
|
|
334
|
+
const index = start / BLOCK_LINES;
|
|
335
|
+
const from = Math.max(start, first) - first;
|
|
336
|
+
const to = Math.min(start + BLOCK_LINES, end) - first;
|
|
337
|
+
const lines = document.lines.slice(from, to);
|
|
338
|
+
let block = byIndex.get(index);
|
|
339
|
+
if (!block || !sameLines(block.lines, lines)) {
|
|
340
|
+
const outputProps: RichTextProps = {
|
|
341
|
+
runs: linesRuns(lines, font, palette),
|
|
342
|
+
style: outputStyle,
|
|
343
|
+
};
|
|
344
|
+
if (!wrap) outputProps.wrap = false;
|
|
345
|
+
block = {
|
|
346
|
+
lines,
|
|
347
|
+
output: h(RICHTEXT_ELEMENT, {
|
|
348
|
+
key: index,
|
|
349
|
+
...outputProps,
|
|
350
|
+
} as Record<string, unknown>),
|
|
351
|
+
gutter: lineNumbers
|
|
352
|
+
? h(RICHTEXT_ELEMENT, {
|
|
353
|
+
key: index,
|
|
354
|
+
// The numbers are chrome, not text: `selectable={false}` keeps
|
|
355
|
+
// them out of a drag and out of the copied text.
|
|
356
|
+
selectable: false,
|
|
357
|
+
runs: lines.map((_, i) => ({
|
|
358
|
+
text:
|
|
359
|
+
i === lines.length - 1
|
|
360
|
+
? `${first + from + i + 1}`
|
|
361
|
+
: `${first + from + i + 1}\n`,
|
|
362
|
+
family: look.family,
|
|
363
|
+
size: look.size,
|
|
364
|
+
color: look.dim,
|
|
365
|
+
})),
|
|
366
|
+
wrap: false,
|
|
367
|
+
style: gutterStyle,
|
|
368
|
+
} as Record<string, unknown>)
|
|
369
|
+
: null,
|
|
370
|
+
};
|
|
371
|
+
byIndex.set(index, block);
|
|
372
|
+
}
|
|
373
|
+
kept.add(index);
|
|
374
|
+
outputs.push(block.output);
|
|
375
|
+
if (block.gutter) gutters.push(block.gutter);
|
|
376
|
+
}
|
|
377
|
+
for (const index of byIndex.keys()) {
|
|
378
|
+
if (!kept.has(index)) byIndex.delete(index);
|
|
379
|
+
}
|
|
282
380
|
|
|
283
|
-
|
|
381
|
+
// One column of numbers per column of output, block beside block: the
|
|
382
|
+
// same font and line height keep them in register.
|
|
284
383
|
const gutter = lineNumbers
|
|
285
|
-
?
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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,
|
|
384
|
+
? hx(
|
|
385
|
+
'box',
|
|
386
|
+
{
|
|
387
|
+
style: {
|
|
388
|
+
flexDirection: 'column',
|
|
389
|
+
minWidth:
|
|
390
|
+
Math.max(String(end).length, 2) * Math.ceil(look.size * 0.62),
|
|
391
|
+
marginRight: look.padding,
|
|
392
|
+
flexShrink: 0,
|
|
393
|
+
},
|
|
304
394
|
},
|
|
305
|
-
|
|
395
|
+
...gutters,
|
|
396
|
+
)
|
|
306
397
|
: null;
|
|
307
398
|
|
|
308
399
|
const rootStyle: Style = {
|
|
@@ -334,7 +425,14 @@ export function TerminalOutput(props: TerminalOutputProps): ReactElement {
|
|
|
334
425
|
hx(
|
|
335
426
|
'box',
|
|
336
427
|
{ style: { overflow: 'scroll', flexDirection: 'column', flexGrow: 1 } },
|
|
337
|
-
|
|
428
|
+
...outputs,
|
|
338
429
|
),
|
|
339
430
|
);
|
|
340
431
|
}
|
|
432
|
+
|
|
433
|
+
/** Whether two runs of lines are the same objects, one for one. */
|
|
434
|
+
function sameLines(a: readonly AnsiLine[], b: readonly AnsiLine[]): boolean {
|
|
435
|
+
if (a.length !== b.length) return false;
|
|
436
|
+
for (let i = 0; i < a.length; i++) if (a[i] !== b[i]) return false;
|
|
437
|
+
return true;
|
|
438
|
+
}
|
|
@@ -5,7 +5,12 @@
|
|
|
5
5
|
// parser said "ANSI 2", `../ansi/palette.ts` said which pixels that is, and
|
|
6
6
|
// here it becomes a run the text layout can take.
|
|
7
7
|
import { resolveAnsiColors } from '../ansi/index.js';
|
|
8
|
-
import type {
|
|
8
|
+
import type {
|
|
9
|
+
AnsiDocument,
|
|
10
|
+
AnsiLine,
|
|
11
|
+
AnsiPalette,
|
|
12
|
+
AnsiSpan,
|
|
13
|
+
} from '../ansi/index.js';
|
|
9
14
|
import type { TextRun } from '../richtext/index.js';
|
|
10
15
|
|
|
11
16
|
/** The font a capture is set in. The palette is separate because it changes
|
|
@@ -64,9 +69,18 @@ export function documentRuns(
|
|
|
64
69
|
document: AnsiDocument,
|
|
65
70
|
font: OutputFont,
|
|
66
71
|
palette: AnsiPalette,
|
|
72
|
+
): TextRun[] {
|
|
73
|
+
return linesRuns(document.lines, font, palette);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/** Some of a document's lines as runs, the way {@link documentRuns} makes
|
|
77
|
+
* all of them: a block of `<TerminalOutput>`'s output. */
|
|
78
|
+
export function linesRuns(
|
|
79
|
+
lines: readonly AnsiLine[],
|
|
80
|
+
font: OutputFont,
|
|
81
|
+
palette: AnsiPalette,
|
|
67
82
|
): TextRun[] {
|
|
68
83
|
const runs: TextRun[] = [];
|
|
69
|
-
const { lines } = document;
|
|
70
84
|
for (let i = 0; i < lines.length; i++) {
|
|
71
85
|
for (const span of lines[i]!.spans) {
|
|
72
86
|
if (span.text) runs.push(spanRun(span, font, palette));
|
package/src/three/canvas.ts
CHANGED
|
@@ -3,7 +3,9 @@
|
|
|
3
3
|
//
|
|
4
4
|
// The division of labour: `<glarea>` owns everything that is renderer
|
|
5
5
|
// internals — the child X window on a GL visual, the context, the frame
|
|
6
|
-
// clock, the swap — and exposes it as `onCreated`/`onDraw`/`frameLoop`.
|
|
6
|
+
// clock, the swap — and exposes it as `onCreated`/`onDraw`/`frameLoop`. On
|
|
7
|
+
// a core with react-x11#545 the pointer over the surface is the tree's too,
|
|
8
|
+
// dispatched at the `<glarea>` like the pointer over any node.
|
|
7
9
|
// This component owns everything that is scene: the second reconciler
|
|
8
10
|
// rendering `children` into the object graph, the store `useThree`/`useFrame`
|
|
9
11
|
// read, the backend-appropriate renderer, picking, and post-processing.
|
|
@@ -24,7 +26,7 @@ import {
|
|
|
24
26
|
} from 'react';
|
|
25
27
|
import type { ReactNode, Ref } from 'react';
|
|
26
28
|
import { useSupports } from 'react-x11';
|
|
27
|
-
import type { ReactX11Elements } from 'react-x11';
|
|
29
|
+
import type { ReactX11Elements, SyntheticEvent } from 'react-x11';
|
|
28
30
|
// Loads the module the JSX augmentation in jsx.ts targets (see flow/index.ts
|
|
29
31
|
// for the same pattern). Type-only, so it is erased.
|
|
30
32
|
import type {} from 'react-x11/jsx-runtime';
|
|
@@ -42,9 +44,10 @@ import { IndirectRenderer } from './renderer-indirect.js';
|
|
|
42
44
|
import { DirectRenderer } from './renderer-direct.js';
|
|
43
45
|
import { PostProcessor } from './postprocess.js';
|
|
44
46
|
import type { EffectComposer } from './passes.js';
|
|
45
|
-
import { ScenePointer, type ThreeEvent } from './events.js';
|
|
47
|
+
import { ForwardedPointer, ScenePointer, type ThreeEvent } from './events.js';
|
|
46
48
|
import { sceneWantsPointer } from './raycast.js';
|
|
47
49
|
import { now, warn } from './globals.js';
|
|
50
|
+
import { scaleOf } from '../internal/units.js';
|
|
48
51
|
|
|
49
52
|
/**
|
|
50
53
|
* Failures that mean "one thing in this scene is broken", not "this machine
|
|
@@ -64,12 +67,43 @@ type GlAreaProps = ReactX11Elements['glarea'];
|
|
|
64
67
|
/** The glarea node surface this component reaches through its ref. */
|
|
65
68
|
interface SurfaceNode {
|
|
66
69
|
requestFrame?: () => void;
|
|
70
|
+
/** `true` where core dispatches the pointer over the surface at this node,
|
|
71
|
+
* through the tree (react-x11#545); absent on a core that does not. */
|
|
72
|
+
forwardsPointer?: boolean;
|
|
73
|
+
/** The node's box, which is the surface's: device pixels, in the owning
|
|
74
|
+
* window's space. */
|
|
75
|
+
abs?: { x: number; y: number };
|
|
67
76
|
window?: {
|
|
77
|
+
/** The X window's id — the Cocoa backend's surface is a layer, and has
|
|
78
|
+
* none. */
|
|
79
|
+
id?: unknown;
|
|
68
80
|
on(name: string, handler: (event: { x: number; y: number }) => void): void;
|
|
81
|
+
/** The cursor X shows over the window. The Cocoa backend's layer has
|
|
82
|
+
* none: there the only cursor is the owning window's, and core's. */
|
|
69
83
|
setCursor?(cursor: string | null): void;
|
|
70
84
|
} | null;
|
|
71
85
|
}
|
|
72
86
|
|
|
87
|
+
/**
|
|
88
|
+
* A pointer event where the scene measures it: device pixels from the
|
|
89
|
+
* surface's corner, as the surface's own X window reports them. Core hands a
|
|
90
|
+
* handler the point in the window's logical pixels — divided by the node's
|
|
91
|
+
* scale — while the surface covers the node's box, `abs`, in device pixels:
|
|
92
|
+
* so the point goes back to device pixels and the box's corner comes off.
|
|
93
|
+
* (The content box's corner would be out by any padding or border, which the
|
|
94
|
+
* surface covers too.)
|
|
95
|
+
*/
|
|
96
|
+
function surfacePoint(
|
|
97
|
+
node: SurfaceNode | null,
|
|
98
|
+
ev: { x: number; y: number },
|
|
99
|
+
): { x: number; y: number } {
|
|
100
|
+
const scale = scaleOf(node);
|
|
101
|
+
return {
|
|
102
|
+
x: ev.x * scale - (node?.abs?.x ?? 0),
|
|
103
|
+
y: ev.y * scale - (node?.abs?.y ?? 0),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
|
|
73
107
|
interface DrawInfo {
|
|
74
108
|
width: number;
|
|
75
109
|
height: number;
|
|
@@ -119,6 +153,8 @@ interface CanvasKit {
|
|
|
119
153
|
store: ThreeStore;
|
|
120
154
|
container: SceneContainer;
|
|
121
155
|
pointer: ScenePointer;
|
|
156
|
+
/** The pointer as core forwards it, which the surface's handlers feed. */
|
|
157
|
+
forwarded: ForwardedPointer;
|
|
122
158
|
renderer: IndirectRenderer | DirectRenderer | null;
|
|
123
159
|
post: PostProcessor | null;
|
|
124
160
|
gl: unknown;
|
|
@@ -148,6 +184,9 @@ export function Canvas({
|
|
|
148
184
|
const supportsShaders = useSupports('shaders');
|
|
149
185
|
const [error, setError] = useState<Error | null>(null);
|
|
150
186
|
const areaRef = useRef<unknown>(null);
|
|
187
|
+
// The hovered object's cursor, where the surface cannot wear it itself
|
|
188
|
+
// (`forwarded` below).
|
|
189
|
+
const [sceneCursor, setSceneCursor] = useState<string | null>(null);
|
|
151
190
|
|
|
152
191
|
// Everything with the canvas's lifetime, made once. The camera the scene
|
|
153
192
|
// starts with is the default one; `<perspectiveCamera makeDefault>`
|
|
@@ -193,6 +232,23 @@ export function Canvas({
|
|
|
193
232
|
missedRef.current?.(event);
|
|
194
233
|
},
|
|
195
234
|
}),
|
|
235
|
+
// Where a hovered object's cursor goes. An X window wears a cursor of
|
|
236
|
+
// its own, and X shows it over the window — or, while it is null, the
|
|
237
|
+
// parent's, which is core's — so on X11 the scene's goes straight
|
|
238
|
+
// onto the surface: on at once, and off again onto whatever the tree
|
|
239
|
+
// asked for. The Cocoa backend's surface is a layer, and there the
|
|
240
|
+
// only cursor is the window's, which core puts on from the style of
|
|
241
|
+
// the node under the pointer and remembers having put on. Set behind
|
|
242
|
+
// core's back, it would outlast the hover wherever core saw nothing
|
|
243
|
+
// to change. So there the scene's becomes the `<glarea>`'s own
|
|
244
|
+
// `cursor`, and core applies it like any other: from the motion after
|
|
245
|
+
// the one the scene heard, because core picks the window's cursor
|
|
246
|
+
// before it dispatches the motion.
|
|
247
|
+
forwarded: new ForwardedPointer((cursor) => {
|
|
248
|
+
const surface = (areaRef.current as SurfaceNode | null)?.window;
|
|
249
|
+
if (typeof surface?.setCursor === 'function') surface.setCursor(cursor);
|
|
250
|
+
else setSceneCursor(cursor);
|
|
251
|
+
}),
|
|
196
252
|
renderer: null,
|
|
197
253
|
post: null,
|
|
198
254
|
gl: null,
|
|
@@ -359,14 +415,24 @@ export function Canvas({
|
|
|
359
415
|
clock.delta = delta;
|
|
360
416
|
store.runFrames(store.getState(), delta);
|
|
361
417
|
|
|
362
|
-
// pointer
|
|
363
|
-
//
|
|
364
|
-
//
|
|
418
|
+
// The pointer is only worth taking when something in the scene
|
|
419
|
+
// listens — checked when the tree said it changed, attached the first
|
|
420
|
+
// time it is true. Where core forwards it (react-x11#545) it comes from
|
|
421
|
+
// the surface's own handlers and nowhere else: a listener on the
|
|
422
|
+
// surface's X window would select the events there, and X would
|
|
423
|
+
// deliver every press, and the wheel, to that window rather than to
|
|
424
|
+
// the tree. An older core delivers nothing over the surface, so there
|
|
425
|
+
// it is the X window's own events — X11 only, since the Cocoa surface
|
|
426
|
+
// is a layer, with no X window id and no pointer events of its own.
|
|
365
427
|
if (store.eventsDirty) {
|
|
366
428
|
store.eventsDirty = false;
|
|
367
429
|
if (!kit.pointer.attached && sceneWantsPointer(kit.scene.children)) {
|
|
368
430
|
const node = areaRef.current as SurfaceNode | null;
|
|
369
|
-
if (node?.
|
|
431
|
+
if (node?.forwardsPointer === true) {
|
|
432
|
+
kit.pointer.attach(kit.forwarded);
|
|
433
|
+
} else if (node?.window && typeof node.window.id === 'number') {
|
|
434
|
+
kit.pointer.attach(node.window);
|
|
435
|
+
}
|
|
370
436
|
}
|
|
371
437
|
}
|
|
372
438
|
|
|
@@ -425,6 +491,31 @@ export function Canvas({
|
|
|
425
491
|
[kit],
|
|
426
492
|
);
|
|
427
493
|
|
|
494
|
+
// The pointer core dispatches at the surface, into the scene — through
|
|
495
|
+
// `kit.forwarded`, which passes it on only once the frame loop attached
|
|
496
|
+
// the scene to it. Where the pointer comes from the surface's X window
|
|
497
|
+
// instead, these hear nothing of it and pass nothing on.
|
|
498
|
+
const pointerHandlers = useMemo(() => {
|
|
499
|
+
const at = (ev: SyntheticEvent) =>
|
|
500
|
+
surfacePoint(areaRef.current as SurfaceNode | null, ev);
|
|
501
|
+
return {
|
|
502
|
+
onMouseDown: (ev: SyntheticEvent) => {
|
|
503
|
+
// Held until the release, as X's grab held it for the surface's
|
|
504
|
+
// window: a drag that leaves the canvas still reaches the scene.
|
|
505
|
+
if (kit.forwarded.emit('mousedown', at(ev))) ev.capturePointer();
|
|
506
|
+
},
|
|
507
|
+
onMouseMove: (ev: SyntheticEvent) => {
|
|
508
|
+
kit.forwarded.emit('mousemove', at(ev));
|
|
509
|
+
},
|
|
510
|
+
onMouseUp: (ev: SyntheticEvent) => {
|
|
511
|
+
kit.forwarded.emit('mouseup', at(ev));
|
|
512
|
+
},
|
|
513
|
+
onMouseLeave: (ev: SyntheticEvent) => {
|
|
514
|
+
kit.forwarded.emit('mouseout', at(ev));
|
|
515
|
+
},
|
|
516
|
+
};
|
|
517
|
+
}, [kit]);
|
|
518
|
+
|
|
428
519
|
if (error && fallback !== undefined) {
|
|
429
520
|
return hx(
|
|
430
521
|
'box',
|
|
@@ -440,12 +531,15 @@ export function Canvas({
|
|
|
440
531
|
|
|
441
532
|
return hx('glarea', {
|
|
442
533
|
ref: areaRef as Ref<never>,
|
|
443
|
-
|
|
534
|
+
// over the canvas's own, as a child's cursor is over its parent's: the
|
|
535
|
+
// object is what the pointer is on
|
|
536
|
+
style: sceneCursor === null ? style : [style, { cursor: sceneCursor }],
|
|
444
537
|
clearColor,
|
|
445
538
|
glx,
|
|
446
539
|
frameLoop: loop,
|
|
447
540
|
onCreated: handleCreated as GlAreaProps['onCreated'],
|
|
448
541
|
onDraw: handleDraw as GlAreaProps['onDraw'],
|
|
449
542
|
onError: handleError,
|
|
543
|
+
...pointerHandlers,
|
|
450
544
|
});
|
|
451
545
|
}
|
package/src/three/events.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
// Pointer events for the scene:
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
1
|
+
// Pointer events for the scene: the pointer over the `<glarea>`, raycast
|
|
2
|
+
// against the CPU-side geometry, dispatched to the object it hit and
|
|
3
|
+
// bubbled up its ancestors — a port of react-x11's `src/pointer3d.js` onto
|
|
4
|
+
// the object graph, with the event shaped the way r3f handlers expect
|
|
5
|
+
// (`object`, `point`, `distance`, `stopPropagation`).
|
|
6
|
+
//
|
|
7
|
+
// Where the pointer comes from is the canvas's to say (canvas.ts): the
|
|
8
|
+
// `<glarea>`'s own handlers, on a core that dispatches the pointer over a
|
|
9
|
+
// surface through the tree (react-x11#545), or the surface's child X window
|
|
10
|
+
// on one that does not. Either way it arrives here as a `PointerSource`, in
|
|
11
|
+
// device pixels from the surface's corner.
|
|
6
12
|
import type { Mesh, Object3D, Scene } from './objects.js';
|
|
7
13
|
import { raycast } from './raycast.js';
|
|
8
14
|
import type { RayHit } from './raycast.js';
|
|
@@ -37,6 +43,40 @@ export interface PointerSource {
|
|
|
37
43
|
setCursor?(cursor: string | null): void;
|
|
38
44
|
}
|
|
39
45
|
|
|
46
|
+
/**
|
|
47
|
+
* The pointer a core dispatches through the tree, as a `PointerSource`: the
|
|
48
|
+
* canvas's `<glarea>` handlers `emit` what they are handed, already in the
|
|
49
|
+
* surface's device pixels, and the scene subscribes to it as it would to a
|
|
50
|
+
* window. Where a hovered object's cursor goes is the canvas's to say, as
|
|
51
|
+
* where the pointer comes from is: onto the surface's own X window, or,
|
|
52
|
+
* where the surface is a layer that cannot wear one, into the `<glarea>`'s
|
|
53
|
+
* style.
|
|
54
|
+
*/
|
|
55
|
+
export class ForwardedPointer implements PointerSource {
|
|
56
|
+
private handlers = new Map<string, (event: NativeMouse) => void>();
|
|
57
|
+
private applyCursor: (cursor: string | null) => void;
|
|
58
|
+
|
|
59
|
+
constructor(applyCursor: (cursor: string | null) => void) {
|
|
60
|
+
this.applyCursor = applyCursor;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
on(name: string, handler: (event: NativeMouse) => void): void {
|
|
64
|
+
this.handlers.set(name, handler);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
/** Hand an event to the scene: false while nothing has subscribed. */
|
|
68
|
+
emit(name: string, event: NativeMouse): boolean {
|
|
69
|
+
const handler = this.handlers.get(name);
|
|
70
|
+
if (!handler) return false;
|
|
71
|
+
handler(event);
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
setCursor(cursor: string | null): void {
|
|
76
|
+
this.applyCursor(cursor);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
40
80
|
/** The dispatch path: the object that was hit, then its ancestors. */
|
|
41
81
|
function bubblePath(node: Object3D, scene: Scene): Object3D[] {
|
|
42
82
|
const path: Object3D[] = [];
|
|
@@ -51,10 +91,10 @@ function bubblePath(node: Object3D, scene: Scene): Object3D[] {
|
|
|
51
91
|
}
|
|
52
92
|
|
|
53
93
|
/**
|
|
54
|
-
* One canvas's pointer pipeline. The canvas attaches it to the
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
* come out right.
|
|
94
|
+
* One canvas's pointer pipeline. The canvas attaches it to where the pointer
|
|
95
|
+
* comes from — the tree, or the surface's child X window — once anything in
|
|
96
|
+
* the scene listens; hover and press state live here so enter/leave pairs
|
|
97
|
+
* and click (down and up on the same object) come out right.
|
|
58
98
|
*/
|
|
59
99
|
export class ScenePointer {
|
|
60
100
|
private scene: Scene;
|
package/src/tree/index.ts
CHANGED
|
@@ -919,6 +919,24 @@ export function Tree<T = TreeItem>({
|
|
|
919
919
|
const index = heights;
|
|
920
920
|
index.sync(rows, estimate);
|
|
921
921
|
|
|
922
|
+
/**
|
|
923
|
+
* One drawn row into the height index, for the window's trim: it may drop
|
|
924
|
+
* a row only once the index knows the height the row is laid out at, and
|
|
925
|
+
* a flick reaches the trailing rows long before `measureRows` does (see
|
|
926
|
+
* `measure` on the window's inputs).
|
|
927
|
+
*/
|
|
928
|
+
const measureDrawn = useCallback(
|
|
929
|
+
(id: TreeItemId, at: number): boolean => {
|
|
930
|
+
const drawn = rowNodes.current.get(id);
|
|
931
|
+
if (!drawn || drawn.at !== at) return false;
|
|
932
|
+
heights.measure(id, at, drawn.node.abs.height / scaleOf(drawn.node));
|
|
933
|
+
return heights.isMeasured(at);
|
|
934
|
+
},
|
|
935
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- `heights` is a
|
|
936
|
+
// stable instance
|
|
937
|
+
[],
|
|
938
|
+
);
|
|
939
|
+
|
|
922
940
|
/** The viewport, and the slice worth building from it — the machinery
|
|
923
941
|
* shared with `<Table>` (`../internal/window.ts`). */
|
|
924
942
|
const win = useVirtualWindow({
|
|
@@ -934,6 +952,7 @@ export function Tree<T = TreeItem>({
|
|
|
934
952
|
threshold: catchup?.threshold ?? SKELETON_THRESHOLD,
|
|
935
953
|
burstBudget: catchup?.burst ?? BURST_BUDGET,
|
|
936
954
|
settleBudget: catchup?.settle ?? SETTLE_BUDGET,
|
|
955
|
+
measure: measureDrawn,
|
|
937
956
|
});
|
|
938
957
|
const { view, viewRef } = win;
|
|
939
958
|
/** Whether the fast-scroll pill is up — kept across renders so it does not
|