@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/maps/gl/renderer.ts
CHANGED
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
linkProgram,
|
|
56
56
|
} from './shaders.js';
|
|
57
57
|
import type { GL, Program } from './shaders.js';
|
|
58
|
-
import {
|
|
58
|
+
import { QUAD_INSET } from './text.js';
|
|
59
59
|
import type { LabelAtlas } from './text.js';
|
|
60
60
|
|
|
61
61
|
/** A rectangle in device pixels, top-left origin. */
|
|
@@ -89,6 +89,17 @@ export interface RenderFrame {
|
|
|
89
89
|
height: number;
|
|
90
90
|
/** The camera zoom: what zoom ramps and layer ranges resolve at. */
|
|
91
91
|
zoom: number;
|
|
92
|
+
/**
|
|
93
|
+
* How much of each of the style's layers to draw, by the layer's index in
|
|
94
|
+
* `style.layers` — a layer the camera is zooming past `minZoom` is ramped
|
|
95
|
+
* out rather than cut, and what is not listed is `drawsAt`'s own answer.
|
|
96
|
+
*
|
|
97
|
+
* Per layer rather than per scene because the flips overlap: the zoom a
|
|
98
|
+
* layer ends at is not where the pyramid changes level, so a scene-wide
|
|
99
|
+
* cross-fade of the two would keep retargeting, and each retarget is a
|
|
100
|
+
* step in the picture. An opacity is a number that can move on its own.
|
|
101
|
+
*/
|
|
102
|
+
layerAlpha?: readonly number[];
|
|
92
103
|
/** Device pixels per logical pixel: what style lengths are multiplied by. */
|
|
93
104
|
scale: number;
|
|
94
105
|
style: PreparedStyle;
|
|
@@ -296,7 +307,46 @@ function drawsAt(layer: MapStyleLayer, zoom: number, detail: number): boolean {
|
|
|
296
307
|
return true;
|
|
297
308
|
}
|
|
298
309
|
|
|
299
|
-
/**
|
|
310
|
+
/**
|
|
311
|
+
* How much of a layer this frame draws: its `layerAlpha` where the frame
|
|
312
|
+
* has one, and otherwise the gate. The ramp is the whole answer where there
|
|
313
|
+
* is one — whoever set it has already folded in every gate, `detail`
|
|
314
|
+
* included — but never for a layer the style has turned off or a kind this
|
|
315
|
+
* renderer does not draw.
|
|
316
|
+
*
|
|
317
|
+
* Exported for the tests that watch a swept frame decide.
|
|
318
|
+
*/
|
|
319
|
+
export function gateOf(
|
|
320
|
+
frame: RenderFrame,
|
|
321
|
+
index: number,
|
|
322
|
+
layer: MapStyleLayer,
|
|
323
|
+
detail: number,
|
|
324
|
+
): number {
|
|
325
|
+
if (layer.visible === false) return 0;
|
|
326
|
+
if (layer.type !== 'fill' && layer.type !== 'line' && layer.type !== 'circle')
|
|
327
|
+
return 0;
|
|
328
|
+
const ramp = frame.layerAlpha?.[index];
|
|
329
|
+
if (ramp === undefined) return drawsAt(layer, frame.zoom, detail) ? 1 : 0;
|
|
330
|
+
return ramp > 0 ? Math.min(1, ramp) : 0;
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
/**
|
|
334
|
+
* Which of a style's layers the gates draw, as a `layerAlpha` of ones and
|
|
335
|
+
* zeroes — what a ramp moves towards. `detail` is adaptive quality's, so a
|
|
336
|
+
* rung that drops the style's newest layers is something to ramp like any
|
|
337
|
+
* other gate rather than a step in the picture.
|
|
338
|
+
*/
|
|
339
|
+
export function gatesAt(
|
|
340
|
+
style: PreparedStyle,
|
|
341
|
+
zoom: number,
|
|
342
|
+
detail = 0,
|
|
343
|
+
): number[] {
|
|
344
|
+
return style.layers.map(({ layer }) =>
|
|
345
|
+
drawsAt(layer, zoom, detail) ? 1 : 0,
|
|
346
|
+
);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
/** Label fields taken into the atlas texture per frame at most. */
|
|
300
350
|
const ATLAS_UPLOADS_PER_FRAME = 24;
|
|
301
351
|
|
|
302
352
|
/** GL's own name for "which VAO is bound", which the table may not carry. */
|
|
@@ -332,6 +382,9 @@ export class GlMapRenderer {
|
|
|
332
382
|
private _circle: Program | null = null;
|
|
333
383
|
private _raster: Program | null = null;
|
|
334
384
|
private _atlasTexture: unknown = null;
|
|
385
|
+
/** RGBA a field is widened into for its upload, reused. Its colour
|
|
386
|
+
* channels are white and never written again; only alpha changes. */
|
|
387
|
+
private _fieldScratch = new Uint8Array(0);
|
|
335
388
|
private _atlasOwner: LabelAtlas | null = null;
|
|
336
389
|
private _stats: GlRenderStats = GlMapRenderer._emptyStats();
|
|
337
390
|
/** Bytes of tile geometry resident on the GPU. */
|
|
@@ -428,6 +481,11 @@ export class GlMapRenderer {
|
|
|
428
481
|
);
|
|
429
482
|
for (let i = 0; i < layers.length; i++) {
|
|
430
483
|
const layer = layers[i].layer;
|
|
484
|
+
// The gate, not the ramp: what a rung is priced at is what it
|
|
485
|
+
// settles at. A layer on its way out is still being drawn, and
|
|
486
|
+
// pricing that would put the next rung's estimate above the budget
|
|
487
|
+
// — which would drop another layer, which would ramp, which is a
|
|
488
|
+
// ladder that climbs on its own transients.
|
|
431
489
|
if (!drawsAt(layer, frame.zoom, detail)) continue;
|
|
432
490
|
let records = 0;
|
|
433
491
|
for (let t = 0; t < tiles.length; t++) {
|
|
@@ -493,9 +551,13 @@ export class GlMapRenderer {
|
|
|
493
551
|
stats.fade = Math.min(1, fade.alpha);
|
|
494
552
|
}
|
|
495
553
|
|
|
496
|
-
// Even with nothing to draw: the batch's atlas may have
|
|
554
|
+
// Even with nothing to draw: the batch's atlas may have fields waiting
|
|
497
555
|
// for the texture, and until they are in it nothing of theirs can be.
|
|
498
|
-
if (labels)
|
|
556
|
+
if (labels) {
|
|
557
|
+
this._labels(labels, width, height);
|
|
558
|
+
// Labels, not instances: an icon's plate and glyph are two more.
|
|
559
|
+
stats.labels = labels.labels ?? labels.count;
|
|
560
|
+
}
|
|
499
561
|
|
|
500
562
|
if (overlays) stats.overlays = this._overlays(overlays, frame);
|
|
501
563
|
|
|
@@ -606,15 +668,20 @@ export class GlMapRenderer {
|
|
|
606
668
|
}
|
|
607
669
|
for (let i = 0; i < layers.length; i++) {
|
|
608
670
|
const layer = layers[i].layer;
|
|
609
|
-
|
|
671
|
+
const gate = gateOf(frame, i, layer, detail);
|
|
672
|
+
if (gate <= 0) continue;
|
|
610
673
|
if (layer.type === 'fill') {
|
|
611
|
-
if (this._fill(frame, tiles, i, layer, scissors, edges)) {
|
|
674
|
+
if (this._fill(frame, tiles, i, layer, scissors, edges, gate)) {
|
|
612
675
|
stats.layers++;
|
|
613
676
|
}
|
|
614
677
|
} else if (layer.type === 'line') {
|
|
615
|
-
if (this._lines(frame, tiles, i, layer, scissors))
|
|
678
|
+
if (this._lines(frame, tiles, i, layer, scissors, gate)) {
|
|
679
|
+
stats.layers++;
|
|
680
|
+
}
|
|
616
681
|
} else if (layer.type === 'circle') {
|
|
617
|
-
if (this._circles(frame, tiles, i, layer, scissors))
|
|
682
|
+
if (this._circles(frame, tiles, i, layer, scissors, gate)) {
|
|
683
|
+
stats.layers++;
|
|
684
|
+
}
|
|
618
685
|
}
|
|
619
686
|
}
|
|
620
687
|
}
|
|
@@ -632,10 +699,12 @@ export class GlMapRenderer {
|
|
|
632
699
|
layer: Extract<MapStyleLayer, { type: 'fill' }>,
|
|
633
700
|
scissors: (number[] | null)[],
|
|
634
701
|
edges: boolean,
|
|
702
|
+
gate = 1,
|
|
635
703
|
): boolean {
|
|
636
704
|
const zoom = frame.zoom;
|
|
637
705
|
const opacity =
|
|
638
|
-
layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)
|
|
706
|
+
(layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)) *
|
|
707
|
+
gate;
|
|
639
708
|
if (opacity <= 0) return false;
|
|
640
709
|
const base = this._color(resolveZoomed(layer.color, zoom));
|
|
641
710
|
if (!base) return false;
|
|
@@ -768,12 +837,14 @@ export class GlMapRenderer {
|
|
|
768
837
|
index: number,
|
|
769
838
|
layer: Extract<MapStyleLayer, { type: 'line' }>,
|
|
770
839
|
scissors: (number[] | null)[],
|
|
840
|
+
gate = 1,
|
|
771
841
|
): boolean {
|
|
772
842
|
const zoom = frame.zoom;
|
|
773
843
|
const logical = resolveZoomed(layer.width, zoom);
|
|
774
844
|
if (!(logical > 0)) return false;
|
|
775
845
|
const opacity =
|
|
776
|
-
layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)
|
|
846
|
+
(layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)) *
|
|
847
|
+
gate;
|
|
777
848
|
if (opacity <= 0) return false;
|
|
778
849
|
const base = this._color(resolveZoomed(layer.color, zoom));
|
|
779
850
|
if (!base) return false;
|
|
@@ -805,6 +876,7 @@ export class GlMapRenderer {
|
|
|
805
876
|
index: number,
|
|
806
877
|
layer: Extract<MapStyleLayer, { type: 'circle' }>,
|
|
807
878
|
scissors: (number[] | null)[],
|
|
879
|
+
gate = 1,
|
|
808
880
|
): boolean {
|
|
809
881
|
const zoom = frame.zoom;
|
|
810
882
|
const radius =
|
|
@@ -812,7 +884,8 @@ export class GlMapRenderer {
|
|
|
812
884
|
frame.scale;
|
|
813
885
|
if (!(radius > 0)) return false;
|
|
814
886
|
const opacity =
|
|
815
|
-
layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)
|
|
887
|
+
(layer.opacity === undefined ? 1 : resolveZoomed(layer.opacity, zoom)) *
|
|
888
|
+
gate;
|
|
816
889
|
if (opacity <= 0) return false;
|
|
817
890
|
const base = this._color(resolveZoomed(layer.color, zoom));
|
|
818
891
|
if (!base) return false;
|
|
@@ -1134,7 +1207,7 @@ export class GlMapRenderer {
|
|
|
1134
1207
|
gl,
|
|
1135
1208
|
LABEL_VERTEX,
|
|
1136
1209
|
LABEL_FRAGMENT,
|
|
1137
|
-
['u_viewport', 'u_atlas', 'u_inset', 'u_image'],
|
|
1210
|
+
['u_viewport', 'u_atlas', 'u_inset', 'u_spread', 'u_image'],
|
|
1138
1211
|
));
|
|
1139
1212
|
gl.activeTexture(gl.TEXTURE0);
|
|
1140
1213
|
this._uploadAtlas(atlas);
|
|
@@ -1155,7 +1228,7 @@ export class GlMapRenderer {
|
|
|
1155
1228
|
[ATTRIBUTES.a_rect, 4, 16],
|
|
1156
1229
|
[ATTRIBUTES.a_ink, 4, 32],
|
|
1157
1230
|
[ATTRIBUTES.a_halo, 4, 48],
|
|
1158
|
-
[ATTRIBUTES.a_params,
|
|
1231
|
+
[ATTRIBUTES.a_params, 3, 64],
|
|
1159
1232
|
];
|
|
1160
1233
|
for (const [location, size, offset] of fields) {
|
|
1161
1234
|
gl.enableVertexAttribArray(location);
|
|
@@ -1180,7 +1253,8 @@ export class GlMapRenderer {
|
|
|
1180
1253
|
const u = program.uniforms;
|
|
1181
1254
|
gl.uniform2f(u.u_viewport, width, height);
|
|
1182
1255
|
gl.uniform2f(u.u_atlas, atlas.size, atlas.size);
|
|
1183
|
-
gl.uniform1f(u.u_inset,
|
|
1256
|
+
gl.uniform1f(u.u_inset, QUAD_INSET);
|
|
1257
|
+
gl.uniform1f(u.u_spread, atlas.pad);
|
|
1184
1258
|
gl.uniform1i(u.u_image, 0);
|
|
1185
1259
|
gl.drawArraysInstanced(gl.TRIANGLE_STRIP, 0, 4, batch.count);
|
|
1186
1260
|
this._stats.drawCalls++;
|
|
@@ -1245,14 +1319,14 @@ export class GlMapRenderer {
|
|
|
1245
1319
|
}
|
|
1246
1320
|
|
|
1247
1321
|
/**
|
|
1248
|
-
* Take what the atlas has waiting into the texture — a few dozen
|
|
1322
|
+
* Take what the atlas has waiting into the texture — a few dozen fields
|
|
1249
1323
|
* a frame at most, so a batch landing is spread over frames rather than
|
|
1250
1324
|
* paid in one. A texture that is new, or another atlas's, starts over:
|
|
1251
1325
|
* the atlas queues everything again. Leaves the texture bound.
|
|
1252
1326
|
*
|
|
1253
|
-
*
|
|
1254
|
-
*
|
|
1255
|
-
*
|
|
1327
|
+
* Each field goes up in the alpha channel, the only one the shader
|
|
1328
|
+
* reads; the texture stays RGBA because the one-channel formats are not
|
|
1329
|
+
* in the core profile Apple's GL is.
|
|
1256
1330
|
*/
|
|
1257
1331
|
private _uploadAtlas(atlas: LabelAtlas): void {
|
|
1258
1332
|
const gl = this._gl;
|
|
@@ -1283,6 +1357,16 @@ export class GlMapRenderer {
|
|
|
1283
1357
|
gl.bindTexture(gl.TEXTURE_2D, this._atlasTexture);
|
|
1284
1358
|
}
|
|
1285
1359
|
for (const entry of atlas.takeUploads(ATLAS_UPLOADS_PER_FRAME)) {
|
|
1360
|
+
// A field is one byte a texel; the texture is RGBA, because the
|
|
1361
|
+
// one-channel formats are not in a core profile, so it goes up in
|
|
1362
|
+
// alpha — the one channel the shader reads.
|
|
1363
|
+
const texels = entry.width * entry.height;
|
|
1364
|
+
if (this._fieldScratch.length < texels * 4) {
|
|
1365
|
+
this._fieldScratch = new Uint8Array(texels * 4).fill(255);
|
|
1366
|
+
}
|
|
1367
|
+
const rgba = this._fieldScratch.subarray(0, texels * 4);
|
|
1368
|
+
const field = entry.pixels;
|
|
1369
|
+
for (let i = 0; i < texels; i++) rgba[i * 4 + 3] = field[i];
|
|
1286
1370
|
gl.texSubImage2D(
|
|
1287
1371
|
gl.TEXTURE_2D,
|
|
1288
1372
|
0,
|
|
@@ -1292,10 +1376,10 @@ export class GlMapRenderer {
|
|
|
1292
1376
|
entry.height,
|
|
1293
1377
|
gl.RGBA,
|
|
1294
1378
|
gl.UNSIGNED_BYTE,
|
|
1295
|
-
|
|
1379
|
+
rgba,
|
|
1296
1380
|
);
|
|
1297
1381
|
entry.ready = true;
|
|
1298
|
-
this._stats.uploadBytes +=
|
|
1382
|
+
this._stats.uploadBytes += rgba.length;
|
|
1299
1383
|
}
|
|
1300
1384
|
}
|
|
1301
1385
|
|
package/src/maps/gl/shaders.ts
CHANGED
|
@@ -22,6 +22,8 @@
|
|
|
22
22
|
// A segment that touches a sentinel collapses to a point outside the clip
|
|
23
23
|
// volume — see `buckets.ts` for why sentinels beat an index buffer.
|
|
24
24
|
|
|
25
|
+
import { SDF_EDGE, SDF_INK_BIAS_PX } from '../../internal/sdf.js';
|
|
26
|
+
|
|
25
27
|
/** Where each attribute lives, shared by every program. Locations 5-9 are
|
|
26
28
|
* the label program's, one label per instance (see {@link LABEL_VERTEX}). */
|
|
27
29
|
export const ATTRIBUTES = {
|
|
@@ -206,27 +208,28 @@ void main() {
|
|
|
206
208
|
`;
|
|
207
209
|
|
|
208
210
|
/**
|
|
209
|
-
* A label: its
|
|
210
|
-
* turned to the baseline — which is all a label needs, because
|
|
211
|
-
* only ever sets a line label on a straight stretch
|
|
211
|
+
* A label: its distance field from the atlas as one quad, centred on the
|
|
212
|
+
* anchor, turned to the baseline — which is all a label needs, because
|
|
213
|
+
* placement only ever sets a line label on a straight stretch — and scaled
|
|
214
|
+
* from the field's base size to the size it is drawn at (`a_params.z`,
|
|
215
|
+
* device pixels per texel). One field serves every size.
|
|
212
216
|
*
|
|
213
|
-
* A level label
|
|
214
|
-
*
|
|
215
|
-
*
|
|
216
|
-
*
|
|
217
|
-
* grow into, and the inset is what keeps the halo's samples from reaching
|
|
218
|
-
* past the margin into a neighbouring label.
|
|
217
|
+
* A level label's quad starts on a **whole pixel**, so type that is not
|
|
218
|
+
* moving sits on the pixel grid the same way every frame. The quad is the
|
|
219
|
+
* field less an inset (`u_inset`) texel each side, which keeps the
|
|
220
|
+
* bilinear samples at its edge inside the field's own margin.
|
|
219
221
|
*/
|
|
220
222
|
export const LABEL_VERTEX = `precision highp float;
|
|
221
223
|
attribute vec2 a_corner;
|
|
222
224
|
// centre (device pixels), then cos and sin of the baseline
|
|
223
225
|
attribute vec4 a_anchor;
|
|
224
|
-
// the
|
|
226
|
+
// the field in the atlas: x, y, width, height in texels, margin included
|
|
225
227
|
attribute vec4 a_rect;
|
|
226
228
|
attribute vec4 a_ink;
|
|
227
229
|
attribute vec4 a_halo;
|
|
228
|
-
// halo radius in pixels,
|
|
229
|
-
|
|
230
|
+
// halo radius in device pixels, 1 to set the label on whole pixels, and
|
|
231
|
+
// device pixels per field texel
|
|
232
|
+
attribute vec3 a_params;
|
|
230
233
|
uniform vec2 u_viewport;
|
|
231
234
|
uniform vec2 u_atlas;
|
|
232
235
|
uniform float u_inset;
|
|
@@ -234,9 +237,11 @@ varying vec2 v_uv;
|
|
|
234
237
|
varying vec4 v_ink;
|
|
235
238
|
varying vec4 v_halo;
|
|
236
239
|
varying float v_radius;
|
|
240
|
+
varying float v_scale;
|
|
237
241
|
void main() {
|
|
238
242
|
vec2 corner = vec2(a_corner.x, a_corner.y * 0.5 + 0.5);
|
|
239
|
-
vec2
|
|
243
|
+
vec2 texels = a_rect.zw - 2.0 * u_inset;
|
|
244
|
+
vec2 size = texels * a_params.z;
|
|
240
245
|
vec2 p;
|
|
241
246
|
if (a_params.y > 0.5) {
|
|
242
247
|
p = floor(a_anchor.xy - size * 0.5 + 0.5) + corner * size;
|
|
@@ -246,41 +251,39 @@ void main() {
|
|
|
246
251
|
p = a_anchor.xy + vec2(local.x * axis.x - local.y * axis.y,
|
|
247
252
|
local.x * axis.y + local.y * axis.x);
|
|
248
253
|
}
|
|
249
|
-
v_uv = (a_rect.xy + u_inset + corner *
|
|
254
|
+
v_uv = (a_rect.xy + u_inset + corner * texels) / u_atlas;
|
|
250
255
|
v_ink = a_ink;
|
|
251
256
|
v_halo = a_halo;
|
|
252
257
|
v_radius = a_params.x;
|
|
258
|
+
v_scale = a_params.z;
|
|
253
259
|
gl_Position = vec4(p.x / u_viewport.x * 2.0 - 1.0, 1.0 - p.y / u_viewport.y * 2.0, 0.0, 1.0);
|
|
254
260
|
}
|
|
255
261
|
`;
|
|
256
262
|
|
|
257
263
|
/**
|
|
258
|
-
*
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
*
|
|
262
|
-
*
|
|
263
|
-
*
|
|
264
|
+
* Distance in, colour out. The field says how far this pixel is from the
|
|
265
|
+
* glyphs' edge — in texels, `u_spread` of them across the byte range, and
|
|
266
|
+
* so in device pixels once scaled — and ink is the pixel of that distance
|
|
267
|
+
* nearest the edge, antialiased across one device pixel whatever size the
|
|
268
|
+
* label is drawn at. The halo is the same edge pushed out by its radius:
|
|
269
|
+
* one texture read, where a halo dilated from coverage took thirty-three,
|
|
270
|
+
* and exactly as wide as the style asks up to the field's reach.
|
|
264
271
|
*/
|
|
265
272
|
export const LABEL_FRAGMENT = `precision highp float;
|
|
266
273
|
uniform sampler2D u_image;
|
|
267
|
-
uniform
|
|
274
|
+
uniform float u_spread;
|
|
268
275
|
varying vec2 v_uv;
|
|
269
276
|
varying vec4 v_ink;
|
|
270
277
|
varying vec4 v_halo;
|
|
271
278
|
varying float v_radius;
|
|
279
|
+
varying float v_scale;
|
|
272
280
|
void main() {
|
|
273
|
-
float
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
vec2 d = vec2(cos(a), sin(a)) * reach;
|
|
280
|
-
halo = max(halo, texture2D(u_image, v_uv + d).a);
|
|
281
|
-
halo = max(halo, texture2D(u_image, v_uv + d * 0.5).a);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
281
|
+
float field = texture2D(u_image, v_uv).a;
|
|
282
|
+
// Device pixels past the glyphs' edge: positive outside, negative in.
|
|
283
|
+
float d = (${SDF_EDGE.toFixed(4)} - field) * u_spread * v_scale;
|
|
284
|
+
// The ink's edge a little outside the outline (SDF_INK_BIAS_PX).
|
|
285
|
+
float ink = clamp(0.5 + ${SDF_INK_BIAS_PX.toFixed(2)} - d, 0.0, 1.0);
|
|
286
|
+
float halo = v_radius > 0.0 ? clamp(0.5 + v_radius - d, 0.0, 1.0) : 0.0;
|
|
284
287
|
vec4 color = v_ink * ink + v_halo * (halo * (1.0 - ink));
|
|
285
288
|
if (color.a <= 0.0) discard;
|
|
286
289
|
gl_FragColor = color;
|
package/src/maps/gl/store.ts
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
// needs a serializer.
|
|
21
21
|
import { parseVectorTile } from '../sources.js';
|
|
22
22
|
import type { MapSource, TileData } from '../sources.js';
|
|
23
|
+
import { FILL_DEPTH } from '../proj.js';
|
|
23
24
|
import type { TileId } from '../proj.js';
|
|
24
25
|
import type { PreparedStyle } from '../paint.js';
|
|
25
26
|
import type { MapStyleLayer } from '../style.js';
|
|
@@ -96,6 +97,9 @@ export class GlTileStore implements TileLookup {
|
|
|
96
97
|
private _inFlight = 0;
|
|
97
98
|
private _frame = 0;
|
|
98
99
|
private _disposed = false;
|
|
100
|
+
/** What {@link holds} answers from: built when first asked, and dropped
|
|
101
|
+
* whenever a tile gets an answer or loses one. */
|
|
102
|
+
private _held: Map<string, 'here' | 'below'> | null = null;
|
|
99
103
|
private readonly _pool: BuildPool | null;
|
|
100
104
|
/** Bucket builds and their cost on this thread, for a HUD. */
|
|
101
105
|
built = 0;
|
|
@@ -151,6 +155,33 @@ export class GlTileStore implements TileLookup {
|
|
|
151
155
|
return entry.data ?? undefined;
|
|
152
156
|
}
|
|
153
157
|
|
|
158
|
+
/**
|
|
159
|
+
* Whether this store has an answer for `tile` (`'here'`), for only tiles
|
|
160
|
+
* under it within `FILL_DEPTH` levels (`'below'`), or neither — the
|
|
161
|
+
* cover's way to search under a hole without a `get` for every tile
|
|
162
|
+
* there, which would stamp a tile still loading and keep its load going.
|
|
163
|
+
*/
|
|
164
|
+
holds(tile: TileId): 'here' | 'below' | undefined {
|
|
165
|
+
let held = this._held;
|
|
166
|
+
if (!held) {
|
|
167
|
+
held = new Map();
|
|
168
|
+
for (const [k, entry] of this._entries) {
|
|
169
|
+
if (entry.data === null && entry.state !== 'empty') continue;
|
|
170
|
+
held.set(k, 'here');
|
|
171
|
+
let { z, x, y } = entry.tile;
|
|
172
|
+
for (let up = 1; up <= FILL_DEPTH && z > 0; up++) {
|
|
173
|
+
z--;
|
|
174
|
+
x >>= 1;
|
|
175
|
+
y >>= 1;
|
|
176
|
+
const above = key({ z, x, y });
|
|
177
|
+
if (!held.has(above)) held.set(above, 'below');
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
this._held = held;
|
|
181
|
+
}
|
|
182
|
+
return held.get(key(tile));
|
|
183
|
+
}
|
|
184
|
+
|
|
154
185
|
/** A new frame: what the cover asks for from here on is this frame's. */
|
|
155
186
|
tick(): void {
|
|
156
187
|
this._frame++;
|
|
@@ -218,6 +249,7 @@ export class GlTileStore implements TileLookup {
|
|
|
218
249
|
(data: TileData) => {
|
|
219
250
|
if (this._disposed || aborted) return;
|
|
220
251
|
entry.failures = 0;
|
|
252
|
+
this._held = null;
|
|
221
253
|
if (data && data.kind === 'vector' && data.data.length > 0) {
|
|
222
254
|
entry.bytes = data.data;
|
|
223
255
|
entry.state = 'loaded';
|
|
@@ -308,22 +340,28 @@ export class GlTileStore implements TileLookup {
|
|
|
308
340
|
if (!entry.bytes) continue;
|
|
309
341
|
entry.state = 'building';
|
|
310
342
|
const style = this._style.id;
|
|
311
|
-
entry.job = pool.build(
|
|
312
|
-
|
|
313
|
-
entry.
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
entry.
|
|
317
|
-
entry.
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
343
|
+
entry.job = pool.build(
|
|
344
|
+
entry.bytes,
|
|
345
|
+
entry.tile,
|
|
346
|
+
this._style,
|
|
347
|
+
(result) => {
|
|
348
|
+
if (this._disposed || entry.job === 0) return;
|
|
349
|
+
entry.job = 0;
|
|
350
|
+
if (!this._entries.has(key(entry.tile))) return;
|
|
351
|
+
this._held = null;
|
|
352
|
+
if (result.data && style === this._style.id) {
|
|
353
|
+
entry.data = result.data;
|
|
354
|
+
entry.state = 'ready';
|
|
355
|
+
} else if (result.data) {
|
|
356
|
+
// Built for a style that has since been replaced: build again.
|
|
357
|
+
entry.state = 'loaded';
|
|
358
|
+
this._queue.push(entry);
|
|
359
|
+
} else {
|
|
360
|
+
entry.state = 'empty';
|
|
361
|
+
}
|
|
362
|
+
this._onChange();
|
|
363
|
+
},
|
|
364
|
+
);
|
|
327
365
|
}
|
|
328
366
|
return false;
|
|
329
367
|
}
|
|
@@ -332,11 +370,13 @@ export class GlTileStore implements TileLookup {
|
|
|
332
370
|
first = false;
|
|
333
371
|
const entry = this._queue.shift()!;
|
|
334
372
|
if (!entry.bytes) continue;
|
|
373
|
+
this._held = null;
|
|
335
374
|
const started = now();
|
|
336
375
|
try {
|
|
337
376
|
entry.data = buildTileBuckets(
|
|
338
377
|
parseVectorTile(entry.bytes),
|
|
339
378
|
this._prepared,
|
|
379
|
+
entry.tile,
|
|
340
380
|
);
|
|
341
381
|
entry.state = 'ready';
|
|
342
382
|
} catch {
|
|
@@ -414,6 +454,7 @@ export class GlTileStore implements TileLookup {
|
|
|
414
454
|
if (excess <= 0) break;
|
|
415
455
|
if (entry.data) release(entry.data);
|
|
416
456
|
this._entries.delete(k);
|
|
457
|
+
this._held = null;
|
|
417
458
|
excess--;
|
|
418
459
|
}
|
|
419
460
|
this._queue = this._queue.filter((e) => this._entries.has(key(e.tile)));
|
|
@@ -425,6 +466,7 @@ export class GlTileStore implements TileLookup {
|
|
|
425
466
|
if (entry.data) release(entry.data);
|
|
426
467
|
}
|
|
427
468
|
this._entries.clear();
|
|
469
|
+
this._held = null;
|
|
428
470
|
this._queue = [];
|
|
429
471
|
this._waiting = [];
|
|
430
472
|
this._pool?.terminate();
|
|
@@ -510,6 +552,7 @@ class BuildPool {
|
|
|
510
552
|
|
|
511
553
|
build(
|
|
512
554
|
bytes: Uint8Array,
|
|
555
|
+
tile: TileId,
|
|
513
556
|
style: { id: number; layers: MapStyleLayer[] },
|
|
514
557
|
done: (result: BuildResult) => void,
|
|
515
558
|
): number {
|
|
@@ -530,7 +573,13 @@ class BuildPool {
|
|
|
530
573
|
const copy = bytes.slice();
|
|
531
574
|
slot.busy++;
|
|
532
575
|
slot.worker.postMessage(
|
|
533
|
-
{
|
|
576
|
+
{
|
|
577
|
+
type: 'build',
|
|
578
|
+
job,
|
|
579
|
+
style: style.id,
|
|
580
|
+
bytes: copy,
|
|
581
|
+
tile: { z: tile.z, x: tile.x, y: tile.y },
|
|
582
|
+
},
|
|
534
583
|
[copy.buffer as ArrayBuffer],
|
|
535
584
|
);
|
|
536
585
|
return job;
|