@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
package/src/richtext/node.ts
CHANGED
|
@@ -82,6 +82,10 @@ export interface TextRun {
|
|
|
82
82
|
weight?: number | 'normal' | 'bold';
|
|
83
83
|
style?: 'normal' | 'italic';
|
|
84
84
|
color?: string;
|
|
85
|
+
/** Pixels added after every glyph — CSS's `letter-spacing`. Both text
|
|
86
|
+
* engines take it on a span, and it passes through to them as the rest
|
|
87
|
+
* of the ntk vocabulary does. */
|
|
88
|
+
letterSpacing?: number;
|
|
85
89
|
/** Fill painted behind the run — the inline-code chip. */
|
|
86
90
|
bg?: string;
|
|
87
91
|
/**
|
|
@@ -101,16 +105,37 @@ export interface TextRun {
|
|
|
101
105
|
* sub-parameters, which a captured terminal session carries. Ignored
|
|
102
106
|
* without `underline`, which is what says the rule exists at all. */
|
|
103
107
|
underlineStyle?: 'single' | 'double' | 'curly' | 'dotted' | 'dashed';
|
|
108
|
+
/** How far below the baseline the underline's top is, and how thick it
|
|
109
|
+
* is, in the unit `size` is in — CSS's `text-underline-offset` and
|
|
110
|
+
* `text-decoration-thickness`. Unset, two pixels below and one thick. */
|
|
111
|
+
underlineOffset?: number;
|
|
112
|
+
underlineThickness?: number;
|
|
104
113
|
/** 1px rule through the x-height, in this colour — `~~del~~`. */
|
|
105
114
|
strike?: string;
|
|
106
115
|
/** Link target. `null` is a link still streaming in (not clickable). */
|
|
107
116
|
href?: string | null;
|
|
117
|
+
/** OpenType features the run is shaped with, by tag — `{ tnum: 1 }`,
|
|
118
|
+
* `{ liga: 0 }` — which both text engines take on a span. A run's fields
|
|
119
|
+
* are compared by identity (`sameRuns`), so the same features should be
|
|
120
|
+
* the same object. */
|
|
121
|
+
features?: Readonly<Record<string, number>>;
|
|
122
|
+
/** Runs that share a truthy `nowrap` have no break inside them or between
|
|
123
|
+
* them — the text of one element with `white-space: nowrap`, the element
|
|
124
|
+
* being the value. ntk's, from 8.13.0; CoreText breaks as it would. */
|
|
125
|
+
nowrap?: unknown;
|
|
126
|
+
/** Shaped on its own: ntk shapes a word that runs across spans shaped
|
|
127
|
+
* alike as one, kerned and joined across them, and a run marked so is
|
|
128
|
+
* kept apart from the ones either side of it — as CSS keeps the text
|
|
129
|
+
* either side of an inline box's margin, border or padding. ntk's, from
|
|
130
|
+
* 8.14.2. */
|
|
131
|
+
shapeApart?: boolean;
|
|
108
132
|
}
|
|
109
133
|
|
|
110
134
|
/** The props `<richtext>` takes. */
|
|
111
135
|
export interface RichTextProps {
|
|
112
|
-
/** The styled runs. Give a stable array identity
|
|
113
|
-
*
|
|
136
|
+
/** The styled runs. Give a stable array identity where you can — the
|
|
137
|
+
* streaming path keys off it; an equal new array keeps its layout, for
|
|
138
|
+
* one pass over the runs (`sameRuns`). */
|
|
114
139
|
runs: TextRun[];
|
|
115
140
|
/** False lays the text out at its natural width, unwrapped — code. */
|
|
116
141
|
wrap?: boolean;
|
|
@@ -178,6 +203,113 @@ interface FontsLike {
|
|
|
178
203
|
): TextLayoutLike;
|
|
179
204
|
}
|
|
180
205
|
|
|
206
|
+
/** Spacing that tells runs apart and moves nothing: an engine that merges
|
|
207
|
+
* adjacent runs alike (CoreText) keeps a tab's space to itself. */
|
|
208
|
+
const HAIR = 1e-6;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* The runs with each tab laid out as a space of its own, letter-spaced to
|
|
212
|
+
* the next stop: every eight spaces from its line's start, and past one
|
|
213
|
+
* less than half a "0" on (CSS Text 3, 4.2's `tab-size`). Neither engine
|
|
214
|
+
* sets a tab so — ntk has no glyph for one and draws a box, and CoreText
|
|
215
|
+
* stops every 28 points — so a tab-indented fence in `<Markdown>` or a
|
|
216
|
+
* `<Code>` block came out boxed or ragged. The space is the tab's length,
|
|
217
|
+
* so every offset holds, and the text a selection copies keeps its tabs.
|
|
218
|
+
* Placed from a first layout that has each tab as an unspaced space; a
|
|
219
|
+
* later tab on a line moves by what the ones before it added.
|
|
220
|
+
*/
|
|
221
|
+
function tabbedRuns(
|
|
222
|
+
fonts: FontsLike,
|
|
223
|
+
runs: TextRun[],
|
|
224
|
+
base: Record<string, unknown>,
|
|
225
|
+
): TextRun[] {
|
|
226
|
+
const out: TextRun[] = [];
|
|
227
|
+
const tabs: { at: number; index: number }[] = [];
|
|
228
|
+
let units = 0;
|
|
229
|
+
for (const run of runs) {
|
|
230
|
+
const text = run.text;
|
|
231
|
+
if (!text.includes('\t')) {
|
|
232
|
+
out.push(run);
|
|
233
|
+
units += text.length;
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
let done = 0;
|
|
237
|
+
for (let p = text.indexOf('\t'); p >= 0; p = text.indexOf('\t', p + 1)) {
|
|
238
|
+
if (p > done) out.push({ ...run, text: text.slice(done, p) });
|
|
239
|
+
tabs.push({ at: units + p, index: out.length });
|
|
240
|
+
out.push({
|
|
241
|
+
...run,
|
|
242
|
+
text: ' ',
|
|
243
|
+
letterSpacing: (run.letterSpacing ?? 0) + tabs.length * HAIR,
|
|
244
|
+
});
|
|
245
|
+
done = p + 1;
|
|
246
|
+
}
|
|
247
|
+
if (done < text.length) out.push({ ...run, text: text.slice(done) });
|
|
248
|
+
units += text.length;
|
|
249
|
+
}
|
|
250
|
+
const natural = fonts.layout(out, base, {});
|
|
251
|
+
const found = new Map<number, { x: number; line: number }>();
|
|
252
|
+
natural.lines.forEach((line, i) => {
|
|
253
|
+
for (const run of line.runs ?? []) {
|
|
254
|
+
found.set(run.start, { x: line.x + run.x, line: i });
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
/** The room tabs have added to each line so far. */
|
|
258
|
+
const added = new Map<number, number>();
|
|
259
|
+
for (const tab of tabs) {
|
|
260
|
+
const run = out[tab.index];
|
|
261
|
+
const face = {
|
|
262
|
+
...base,
|
|
263
|
+
...(run.family !== undefined ? { family: run.family } : null),
|
|
264
|
+
...(run.size !== undefined ? { size: run.size } : null),
|
|
265
|
+
...(run.weight !== undefined ? { weight: run.weight } : null),
|
|
266
|
+
...(run.style !== undefined ? { style: run.style } : null),
|
|
267
|
+
};
|
|
268
|
+
const space = advanceOf(fonts, face, ' ');
|
|
269
|
+
const every = 8 * space;
|
|
270
|
+
const own = space + (run.letterSpacing ?? 0);
|
|
271
|
+
const at = found.get(tab.at) ?? natural.caretPosition(tab.at);
|
|
272
|
+
const before = added.get(at.line) ?? 0;
|
|
273
|
+
const x = at.x + before;
|
|
274
|
+
let advance = own;
|
|
275
|
+
if (every > 0) {
|
|
276
|
+
let stop = (Math.floor(x / every) + 1) * every;
|
|
277
|
+
if (stop - x < advanceOf(fonts, face, '0') / 2) stop += every;
|
|
278
|
+
advance = stop - x;
|
|
279
|
+
}
|
|
280
|
+
out[tab.index] = {
|
|
281
|
+
...run,
|
|
282
|
+
letterSpacing: (run.letterSpacing ?? 0) + advance - own,
|
|
283
|
+
};
|
|
284
|
+
added.set(at.line, before + advance - own);
|
|
285
|
+
}
|
|
286
|
+
return out;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/** A character's advance in a face: between two letters, so that no engine
|
|
290
|
+
* drops it as a line's end. Kept per engine and face: a file indented with
|
|
291
|
+
* tabs asks for it thousands of times. */
|
|
292
|
+
function advanceOf(
|
|
293
|
+
fonts: FontsLike,
|
|
294
|
+
face: Record<string, unknown>,
|
|
295
|
+
char: string,
|
|
296
|
+
): number {
|
|
297
|
+
let kept = ADVANCES.get(fonts);
|
|
298
|
+
if (!kept) ADVANCES.set(fonts, (kept = new Map()));
|
|
299
|
+
const key = `${face.family}|${face.size}|${face.weight}|${face.style}|${char}`;
|
|
300
|
+
let advance = kept.get(key);
|
|
301
|
+
if (advance === undefined) {
|
|
302
|
+
advance =
|
|
303
|
+
fonts.layout([{ ...face, text: `x${char}x` } as TextRun], face, {})
|
|
304
|
+
.width -
|
|
305
|
+
fonts.layout([{ ...face, text: 'xx' } as TextRun], face, {}).width;
|
|
306
|
+
kept.set(key, advance);
|
|
307
|
+
}
|
|
308
|
+
return advance;
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
const ADVANCES = new WeakMap<FontsLike, Map<string, number>>();
|
|
312
|
+
|
|
181
313
|
/**
|
|
182
314
|
* The bands a highlight over `[start, end)` fills, in layout coordinates —
|
|
183
315
|
* one per line, and more than one on a line that changes direction. The
|
|
@@ -212,9 +344,38 @@ function rangeBands(
|
|
|
212
344
|
return bands;
|
|
213
345
|
}
|
|
214
346
|
|
|
347
|
+
/**
|
|
348
|
+
* Whether two `runs` props say the same thing. A component that builds its
|
|
349
|
+
* runs in render hands over a new array whenever it renders, whether or not
|
|
350
|
+
* the text changed — the rich text editor does on every keystroke, for
|
|
351
|
+
* paragraphs the keystroke never reached — and the array's identity was
|
|
352
|
+
* all a layout cache cleared on. A run's fields are all primitives, so one
|
|
353
|
+
* shallow pass decides it, where the layout it spares is a paragraph shaped
|
|
354
|
+
* and broken again.
|
|
355
|
+
*/
|
|
356
|
+
function sameRuns(a: unknown, b: unknown): boolean {
|
|
357
|
+
if (a === b) return true;
|
|
358
|
+
if (!Array.isArray(a) || !Array.isArray(b) || a.length !== b.length) {
|
|
359
|
+
return false;
|
|
360
|
+
}
|
|
361
|
+
for (let i = 0; i < a.length; i++) {
|
|
362
|
+
const x = a[i] as Record<string, unknown>;
|
|
363
|
+
const y = b[i] as Record<string, unknown>;
|
|
364
|
+
if (x === y) continue;
|
|
365
|
+
if (!x || !y) return false;
|
|
366
|
+
const keys = Object.keys(x);
|
|
367
|
+
if (keys.length !== Object.keys(y).length) return false;
|
|
368
|
+
for (const key of keys) if (x[key] !== y[key]) return false;
|
|
369
|
+
}
|
|
370
|
+
return true;
|
|
371
|
+
}
|
|
372
|
+
|
|
215
373
|
export class RichTextNode extends Node {
|
|
216
374
|
private _layouts = new Map<string, TextLayoutLike | null>();
|
|
217
375
|
private _text: string | null = null;
|
|
376
|
+
/** The runs as laid out where a tab is among them, and what from. */
|
|
377
|
+
private _tabbed: { from: TextRun[]; scale: number; to: TextRun[] } | null =
|
|
378
|
+
null;
|
|
218
379
|
|
|
219
380
|
/**
|
|
220
381
|
* `kind` is for a subclass registered under a name of its own — the rich
|
|
@@ -266,21 +427,36 @@ export class RichTextNode extends Node {
|
|
|
266
427
|
let layout: TextLayoutLike | null = null;
|
|
267
428
|
if (fonts) {
|
|
268
429
|
const s = this._scale;
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
align: this.style.textAlign,
|
|
276
|
-
},
|
|
277
|
-
);
|
|
430
|
+
const base = { family: 'sans-serif', size: 14 * s };
|
|
431
|
+
layout = fonts.layout(this._tabRuns(fonts, base, s), base, {
|
|
432
|
+
maxWidth: Number.isFinite(maxWidth) ? maxWidth : undefined,
|
|
433
|
+
lineHeight: this.style.lineHeight,
|
|
434
|
+
align: this.style.textAlign,
|
|
435
|
+
});
|
|
278
436
|
}
|
|
279
437
|
if (this._layouts.size > 32) this._layouts.clear();
|
|
280
438
|
this._layouts.set(key, layout);
|
|
281
439
|
return layout;
|
|
282
440
|
}
|
|
283
441
|
|
|
442
|
+
/** The runs with their tabs set to their stops (`tabbedRuns`), found
|
|
443
|
+
* once for a list of runs: most have none, and are handed on as they
|
|
444
|
+
* are. */
|
|
445
|
+
private _tabRuns(
|
|
446
|
+
fonts: FontsLike,
|
|
447
|
+
base: Record<string, unknown>,
|
|
448
|
+
scale: number,
|
|
449
|
+
): TextRun[] {
|
|
450
|
+
const from = this._runs();
|
|
451
|
+
const runs = this._deviceRuns(scale);
|
|
452
|
+
if (!runs.some((run) => run.text.includes('\t'))) return runs;
|
|
453
|
+
const kept = this._tabbed;
|
|
454
|
+
if (kept && kept.from === from && kept.scale === scale) return kept.to;
|
|
455
|
+
const to = tabbedRuns(fonts, runs, base);
|
|
456
|
+
this._tabbed = { from, scale, to };
|
|
457
|
+
return to;
|
|
458
|
+
}
|
|
459
|
+
|
|
284
460
|
// --- units ---------------------------------------------------------------
|
|
285
461
|
//
|
|
286
462
|
// The layout, `abs` and the paint are device pixels (react-x11's
|
|
@@ -305,7 +481,20 @@ export class RichTextNode extends Node {
|
|
|
305
481
|
const runs = this._runs();
|
|
306
482
|
if (scale === 1) return runs;
|
|
307
483
|
return runs.map((r) =>
|
|
308
|
-
typeof r.size === 'number'
|
|
484
|
+
typeof r.size === 'number' ||
|
|
485
|
+
r.underlineOffset !== undefined ||
|
|
486
|
+
r.underlineThickness !== undefined
|
|
487
|
+
? {
|
|
488
|
+
...r,
|
|
489
|
+
...(typeof r.size === 'number' ? { size: r.size * scale } : null),
|
|
490
|
+
...(r.underlineOffset !== undefined
|
|
491
|
+
? { underlineOffset: r.underlineOffset * scale }
|
|
492
|
+
: null),
|
|
493
|
+
...(r.underlineThickness !== undefined
|
|
494
|
+
? { underlineThickness: r.underlineThickness * scale }
|
|
495
|
+
: null),
|
|
496
|
+
}
|
|
497
|
+
: r,
|
|
309
498
|
);
|
|
310
499
|
}
|
|
311
500
|
|
|
@@ -327,15 +516,34 @@ export class RichTextNode extends Node {
|
|
|
327
516
|
): void {
|
|
328
517
|
super.applyProps(nextProps, prevProps);
|
|
329
518
|
if (
|
|
330
|
-
nextProps.
|
|
331
|
-
nextProps.
|
|
519
|
+
nextProps.wrap !== prevProps.wrap ||
|
|
520
|
+
!sameRuns(nextProps.runs, prevProps.runs)
|
|
332
521
|
) {
|
|
333
522
|
this._layouts.clear();
|
|
334
523
|
this._text = null;
|
|
524
|
+
this._tabbed = null;
|
|
335
525
|
this.invalidateMeasure('content');
|
|
336
526
|
}
|
|
337
527
|
}
|
|
338
528
|
|
|
529
|
+
/** A new `runs` array that says what the last one said changes nothing
|
|
530
|
+
* drawn — see `sameRuns`. */
|
|
531
|
+
override paintChanged(
|
|
532
|
+
nextProps: Record<string, unknown>,
|
|
533
|
+
prevProps: Record<string, unknown>,
|
|
534
|
+
): boolean {
|
|
535
|
+
if (
|
|
536
|
+
nextProps.runs !== prevProps.runs &&
|
|
537
|
+
sameRuns(nextProps.runs, prevProps.runs)
|
|
538
|
+
) {
|
|
539
|
+
return super.paintChanged(
|
|
540
|
+
{ ...nextProps, runs: prevProps.runs },
|
|
541
|
+
prevProps,
|
|
542
|
+
);
|
|
543
|
+
}
|
|
544
|
+
return super.paintChanged(nextProps, prevProps);
|
|
545
|
+
}
|
|
546
|
+
|
|
339
547
|
override destroySubtree(): void {
|
|
340
548
|
this._layouts.clear();
|
|
341
549
|
super.destroySubtree();
|
|
@@ -440,6 +648,19 @@ export class RichTextNode extends Node {
|
|
|
440
648
|
ctx.restore();
|
|
441
649
|
}
|
|
442
650
|
|
|
651
|
+
/**
|
|
652
|
+
* How far this element draws past its box: a code chip is padded two
|
|
653
|
+
* pixels past the run behind it (`paintRunBackgrounds`), and at the start
|
|
654
|
+
* or the end of a line the pad is outside the box. Said for every
|
|
655
|
+
* paragraph, chips or not — core reads it when it rebuilds the paint
|
|
656
|
+
* bounds a claim covers, and the claim after an edit that took the last
|
|
657
|
+
* chip away still has to cover the chip the frame before drew. An older
|
|
658
|
+
* core never asks.
|
|
659
|
+
*/
|
|
660
|
+
override paintOverhang(): number {
|
|
661
|
+
return Math.round(2 * this.scale);
|
|
662
|
+
}
|
|
663
|
+
|
|
443
664
|
/**
|
|
444
665
|
* The selection band, between the run backgrounds and the ink. The default
|
|
445
666
|
* is core's document selection: the band the `selectable` surface above
|
package/src/richtext/runs.ts
CHANGED
|
@@ -34,10 +34,10 @@ export function canFill(ctx: unknown): ctx is FillContext {
|
|
|
34
34
|
*
|
|
35
35
|
* `span` and `run` are what ntk's layout hands back and what every
|
|
36
36
|
* decoration is read from: the span the run came from, markers and all, and
|
|
37
|
-
* the face it was shaped with. Both are optional because
|
|
38
|
-
*
|
|
39
|
-
*
|
|
40
|
-
* macOS. A run without its span has no decoration to draw; a run without
|
|
37
|
+
* the face it was shaped with. Both are optional because an engine may
|
|
38
|
+
* report only a run's geometry — `{ x, width, start, end }` — as react-x11's
|
|
39
|
+
* Windows engine does and its Cocoa engine did before 2.22.8, and a paint
|
|
40
|
+
* that assumed the rest threw on the first paragraph on macOS. A run without its span has no decoration to draw; a run without
|
|
41
41
|
* its face takes its vertical extent from the line, which both engines
|
|
42
42
|
* report.
|
|
43
43
|
*/
|
|
@@ -102,7 +102,8 @@ let warnedSpanless = false;
|
|
|
102
102
|
* Say so, once, when a laid-out run arrives without the span it came from:
|
|
103
103
|
* every decoration is read off that span, so none will be drawn, and a
|
|
104
104
|
* document that suddenly has no code chips or link underlines should not be
|
|
105
|
-
* a mystery. react-x11's
|
|
105
|
+
* a mystery. react-x11's Windows engine does this, and its Cocoa engine did
|
|
106
|
+
* before 2.22.8.
|
|
106
107
|
*
|
|
107
108
|
* `process` and `console` come off `globalThis` because `src/` compiles
|
|
108
109
|
* with `types: []` — a Node global that wandered in would fail the build
|
|
@@ -120,7 +121,8 @@ function warnSpanless(): void {
|
|
|
120
121
|
'@react-x11/components: the text engine handed back laid-out runs ' +
|
|
121
122
|
'without their spans, so run decorations (backgrounds, underlines, ' +
|
|
122
123
|
"strikethrough) and inline link hit-testing are off. react-x11's " +
|
|
123
|
-
|
|
124
|
+
'Windows text engine does this, as its Cocoa engine did before ' +
|
|
125
|
+
"2.22.8; ntk's does not.",
|
|
124
126
|
);
|
|
125
127
|
}
|
|
126
128
|
|
|
@@ -174,30 +176,39 @@ export function paintRunBackgrounds(
|
|
|
174
176
|
}
|
|
175
177
|
}
|
|
176
178
|
|
|
177
|
-
/** The rules
|
|
178
|
-
*
|
|
179
|
-
*
|
|
179
|
+
/** The rules drawn with a run: its underline and its strikethrough. A rule
|
|
180
|
+
* is one logical pixel thick — `scale` device pixels, so a link on a 2x
|
|
181
|
+
* panel is underlined as heavily as on a 1x one, not with a hairline —
|
|
182
|
+
* and an underline two below the baseline, where the run sets neither
|
|
183
|
+
* (`underlineThickness`, `underlineOffset`, in device pixels by now).
|
|
184
|
+
* `rules` picks a pass: CSS draws an underline under the glyphs and a
|
|
185
|
+
* line through over them (CSS 2.1 Appendix E), which is two passes around
|
|
186
|
+
* the glyphs'; drawn in one, both go over. */
|
|
180
187
|
export function paintRunRules(
|
|
181
188
|
ctx: FillContext,
|
|
182
189
|
line: LaidLine,
|
|
183
190
|
dx: number,
|
|
184
191
|
dy: number,
|
|
185
192
|
scale = 1,
|
|
193
|
+
rules: 'under' | 'over' | 'all' = 'all',
|
|
186
194
|
): void {
|
|
187
195
|
const t = ruleThickness(scale);
|
|
188
196
|
for (const r of line.runs) {
|
|
189
197
|
const span = r.span;
|
|
190
198
|
if (!span) continue;
|
|
191
|
-
const
|
|
199
|
+
const underline = rules !== 'over' ? span.underline : undefined;
|
|
200
|
+
const strike = rules !== 'under' ? span.strike : undefined;
|
|
192
201
|
if (underline) {
|
|
193
202
|
ctx.fillStyle = underline;
|
|
194
203
|
underlineRule(
|
|
195
204
|
ctx,
|
|
196
205
|
Math.round(dx + line.x + r.x),
|
|
197
|
-
Math.round(dy + line.baseline + 2 * t),
|
|
206
|
+
Math.round(dy + line.baseline + (span.underlineOffset ?? 2 * t)),
|
|
198
207
|
Math.ceil(r.width),
|
|
199
208
|
span.underlineStyle ?? 'single',
|
|
200
|
-
|
|
209
|
+
span.underlineThickness === undefined
|
|
210
|
+
? t
|
|
211
|
+
: Math.max(1, Math.round(span.underlineThickness)),
|
|
201
212
|
);
|
|
202
213
|
}
|
|
203
214
|
if (strike) {
|
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 {
|