@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/dist/maps/gl/view.js
CHANGED
|
@@ -35,9 +35,9 @@ import { MarkerBatcher } from './markers.js';
|
|
|
35
35
|
import { buildOverlayBucket, overlayRegion, regionHolds, regionPlacement, } from './overlays.js';
|
|
36
36
|
import { GL_PANE } from './pane.js';
|
|
37
37
|
import { LABEL_INSTANCE, LabelPlacer } from './placement.js';
|
|
38
|
-
import { GlMapRenderer } from './renderer.js';
|
|
38
|
+
import { GlMapRenderer, gatesAt } from './renderer.js';
|
|
39
39
|
import { GlTileStore } from './store.js';
|
|
40
|
-
import { LabelAtlas, SurfaceTextEngine } from './text.js';
|
|
40
|
+
import { LabelAtlas, SurfaceTextEngine, fieldBase } from './text.js';
|
|
41
41
|
const h = React.createElement;
|
|
42
42
|
/**
|
|
43
43
|
* Adaptive quality's rungs, cheapest last. Each leaves out more than the
|
|
@@ -109,6 +109,12 @@ const BUILD_BUDGET_MS = 6;
|
|
|
109
109
|
* — the one label cost that can be large (the first strings on X11 load
|
|
110
110
|
* fonts and rasterize glyphs in JS). Placement's remainder waits a frame. */
|
|
111
111
|
const TEXT_BUDGET_MOVING_MS = 1;
|
|
112
|
+
/** Milliseconds a frame may spend making label fields (`text.ts`), about
|
|
113
|
+
* 0.2 ms each, when there are any to make. */
|
|
114
|
+
const FIELD_BUDGET_MS = 4;
|
|
115
|
+
/** With `labelsWhileMoving`: milliseconds a frame may spend setting the
|
|
116
|
+
* text of names it has just placed, so they draw in it. */
|
|
117
|
+
const LIVE_TEXT_BUDGET_MS = 8;
|
|
112
118
|
const TEXT_BUDGET_SETTLED_MS = 4;
|
|
113
119
|
/**
|
|
114
120
|
* How often a moving view is placed again, in milliseconds — every other
|
|
@@ -150,7 +156,140 @@ const EMPTY_COVER = {
|
|
|
150
156
|
descendants: 0,
|
|
151
157
|
inView: [],
|
|
152
158
|
};
|
|
153
|
-
|
|
159
|
+
/**
|
|
160
|
+
* The level fade: which level the frame is drawn from, and the one fading
|
|
161
|
+
* in over it.
|
|
162
|
+
*
|
|
163
|
+
* A new level is waited for — briefly, until every tile of it in view has
|
|
164
|
+
* answered — so the fade shows it arriving rather than a stand-in for it;
|
|
165
|
+
* then it fades in over the level it replaces, with an ease at both ends.
|
|
166
|
+
* A level more than one step away is not faded (the view it would fade
|
|
167
|
+
* from is sixteen times the tiles), and a change of target halfway
|
|
168
|
+
* through a fade takes the half-shown level as the one it fades from.
|
|
169
|
+
*
|
|
170
|
+
* What it cannot carry is a layer the style starts or stops drawing, which
|
|
171
|
+
* is {@link GateFader}'s: see there for why that is a separate thing and
|
|
172
|
+
* not a scene of its own.
|
|
173
|
+
*/
|
|
174
|
+
export class LevelFader {
|
|
175
|
+
/** The level the frame is drawn from, once one has been drawn. */
|
|
176
|
+
shown = null;
|
|
177
|
+
_fade = null;
|
|
178
|
+
/** Whether a fade is running or waiting to start. */
|
|
179
|
+
get fading() {
|
|
180
|
+
return this._fade !== null;
|
|
181
|
+
}
|
|
182
|
+
plan(target, cover, options) {
|
|
183
|
+
const { at, fadeMs } = options;
|
|
184
|
+
const to = target.level;
|
|
185
|
+
const plain = { base: target, next: null, alpha: 0 };
|
|
186
|
+
if (fadeMs <= 0 || this.shown === null || Math.abs(to - this.shown) > 1) {
|
|
187
|
+
this.shown = to;
|
|
188
|
+
this._fade = null;
|
|
189
|
+
return plain;
|
|
190
|
+
}
|
|
191
|
+
if (to === this.shown) {
|
|
192
|
+
this._fade = null;
|
|
193
|
+
return plain;
|
|
194
|
+
}
|
|
195
|
+
let fade = this._fade;
|
|
196
|
+
if (!fade || fade.to !== to) {
|
|
197
|
+
if (fade && fade.start !== null && (at - fade.start) / fadeMs >= 0.5) {
|
|
198
|
+
this.shown = fade.to;
|
|
199
|
+
}
|
|
200
|
+
if (this.shown === to) {
|
|
201
|
+
this._fade = null;
|
|
202
|
+
return plain;
|
|
203
|
+
}
|
|
204
|
+
fade = this._fade = { to, start: null, waitSince: at };
|
|
205
|
+
}
|
|
206
|
+
const base = cover(this.shown);
|
|
207
|
+
if (fade.start === null) {
|
|
208
|
+
if (target.missing.length > 0 && at - fade.waitSince < FADE_WAIT_MS) {
|
|
209
|
+
return { base, next: null, alpha: 0 };
|
|
210
|
+
}
|
|
211
|
+
fade.start = at;
|
|
212
|
+
}
|
|
213
|
+
const p = (at - fade.start) / fadeMs;
|
|
214
|
+
if (p >= 1) {
|
|
215
|
+
this.shown = to;
|
|
216
|
+
this._fade = null;
|
|
217
|
+
return plain;
|
|
218
|
+
}
|
|
219
|
+
return { base, next: target, alpha: p * p * (3 - 2 * p) };
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* The zoom gate's fade: how much of each style layer to draw, as the camera
|
|
224
|
+
* zooms past the `minZoom` and `maxZoom` the style gives them.
|
|
225
|
+
*
|
|
226
|
+
* **Why this is not a scene.** A level fade cross-fades two whole pictures,
|
|
227
|
+
* and a picture is the natural unit for a change of level. A layer ending
|
|
228
|
+
* is not: `minZoom` is a zoom, the pyramid changes level at a different
|
|
229
|
+
* zoom, and the two flips land on different frames — so carrying the gate
|
|
230
|
+
* as a second scene means a fade retargeted in the middle of another one,
|
|
231
|
+
* which can only either snap to the arriving scene or restart from the
|
|
232
|
+
* outgoing one. Both are a step in the picture, and stepping is what the
|
|
233
|
+
* fade is for. That is what made buildings vanish for one wheel notch and
|
|
234
|
+
* come back for the next. An opacity per layer has no such conflict: each
|
|
235
|
+
* layer's number moves on its own, through any number of level fades, and
|
|
236
|
+
* both scenes of a level fade draw with the same numbers — so the one
|
|
237
|
+
* thing an opacity ramp is bad at, a map dissolving layer by layer, cannot
|
|
238
|
+
* happen here, because only the layers actually crossing a gate move.
|
|
239
|
+
*/
|
|
240
|
+
export class GateFader {
|
|
241
|
+
/** Per style layer, in the prepared style's order. */
|
|
242
|
+
_alpha = [];
|
|
243
|
+
_at = null;
|
|
244
|
+
_fading = false;
|
|
245
|
+
/** Whether any layer is between the gate's ends — a frame to ask for. */
|
|
246
|
+
get fading() {
|
|
247
|
+
return this._fading;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* The frame's `layerAlpha`, or null for "what the gate says" — which is
|
|
251
|
+
* every frame where nothing is crossing one, and every frame at all with
|
|
252
|
+
* the fade turned off.
|
|
253
|
+
*/
|
|
254
|
+
step(style, options) {
|
|
255
|
+
const { at, fadeMs, zoom, detail } = options;
|
|
256
|
+
const targets = gatesAt(style, zoom, detail);
|
|
257
|
+
// The first frame, a restyle that changes the layer count, and the fade
|
|
258
|
+
// turned off: the gate, with nothing to advance.
|
|
259
|
+
const first = this._at === null || this._alpha.length !== targets.length;
|
|
260
|
+
if (fadeMs <= 0 || first) {
|
|
261
|
+
this._alpha = targets;
|
|
262
|
+
this._at = at;
|
|
263
|
+
this._fading = false;
|
|
264
|
+
return null;
|
|
265
|
+
}
|
|
266
|
+
const step = (at - (this._at ?? at)) / fadeMs;
|
|
267
|
+
this._at = at;
|
|
268
|
+
let fading = false;
|
|
269
|
+
let moved = false;
|
|
270
|
+
for (let i = 0; i < targets.length; i++) {
|
|
271
|
+
const to = targets[i];
|
|
272
|
+
const from = this._alpha[i];
|
|
273
|
+
if (from !== to) {
|
|
274
|
+
const next = to > from ? Math.min(to, from + step) : Math.max(to, from - step);
|
|
275
|
+
this._alpha[i] = next;
|
|
276
|
+
if (next !== to)
|
|
277
|
+
fading = true;
|
|
278
|
+
}
|
|
279
|
+
if (this._alpha[i] !== to)
|
|
280
|
+
moved = true;
|
|
281
|
+
}
|
|
282
|
+
this._fading = fading;
|
|
283
|
+
return moved ? this._alpha : null;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* The driver: everything a frame is, between the controller's camera and
|
|
288
|
+
* the renderer. Exported for the tests that drive it against a recording
|
|
289
|
+
* GL table — there is no other way to see a whole frame's decisions, and
|
|
290
|
+
* this host cannot render one (indirect GLX has no shaders).
|
|
291
|
+
*/
|
|
292
|
+
export class GlMapDriver {
|
|
154
293
|
props;
|
|
155
294
|
theme = null;
|
|
156
295
|
_controller;
|
|
@@ -173,9 +312,18 @@ class GlMapDriver {
|
|
|
173
312
|
_zoomedAt = -Infinity;
|
|
174
313
|
_rung = 0;
|
|
175
314
|
_cost = new CostModel();
|
|
176
|
-
|
|
177
|
-
|
|
315
|
+
_fader = new LevelFader();
|
|
316
|
+
_gates = new GateFader();
|
|
178
317
|
_placer = new LabelPlacer();
|
|
318
|
+
/** Places the labels of the view a glide stops at, and shows nothing:
|
|
319
|
+
* what it asks the atlas for is measured and set while the glide is
|
|
320
|
+
* still being drawn. */
|
|
321
|
+
_scout = new LabelPlacer();
|
|
322
|
+
/** The destination the scout last placed, and whether that placement
|
|
323
|
+
* measured everything it offered — a frame's text budget can run out
|
|
324
|
+
* first, and then the next frame places it again. */
|
|
325
|
+
_scoutedFor = '';
|
|
326
|
+
_scoutDone = false;
|
|
179
327
|
_markers = new MarkerBatcher();
|
|
180
328
|
/** The overlays' bucket, and what it was built from. */
|
|
181
329
|
_overlay = null;
|
|
@@ -187,7 +335,7 @@ class GlMapDriver {
|
|
|
187
335
|
/** The attribution's one instance. */
|
|
188
336
|
_attributionText = new Float32Array(LABEL_INSTANCE);
|
|
189
337
|
/** An attribution a frame could not draw yet — its string not measured,
|
|
190
|
-
* or its
|
|
338
|
+
* or its field not in the texture — and the size it is drawn at. */
|
|
191
339
|
_attributionWanted = null;
|
|
192
340
|
/** When labels were last placed. */
|
|
193
341
|
_placedAt = -Infinity;
|
|
@@ -378,6 +526,9 @@ class GlMapDriver {
|
|
|
378
526
|
}
|
|
379
527
|
finally {
|
|
380
528
|
controller.painting = false;
|
|
529
|
+
// `onFrame` ran inside that, and a camera animation drives itself
|
|
530
|
+
// from it — so whatever it asked for is scheduled here.
|
|
531
|
+
controller.paintEnded();
|
|
381
532
|
}
|
|
382
533
|
}
|
|
383
534
|
catch (error) {
|
|
@@ -433,64 +584,30 @@ class GlMapDriver {
|
|
|
433
584
|
}
|
|
434
585
|
return out;
|
|
435
586
|
}
|
|
587
|
+
/**
|
|
588
|
+
* How long a moving frame may take, or null for "as long as it likes".
|
|
589
|
+
*
|
|
590
|
+
* **On unless turned off.** A renderer with no budget spends whatever a
|
|
591
|
+
* frame costs and asks for the next one on the following compositor tick
|
|
592
|
+
* regardless, so at the expensive end of a zoom sweep it takes the whole
|
|
593
|
+
* thread — and the app around it stops getting its timers. Measured on a
|
|
594
|
+
* fly across ten levels: without a budget the loop went a second at a time
|
|
595
|
+
* without running a `setTimeout`, and nothing inside it was slow, because
|
|
596
|
+
* the cost was spread over a hundred frames rather than spent in one call.
|
|
597
|
+
* With the budget, none. An embedding app should not have to know that to
|
|
598
|
+
* keep its own clock.
|
|
599
|
+
*
|
|
600
|
+
* What it costs is detail while the camera moves, and only while it moves:
|
|
601
|
+
* the frame after it settles draws everything again.
|
|
602
|
+
*/
|
|
436
603
|
_budget() {
|
|
437
604
|
const adaptive = this.props.map.adaptive;
|
|
438
|
-
if (
|
|
605
|
+
if (adaptive === false)
|
|
439
606
|
return null;
|
|
440
607
|
return typeof adaptive === 'object'
|
|
441
608
|
? (adaptive.budgetMs ?? DEFAULT_BUDGET_MS)
|
|
442
609
|
: DEFAULT_BUDGET_MS;
|
|
443
610
|
}
|
|
444
|
-
/**
|
|
445
|
-
* The level fade: which level the frame is drawn from, and the one fading
|
|
446
|
-
* in over it.
|
|
447
|
-
*
|
|
448
|
-
* A new level is waited for — briefly, until every tile of it in view has
|
|
449
|
-
* answered — so the fade shows it arriving rather than a stand-in for it;
|
|
450
|
-
* then it fades in over the level it replaces, with an ease at both ends.
|
|
451
|
-
* A level more than one step away is not faded (the view it would fade
|
|
452
|
-
* from is sixteen times the tiles), and a change of target halfway
|
|
453
|
-
* through a fade takes the half-shown level as the one it fades from.
|
|
454
|
-
*/
|
|
455
|
-
_planLevels(target, cover, at) {
|
|
456
|
-
const fadeMs = this.props.map.levelFade ?? 0;
|
|
457
|
-
const to = target.level;
|
|
458
|
-
const plain = { base: target, next: null, alpha: 0 };
|
|
459
|
-
if (fadeMs <= 0 || this._shown === null || Math.abs(to - this._shown) > 1) {
|
|
460
|
-
this._shown = to;
|
|
461
|
-
this._fade = null;
|
|
462
|
-
return plain;
|
|
463
|
-
}
|
|
464
|
-
if (to === this._shown) {
|
|
465
|
-
this._fade = null;
|
|
466
|
-
return plain;
|
|
467
|
-
}
|
|
468
|
-
let fade = this._fade;
|
|
469
|
-
if (!fade || fade.to !== to) {
|
|
470
|
-
if (fade && fade.start !== null && (at - fade.start) / fadeMs >= 0.5) {
|
|
471
|
-
this._shown = fade.to;
|
|
472
|
-
}
|
|
473
|
-
if (this._shown === to) {
|
|
474
|
-
this._fade = null;
|
|
475
|
-
return plain;
|
|
476
|
-
}
|
|
477
|
-
fade = this._fade = { to, start: null, waitSince: at };
|
|
478
|
-
}
|
|
479
|
-
const base = cover(this._shown);
|
|
480
|
-
if (fade.start === null) {
|
|
481
|
-
if (target.missing.length > 0 && at - fade.waitSince < FADE_WAIT_MS) {
|
|
482
|
-
return { base, next: null, alpha: 0 };
|
|
483
|
-
}
|
|
484
|
-
fade.start = at;
|
|
485
|
-
}
|
|
486
|
-
const p = (at - fade.start) / fadeMs;
|
|
487
|
-
if (p >= 1) {
|
|
488
|
-
this._shown = to;
|
|
489
|
-
this._fade = null;
|
|
490
|
-
return plain;
|
|
491
|
-
}
|
|
492
|
-
return { base, next: target, alpha: p * p * (3 - 2 * p) };
|
|
493
|
-
}
|
|
494
611
|
_frame(gl, info) {
|
|
495
612
|
const map = this.props.map;
|
|
496
613
|
const controller = this._controller;
|
|
@@ -539,6 +656,17 @@ class GlMapDriver {
|
|
|
539
656
|
store.want(target.missing);
|
|
540
657
|
return { source, store, pyramid, target };
|
|
541
658
|
});
|
|
659
|
+
// Where a wheel's glide stops, while one is running: its tiles are
|
|
660
|
+
// asked for after the view's own, so the view the glide lands on is
|
|
661
|
+
// loaded — and its labels set, below — by the time it gets there.
|
|
662
|
+
const destination = moving ? controller.destination() : null;
|
|
663
|
+
const ahead = destination
|
|
664
|
+
? covers.map((c) => {
|
|
665
|
+
const cover = renderCover(destination, pane, scale, c.pyramid, c.store);
|
|
666
|
+
c.store.want(cover.missing);
|
|
667
|
+
return cover;
|
|
668
|
+
})
|
|
669
|
+
: null;
|
|
542
670
|
// The level fade and adaptive quality are the first source's — the
|
|
543
671
|
// basemap's; a pyramid over it is drawn at its own level throughout.
|
|
544
672
|
const primary = covers[0] ?? null;
|
|
@@ -547,8 +675,9 @@ class GlMapDriver {
|
|
|
547
675
|
level,
|
|
548
676
|
})
|
|
549
677
|
: EMPTY_COVER;
|
|
678
|
+
const fadeMs = map.levelFade ?? 0;
|
|
550
679
|
const plan = primary
|
|
551
|
-
? this.
|
|
680
|
+
? this._fader.plan(primary.target, coverAt, { at, fadeMs })
|
|
552
681
|
: { base: EMPTY_COVER, next: null, alpha: 0 };
|
|
553
682
|
if (primary && plan.base !== primary.target) {
|
|
554
683
|
primary.store.want(plan.base.missing);
|
|
@@ -589,11 +718,24 @@ class GlMapDriver {
|
|
|
589
718
|
};
|
|
590
719
|
let rung = 0;
|
|
591
720
|
let predictedMs = 0;
|
|
721
|
+
// An overview of the view: its ancestors every other level up to the
|
|
722
|
+
// pyramid's root, asked for after the view's own tiles and looked up
|
|
723
|
+
// every frame, so they stay loaded. A view is a speck at those levels,
|
|
724
|
+
// so this is a tile or two a level. It is what a fast zoom out lands
|
|
725
|
+
// on: a trackpad's momentum can cross fifteen levels in a quarter of a
|
|
726
|
+
// second, and every level it passes that has no tile draws the style's
|
|
727
|
+
// background alone — a frame of one flat colour, labels gone with the
|
|
728
|
+
// tiles, where a coarser tile would have drawn the place, blurred. With
|
|
729
|
+
// one level of it in reach two levels up, a hole is always filled from
|
|
730
|
+
// above (`renderCover`'s ancestors reach eight). The level just above
|
|
731
|
+
// the view comes first: it is also what the ladder's last rungs draw.
|
|
732
|
+
if (primary) {
|
|
733
|
+
const top = primary.pyramid.minZoom;
|
|
734
|
+
for (let level = primary.target.level - 1; level >= top; level = level - 2 < top && level > top ? top : level - 2) {
|
|
735
|
+
primary.store.want(coverAt(level).missing);
|
|
736
|
+
}
|
|
737
|
+
}
|
|
592
738
|
if (budget !== null && moving && primary) {
|
|
593
|
-
// The coarser level is what the ladder's last rungs draw, so ask for
|
|
594
|
-
// it too — after the view's own tiles, which come first.
|
|
595
|
-
primary.store.want(coverAt(Math.max(primary.pyramid.minZoom, primary.target.level - 1))
|
|
596
|
-
.missing);
|
|
597
739
|
const predict = (r) => {
|
|
598
740
|
const built = build(r);
|
|
599
741
|
const work = renderer.estimate(built.frame) +
|
|
@@ -605,6 +747,24 @@ class GlMapDriver {
|
|
|
605
747
|
}
|
|
606
748
|
this._rung = rung;
|
|
607
749
|
const { frame, fade } = build(rung);
|
|
750
|
+
// A layer crossing a gate — the style's `minZoom`, or this rung's
|
|
751
|
+
// `detail` — is ramped rather than cut, and both of a level fade's
|
|
752
|
+
// scenes draw it at the same ramp. Decided after the rung, because the
|
|
753
|
+
// rung is one of the gates: a moving frame that drops the style's
|
|
754
|
+
// newest layers to make its budget would otherwise take them out in
|
|
755
|
+
// one frame and hand them back in one more when the camera settled,
|
|
756
|
+
// which is a flicker on exactly the layers a zoom is looking at.
|
|
757
|
+
const layerAlpha = this._gates.step(prepared, {
|
|
758
|
+
at,
|
|
759
|
+
fadeMs,
|
|
760
|
+
zoom: camera.zoom,
|
|
761
|
+
detail: QUALITY_LADDER[rung].detail,
|
|
762
|
+
});
|
|
763
|
+
if (layerAlpha) {
|
|
764
|
+
frame.layerAlpha = layerAlpha;
|
|
765
|
+
if (fade)
|
|
766
|
+
fade.frame.layerAlpha = layerAlpha;
|
|
767
|
+
}
|
|
608
768
|
// The text: the labels, and the attribution, set in the same atlas.
|
|
609
769
|
let labels = null;
|
|
610
770
|
let attribution = null;
|
|
@@ -614,12 +774,31 @@ class GlMapDriver {
|
|
|
614
774
|
try {
|
|
615
775
|
const atlas = this._atlasFor(info.node, style, scale);
|
|
616
776
|
if (atlas) {
|
|
617
|
-
|
|
777
|
+
// Live labels measure at the settled budget while moving too:
|
|
778
|
+
// what they admit mid-zoom has to be measured mid-zoom.
|
|
779
|
+
const live = map.labelsWhileMoving === true;
|
|
780
|
+
const textDeadline = now() +
|
|
781
|
+
(moving && !live ? TEXT_BUDGET_MOVING_MS : TEXT_BUDGET_SETTLED_MS);
|
|
782
|
+
atlas.beginFrame(textDeadline);
|
|
618
783
|
// The attribution before the names: it is one string, measured
|
|
619
784
|
// once, and a frame whose budget went on names would leave it
|
|
620
785
|
// for a later one — for as long as names keep arriving.
|
|
621
786
|
attribution = this._attributionFor(atlas, frame);
|
|
622
787
|
labels = this._labelsFor(atlas, frame, fade, at, moving);
|
|
788
|
+
if (destination && ahead) {
|
|
789
|
+
this._scoutFor(atlas, frame, destination, ahead, at);
|
|
790
|
+
}
|
|
791
|
+
else if (this._scoutedFor !== '') {
|
|
792
|
+
this._scout.reset();
|
|
793
|
+
this._scoutedFor = '';
|
|
794
|
+
}
|
|
795
|
+
// The fields of strings already read back, on a budget of their
|
|
796
|
+
// own: the text budget moving is 1 ms, five fields, and a jump
|
|
797
|
+
// somewhere new reads back sixty names at once — they came in
|
|
798
|
+
// over two hundred milliseconds that way, against none for the
|
|
799
|
+
// coverage rasters fields replaced. This frame's draw uploads
|
|
800
|
+
// what it makes.
|
|
801
|
+
atlas.makeFields(Math.max(textDeadline, now() + FIELD_BUDGET_MS));
|
|
623
802
|
this._pumpSoon();
|
|
624
803
|
}
|
|
625
804
|
}
|
|
@@ -727,7 +906,7 @@ class GlMapDriver {
|
|
|
727
906
|
uploadBytes: stats.uploadBytes,
|
|
728
907
|
offscreen: stats.offscreen,
|
|
729
908
|
level,
|
|
730
|
-
shownLevel: this.
|
|
909
|
+
shownLevel: this._fader.shown ?? level,
|
|
731
910
|
fade: stats.fade,
|
|
732
911
|
quality: rung,
|
|
733
912
|
predictedMs,
|
|
@@ -739,19 +918,24 @@ class GlMapDriver {
|
|
|
739
918
|
textPending: this._atlas?.pending ?? false,
|
|
740
919
|
},
|
|
741
920
|
};
|
|
742
|
-
// A label still fading, strings this frame had no budget to measure,
|
|
743
|
-
//
|
|
744
|
-
// in flight asks for one itself when it lands.
|
|
921
|
+
// A label still fading, strings this frame had no budget to measure,
|
|
922
|
+
// fields still to be made, or fields still to go into the texture want
|
|
923
|
+
// the next frame; a batch in flight asks for one itself when it lands.
|
|
745
924
|
const labelling = labels !== null &&
|
|
746
925
|
(this._placer.animating ||
|
|
747
926
|
this._atlas?.starved === true ||
|
|
927
|
+
this._atlas?.fielding === true ||
|
|
748
928
|
this._atlas?.uploading === true);
|
|
749
929
|
// An attribution this frame could not draw may have gone into the
|
|
750
930
|
// texture during it — the upload happens as the labels draw, after the
|
|
751
931
|
// frame chose what to draw — and then it is the next frame's.
|
|
752
932
|
const wanted = this._attributionWanted;
|
|
753
|
-
const attributing = wanted !== null && this._atlas?.entry(wanted.text
|
|
754
|
-
if (more ||
|
|
933
|
+
const attributing = wanted !== null && this._atlas?.entry(wanted.text) != null;
|
|
934
|
+
if (more ||
|
|
935
|
+
this._fader.fading ||
|
|
936
|
+
this._gates.fading ||
|
|
937
|
+
labelling ||
|
|
938
|
+
attributing)
|
|
755
939
|
this.request();
|
|
756
940
|
if (!this._announced) {
|
|
757
941
|
this._announced = true;
|
|
@@ -813,9 +997,9 @@ class GlMapDriver {
|
|
|
813
997
|
this._noText = true;
|
|
814
998
|
return null;
|
|
815
999
|
}
|
|
816
|
-
//
|
|
817
|
-
//
|
|
818
|
-
this._atlas = new LabelAtlas(engine, {
|
|
1000
|
+
// Fields set at a base size that follows the display's scale, so a
|
|
1001
|
+
// label on a 2x panel is sampled from a field twice as fine.
|
|
1002
|
+
this._atlas = new LabelAtlas(engine, { base: fieldBase(scale) });
|
|
819
1003
|
this._atlas.onChange = this.request;
|
|
820
1004
|
this._atlasKey = key;
|
|
821
1005
|
this._placer.reset();
|
|
@@ -827,6 +1011,7 @@ class GlMapDriver {
|
|
|
827
1011
|
* renderer.
|
|
828
1012
|
*/
|
|
829
1013
|
_labelsFor(atlas, frame, fade, at, moving) {
|
|
1014
|
+
const live = this.props.map.labelsWhileMoving === true;
|
|
830
1015
|
const from = fade && fade.alpha >= 0.5 ? fade.frame : frame;
|
|
831
1016
|
const centre = project(this._controller.camera().center);
|
|
832
1017
|
const placement = {
|
|
@@ -841,20 +1026,68 @@ class GlMapDriver {
|
|
|
841
1026
|
// The projection's world, which the cover lays every source out on.
|
|
842
1027
|
world: worldSize(frame.zoom, DEFAULT_TILE_SIZE) * frame.scale,
|
|
843
1028
|
now: at,
|
|
844
|
-
|
|
845
|
-
|
|
1029
|
+
// Live: every name the view offers, at every step of a zoom.
|
|
1030
|
+
admit: live || at - this._zoomedAt >= ZOOM_QUIET_MS,
|
|
846
1031
|
};
|
|
847
|
-
if (!moving || at - this._placedAt >= PLACE_INTERVAL_MS) {
|
|
1032
|
+
if (live || !moving || at - this._placedAt >= PLACE_INTERVAL_MS) {
|
|
848
1033
|
this._placer.place(placement, atlas);
|
|
849
1034
|
this._placedAt = at;
|
|
850
1035
|
}
|
|
1036
|
+
// Live: what placement asked for is set now, before the batch, so a
|
|
1037
|
+
// name placed in this frame is drawn in it — its field goes into the
|
|
1038
|
+
// texture ahead of the cap, before this frame's labels draw.
|
|
1039
|
+
if (live)
|
|
1040
|
+
atlas.setNow(now() + LIVE_TEXT_BUDGET_MS);
|
|
851
1041
|
return this._placer.batch(placement, atlas);
|
|
852
1042
|
}
|
|
1043
|
+
/**
|
|
1044
|
+
* Render ahead: place the labels of the view a glide stops at, so that
|
|
1045
|
+
* every string it will show is measured and asked of the atlas while the
|
|
1046
|
+
* glide's own frames are drawn. Nothing it places is drawn — the frame's
|
|
1047
|
+
* placer places the destination again when it gets there, and finds every
|
|
1048
|
+
* box measured and every field in the texture, so the labels fade in
|
|
1049
|
+
* when the view settles rather than a readback and an upload after.
|
|
1050
|
+
*
|
|
1051
|
+
* A fresh placement each time (the scout keeps no labels between runs;
|
|
1052
|
+
* holding a place is for what is on screen), and not every frame: when
|
|
1053
|
+
* the destination moves — another notch — or more of its tiles land, or
|
|
1054
|
+
* the last placement ran out of the frame's text budget before it had
|
|
1055
|
+
* measured everything. It measures out of that budget, after the frame's
|
|
1056
|
+
* own labels.
|
|
1057
|
+
*/
|
|
1058
|
+
_scoutFor(atlas, frame, destination, covers, at) {
|
|
1059
|
+
// The destination is recomputed from each frame's camera, so its last
|
|
1060
|
+
// digits wander; to a millionth of a degree it is the same place. And
|
|
1061
|
+
// it is a different question once more of its tiles are in hand.
|
|
1062
|
+
let held = 0;
|
|
1063
|
+
for (const c of covers)
|
|
1064
|
+
held += c.own;
|
|
1065
|
+
const key = `${destination.zoom}|${destination.center.lon.toFixed(6)}|${destination.center.lat.toFixed(6)}|${held}`;
|
|
1066
|
+
if (key === this._scoutedFor && this._scoutDone)
|
|
1067
|
+
return;
|
|
1068
|
+
this._scoutedFor = key;
|
|
1069
|
+
const centre = project(destination.center);
|
|
1070
|
+
this._scout.reset();
|
|
1071
|
+
this._scout.place({
|
|
1072
|
+
width: frame.width,
|
|
1073
|
+
height: frame.height,
|
|
1074
|
+
scale: frame.scale,
|
|
1075
|
+
zoom: destination.zoom,
|
|
1076
|
+
style: frame.style,
|
|
1077
|
+
tiles: covers.flatMap((c) => c.tiles),
|
|
1078
|
+
centerX: centre.x,
|
|
1079
|
+
centerY: centre.y,
|
|
1080
|
+
world: worldSize(destination.zoom, DEFAULT_TILE_SIZE) * frame.scale,
|
|
1081
|
+
now: at,
|
|
1082
|
+
admit: true,
|
|
1083
|
+
}, atlas);
|
|
1084
|
+
this._scoutDone = !atlas.starved;
|
|
1085
|
+
}
|
|
853
1086
|
/**
|
|
854
1087
|
* The attribution, as the retained renderer draws it: the same box on the
|
|
855
1088
|
* same pixels (`attributionLayout`), the text in the labels' face, from
|
|
856
1089
|
* the labels' atlas. Null while there is none to draw — `attribution=""`,
|
|
857
|
-
* or no source that names one — and until its
|
|
1090
|
+
* or no source that names one — and until its field is in the texture,
|
|
858
1091
|
* so the box and its text arrive together.
|
|
859
1092
|
*/
|
|
860
1093
|
_attributionFor(atlas, frame) {
|
|
@@ -866,19 +1099,20 @@ class GlMapDriver {
|
|
|
866
1099
|
const s = frame.scale;
|
|
867
1100
|
const size = ATTRIBUTION_SIZE * s;
|
|
868
1101
|
const box = atlas.measure(text, size);
|
|
869
|
-
const entry = box ? atlas.entry(text
|
|
1102
|
+
const entry = box ? atlas.entry(text) : null;
|
|
870
1103
|
if (!box || !entry) {
|
|
871
1104
|
this._attributionWanted = { text, size };
|
|
872
1105
|
return null;
|
|
873
1106
|
}
|
|
874
1107
|
const at = attributionLayout({ width: box.width / s, height: box.height / s }, { x: 0, y: 0, width: frame.width / s, height: frame.height / s }, s);
|
|
875
1108
|
const palette = overlayPalette(this.theme);
|
|
876
|
-
// The string sits `pad` inside its
|
|
877
|
-
//
|
|
878
|
-
// string's corner on the layout's.
|
|
1109
|
+
// The string sits `pad` texels inside its field, the field is drawn
|
|
1110
|
+
// `k` device pixels a texel, and a level label's quad is centred on its
|
|
1111
|
+
// anchor: this anchor puts the string's corner on the layout's.
|
|
1112
|
+
const k = size / atlas.base;
|
|
879
1113
|
const d = this._attributionText;
|
|
880
|
-
d[0] = at.x
|
|
881
|
-
d[1] = at.y
|
|
1114
|
+
d[0] = at.x + (entry.width / 2 - atlas.pad) * k;
|
|
1115
|
+
d[1] = at.y + (entry.height / 2 - atlas.pad) * k;
|
|
882
1116
|
d[2] = 1;
|
|
883
1117
|
d[3] = 0;
|
|
884
1118
|
d[4] = entry.x;
|
|
@@ -888,6 +1122,7 @@ class GlMapDriver {
|
|
|
888
1122
|
d.set(premultiplied(parseColor(palette.text) ?? BLACK), 8);
|
|
889
1123
|
d.fill(0, 12, 17); // no halo: the box is what it reads against
|
|
890
1124
|
d[17] = 1;
|
|
1125
|
+
d[18] = k;
|
|
891
1126
|
return {
|
|
892
1127
|
box: at.box,
|
|
893
1128
|
boxColor: premultiplied(parseColor(palette.background) ?? WHITE, ATTRIBUTION_OPACITY),
|