@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/node.ts
CHANGED
|
@@ -206,6 +206,26 @@ interface VisibleTile {
|
|
|
206
206
|
*/
|
|
207
207
|
const RESTYLE_WAIT_MS = 1500;
|
|
208
208
|
|
|
209
|
+
/**
|
|
210
|
+
* The clock {@link RESTYLE_WAIT_MS} is measured on: the raster budget's,
|
|
211
|
+
* read at the same moment, as a frame begins.
|
|
212
|
+
*
|
|
213
|
+
* One object, exported from this module though not from the package, so a
|
|
214
|
+
* test can stand in for it and move the bound's time on a step at a time,
|
|
215
|
+
* as `glideClock` in `./controller.ts` does for a glide. On the real clock a
|
|
216
|
+
* test finds the swap only once the step that made it is over, and on a
|
|
217
|
+
* loaded runner one step took long enough to put that two and a half
|
|
218
|
+
* seconds past the bound. It is not the budget's own `now`, because a test
|
|
219
|
+
* that held that one would hold the raster deadline with it: a frame would
|
|
220
|
+
* draw every tile to the end, and there would be no redraw left for the
|
|
221
|
+
* bound to cut short.
|
|
222
|
+
*/
|
|
223
|
+
export const restyleClock = {
|
|
224
|
+
now(): number {
|
|
225
|
+
return now();
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
|
|
209
229
|
/**
|
|
210
230
|
* The previous style, held on screen while a restyle draws the new one.
|
|
211
231
|
*
|
|
@@ -240,7 +260,8 @@ interface Outgoing {
|
|
|
240
260
|
view: string;
|
|
241
261
|
moved: boolean;
|
|
242
262
|
/** Milliseconds the map has been free to draw since the switch, and when
|
|
243
|
-
* the last frame that was began — `null` when
|
|
263
|
+
* the last frame that was began on {@link restyleClock} — `null` when
|
|
264
|
+
* the last frame was not. */
|
|
244
265
|
waited: number;
|
|
245
266
|
lastDrawn: number | null;
|
|
246
267
|
}
|
|
@@ -734,6 +755,7 @@ export class MapViewNode extends Node {
|
|
|
734
755
|
if (!this._visible() || !isMapCanvas(ctx)) return;
|
|
735
756
|
|
|
736
757
|
const started = now();
|
|
758
|
+
const restyleAt = restyleClock.now();
|
|
737
759
|
const scale = this._scale;
|
|
738
760
|
this._frameClip = damage
|
|
739
761
|
? {
|
|
@@ -794,6 +816,7 @@ export class MapViewNode extends Node {
|
|
|
794
816
|
: box;
|
|
795
817
|
if (!clip) {
|
|
796
818
|
this._controller.painting = false;
|
|
819
|
+
this._controller.paintEnded();
|
|
797
820
|
this._frameClip = null;
|
|
798
821
|
return;
|
|
799
822
|
}
|
|
@@ -838,7 +861,7 @@ export class MapViewNode extends Node {
|
|
|
838
861
|
pane,
|
|
839
862
|
stats,
|
|
840
863
|
budget,
|
|
841
|
-
|
|
864
|
+
restyleAt,
|
|
842
865
|
!damage || containsRect(damage, box),
|
|
843
866
|
progressive,
|
|
844
867
|
);
|
|
@@ -895,6 +918,7 @@ export class MapViewNode extends Node {
|
|
|
895
918
|
this._stats = stats;
|
|
896
919
|
this._painted = true;
|
|
897
920
|
this._controller.painting = false;
|
|
921
|
+
this._controller.paintEnded();
|
|
898
922
|
this._frameClip = null;
|
|
899
923
|
void frame;
|
|
900
924
|
this._prop<(stats: MapFrameStats) => void>('onFrame')?.(stats);
|
|
@@ -965,7 +989,8 @@ export class MapViewNode extends Node {
|
|
|
965
989
|
pane: ScreenRect,
|
|
966
990
|
stats: MapFrameStats,
|
|
967
991
|
budget: number,
|
|
968
|
-
|
|
992
|
+
/** When this frame began, on {@link restyleClock}. */
|
|
993
|
+
began: number,
|
|
969
994
|
whole: boolean,
|
|
970
995
|
progressive: boolean,
|
|
971
996
|
): void {
|
|
@@ -985,9 +1010,9 @@ export class MapViewNode extends Node {
|
|
|
985
1010
|
// next frame after it begins.
|
|
986
1011
|
if (budget > 0) {
|
|
987
1012
|
if (outgoing.lastDrawn !== null) {
|
|
988
|
-
outgoing.waited +=
|
|
1013
|
+
outgoing.waited += began - outgoing.lastDrawn;
|
|
989
1014
|
}
|
|
990
|
-
outgoing.lastDrawn =
|
|
1015
|
+
outgoing.lastDrawn = began;
|
|
991
1016
|
} else {
|
|
992
1017
|
outgoing.lastDrawn = null;
|
|
993
1018
|
}
|
|
@@ -1264,10 +1289,13 @@ export class MapViewNode extends Node {
|
|
|
1264
1289
|
// background — with the labels and the markers still drawn over it —
|
|
1265
1290
|
// until the coarser tile had been fetched, rasterized and composited.
|
|
1266
1291
|
//
|
|
1267
|
-
//
|
|
1268
|
-
// sharper and they are the level the user is coming *from
|
|
1269
|
-
// ancestor
|
|
1270
|
-
//
|
|
1292
|
+
// Both, in one square: the descendants wherever there are any, because
|
|
1293
|
+
// they are sharper and they are the level the user is coming *from*,
|
|
1294
|
+
// and the ancestor in the gaps between them. The first cut chose one
|
|
1295
|
+
// for the whole square — descendants only when they tiled it, and
|
|
1296
|
+
// only when no ancestor was in hand — and a zoom out lands at the
|
|
1297
|
+
// edges of the level it left, where they never tile it: that was the
|
|
1298
|
+
// background there, sharp tiles in hand or not.
|
|
1271
1299
|
//
|
|
1272
1300
|
// Looked up whether or not this pass draws the tile, because the
|
|
1273
1301
|
// lookup is what stamps a piece as in use: a piece covering a hole is
|
|
@@ -1275,60 +1303,65 @@ export class MapViewNode extends Node {
|
|
|
1275
1303
|
// — which, in the one-pixel frames a redraw runs in, was every piece
|
|
1276
1304
|
// but the one under that pixel. A restyle keeps such pieces on screen
|
|
1277
1305
|
// for as long as its redraw takes.
|
|
1278
|
-
const
|
|
1306
|
+
const below = this._cache.descendantsWithSurface(
|
|
1279
1307
|
source,
|
|
1280
1308
|
entry.tile,
|
|
1281
|
-
undefined,
|
|
1282
1309
|
generation,
|
|
1283
1310
|
);
|
|
1284
|
-
const
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
);
|
|
1311
|
+
const ancestor =
|
|
1312
|
+
below.gaps.length > 0
|
|
1313
|
+
? this._cache.ancestorWithSurface(
|
|
1314
|
+
source,
|
|
1315
|
+
entry.tile,
|
|
1316
|
+
undefined,
|
|
1317
|
+
generation,
|
|
1318
|
+
)
|
|
1319
|
+
: null;
|
|
1294
1320
|
if (!inPass) continue;
|
|
1295
|
-
|
|
1296
|
-
const
|
|
1321
|
+
for (const piece of below.pieces) {
|
|
1322
|
+
const edge = entry.size / piece.span;
|
|
1323
|
+
this._composite(
|
|
1324
|
+
ctx,
|
|
1325
|
+
piece.value.shown!.surface,
|
|
1326
|
+
piece.value.shown!.size,
|
|
1327
|
+
{
|
|
1328
|
+
x: box.x + piece.x * edge,
|
|
1329
|
+
y: box.y + piece.y * edge,
|
|
1330
|
+
width: edge,
|
|
1331
|
+
height: edge,
|
|
1332
|
+
},
|
|
1333
|
+
scale,
|
|
1334
|
+
0,
|
|
1335
|
+
0,
|
|
1336
|
+
1,
|
|
1337
|
+
);
|
|
1338
|
+
}
|
|
1339
|
+
if (below.pieces.length > 0) stats.fromDescendant++;
|
|
1340
|
+
if (!ancestor?.shown) continue;
|
|
1341
|
+
for (const gap of below.gaps) {
|
|
1342
|
+
// The gap is a tile `log2(span)` levels under this one, and the
|
|
1343
|
+
// ancestor is `up` levels over that: the same sub-square arithmetic
|
|
1344
|
+
// as a whole tile, one level set deeper.
|
|
1345
|
+
const edge = entry.size / gap.span;
|
|
1346
|
+
const up = entry.tile.z + Math.log2(gap.span) - ancestor.tile.z;
|
|
1297
1347
|
const span = 1 << up;
|
|
1298
|
-
const fx = entry.tile.x - (ancestor.tile.x << up);
|
|
1299
|
-
const fy = entry.tile.y - (ancestor.tile.y << up);
|
|
1300
1348
|
this._composite(
|
|
1301
1349
|
ctx,
|
|
1302
1350
|
ancestor.shown.surface,
|
|
1303
1351
|
ancestor.shown.size,
|
|
1304
|
-
|
|
1352
|
+
{
|
|
1353
|
+
x: box.x + gap.x * edge,
|
|
1354
|
+
y: box.y + gap.y * edge,
|
|
1355
|
+
width: edge,
|
|
1356
|
+
height: edge,
|
|
1357
|
+
},
|
|
1305
1358
|
scale,
|
|
1306
|
-
|
|
1307
|
-
|
|
1359
|
+
entry.tile.x * gap.span + gap.x - (ancestor.tile.x << up),
|
|
1360
|
+
entry.tile.y * gap.span + gap.y - (ancestor.tile.y << up),
|
|
1308
1361
|
span,
|
|
1309
1362
|
);
|
|
1310
|
-
stats.fromAncestor++;
|
|
1311
|
-
} else if (kids.length > 0) {
|
|
1312
|
-
for (const kid of kids) {
|
|
1313
|
-
const piece = entry.size / kid.span;
|
|
1314
|
-
this._composite(
|
|
1315
|
-
ctx,
|
|
1316
|
-
kid.entry.shown!.surface,
|
|
1317
|
-
kid.entry.shown!.size,
|
|
1318
|
-
{
|
|
1319
|
-
x: box.x + kid.x * piece,
|
|
1320
|
-
y: box.y + kid.y * piece,
|
|
1321
|
-
width: piece,
|
|
1322
|
-
height: piece,
|
|
1323
|
-
},
|
|
1324
|
-
scale,
|
|
1325
|
-
0,
|
|
1326
|
-
0,
|
|
1327
|
-
1,
|
|
1328
|
-
);
|
|
1329
|
-
}
|
|
1330
|
-
stats.fromDescendant++;
|
|
1331
1363
|
}
|
|
1364
|
+
stats.fromAncestor++;
|
|
1332
1365
|
}
|
|
1333
1366
|
}
|
|
1334
1367
|
|
package/src/maps/proj.ts
CHANGED
|
@@ -472,6 +472,93 @@ export function dataSquareOf(
|
|
|
472
472
|
};
|
|
473
473
|
}
|
|
474
474
|
|
|
475
|
+
/**
|
|
476
|
+
* How many levels under a hole {@link fillFromBelow} looks for pieces.
|
|
477
|
+
*
|
|
478
|
+
* A zoom out leaves the level it came from in the middle of the view, and a
|
|
479
|
+
* quick one — a flick of the wheel, a pinch — goes more than one level
|
|
480
|
+
* before a single coarser tile has landed. Four levels down, a tile's pieces
|
|
481
|
+
* are a sixteenth of its width; past that they cover too little of the view
|
|
482
|
+
* to be worth the search.
|
|
483
|
+
*/
|
|
484
|
+
export const FILL_DEPTH = 4;
|
|
485
|
+
|
|
486
|
+
/** Part of a tile's square: cell `(x, y)` of a `span × span` grid. */
|
|
487
|
+
export interface TileCell {
|
|
488
|
+
x: number;
|
|
489
|
+
y: number;
|
|
490
|
+
span: number;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
/** What a {@link fillFromBelow} probe answers for a tile that has nothing
|
|
494
|
+
* of its own to draw but may have something under it. */
|
|
495
|
+
export const BELOW: unique symbol = Symbol('below');
|
|
496
|
+
|
|
497
|
+
/**
|
|
498
|
+
* Cover a hole — a tile with nothing of its own to draw — from the tiles
|
|
499
|
+
* under it that do have something: each quarter of the square from its own
|
|
500
|
+
* child where there is one, and from that child's children where there is
|
|
501
|
+
* not, down to `depth` levels. What is left is the gaps, for the caller to
|
|
502
|
+
* fill from an ancestor.
|
|
503
|
+
*
|
|
504
|
+
* `probe` answers for one tile under the hole: something to draw; `null`
|
|
505
|
+
* for a tile that is answered and has nothing in it, which covers its
|
|
506
|
+
* square as surely as a picture does; {@link BELOW} for nothing here but
|
|
507
|
+
* perhaps something under it; `undefined` for nothing here or under it.
|
|
508
|
+
*
|
|
509
|
+
* The pieces and the gaps tile the square exactly and never overlap, so a
|
|
510
|
+
* caller can draw each once with no clip but its own square. That matters
|
|
511
|
+
* beyond overdraw: a translucent layer drawn twice is darker, and a label
|
|
512
|
+
* from two overlapping pieces is placed twice. And a square with nothing
|
|
513
|
+
* under it after all is one gap, not four, so the ancestor that fills it is
|
|
514
|
+
* one composite.
|
|
515
|
+
*/
|
|
516
|
+
export function fillFromBelow<T>(
|
|
517
|
+
tile: TileId,
|
|
518
|
+
depth: number,
|
|
519
|
+
probe: (tile: TileId) => T | null | typeof BELOW | undefined,
|
|
520
|
+
): {
|
|
521
|
+
pieces: (TileCell & { tile: TileId; value: T })[];
|
|
522
|
+
gaps: TileCell[];
|
|
523
|
+
/** Whether any of the square is covered — by a picture, or by an answer
|
|
524
|
+
* that there is nothing there. */
|
|
525
|
+
covered: boolean;
|
|
526
|
+
} {
|
|
527
|
+
const pieces: (TileCell & { tile: TileId; value: T })[] = [];
|
|
528
|
+
const gaps: TileCell[] = [];
|
|
529
|
+
const visit = (parent: TileId, at: TileCell, left: number): boolean => {
|
|
530
|
+
const gapsBefore = gaps.length;
|
|
531
|
+
let covered = false;
|
|
532
|
+
for (let dy = 0; dy < 2; dy++) {
|
|
533
|
+
for (let dx = 0; dx < 2; dx++) {
|
|
534
|
+
const child = {
|
|
535
|
+
z: parent.z + 1,
|
|
536
|
+
x: parent.x * 2 + dx,
|
|
537
|
+
y: parent.y * 2 + dy,
|
|
538
|
+
};
|
|
539
|
+
const cell = { x: at.x * 2 + dx, y: at.y * 2 + dy, span: at.span * 2 };
|
|
540
|
+
const found = probe(child);
|
|
541
|
+
if (found === BELOW) {
|
|
542
|
+
if (left > 1 && visit(child, cell, left - 1)) covered = true;
|
|
543
|
+
else gaps.push(cell);
|
|
544
|
+
} else if (found === undefined) {
|
|
545
|
+
gaps.push(cell);
|
|
546
|
+
} else {
|
|
547
|
+
if (found !== null)
|
|
548
|
+
pieces.push({ ...cell, tile: child, value: found });
|
|
549
|
+
covered = true;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
// Nothing anywhere under this square: the caller files it as one gap.
|
|
554
|
+
if (!covered) gaps.length = gapsBefore;
|
|
555
|
+
return covered;
|
|
556
|
+
};
|
|
557
|
+
const covered = depth > 0 && visit(tile, { x: 0, y: 0, span: 1 }, depth);
|
|
558
|
+
if (!covered) gaps.push({ x: 0, y: 0, span: 1 });
|
|
559
|
+
return { pieces, gaps, covered };
|
|
560
|
+
}
|
|
561
|
+
|
|
475
562
|
/**
|
|
476
563
|
* How large to rasterize a tile whose pyramid level is `z` at camera `zoom`.
|
|
477
564
|
*
|
package/src/maps/sources.ts
CHANGED
|
@@ -238,10 +238,12 @@ export function osmVectorSource(options: OsmSourceOptions): MapSource {
|
|
|
238
238
|
* and it is already installed:
|
|
239
239
|
*
|
|
240
240
|
* ```ts
|
|
241
|
-
* import ntk from 'react-x11/ntk';
|
|
241
|
+
* import * as ntk from 'react-x11/ntk';
|
|
242
|
+
* // a named export, not a property of the default one, and undeclared
|
|
243
|
+
* const { decodeImage } = ntk as unknown as { decodeImage(b: Uint8Array): {
|
|
244
|
+
* width: number; height: number; data: Uint8Array } };
|
|
242
245
|
* const decode = (bytes) => {
|
|
243
|
-
* const image =
|
|
244
|
-
* width: number; height: number; data: Uint8Array } }).decodeImage(bytes);
|
|
246
|
+
* const image = decodeImage(bytes);
|
|
245
247
|
* return { width: image.width, height: image.height, data: image.data };
|
|
246
248
|
* };
|
|
247
249
|
* ```
|
package/src/maps/style.ts
CHANGED
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
// the whole performance argument for the restriction: a dense tile has
|
|
24
24
|
// twelve thousand features and eighteen layers, so anything computed per
|
|
25
25
|
// layer is free and anything computed per feature is the frame.
|
|
26
|
+
import type { MapIcon } from './icons.js';
|
|
26
27
|
import type { FeatureValue } from './mvt.js';
|
|
27
28
|
import { GeomType } from './mvt.js';
|
|
28
29
|
import type { FeatureCursor } from './mvt.js';
|
|
@@ -151,6 +152,37 @@ export interface SymbolLayer extends LayerBase {
|
|
|
151
152
|
* distance is where that line goes.
|
|
152
153
|
*/
|
|
153
154
|
repeatDistance?: number;
|
|
155
|
+
/**
|
|
156
|
+
* A pictogram set on the point, with the text beside it — the bus that
|
|
157
|
+
* says "Lyons Ave/Yuille St" is a stop, not a street. The icon is centred
|
|
158
|
+
* on the feature and the text sits to its right; the two are placed, and
|
|
159
|
+
* give way, as one. Point labels only: a name along a street has no point
|
|
160
|
+
* to stand an icon on, and is set as though there were none.
|
|
161
|
+
*
|
|
162
|
+
* One icon per layer, like {@link rank} and for the same reason — a
|
|
163
|
+
* `filter` split says which features get which, exactly.
|
|
164
|
+
*/
|
|
165
|
+
icon?: MapIcon;
|
|
166
|
+
/** Logical pixels across the icon's plate. 14 by default. */
|
|
167
|
+
iconSize?: Zoomed<number>;
|
|
168
|
+
/** The plate's colour. */
|
|
169
|
+
iconColor?: Zoomed<string>;
|
|
170
|
+
/** The pictogram's colour, over the plate. White by default. */
|
|
171
|
+
iconGlyphColor?: Zoomed<string>;
|
|
172
|
+
/**
|
|
173
|
+
* Move each point label into the polygon of `sourceLayer` it belongs to —
|
|
174
|
+
* a house number into its house. A point inside a polygon belongs to it;
|
|
175
|
+
* one outside, to the nearest polygon within `within` metres (15 by
|
|
176
|
+
* default). It moves only where it is the one point that polygon is
|
|
177
|
+
* claimed by, and then to the polygon's middle; every other point stays
|
|
178
|
+
* where the data put it. Absent, nothing moves.
|
|
179
|
+
*
|
|
180
|
+
* Worth having because address data is often not *on* its building: an
|
|
181
|
+
* address point sits in the lot, metres from the house, and a number
|
|
182
|
+
* drawn there reads as the garden's. On OpenStreetMap's tiles around
|
|
183
|
+
* Melbourne, 42% of address points were inside a building.
|
|
184
|
+
*/
|
|
185
|
+
snapInto?: { sourceLayer: string; within?: number };
|
|
154
186
|
}
|
|
155
187
|
|
|
156
188
|
export type MapStyleLayer = FillLayer | LineLayer | CircleLayer | SymbolLayer;
|
package/src/maps/styles.ts
CHANGED
|
@@ -19,7 +19,14 @@
|
|
|
19
19
|
// Every layer's `id` is stable, because that is what an application filters
|
|
20
20
|
// on to hide one (`style.layers.filter((l) => l.id !== 'buildings')`) and
|
|
21
21
|
// what a `<Map>` event names.
|
|
22
|
-
import type {
|
|
22
|
+
import type { MapIcon } from './icons.js';
|
|
23
|
+
import type {
|
|
24
|
+
MapFilter,
|
|
25
|
+
MapStyle,
|
|
26
|
+
MapStyleLayer,
|
|
27
|
+
SymbolLayer,
|
|
28
|
+
Zoomed,
|
|
29
|
+
} from './style.js';
|
|
23
30
|
|
|
24
31
|
/** The tags Shortbread puts a road's class in, grouped as a style wants
|
|
25
32
|
* them rather than as the schema lists them. */
|
|
@@ -108,6 +115,8 @@ export interface MapPalette {
|
|
|
108
115
|
text: string;
|
|
109
116
|
textMinor: string;
|
|
110
117
|
halo: string;
|
|
118
|
+
/** The plate a public-transport stop's pictogram is set on. */
|
|
119
|
+
transit: string;
|
|
111
120
|
}
|
|
112
121
|
|
|
113
122
|
/** OSM Carto's hues, near enough that a user's eye reads the map as the one
|
|
@@ -135,6 +144,7 @@ export const LIGHT_PALETTE: MapPalette = {
|
|
|
135
144
|
text: '#33322e',
|
|
136
145
|
textMinor: '#6b6862',
|
|
137
146
|
halo: 'rgba(255,255,255,0.85)',
|
|
147
|
+
transit: '#2a6fb8',
|
|
138
148
|
};
|
|
139
149
|
|
|
140
150
|
/** The dark counterpart. Desaturated rather than inverted: an inverted map
|
|
@@ -162,6 +172,7 @@ export const DARK_PALETTE: MapPalette = {
|
|
|
162
172
|
text: '#d3d7de',
|
|
163
173
|
textMinor: '#9299a3',
|
|
164
174
|
halo: 'rgba(12,14,18,0.85)',
|
|
175
|
+
transit: '#3b78c4',
|
|
165
176
|
};
|
|
166
177
|
|
|
167
178
|
/** How wide a road class is, at each zoom. */
|
|
@@ -190,6 +201,16 @@ export interface ShortbreadStyleOptions {
|
|
|
190
201
|
/** Leave building footprints out. They are the densest polygon layer at
|
|
191
202
|
* high zoom and the first thing to drop on a slow machine. */
|
|
192
203
|
buildings?: boolean;
|
|
204
|
+
/**
|
|
205
|
+
* Set each house number inside its building (`SymbolLayer.snapInto` on
|
|
206
|
+
* the `house-numbers` layer), where the address data puts it in the lot
|
|
207
|
+
* beside the house. Off by default, and off means every number is exactly
|
|
208
|
+
* where the data says. A number moves only into a building that is its
|
|
209
|
+
* alone and within 15 m, so a duplex's two numbers, or one whose house is
|
|
210
|
+
* not mapped, stay put. Needs the footprints: with `buildings: false`
|
|
211
|
+
* there is nothing to set a number in, and nothing moves.
|
|
212
|
+
*/
|
|
213
|
+
snapBuildingNumbers?: boolean;
|
|
193
214
|
}
|
|
194
215
|
|
|
195
216
|
/**
|
|
@@ -593,11 +614,29 @@ export function shortbreadStyle(
|
|
|
593
614
|
// a street's name is what they read once they are oriented.
|
|
594
615
|
rank: 20,
|
|
595
616
|
},
|
|
617
|
+
// Public transport, a layer per pictogram, which Shortbread's `kind`
|
|
618
|
+
// says. A stop's name alone reads as a street's: "Lyons Ave/Yuille
|
|
619
|
+
// St" is a bus stop, and only the bus says so.
|
|
620
|
+
...SHORTBREAD_STOPS.map((stop) =>
|
|
621
|
+
stopLayer(
|
|
622
|
+
p,
|
|
623
|
+
name,
|
|
624
|
+
stop.id,
|
|
625
|
+
'public_transport',
|
|
626
|
+
['in', 'kind', ...stop.kinds],
|
|
627
|
+
stop.icon,
|
|
628
|
+
stop.minZoom,
|
|
629
|
+
stop.rank,
|
|
630
|
+
),
|
|
631
|
+
),
|
|
596
632
|
{
|
|
633
|
+
// What has no pictogram here — a helipad, a lift station — named
|
|
634
|
+
// as every stop used to be.
|
|
597
635
|
id: 'transport-labels',
|
|
598
636
|
type: 'symbol',
|
|
599
637
|
sourceLayer: 'public_transport',
|
|
600
638
|
minZoom: 15,
|
|
639
|
+
filter: ['!in', 'kind', ...SHORTBREAD_STOPS.flatMap((s) => s.kinds)],
|
|
601
640
|
textField: name,
|
|
602
641
|
textColor: p.textMinor,
|
|
603
642
|
textHaloColor: p.halo,
|
|
@@ -605,6 +644,7 @@ export function shortbreadStyle(
|
|
|
605
644
|
textSize: 10,
|
|
606
645
|
rank: 10,
|
|
607
646
|
},
|
|
647
|
+
houseNumbers(p, 'addresses', snapInto(options, 'buildings')),
|
|
608
648
|
);
|
|
609
649
|
}
|
|
610
650
|
|
|
@@ -618,6 +658,121 @@ function scaleWidth(base: Zoomed<number>, add: number): Zoomed<number> {
|
|
|
618
658
|
return { stops: base.stops.map(([z, v]) => [z, v + add] as const) };
|
|
619
659
|
}
|
|
620
660
|
|
|
661
|
+
/** Shortbread's public-transport kinds that have a pictogram, and the zoom
|
|
662
|
+
* and rank a stop of each is named at: an airport among the towns, a
|
|
663
|
+
* station among the suburbs, a bus stop under the streets. */
|
|
664
|
+
const SHORTBREAD_STOPS: readonly {
|
|
665
|
+
id: string;
|
|
666
|
+
kinds: readonly string[];
|
|
667
|
+
icon: MapIcon;
|
|
668
|
+
minZoom: number;
|
|
669
|
+
rank: number;
|
|
670
|
+
}[] = [
|
|
671
|
+
{
|
|
672
|
+
id: 'transport-airport',
|
|
673
|
+
kinds: ['aerodrome'],
|
|
674
|
+
icon: 'airport',
|
|
675
|
+
minZoom: 11,
|
|
676
|
+
rank: 70,
|
|
677
|
+
},
|
|
678
|
+
{
|
|
679
|
+
id: 'transport-rail',
|
|
680
|
+
kinds: ['station', 'halt'],
|
|
681
|
+
icon: 'train',
|
|
682
|
+
minZoom: 13,
|
|
683
|
+
rank: 50,
|
|
684
|
+
},
|
|
685
|
+
{
|
|
686
|
+
id: 'transport-ferry',
|
|
687
|
+
kinds: ['ferry_terminal'],
|
|
688
|
+
icon: 'ferry',
|
|
689
|
+
minZoom: 13,
|
|
690
|
+
rank: 45,
|
|
691
|
+
},
|
|
692
|
+
{
|
|
693
|
+
id: 'transport-tram',
|
|
694
|
+
kinds: ['tram_stop'],
|
|
695
|
+
icon: 'tram',
|
|
696
|
+
minZoom: 15,
|
|
697
|
+
rank: 12,
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
id: 'transport-bus',
|
|
701
|
+
kinds: ['bus_stop', 'bus_station'],
|
|
702
|
+
icon: 'bus',
|
|
703
|
+
minZoom: 15,
|
|
704
|
+
rank: 10,
|
|
705
|
+
},
|
|
706
|
+
];
|
|
707
|
+
|
|
708
|
+
/** A public-transport stop: its pictogram on the point, its name beside
|
|
709
|
+
* it. The same layer over either schema, less where the schema keeps it. */
|
|
710
|
+
function stopLayer(
|
|
711
|
+
p: MapPalette,
|
|
712
|
+
name: string,
|
|
713
|
+
id: string,
|
|
714
|
+
sourceLayer: string,
|
|
715
|
+
filter: MapFilter | undefined,
|
|
716
|
+
icon: MapIcon,
|
|
717
|
+
minZoom: number,
|
|
718
|
+
rank: number,
|
|
719
|
+
): SymbolLayer {
|
|
720
|
+
return {
|
|
721
|
+
id,
|
|
722
|
+
type: 'symbol',
|
|
723
|
+
sourceLayer,
|
|
724
|
+
minZoom,
|
|
725
|
+
filter,
|
|
726
|
+
textField: name,
|
|
727
|
+
textColor: p.textMinor,
|
|
728
|
+
textHaloColor: p.halo,
|
|
729
|
+
textHaloWidth: 1,
|
|
730
|
+
textSize: 10,
|
|
731
|
+
icon,
|
|
732
|
+
iconColor: p.transit,
|
|
733
|
+
rank,
|
|
734
|
+
};
|
|
735
|
+
}
|
|
736
|
+
|
|
737
|
+
/** The footprints house numbers snap into, where the options ask for it and
|
|
738
|
+
* the footprints are there to snap into. */
|
|
739
|
+
function snapInto(
|
|
740
|
+
options: ShortbreadStyleOptions,
|
|
741
|
+
buildings: string,
|
|
742
|
+
): string | null {
|
|
743
|
+
return options.snapBuildingNumbers && options.buildings !== false
|
|
744
|
+
? buildings
|
|
745
|
+
: null;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
/**
|
|
749
|
+
* House numbers, once a house is big enough on screen to carry one: from
|
|
750
|
+
* zoom 18, which on this map's 512-pixel world is a 256-pixel map's 19 —
|
|
751
|
+
* where Google Maps sets them.
|
|
752
|
+
*/
|
|
753
|
+
function houseNumbers(
|
|
754
|
+
p: MapPalette,
|
|
755
|
+
sourceLayer: string,
|
|
756
|
+
buildings: string | null,
|
|
757
|
+
): SymbolLayer {
|
|
758
|
+
return {
|
|
759
|
+
id: 'house-numbers',
|
|
760
|
+
type: 'symbol',
|
|
761
|
+
sourceLayer,
|
|
762
|
+
...(buildings ? { snapInto: { sourceLayer: buildings } } : {}),
|
|
763
|
+
minZoom: 18,
|
|
764
|
+
textField: 'housenumber',
|
|
765
|
+
textColor: p.textMinor,
|
|
766
|
+
textHaloColor: p.halo,
|
|
767
|
+
textHaloWidth: 1,
|
|
768
|
+
textSize: 10,
|
|
769
|
+
// Under every other name, and held to no repeat distance: "2" is the
|
|
770
|
+
// number of a house on every street there is.
|
|
771
|
+
rank: 0,
|
|
772
|
+
repeatDistance: 0,
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
|
|
621
776
|
// --- OpenMapTiles -----------------------------------------------------------
|
|
622
777
|
|
|
623
778
|
/**
|
|
@@ -682,9 +837,6 @@ export function openMapTilesStyle(
|
|
|
682
837
|
};
|
|
683
838
|
const name = options.nameField ?? 'name';
|
|
684
839
|
const layers: MapStyleLayer[] = [
|
|
685
|
-
// One `water` layer for everything wet, with `class` telling the sea
|
|
686
|
-
// from a lake — where Shortbread has `ocean` and `water_polygons`.
|
|
687
|
-
{ id: 'ocean', type: 'fill', sourceLayer: 'water', color: p.water },
|
|
688
840
|
{
|
|
689
841
|
id: 'landuse-green',
|
|
690
842
|
type: 'fill',
|
|
@@ -708,6 +860,18 @@ export function openMapTilesStyle(
|
|
|
708
860
|
filter: ['in', 'class', ...OMT_SITES],
|
|
709
861
|
color: p.site,
|
|
710
862
|
},
|
|
863
|
+
// One `water` layer for everything wet, with `class` telling the sea
|
|
864
|
+
// from a lake — where Shortbread has `ocean` and `water_polygons`.
|
|
865
|
+
//
|
|
866
|
+
// Drawn **over** the green and the built-up, as Shortbread's
|
|
867
|
+
// `water_polygons` are and as OSM Bright and OSM Liberty draw it. This
|
|
868
|
+
// schema has no land polygons — land is the background and the sea is
|
|
869
|
+
// cut out of it — and its `park` layer carries protected areas, which
|
|
870
|
+
// are often mostly sea: the Pearl River Estuary's dolphin reserve is a
|
|
871
|
+
// rectangle of water west of Lantau. Drawn first, the sea went under
|
|
872
|
+
// every park that reaches into it, and under every one with a lake in
|
|
873
|
+
// it.
|
|
874
|
+
{ id: 'ocean', type: 'fill', sourceLayer: 'water', color: p.water },
|
|
711
875
|
{
|
|
712
876
|
id: 'water-lines',
|
|
713
877
|
type: 'line',
|
|
@@ -1033,6 +1197,53 @@ export function openMapTilesStyle(
|
|
|
1033
1197
|
textSize: 11,
|
|
1034
1198
|
rank: 20,
|
|
1035
1199
|
},
|
|
1200
|
+
// Public transport, from `poi`'s classes — OpenMapTiles has no layer
|
|
1201
|
+
// of its own for it — and airports from theirs.
|
|
1202
|
+
stopLayer(
|
|
1203
|
+
p,
|
|
1204
|
+
name,
|
|
1205
|
+
'transport-airport',
|
|
1206
|
+
'aerodrome_label',
|
|
1207
|
+
undefined,
|
|
1208
|
+
'airport',
|
|
1209
|
+
11,
|
|
1210
|
+
70,
|
|
1211
|
+
),
|
|
1212
|
+
stopLayer(
|
|
1213
|
+
p,
|
|
1214
|
+
name,
|
|
1215
|
+
'transport-rail',
|
|
1216
|
+
'poi',
|
|
1217
|
+
[
|
|
1218
|
+
'all',
|
|
1219
|
+
['==', 'class', 'railway'],
|
|
1220
|
+
['in', 'subclass', 'station', 'halt'],
|
|
1221
|
+
],
|
|
1222
|
+
'train',
|
|
1223
|
+
13,
|
|
1224
|
+
50,
|
|
1225
|
+
),
|
|
1226
|
+
stopLayer(
|
|
1227
|
+
p,
|
|
1228
|
+
name,
|
|
1229
|
+
'transport-tram',
|
|
1230
|
+
'poi',
|
|
1231
|
+
['==', 'subclass', 'tram_stop'],
|
|
1232
|
+
'tram',
|
|
1233
|
+
15,
|
|
1234
|
+
12,
|
|
1235
|
+
),
|
|
1236
|
+
stopLayer(
|
|
1237
|
+
p,
|
|
1238
|
+
name,
|
|
1239
|
+
'transport-bus',
|
|
1240
|
+
'poi',
|
|
1241
|
+
['==', 'class', 'bus'],
|
|
1242
|
+
'bus',
|
|
1243
|
+
15,
|
|
1244
|
+
10,
|
|
1245
|
+
),
|
|
1246
|
+
houseNumbers(p, 'housenumber', snapInto(options, 'building')),
|
|
1036
1247
|
);
|
|
1037
1248
|
}
|
|
1038
1249
|
|