@react-x11/components 0.9.0 → 0.10.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 +3 -1
- 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/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/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 +13 -2
- package/dist/codeblock/index.d.ts.map +1 -1
- package/dist/codeblock/index.js +20 -3
- 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 +240 -6
- package/dist/html/css/cascade.d.ts.map +1 -1
- package/dist/html/css/cascade.js +1327 -66
- 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 +498 -15
- package/dist/html/css/style.d.ts.map +1 -1
- package/dist/html/css/style.js +3698 -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 +57 -11
- 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 +2937 -197
- package/dist/html/layout/block.js.map +1 -1
- package/dist/html/layout/boxes.d.ts +340 -17
- package/dist/html/layout/boxes.d.ts.map +1 -1
- package/dist/html/layout/boxes.js +1714 -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 +151 -1
- package/dist/html/layout/inline.d.ts.map +1 -1
- package/dist/html/layout/inline.js +3375 -174
- 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 +1331 -100
- 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 +3503 -141
- 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 +435 -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/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 +112 -43
- 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 +35 -1
- 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/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/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 +6 -1
- package/dist/terminal-output/index.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 +3 -1
- 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/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/stream.ts +257 -17
- package/src/code-language/types.ts +5 -4
- package/src/codeblock/index.ts +20 -3
- 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 +1403 -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 +4102 -222
- package/src/html/css/ua.ts +58 -12
- 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 +3456 -230
- package/src/html/layout/boxes.ts +2100 -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 +3943 -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 +1481 -118
- package/src/html/paint.ts +4293 -169
- package/src/html/resources.ts +161 -50
- package/src/html/surfaces.ts +81 -0
- package/src/html/svg.ts +493 -0
- package/src/html/url.ts +86 -0
- package/src/index.ts +2 -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 +149 -67
- 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 +34 -1
- package/src/rich-text-editor/keymap.ts +1 -1
- package/src/rich-text-editor/keys.ts +135 -26
- package/src/rich-text-editor/marks.ts +101 -0
- package/src/rich-text-editor/render.ts +49 -12
- 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 +6 -1
- package/src/three/canvas.ts +102 -8
- package/src/three/events.ts +49 -9
- package/src/tree/index.ts +19 -0
package/src/table/index.ts
CHANGED
|
@@ -82,6 +82,7 @@ import {
|
|
|
82
82
|
SETTLE_BUDGET,
|
|
83
83
|
useVirtualWindow,
|
|
84
84
|
} from '../internal/window.js';
|
|
85
|
+
import type { VirtualViewport } from '../internal/window.js';
|
|
85
86
|
import {
|
|
86
87
|
MIN_COLUMN,
|
|
87
88
|
columnValue,
|
|
@@ -887,6 +888,33 @@ export function Table<Row = any>(props: TableProps<Row>): ReactElement {
|
|
|
887
888
|
virtual === true ||
|
|
888
889
|
(virtual === 'auto' && ordered.length > VIRTUAL_THRESHOLD);
|
|
889
890
|
|
|
891
|
+
/**
|
|
892
|
+
* One drawn row into the height index, for the window's trim: it may drop
|
|
893
|
+
* a row only once the index knows the height the row is laid out at, and
|
|
894
|
+
* a flick reaches the trailing rows long before `measureRows` does (see
|
|
895
|
+
* `measure` on the window's inputs). The gates are `measureRows`'s, for
|
|
896
|
+
* its reasons — no viewport yet, a row drawn against a list that has
|
|
897
|
+
* moved, a row laid out against a grid the columns no longer resolve to.
|
|
898
|
+
*/
|
|
899
|
+
const measureDrawn = useCallback(
|
|
900
|
+
(id: TableRowId, at: number, viewport: VirtualViewport): boolean => {
|
|
901
|
+
const drawn = rowNodes.current.get(id);
|
|
902
|
+
if (!drawn || drawn.at !== at || viewport.width <= 0) return false;
|
|
903
|
+
const expected = resolveWidths(
|
|
904
|
+
columnsRef.current,
|
|
905
|
+
userWidthsRef.current,
|
|
906
|
+
Math.max(0, viewport.width - rowInsetRef.current * 2),
|
|
907
|
+
).total;
|
|
908
|
+
const s = scaleOf(drawn.node);
|
|
909
|
+
if (Math.abs(drawn.node.abs.width / s - expected) >= 1) return false;
|
|
910
|
+
heights.measure(id, at, drawn.node.abs.height / s);
|
|
911
|
+
return heights.isMeasured(at);
|
|
912
|
+
},
|
|
913
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- `heights` is a
|
|
914
|
+
// stable instance
|
|
915
|
+
[],
|
|
916
|
+
);
|
|
917
|
+
|
|
890
918
|
/** The viewport, and the slice worth building from it — the machinery
|
|
891
919
|
* shared with `<Tree>` (`../internal/window.ts`). */
|
|
892
920
|
const win = useVirtualWindow({
|
|
@@ -902,6 +930,7 @@ export function Table<Row = any>(props: TableProps<Row>): ReactElement {
|
|
|
902
930
|
threshold: catchup?.threshold ?? SKELETON_THRESHOLD,
|
|
903
931
|
burstBudget: catchup?.burst ?? BURST_BUDGET,
|
|
904
932
|
settleBudget: catchup?.settle ?? SETTLE_BUDGET,
|
|
933
|
+
measure: measureDrawn,
|
|
905
934
|
});
|
|
906
935
|
const { view, viewRef } = win;
|
|
907
936
|
const { first, last, above, below } = win.slice;
|
package/src/table/rows.ts
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
// answer, and the tests assert on the answer directly.
|
|
8
8
|
|
|
9
9
|
import type { ReactNode } from 'react';
|
|
10
|
+
import { compareText } from '../internal/collate.js';
|
|
10
11
|
|
|
11
12
|
/** What a row is keyed by. Numbers are allowed because a row often comes
|
|
12
13
|
* from a database, and stringifying an id is a chance to lose one. */
|
|
@@ -108,11 +109,12 @@ export function columnValue<Row>(row: Row, column: TableColumn<Row>): unknown {
|
|
|
108
109
|
: (row as Record<string, unknown>)[column.id];
|
|
109
110
|
}
|
|
110
111
|
|
|
111
|
-
/** Core's comparator
|
|
112
|
-
*
|
|
112
|
+
/** Core's comparator: numbers numerically, everything else as text, with
|
|
113
|
+
* `null`/`undefined` sorting as the empty string. The text half is
|
|
114
|
+
* `localeCompare`'s, through one collator (`../internal/collate.ts`). */
|
|
113
115
|
export function defaultCompare(a: unknown, b: unknown): number {
|
|
114
116
|
if (typeof a === 'number' && typeof b === 'number') return a - b;
|
|
115
|
-
return String(a ?? '')
|
|
117
|
+
return compareText(String(a ?? ''), String(b ?? ''));
|
|
116
118
|
}
|
|
117
119
|
|
|
118
120
|
/**
|
|
@@ -165,11 +167,19 @@ export function orderRows<Row>(
|
|
|
165
167
|
sort && !presorted ? columns.find((c) => c.id === sort.column) : undefined;
|
|
166
168
|
if (sort && column) {
|
|
167
169
|
const sign = sort.direction === 'desc' ? -1 : 1;
|
|
168
|
-
const compare =
|
|
169
|
-
|
|
170
|
-
((a
|
|
171
|
-
|
|
172
|
-
|
|
170
|
+
const compare = column.compare;
|
|
171
|
+
if (compare) {
|
|
172
|
+
entries.sort((a, b) => sign * compare(a.row, b.row));
|
|
173
|
+
} else {
|
|
174
|
+
// each row's value read once rather than twice a comparison: a sort
|
|
175
|
+
// asks for about 17 of them a row at 100,000 rows
|
|
176
|
+
const keyed = entries.map((entry) => ({
|
|
177
|
+
entry,
|
|
178
|
+
key: columnValue(entry.row, column),
|
|
179
|
+
}));
|
|
180
|
+
keyed.sort((a, b) => sign * defaultCompare(a.key, b.key));
|
|
181
|
+
for (let i = 0; i < keyed.length; i++) entries[i] = keyed[i].entry;
|
|
182
|
+
}
|
|
173
183
|
entries.forEach((entry, index) => {
|
|
174
184
|
entry.index = index;
|
|
175
185
|
});
|
package/src/terminal/index.ts
CHANGED
|
@@ -69,6 +69,7 @@ import { useForeignTitle } from './title.js';
|
|
|
69
69
|
import { hx } from './hx.js';
|
|
70
70
|
import type { PtyHost } from './vt/pty.js';
|
|
71
71
|
import type { VtHandle, VtTerminalProps } from './vt/index.js';
|
|
72
|
+
import { useFontPrewarm } from '../internal/prewarm.js';
|
|
72
73
|
|
|
73
74
|
export {
|
|
74
75
|
TERMINAL_BACKENDS,
|
|
@@ -412,6 +413,9 @@ export function Terminal(props: TerminalProps): ReactElement {
|
|
|
412
413
|
const [vtFallback, setVtFallback] = useState(false);
|
|
413
414
|
const vt =
|
|
414
415
|
backend === 'vt' || (backend === 'auto' && (vtFallback || !embeddable));
|
|
416
|
+
// the grid is drawn in this family, and loading the emulator is the head
|
|
417
|
+
// start; an embedded emulator brings fonts of its own
|
|
418
|
+
useFontPrewarm(vt ? (props.fontFamily ?? 'monospace') : null);
|
|
415
419
|
useEffect(() => {
|
|
416
420
|
if (backend !== 'auto') setVtFallback(false);
|
|
417
421
|
}, [backend]);
|
package/src/terminal/vt/pty.ts
CHANGED
|
@@ -201,11 +201,25 @@ function nodeProcess(): {
|
|
|
201
201
|
return g.process ?? null;
|
|
202
202
|
}
|
|
203
203
|
|
|
204
|
-
/**
|
|
204
|
+
/**
|
|
205
|
+
* The user's login shell, or the platform's last resort.
|
|
206
|
+
*
|
|
207
|
+
* `$SHELL` first wherever it is set, because it is the user's own answer —
|
|
208
|
+
* and it is set under a POSIX shell on Windows too (git-bash, MSYS), where it
|
|
209
|
+
* is still the right one. Failing that the fallback has to be the platform's:
|
|
210
|
+
* `/bin/sh` is not a path on Windows, and a terminal that opens on "file not
|
|
211
|
+
* found" is indistinguishable from one whose pty could not start.
|
|
212
|
+
*
|
|
213
|
+
* `%COMSPEC%` rather than a spelled-out `cmd.exe`, since that is where Windows
|
|
214
|
+
* says which command processor this system has.
|
|
215
|
+
*/
|
|
205
216
|
export function defaultShell(
|
|
206
217
|
env: Record<string, string | undefined> = nodeProcess()?.env ?? {},
|
|
218
|
+
platform: string = nodeProcess()?.platform ?? '',
|
|
207
219
|
): string {
|
|
208
|
-
|
|
220
|
+
if (env.SHELL) return env.SHELL;
|
|
221
|
+
if (platform === 'win32') return env.COMSPEC || 'cmd.exe';
|
|
222
|
+
return '/bin/sh';
|
|
209
223
|
}
|
|
210
224
|
|
|
211
225
|
class NodePtySession implements PtySession {
|
|
@@ -48,6 +48,7 @@ import {
|
|
|
48
48
|
} from '../codeblock/index.js';
|
|
49
49
|
import { documentRuns } from './runs.js';
|
|
50
50
|
import { hx } from './hx.js';
|
|
51
|
+
import { useFontPrewarm } from '../internal/prewarm.js';
|
|
51
52
|
|
|
52
53
|
const h = React.createElement;
|
|
53
54
|
|
|
@@ -257,6 +258,7 @@ export function TerminalOutput(props: TerminalOutputProps): ReactElement {
|
|
|
257
258
|
}),
|
|
258
259
|
[theme, props.fontSize, props.monoFamily],
|
|
259
260
|
);
|
|
261
|
+
useFontPrewarm(look.family);
|
|
260
262
|
|
|
261
263
|
// The colour maths (dim, inverse, conceal) resolves against the *page*
|
|
262
264
|
// rather than against the block's tint: the tint is translucent, and an
|
|
@@ -277,7 +279,10 @@ export function TerminalOutput(props: TerminalOutputProps): ReactElement {
|
|
|
277
279
|
[document, look.family, look.size, palette],
|
|
278
280
|
);
|
|
279
281
|
|
|
280
|
-
const outputProps: RichTextProps = {
|
|
282
|
+
const outputProps: RichTextProps = {
|
|
283
|
+
runs,
|
|
284
|
+
style: codeTextStyle(look, wrap),
|
|
285
|
+
};
|
|
281
286
|
if (!wrap) outputProps.wrap = false;
|
|
282
287
|
|
|
283
288
|
const lineCount = document.lines.length;
|
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
|