@react-x11/components 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +105 -38
- package/dist/charts/node.d.ts +12 -2
- package/dist/charts/node.d.ts.map +1 -1
- package/dist/charts/node.js +50 -16
- package/dist/charts/node.js.map +1 -1
- package/dist/charts/render.d.ts +12 -3
- package/dist/charts/render.d.ts.map +1 -1
- package/dist/charts/render.js +94 -25
- package/dist/charts/render.js.map +1 -1
- package/dist/code/index.d.ts.map +1 -1
- package/dist/code/index.js +3 -1
- package/dist/code/index.js.map +1 -1
- package/dist/code-editor/completion.d.ts.map +1 -1
- package/dist/code-editor/completion.js +3 -2
- package/dist/code-editor/completion.js.map +1 -1
- package/dist/code-editor/index.d.ts.map +1 -1
- package/dist/code-editor/index.js +19 -0
- package/dist/code-editor/index.js.map +1 -1
- package/dist/code-editor/node.d.ts +177 -7
- package/dist/code-editor/node.d.ts.map +1 -1
- package/dist/code-editor/node.js +1329 -164
- package/dist/code-editor/node.js.map +1 -1
- package/dist/code-language/languages/glsl.d.ts.map +1 -1
- package/dist/code-language/languages/glsl.js +10 -2
- package/dist/code-language/languages/glsl.js.map +1 -1
- package/dist/code-language/languages/javascript.d.ts.map +1 -1
- package/dist/code-language/languages/javascript.js +18 -3
- package/dist/code-language/languages/javascript.js.map +1 -1
- package/dist/code-language/languages/json.d.ts.map +1 -1
- package/dist/code-language/languages/json.js +10 -2
- package/dist/code-language/languages/json.js.map +1 -1
- package/dist/code-language/languages/shell.d.ts.map +1 -1
- package/dist/code-language/languages/shell.js +10 -2
- package/dist/code-language/languages/shell.js.map +1 -1
- package/dist/code-language/languages/sql.d.ts.map +1 -1
- package/dist/code-language/languages/sql.js +20 -2
- package/dist/code-language/languages/sql.js.map +1 -1
- package/dist/code-language/stream.d.ts +22 -0
- package/dist/code-language/stream.d.ts.map +1 -1
- package/dist/code-language/stream.js +259 -9
- package/dist/code-language/stream.js.map +1 -1
- package/dist/code-language/types.d.ts +5 -4
- package/dist/code-language/types.d.ts.map +1 -1
- package/dist/codeblock/index.d.ts +13 -2
- package/dist/codeblock/index.d.ts.map +1 -1
- package/dist/codeblock/index.js +20 -3
- package/dist/codeblock/index.js.map +1 -1
- package/dist/embed/client.d.ts +48 -3
- package/dist/embed/client.d.ts.map +1 -1
- package/dist/embed/client.js +79 -5
- package/dist/embed/client.js.map +1 -1
- package/dist/embed/index.d.ts +1 -1
- package/dist/embed/index.d.ts.map +1 -1
- package/dist/embed/index.js +1 -1
- package/dist/embed/index.js.map +1 -1
- package/dist/flow/draw.d.ts +50 -0
- package/dist/flow/draw.d.ts.map +1 -1
- package/dist/flow/draw.js +132 -33
- package/dist/flow/draw.js.map +1 -1
- package/dist/flow/gl/color.d.ts +13 -0
- package/dist/flow/gl/color.d.ts.map +1 -0
- package/dist/flow/gl/color.js +82 -0
- package/dist/flow/gl/color.js.map +1 -0
- package/dist/flow/gl/index.d.ts +60 -0
- package/dist/flow/gl/index.d.ts.map +1 -0
- package/dist/flow/gl/index.js +283 -0
- package/dist/flow/gl/index.js.map +1 -0
- package/dist/flow/gl/pack.d.ts +133 -0
- package/dist/flow/gl/pack.d.ts.map +1 -0
- package/dist/flow/gl/pack.js +408 -0
- package/dist/flow/gl/pack.js.map +1 -0
- package/dist/flow/gl/renderer.d.ts +95 -0
- package/dist/flow/gl/renderer.d.ts.map +1 -0
- package/dist/flow/gl/renderer.js +459 -0
- package/dist/flow/gl/renderer.js.map +1 -0
- package/dist/flow/gl/shaders.d.ts +79 -0
- package/dist/flow/gl/shaders.d.ts.map +1 -0
- package/dist/flow/gl/shaders.js +346 -0
- package/dist/flow/gl/shaders.js.map +1 -0
- package/dist/flow/gl/text.d.ts +318 -0
- package/dist/flow/gl/text.d.ts.map +1 -0
- package/dist/flow/gl/text.js +1103 -0
- package/dist/flow/gl/text.js.map +1 -0
- package/dist/flow/index.d.ts +1 -1
- package/dist/flow/index.d.ts.map +1 -1
- package/dist/flow/index.js +619 -64
- package/dist/flow/index.js.map +1 -1
- package/dist/flow/node.d.ts +621 -72
- package/dist/flow/node.d.ts.map +1 -1
- package/dist/flow/node.js +2253 -1018
- package/dist/flow/node.js.map +1 -1
- package/dist/flow/paint.d.ts +35 -0
- package/dist/flow/paint.d.ts.map +1 -0
- package/dist/flow/paint.js +393 -0
- package/dist/flow/paint.js.map +1 -0
- package/dist/flow/paths.d.ts +14 -0
- package/dist/flow/paths.d.ts.map +1 -1
- package/dist/flow/paths.js +45 -19
- package/dist/flow/paths.js.map +1 -1
- package/dist/flow/scene.d.ts +584 -0
- package/dist/flow/scene.d.ts.map +1 -0
- package/dist/flow/scene.js +1453 -0
- package/dist/flow/scene.js.map +1 -0
- package/dist/flow/types.d.ts +111 -1
- package/dist/flow/types.d.ts.map +1 -1
- package/dist/html/controls.d.ts +28 -0
- package/dist/html/controls.d.ts.map +1 -1
- package/dist/html/controls.js +52 -2
- package/dist/html/controls.js.map +1 -1
- package/dist/html/css/calc.d.ts +14 -0
- package/dist/html/css/calc.d.ts.map +1 -0
- package/dist/html/css/calc.js +344 -0
- package/dist/html/css/calc.js.map +1 -0
- package/dist/html/css/cascade.d.ts +240 -6
- package/dist/html/css/cascade.d.ts.map +1 -1
- package/dist/html/css/cascade.js +1327 -66
- package/dist/html/css/cascade.js.map +1 -1
- package/dist/html/css/color.d.ts +23 -0
- package/dist/html/css/color.d.ts.map +1 -0
- package/dist/html/css/color.js +740 -0
- package/dist/html/css/color.js.map +1 -0
- package/dist/html/css/content.d.ts +92 -0
- package/dist/html/css/content.d.ts.map +1 -0
- package/dist/html/css/content.js +388 -0
- package/dist/html/css/content.js.map +1 -0
- package/dist/html/css/counter-styles.d.ts +76 -0
- package/dist/html/css/counter-styles.d.ts.map +1 -0
- package/dist/html/css/counter-styles.js +893 -0
- package/dist/html/css/counter-styles.js.map +1 -0
- package/dist/html/css/decode.d.ts +12 -0
- package/dist/html/css/decode.d.ts.map +1 -0
- package/dist/html/css/decode.js +116 -0
- package/dist/html/css/decode.js.map +1 -0
- package/dist/html/css/parse.d.ts +110 -10
- package/dist/html/css/parse.d.ts.map +1 -1
- package/dist/html/css/parse.js +1473 -180
- package/dist/html/css/parse.js.map +1 -1
- package/dist/html/css/style.d.ts +498 -15
- package/dist/html/css/style.d.ts.map +1 -1
- package/dist/html/css/style.js +3698 -206
- package/dist/html/css/style.js.map +1 -1
- package/dist/html/css/ua.d.ts.map +1 -1
- package/dist/html/css/ua.js +57 -11
- package/dist/html/css/ua.js.map +1 -1
- package/dist/html/css/values.d.ts +37 -3
- package/dist/html/css/values.d.ts.map +1 -1
- package/dist/html/css/values.js +122 -48
- package/dist/html/css/values.js.map +1 -1
- package/dist/html/css/vars.d.ts +52 -0
- package/dist/html/css/vars.d.ts.map +1 -0
- package/dist/html/css/vars.js +358 -0
- package/dist/html/css/vars.js.map +1 -0
- package/dist/html/dom.d.ts +30 -4
- package/dist/html/dom.d.ts.map +1 -1
- package/dist/html/dom.js +278 -17
- package/dist/html/dom.js.map +1 -1
- package/dist/html/fonts.d.ts +106 -0
- package/dist/html/fonts.d.ts.map +1 -0
- package/dist/html/fonts.js +565 -0
- package/dist/html/fonts.js.map +1 -0
- package/dist/html/gif.d.ts +15 -0
- package/dist/html/gif.d.ts.map +1 -0
- package/dist/html/gif.js +229 -0
- package/dist/html/gif.js.map +1 -0
- package/dist/html/index.d.ts +50 -11
- package/dist/html/index.d.ts.map +1 -1
- package/dist/html/index.js +115 -9
- package/dist/html/index.js.map +1 -1
- package/dist/html/layout/block.d.ts +226 -3
- package/dist/html/layout/block.d.ts.map +1 -1
- package/dist/html/layout/block.js +2937 -197
- package/dist/html/layout/block.js.map +1 -1
- package/dist/html/layout/boxes.d.ts +340 -17
- package/dist/html/layout/boxes.d.ts.map +1 -1
- package/dist/html/layout/boxes.js +1714 -182
- package/dist/html/layout/boxes.js.map +1 -1
- package/dist/html/layout/cache.d.ts +58 -0
- package/dist/html/layout/cache.d.ts.map +1 -0
- package/dist/html/layout/cache.js +224 -0
- package/dist/html/layout/cache.js.map +1 -0
- package/dist/html/layout/collapse.d.ts +45 -0
- package/dist/html/layout/collapse.d.ts.map +1 -0
- package/dist/html/layout/collapse.js +246 -0
- package/dist/html/layout/collapse.js.map +1 -0
- package/dist/html/layout/css-grid.d.ts +7 -0
- package/dist/html/layout/css-grid.d.ts.map +1 -0
- package/dist/html/layout/css-grid.js +900 -0
- package/dist/html/layout/css-grid.js.map +1 -0
- package/dist/html/layout/flex.d.ts.map +1 -1
- package/dist/html/layout/flex.js +1025 -89
- package/dist/html/layout/flex.js.map +1 -1
- package/dist/html/layout/floats.d.ts +45 -6
- package/dist/html/layout/floats.d.ts.map +1 -1
- package/dist/html/layout/floats.js +113 -14
- package/dist/html/layout/floats.js.map +1 -1
- package/dist/html/layout/grid-lines.d.ts +39 -0
- package/dist/html/layout/grid-lines.d.ts.map +1 -0
- package/dist/html/layout/grid-lines.js +119 -0
- package/dist/html/layout/grid-lines.js.map +1 -0
- package/dist/html/layout/grid.d.ts +53 -0
- package/dist/html/layout/grid.d.ts.map +1 -0
- package/dist/html/layout/grid.js +153 -0
- package/dist/html/layout/grid.js.map +1 -0
- package/dist/html/layout/inline.d.ts +151 -1
- package/dist/html/layout/inline.d.ts.map +1 -1
- package/dist/html/layout/inline.js +3375 -174
- package/dist/html/layout/inline.js.map +1 -1
- package/dist/html/layout/shaping.d.ts +6 -0
- package/dist/html/layout/shaping.d.ts.map +1 -0
- package/dist/html/layout/shaping.js +100 -0
- package/dist/html/layout/shaping.js.map +1 -0
- package/dist/html/layout/table.d.ts +3 -0
- package/dist/html/layout/table.d.ts.map +1 -1
- package/dist/html/layout/table.js +681 -175
- package/dist/html/layout/table.js.map +1 -1
- package/dist/html/layout/tracks.d.ts +44 -0
- package/dist/html/layout/tracks.d.ts.map +1 -0
- package/dist/html/layout/tracks.js +349 -0
- package/dist/html/layout/tracks.js.map +1 -0
- package/dist/html/node.d.ts +172 -5
- package/dist/html/node.d.ts.map +1 -1
- package/dist/html/node.js +1336 -103
- package/dist/html/node.js.map +1 -1
- package/dist/html/paint.d.ts +92 -3
- package/dist/html/paint.d.ts.map +1 -1
- package/dist/html/paint.js +3503 -141
- package/dist/html/paint.js.map +1 -1
- package/dist/html/resources.d.ts +60 -14
- package/dist/html/resources.d.ts.map +1 -1
- package/dist/html/resources.js +122 -36
- package/dist/html/resources.js.map +1 -1
- package/dist/html/surfaces.d.ts +23 -0
- package/dist/html/surfaces.d.ts.map +1 -0
- package/dist/html/surfaces.js +68 -0
- package/dist/html/surfaces.js.map +1 -0
- package/dist/html/svg.d.ts +80 -0
- package/dist/html/svg.d.ts.map +1 -0
- package/dist/html/svg.js +435 -0
- package/dist/html/svg.js.map +1 -0
- package/dist/html/url.d.ts +23 -0
- package/dist/html/url.d.ts.map +1 -0
- package/dist/html/url.js +80 -0
- package/dist/html/url.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/internal/collate.d.ts +3 -0
- package/dist/internal/collate.d.ts.map +1 -0
- package/dist/internal/collate.js +11 -0
- package/dist/internal/collate.js.map +1 -0
- package/dist/{markdown → internal/markdown}/ast.d.ts +23 -0
- package/dist/internal/markdown/ast.d.ts.map +1 -0
- package/dist/internal/markdown/ast.js +22 -0
- package/dist/internal/markdown/ast.js.map +1 -0
- package/dist/internal/markdown/parse.d.ts.map +1 -0
- package/dist/{markdown → internal/markdown}/parse.js +221 -30
- package/dist/internal/markdown/parse.js.map +1 -0
- package/dist/internal/markdown/stringify.d.ts +4 -0
- package/dist/internal/markdown/stringify.d.ts.map +1 -0
- package/dist/internal/markdown/stringify.js +684 -0
- package/dist/internal/markdown/stringify.js.map +1 -0
- package/dist/internal/markdown/tags.d.ts.map +1 -0
- package/dist/internal/markdown/tags.js.map +1 -0
- 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/scroll.d.ts +3 -2
- package/dist/internal/scroll.d.ts.map +1 -1
- package/dist/internal/scroll.js +1 -0
- package/dist/internal/scroll.js.map +1 -1
- 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 +103 -0
- package/dist/maps/anchors.d.ts.map +1 -0
- package/dist/maps/anchors.js +790 -0
- package/dist/maps/anchors.js.map +1 -0
- package/dist/maps/controller.d.ts +340 -0
- package/dist/maps/controller.d.ts.map +1 -0
- package/dist/maps/controller.js +822 -0
- package/dist/maps/controller.js.map +1 -0
- package/dist/maps/gl/buckets.d.ts +99 -0
- package/dist/maps/gl/buckets.d.ts.map +1 -0
- package/dist/maps/gl/buckets.js +365 -0
- package/dist/maps/gl/buckets.js.map +1 -0
- package/dist/maps/gl/build-worker.d.ts +15 -0
- package/dist/maps/gl/build-worker.d.ts.map +1 -0
- package/dist/maps/gl/build-worker.js +44 -0
- package/dist/maps/gl/build-worker.js.map +1 -0
- package/dist/maps/gl/color.d.ts +8 -0
- package/dist/maps/gl/color.d.ts.map +1 -0
- package/dist/maps/gl/color.js +57 -0
- package/dist/maps/gl/color.js.map +1 -0
- package/dist/maps/gl/cover.d.ts +70 -0
- package/dist/maps/gl/cover.d.ts.map +1 -0
- package/dist/maps/gl/cover.js +137 -0
- package/dist/maps/gl/cover.js.map +1 -0
- package/dist/maps/gl/index.d.ts +3 -0
- package/dist/maps/gl/index.d.ts.map +1 -0
- package/dist/maps/gl/index.js +20 -0
- package/dist/maps/gl/index.js.map +1 -0
- package/dist/maps/gl/markers.d.ts +28 -0
- package/dist/maps/gl/markers.d.ts.map +1 -0
- package/dist/maps/gl/markers.js +60 -0
- package/dist/maps/gl/markers.js.map +1 -0
- package/dist/maps/gl/overlays.d.ts +68 -0
- package/dist/maps/gl/overlays.d.ts.map +1 -0
- package/dist/maps/gl/overlays.js +300 -0
- package/dist/maps/gl/overlays.js.map +1 -0
- package/dist/maps/gl/pane.d.ts +12 -0
- package/dist/maps/gl/pane.d.ts.map +1 -0
- package/dist/maps/gl/pane.js +37 -0
- package/dist/maps/gl/pane.js.map +1 -0
- package/dist/maps/gl/placement.d.ts +124 -0
- package/dist/maps/gl/placement.d.ts.map +1 -0
- package/dist/maps/gl/placement.js +642 -0
- package/dist/maps/gl/placement.js.map +1 -0
- package/dist/maps/gl/renderer.d.ts +384 -0
- package/dist/maps/gl/renderer.d.ts.map +1 -0
- package/dist/maps/gl/renderer.js +1184 -0
- package/dist/maps/gl/renderer.js.map +1 -0
- package/dist/maps/gl/shaders.d.ts +121 -0
- package/dist/maps/gl/shaders.d.ts.map +1 -0
- package/dist/maps/gl/shaders.js +453 -0
- package/dist/maps/gl/shaders.js.map +1 -0
- package/dist/maps/gl/store.d.ts +125 -0
- package/dist/maps/gl/store.d.ts.map +1 -0
- package/dist/maps/gl/store.js +512 -0
- package/dist/maps/gl/store.js.map +1 -0
- package/dist/maps/gl/text.d.ts +283 -0
- package/dist/maps/gl/text.d.ts.map +1 -0
- package/dist/maps/gl/text.js +698 -0
- package/dist/maps/gl/text.js.map +1 -0
- package/dist/maps/gl/view.d.ts +345 -0
- package/dist/maps/gl/view.d.ts.map +1 -0
- package/dist/maps/gl/view.js +1209 -0
- package/dist/maps/gl/view.js.map +1 -0
- 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 +3 -1
- package/dist/maps/index.d.ts.map +1 -1
- package/dist/maps/index.js +218 -52
- package/dist/maps/index.js.map +1 -1
- package/dist/maps/labels.d.ts +91 -18
- package/dist/maps/labels.d.ts.map +1 -1
- package/dist/maps/labels.js +376 -140
- package/dist/maps/labels.js.map +1 -1
- package/dist/maps/node.d.ts +179 -56
- package/dist/maps/node.d.ts.map +1 -1
- package/dist/maps/node.js +663 -537
- package/dist/maps/node.js.map +1 -1
- package/dist/maps/overlay.d.ts +72 -9
- package/dist/maps/overlay.d.ts.map +1 -1
- package/dist/maps/overlay.js +108 -28
- package/dist/maps/overlay.js.map +1 -1
- package/dist/maps/paint.d.ts +3 -0
- package/dist/maps/paint.d.ts.map +1 -1
- package/dist/maps/paint.js.map +1 -1
- package/dist/maps/proj.d.ts +62 -0
- package/dist/maps/proj.d.ts.map +1 -1
- package/dist/maps/proj.js +101 -0
- package/dist/maps/proj.js.map +1 -1
- package/dist/maps/renderer.d.ts +69 -0
- package/dist/maps/renderer.d.ts.map +1 -0
- package/dist/maps/renderer.js +66 -0
- package/dist/maps/renderer.js.map +1 -0
- package/dist/maps/sources.d.ts +30 -6
- package/dist/maps/sources.d.ts.map +1 -1
- package/dist/maps/sources.js +22 -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/theme.d.ts +19 -0
- package/dist/maps/theme.d.ts.map +1 -0
- package/dist/maps/theme.js +44 -0
- package/dist/maps/theme.js.map +1 -0
- package/dist/maps/tiles.d.ts +147 -27
- package/dist/maps/tiles.d.ts.map +1 -1
- package/dist/maps/tiles.js +221 -54
- package/dist/maps/tiles.js.map +1 -1
- package/dist/maps/types.d.ts +213 -21
- package/dist/maps/types.d.ts.map +1 -1
- package/dist/markdown/expressions.d.ts +1 -1
- package/dist/markdown/expressions.d.ts.map +1 -1
- package/dist/markdown/expressions.js.map +1 -1
- package/dist/markdown/index.d.ts +7 -6
- package/dist/markdown/index.d.ts.map +1 -1
- package/dist/markdown/index.js +121 -50
- package/dist/markdown/index.js.map +1 -1
- package/dist/markdown/spans.d.ts +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/media-player/index.d.ts +11 -3
- package/dist/media-player/index.d.ts.map +1 -1
- package/dist/media-player/index.js +13 -2
- package/dist/media-player/index.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/clipboard.d.ts +23 -0
- package/dist/rich-text-editor/clipboard.d.ts.map +1 -0
- package/dist/rich-text-editor/clipboard.js +307 -0
- package/dist/rich-text-editor/clipboard.js.map +1 -0
- package/dist/rich-text-editor/collab.d.ts +32 -0
- package/dist/rich-text-editor/collab.d.ts.map +1 -0
- package/dist/rich-text-editor/collab.js +55 -0
- package/dist/rich-text-editor/collab.js.map +1 -0
- package/dist/rich-text-editor/commands.d.ts +50 -0
- package/dist/rich-text-editor/commands.d.ts.map +1 -0
- package/dist/rich-text-editor/commands.js +376 -0
- package/dist/rich-text-editor/commands.js.map +1 -0
- package/dist/rich-text-editor/drag.d.ts +68 -0
- package/dist/rich-text-editor/drag.d.ts.map +1 -0
- package/dist/rich-text-editor/drag.js +148 -0
- package/dist/rich-text-editor/drag.js.map +1 -0
- package/dist/rich-text-editor/html.d.ts +145 -0
- package/dist/rich-text-editor/html.d.ts.map +1 -0
- package/dist/rich-text-editor/html.js +516 -0
- package/dist/rich-text-editor/html.js.map +1 -0
- package/dist/rich-text-editor/index.d.ts +252 -0
- package/dist/rich-text-editor/index.d.ts.map +1 -0
- package/dist/rich-text-editor/index.js +856 -0
- package/dist/rich-text-editor/index.js.map +1 -0
- package/dist/rich-text-editor/inline.d.ts +94 -0
- package/dist/rich-text-editor/inline.d.ts.map +1 -0
- package/dist/rich-text-editor/inline.js +252 -0
- package/dist/rich-text-editor/inline.js.map +1 -0
- package/dist/rich-text-editor/keymap.d.ts +71 -0
- package/dist/rich-text-editor/keymap.d.ts.map +1 -0
- package/dist/rich-text-editor/keymap.js +394 -0
- package/dist/rich-text-editor/keymap.js.map +1 -0
- package/dist/rich-text-editor/keys.d.ts +40 -0
- package/dist/rich-text-editor/keys.d.ts.map +1 -0
- package/dist/rich-text-editor/keys.js +202 -0
- package/dist/rich-text-editor/keys.js.map +1 -0
- package/dist/rich-text-editor/look.d.ts +71 -0
- package/dist/rich-text-editor/look.d.ts.map +1 -0
- package/dist/rich-text-editor/look.js +342 -0
- package/dist/rich-text-editor/look.js.map +1 -0
- package/dist/rich-text-editor/markdown.d.ts +18 -0
- package/dist/rich-text-editor/markdown.d.ts.map +1 -0
- package/dist/rich-text-editor/markdown.js +496 -0
- package/dist/rich-text-editor/markdown.js.map +1 -0
- 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/nodes.d.ts +135 -0
- package/dist/rich-text-editor/nodes.d.ts.map +1 -0
- package/dist/rich-text-editor/nodes.js +397 -0
- package/dist/rich-text-editor/nodes.js.map +1 -0
- package/dist/rich-text-editor/render.d.ts +68 -0
- package/dist/rich-text-editor/render.d.ts.map +1 -0
- package/dist/rich-text-editor/render.js +518 -0
- package/dist/rich-text-editor/render.js.map +1 -0
- package/dist/rich-text-editor/schema.d.ts +16 -0
- package/dist/rich-text-editor/schema.d.ts.map +1 -0
- package/dist/rich-text-editor/schema.js +386 -0
- package/dist/rich-text-editor/schema.js.map +1 -0
- package/dist/rich-text-editor/store.d.ts +11 -0
- package/dist/rich-text-editor/store.d.ts.map +1 -0
- package/dist/rich-text-editor/store.js +43 -0
- package/dist/rich-text-editor/store.js.map +1 -0
- package/dist/rich-text-editor/suggest.d.ts +127 -0
- package/dist/rich-text-editor/suggest.d.ts.map +1 -0
- package/dist/rich-text-editor/suggest.js +0 -0
- package/dist/rich-text-editor/suggest.js.map +1 -0
- package/dist/rich-text-editor/tables.d.ts +41 -0
- package/dist/rich-text-editor/tables.d.ts.map +1 -0
- package/dist/rich-text-editor/tables.js +204 -0
- package/dist/rich-text-editor/tables.js.map +1 -0
- package/dist/rich-text-editor/toolbar.d.ts +58 -0
- package/dist/rich-text-editor/toolbar.d.ts.map +1 -0
- package/dist/rich-text-editor/toolbar.js +548 -0
- package/dist/rich-text-editor/toolbar.js.map +1 -0
- package/dist/rich-text-editor/view.d.ts +368 -0
- package/dist/rich-text-editor/view.d.ts.map +1 -0
- package/dist/rich-text-editor/view.js +1968 -0
- package/dist/rich-text-editor/view.js.map +1 -0
- package/dist/rich-text-editor/virtual.d.ts +54 -0
- package/dist/rich-text-editor/virtual.d.ts.map +1 -0
- package/dist/rich-text-editor/virtual.js +279 -0
- package/dist/rich-text-editor/virtual.js.map +1 -0
- package/dist/richtext/node.d.ts +71 -4
- package/dist/richtext/node.d.ts.map +1 -1
- package/dist/richtext/node.js +233 -28
- 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/backends.d.ts +4 -1
- package/dist/terminal/backends.d.ts.map +1 -1
- package/dist/terminal/backends.js.map +1 -1
- package/dist/terminal/index.d.ts +18 -7
- package/dist/terminal/index.d.ts.map +1 -1
- package/dist/terminal/index.js +32 -11
- package/dist/terminal/index.js.map +1 -1
- package/dist/terminal/vt/pty.d.ts +13 -2
- package/dist/terminal/vt/pty.d.ts.map +1 -1
- package/dist/terminal/vt/pty.js +18 -3
- package/dist/terminal/vt/pty.js.map +1 -1
- package/dist/terminal-output/index.d.ts.map +1 -1
- package/dist/terminal-output/index.js +6 -1
- package/dist/terminal-output/index.js.map +1 -1
- package/dist/three/canvas.d.ts.map +1 -1
- package/dist/three/canvas.js +85 -7
- package/dist/three/canvas.js.map +1 -1
- package/dist/three/events.d.ts +22 -4
- package/dist/three/events.d.ts.map +1 -1
- package/dist/three/events.js +34 -4
- package/dist/three/events.js.map +1 -1
- package/dist/tree/index.d.ts.map +1 -1
- package/dist/tree/index.js +17 -0
- package/dist/tree/index.js.map +1 -1
- package/package.json +59 -31
- package/src/charts/node.ts +68 -28
- package/src/charts/render.ts +120 -30
- package/src/code/index.ts +3 -1
- package/src/code-editor/completion.ts +3 -2
- package/src/code-editor/index.ts +19 -0
- package/src/code-editor/node.ts +1574 -184
- package/src/code-language/languages/glsl.ts +12 -2
- package/src/code-language/languages/javascript.ts +21 -4
- package/src/code-language/languages/json.ts +12 -2
- package/src/code-language/languages/shell.ts +12 -2
- package/src/code-language/languages/sql.ts +22 -2
- package/src/code-language/stream.ts +257 -17
- package/src/code-language/types.ts +5 -4
- package/src/codeblock/index.ts +20 -3
- package/src/embed/client.ts +102 -8
- package/src/embed/index.ts +2 -0
- package/src/flow/draw.ts +167 -41
- package/src/flow/gl/color.ts +85 -0
- package/src/flow/gl/index.ts +342 -0
- package/src/flow/gl/pack.ts +585 -0
- package/src/flow/gl/renderer.ts +679 -0
- package/src/flow/gl/shaders.ts +371 -0
- package/src/flow/gl/text.ts +1295 -0
- package/src/flow/index.ts +794 -67
- package/src/flow/node.ts +2496 -1256
- package/src/flow/paint.ts +511 -0
- package/src/flow/paths.ts +80 -15
- package/src/flow/scene.ts +2199 -0
- package/src/flow/types.ts +113 -1
- package/src/html/controls.ts +73 -2
- package/src/html/css/calc.ts +385 -0
- package/src/html/css/cascade.ts +1403 -62
- package/src/html/css/color.ts +755 -0
- package/src/html/css/content.ts +417 -0
- package/src/html/css/counter-styles.ts +973 -0
- package/src/html/css/decode.ts +130 -0
- package/src/html/css/parse.ts +1514 -160
- package/src/html/css/style.ts +4102 -222
- package/src/html/css/ua.ts +58 -12
- package/src/html/css/values.ts +150 -50
- package/src/html/css/vars.ts +348 -0
- package/src/html/dom.ts +284 -17
- package/src/html/fonts.ts +641 -0
- package/src/html/gif.ts +233 -0
- package/src/html/index.ts +180 -20
- package/src/html/layout/block.ts +3456 -230
- package/src/html/layout/boxes.ts +2100 -190
- package/src/html/layout/cache.ts +289 -0
- package/src/html/layout/collapse.ts +317 -0
- package/src/html/layout/css-grid.ts +1063 -0
- package/src/html/layout/flex.ts +1115 -106
- package/src/html/layout/floats.ts +128 -14
- package/src/html/layout/grid-lines.ts +141 -0
- package/src/html/layout/grid.ts +181 -0
- package/src/html/layout/inline.ts +3943 -192
- package/src/html/layout/shaping.ts +140 -0
- package/src/html/layout/table.ts +696 -186
- package/src/html/layout/tracks.ts +437 -0
- package/src/html/node.ts +1486 -121
- package/src/html/paint.ts +4293 -169
- package/src/html/resources.ts +161 -50
- package/src/html/surfaces.ts +81 -0
- package/src/html/svg.ts +493 -0
- package/src/html/url.ts +86 -0
- package/src/index.ts +4 -0
- package/src/internal/collate.ts +12 -0
- package/src/{markdown → internal/markdown}/ast.ts +35 -7
- package/src/{markdown → internal/markdown}/parse.ts +288 -35
- package/src/internal/markdown/stringify.ts +772 -0
- package/src/internal/prewarm.ts +45 -0
- package/src/internal/scroll.ts +5 -3
- 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 +913 -0
- package/src/maps/controller.ts +1084 -0
- package/src/maps/gl/buckets.ts +461 -0
- package/src/maps/gl/build-worker.ts +66 -0
- package/src/maps/gl/color.ts +62 -0
- package/src/maps/gl/cover.ts +205 -0
- package/src/maps/gl/index.ts +23 -0
- package/src/maps/gl/markers.ts +83 -0
- package/src/maps/gl/overlays.ts +379 -0
- package/src/maps/gl/pane.ts +42 -0
- package/src/maps/gl/placement.ts +968 -0
- package/src/maps/gl/renderer.ts +1660 -0
- package/src/maps/gl/shaders.ts +489 -0
- package/src/maps/gl/store.ts +615 -0
- package/src/maps/gl/text.ts +868 -0
- package/src/maps/gl/view.ts +1489 -0
- package/src/maps/icons.ts +183 -0
- package/src/maps/index.ts +274 -81
- package/src/maps/labels.ts +457 -144
- package/src/maps/node.ts +832 -665
- package/src/maps/overlay.ts +148 -43
- package/src/maps/paint.ts +3 -0
- package/src/maps/proj.ts +118 -0
- package/src/maps/renderer.ts +155 -0
- package/src/maps/sources.ts +43 -6
- package/src/maps/style.ts +32 -0
- package/src/maps/styles.ts +215 -4
- package/src/maps/theme.ts +51 -0
- package/src/maps/tiles.ts +253 -62
- package/src/maps/types.ts +213 -21
- package/src/markdown/expressions.ts +5 -1
- package/src/markdown/index.ts +163 -78
- package/src/markdown/spans.ts +6 -1
- package/src/media-player/index.ts +18 -4
- 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/clipboard.ts +439 -0
- package/src/rich-text-editor/collab.ts +91 -0
- package/src/rich-text-editor/commands.ts +448 -0
- package/src/rich-text-editor/dom-globals.d.ts +23 -0
- package/src/rich-text-editor/drag.ts +211 -0
- package/src/rich-text-editor/html.ts +619 -0
- package/src/rich-text-editor/index.ts +1364 -0
- package/src/rich-text-editor/inline.ts +345 -0
- package/src/rich-text-editor/keymap.ts +510 -0
- package/src/rich-text-editor/keys.ts +228 -0
- package/src/rich-text-editor/look.ts +427 -0
- package/src/rich-text-editor/markdown.ts +653 -0
- package/src/rich-text-editor/marks.ts +101 -0
- package/src/rich-text-editor/nodes.ts +497 -0
- package/src/rich-text-editor/render.ts +837 -0
- package/src/rich-text-editor/schema.ts +431 -0
- package/src/rich-text-editor/store.ts +39 -0
- package/src/rich-text-editor/suggest.ts +597 -0
- package/src/rich-text-editor/tables.ts +272 -0
- package/src/rich-text-editor/toolbar.ts +724 -0
- package/src/rich-text-editor/view.ts +2287 -0
- package/src/rich-text-editor/virtual.ts +372 -0
- package/src/richtext/node.ts +294 -44
- package/src/richtext/runs.ts +23 -12
- package/src/table/index.ts +29 -0
- package/src/table/rows.ts +18 -8
- package/src/terminal/backends.ts +4 -1
- package/src/terminal/index.ts +47 -15
- package/src/terminal/vt/pty.ts +16 -2
- package/src/terminal-output/index.ts +6 -1
- package/src/three/canvas.ts +102 -8
- package/src/three/events.ts +49 -9
- package/src/tree/index.ts +19 -0
- package/dist/markdown/ast.d.ts.map +0 -1
- package/dist/markdown/ast.js +0 -17
- package/dist/markdown/ast.js.map +0 -1
- package/dist/markdown/parse.d.ts.map +0 -1
- package/dist/markdown/parse.js.map +0 -1
- package/dist/markdown/tags.d.ts.map +0 -1
- package/dist/markdown/tags.js.map +0 -1
- /package/dist/{markdown → internal/markdown}/parse.d.ts +0 -0
- /package/dist/{markdown → internal/markdown}/tags.d.ts +0 -0
- /package/dist/{markdown → internal/markdown}/tags.js +0 -0
- /package/src/{markdown → internal/markdown}/tags.ts +0 -0
package/src/html/gif.ts
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// A GIF's first frame, as RGBA.
|
|
2
|
+
//
|
|
3
|
+
// ntk decodes PNG and JPEG, and a document handed to this component is
|
|
4
|
+
// still full of GIFs: a mail's logo and its spacer images, a table layout's
|
|
5
|
+
// one-pixel shims sized by `width` and `height`. An image that does not
|
|
6
|
+
// decode is drawn as a frame, which on a spacer is a line through the
|
|
7
|
+
// layout that the author meant to be nothing. So the format is read here:
|
|
8
|
+
// GIF89a (and 87a) is small, fixed and unambiguous, and the decoder is the
|
|
9
|
+
// LZW variant the format defines, nothing more.
|
|
10
|
+
//
|
|
11
|
+
// Only the first frame. An animation is drawn as it stands before it moves,
|
|
12
|
+
// which is what a paused animation shows; playing one would mean a timer per
|
|
13
|
+
// image and a repaint per frame, which is not this renderer's business.
|
|
14
|
+
|
|
15
|
+
/** A decoded frame: straight RGBA, `width * height * 4` bytes — the shape
|
|
16
|
+
* ntk's `Image` is constructed from. */
|
|
17
|
+
export interface DecodedGif {
|
|
18
|
+
width: number;
|
|
19
|
+
height: number;
|
|
20
|
+
data: Uint8Array;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** The most pixels a GIF may say it has: past this a malformed header is a
|
|
24
|
+
* request for gigabytes, not an image. */
|
|
25
|
+
const MAX_PIXELS = 1 << 25;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Decode a GIF's first frame, or null for bytes that are not a GIF. The
|
|
29
|
+
* logical screen is the image; what the frame does not cover, and its
|
|
30
|
+
* transparent colour, are transparent. Data that ends early leaves the rest
|
|
31
|
+
* of the frame transparent rather than failing the image.
|
|
32
|
+
*/
|
|
33
|
+
export function decodeGif(bytes: Uint8Array): DecodedGif | null {
|
|
34
|
+
if (
|
|
35
|
+
bytes.length < 13 ||
|
|
36
|
+
bytes[0] !== 0x47 || // G
|
|
37
|
+
bytes[1] !== 0x49 || // I
|
|
38
|
+
bytes[2] !== 0x46 || // F
|
|
39
|
+
bytes[3] !== 0x38 || // 8
|
|
40
|
+
(bytes[4] !== 0x37 && bytes[4] !== 0x39) || // 7 or 9
|
|
41
|
+
bytes[5] !== 0x61 // a
|
|
42
|
+
) {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
const width = bytes[6] | (bytes[7] << 8);
|
|
46
|
+
const height = bytes[8] | (bytes[9] << 8);
|
|
47
|
+
if (!width || !height || width * height > MAX_PIXELS) return null;
|
|
48
|
+
const packed = bytes[10];
|
|
49
|
+
let at = 13;
|
|
50
|
+
let global: Uint8Array | null = null;
|
|
51
|
+
if (packed & 0x80) {
|
|
52
|
+
const size = 3 * (1 << ((packed & 7) + 1));
|
|
53
|
+
global = bytes.subarray(at, at + size);
|
|
54
|
+
at += size;
|
|
55
|
+
}
|
|
56
|
+
const data = new Uint8Array(width * height * 4);
|
|
57
|
+
let transparent = -1;
|
|
58
|
+
|
|
59
|
+
while (at < bytes.length) {
|
|
60
|
+
const block = bytes[at++];
|
|
61
|
+
if (block === 0x3b) break; // the trailer
|
|
62
|
+
if (block === 0x21) {
|
|
63
|
+
// an extension: a Graphic Control one says which colour is not drawn
|
|
64
|
+
const label = bytes[at++];
|
|
65
|
+
if (label === 0xf9 && bytes[at] >= 4) {
|
|
66
|
+
const flags = bytes[at + 1];
|
|
67
|
+
transparent = flags & 1 ? bytes[at + 4] : -1;
|
|
68
|
+
}
|
|
69
|
+
at = skipSubBlocks(bytes, at);
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (block !== 0x2c) return null; // neither: not a GIF this can read
|
|
73
|
+
if (at + 9 > bytes.length) return null;
|
|
74
|
+
const left = bytes[at] | (bytes[at + 1] << 8);
|
|
75
|
+
const top = bytes[at + 2] | (bytes[at + 3] << 8);
|
|
76
|
+
const frameWidth = bytes[at + 4] | (bytes[at + 5] << 8);
|
|
77
|
+
const frameHeight = bytes[at + 6] | (bytes[at + 7] << 8);
|
|
78
|
+
const flags = bytes[at + 8];
|
|
79
|
+
at += 9;
|
|
80
|
+
let palette = global;
|
|
81
|
+
if (flags & 0x80) {
|
|
82
|
+
const size = 3 * (1 << ((flags & 7) + 1));
|
|
83
|
+
palette = bytes.subarray(at, at + size);
|
|
84
|
+
at += size;
|
|
85
|
+
}
|
|
86
|
+
if (!palette || frameWidth * frameHeight > MAX_PIXELS) return null;
|
|
87
|
+
const minCodeSize = bytes[at++];
|
|
88
|
+
if (minCodeSize < 2 || minCodeSize > 11) return null;
|
|
89
|
+
const indices = lzw(bytes, at, minCodeSize, frameWidth * frameHeight);
|
|
90
|
+
const interlaced = (flags & 0x40) !== 0;
|
|
91
|
+
for (let row = 0; row < frameHeight; row += 1) {
|
|
92
|
+
const y = top + (interlaced ? interlacedRow(row, frameHeight) : row);
|
|
93
|
+
if (y >= height) continue;
|
|
94
|
+
for (let col = 0; col < frameWidth; col += 1) {
|
|
95
|
+
const x = left + col;
|
|
96
|
+
if (x >= width) continue;
|
|
97
|
+
const index = indices[row * frameWidth + col];
|
|
98
|
+
if (index === transparent || index * 3 + 2 >= palette.length) continue;
|
|
99
|
+
const o = (y * width + x) * 4;
|
|
100
|
+
data[o] = palette[index * 3];
|
|
101
|
+
data[o + 1] = palette[index * 3 + 1];
|
|
102
|
+
data[o + 2] = palette[index * 3 + 2];
|
|
103
|
+
data[o + 3] = 255;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return { width, height, data };
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/** Past a run of data sub-blocks: each a length byte and that many bytes,
|
|
112
|
+
* ended by an empty one. */
|
|
113
|
+
function skipSubBlocks(bytes: Uint8Array, at: number): number {
|
|
114
|
+
while (at < bytes.length) {
|
|
115
|
+
const size = bytes[at++];
|
|
116
|
+
if (size === 0) break;
|
|
117
|
+
at += size;
|
|
118
|
+
}
|
|
119
|
+
return at;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/** Which row of the frame an interlaced image's `n`th stored row is: every
|
|
123
|
+
* eighth from 0, every eighth from 4, every fourth from 2, every second
|
|
124
|
+
* from 1. */
|
|
125
|
+
function interlacedRow(n: number, height: number): number {
|
|
126
|
+
const passes: [number, number][] = [
|
|
127
|
+
[0, 8],
|
|
128
|
+
[4, 8],
|
|
129
|
+
[2, 4],
|
|
130
|
+
[1, 2],
|
|
131
|
+
];
|
|
132
|
+
for (const [start, step] of passes) {
|
|
133
|
+
const rows = Math.ceil(Math.max(0, height - start) / step);
|
|
134
|
+
if (n < rows) return start + n * step;
|
|
135
|
+
n -= rows;
|
|
136
|
+
}
|
|
137
|
+
return height;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The colour indices of one frame, from its LZW data (GIF89a, Appendix F):
|
|
142
|
+
* variable-width codes, least significant bit first, across data sub-blocks,
|
|
143
|
+
* starting a code wider than the palette's and growing to twelve bits. A
|
|
144
|
+
* frame whose data ends early has the rest of its indices 0, which the
|
|
145
|
+
* caller never reaches past the pixels it has — they are left transparent
|
|
146
|
+
* only when the frame said the colour 0 was.
|
|
147
|
+
*/
|
|
148
|
+
function lzw(
|
|
149
|
+
bytes: Uint8Array,
|
|
150
|
+
at: number,
|
|
151
|
+
minCodeSize: number,
|
|
152
|
+
pixels: number,
|
|
153
|
+
): Uint8Array {
|
|
154
|
+
const out = new Uint8Array(pixels);
|
|
155
|
+
const clear = 1 << minCodeSize;
|
|
156
|
+
const end = clear + 1;
|
|
157
|
+
const prefix = new Uint16Array(4096);
|
|
158
|
+
const suffix = new Uint8Array(4096);
|
|
159
|
+
const stack = new Uint8Array(4097);
|
|
160
|
+
for (let i = 0; i < clear; i += 1) suffix[i] = i;
|
|
161
|
+
|
|
162
|
+
let size = minCodeSize + 1;
|
|
163
|
+
let mask = (1 << size) - 1;
|
|
164
|
+
let next = clear + 2;
|
|
165
|
+
let previous = -1;
|
|
166
|
+
let first = 0;
|
|
167
|
+
let written = 0;
|
|
168
|
+
|
|
169
|
+
// the bit reader, over the sub-blocks
|
|
170
|
+
let block = 0;
|
|
171
|
+
let bits = 0;
|
|
172
|
+
let count = 0;
|
|
173
|
+
|
|
174
|
+
while (written < pixels) {
|
|
175
|
+
while (count < size) {
|
|
176
|
+
if (block === 0) {
|
|
177
|
+
if (at >= bytes.length) return out;
|
|
178
|
+
block = bytes[at++];
|
|
179
|
+
if (block === 0) return out;
|
|
180
|
+
}
|
|
181
|
+
if (at >= bytes.length) return out;
|
|
182
|
+
bits |= bytes[at++] << count;
|
|
183
|
+
count += 8;
|
|
184
|
+
block -= 1;
|
|
185
|
+
}
|
|
186
|
+
let code = bits & mask;
|
|
187
|
+
bits >>>= size;
|
|
188
|
+
count -= size;
|
|
189
|
+
|
|
190
|
+
if (code === clear) {
|
|
191
|
+
size = minCodeSize + 1;
|
|
192
|
+
mask = (1 << size) - 1;
|
|
193
|
+
next = clear + 2;
|
|
194
|
+
previous = -1;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
if (code === end) break;
|
|
198
|
+
if (previous === -1) {
|
|
199
|
+
if (code >= clear) break; // a first code that is no colour: corrupt
|
|
200
|
+
out[written++] = code;
|
|
201
|
+
previous = code;
|
|
202
|
+
first = code;
|
|
203
|
+
continue;
|
|
204
|
+
}
|
|
205
|
+
const incoming = code;
|
|
206
|
+
let top = 0;
|
|
207
|
+
if (code >= next) {
|
|
208
|
+
// the code being defined by this very step: the previous string and
|
|
209
|
+
// its own first character (the "KwKwK" case)
|
|
210
|
+
if (code > next) break;
|
|
211
|
+
stack[top++] = first;
|
|
212
|
+
code = previous;
|
|
213
|
+
}
|
|
214
|
+
while (code >= clear) {
|
|
215
|
+
stack[top++] = suffix[code];
|
|
216
|
+
code = prefix[code];
|
|
217
|
+
}
|
|
218
|
+
first = code;
|
|
219
|
+
stack[top++] = first;
|
|
220
|
+
if (next < 4096) {
|
|
221
|
+
prefix[next] = previous;
|
|
222
|
+
suffix[next] = first;
|
|
223
|
+
next += 1;
|
|
224
|
+
if ((next & mask) === 0 && next < 4096) {
|
|
225
|
+
size += 1;
|
|
226
|
+
mask = (1 << size) - 1;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
previous = incoming;
|
|
230
|
+
while (top > 0 && written < pixels) out[written++] = stack[--top];
|
|
231
|
+
}
|
|
232
|
+
return out;
|
|
233
|
+
}
|
package/src/html/index.ts
CHANGED
|
@@ -22,15 +22,16 @@ import {
|
|
|
22
22
|
Select,
|
|
23
23
|
useTheme,
|
|
24
24
|
} from 'react-x11';
|
|
25
|
-
import type { DrawnNode, MouseEvent as X11MouseEvent } from 'react-x11';
|
|
25
|
+
import type { DrawnNode, MouseEvent as X11MouseEvent, Rect } from 'react-x11';
|
|
26
26
|
import { tint } from 'react-x11/style';
|
|
27
27
|
import type { Style } from 'react-x11/style';
|
|
28
28
|
|
|
29
29
|
import type {} from 'react-x11/jsx-runtime';
|
|
30
30
|
|
|
31
31
|
import { useLinkClicks, useSelectionMenu } from '../richtext/index.js';
|
|
32
|
+
import { useFontPrewarm } from '../internal/prewarm.js';
|
|
32
33
|
import { hx } from './hx.js';
|
|
33
|
-
import { attr } from './dom.js';
|
|
34
|
+
import { attr, tagOf } from './dom.js';
|
|
34
35
|
import type { Document, Element } from './dom.js';
|
|
35
36
|
import { ELEMENT, HtmlViewNode, registerHtmlView } from './node.js';
|
|
36
37
|
import type { HtmlViewProps, ScriptRequest } from './node.js';
|
|
@@ -41,7 +42,7 @@ import {
|
|
|
41
42
|
selectedOption,
|
|
42
43
|
textareaValue,
|
|
43
44
|
} from './controls.js';
|
|
44
|
-
import type { ControlRect } from './controls.js';
|
|
45
|
+
import type { BareField, ControlRect } from './controls.js';
|
|
45
46
|
import type { ResourceRequest, ResourceResult } from './resources.js';
|
|
46
47
|
|
|
47
48
|
export {
|
|
@@ -51,7 +52,7 @@ export {
|
|
|
51
52
|
} from './node.js';
|
|
52
53
|
export type { HtmlViewProps, ScriptRequest } from './node.js';
|
|
53
54
|
export type { ResourceRequest, ResourceResult } from './resources.js';
|
|
54
|
-
export type { ControlRect } from './controls.js';
|
|
55
|
+
export type { BareField, ControlRect } from './controls.js';
|
|
55
56
|
export type { ComputedStyle, RootLook } from './css/style.js';
|
|
56
57
|
export type {
|
|
57
58
|
AnyNode,
|
|
@@ -97,15 +98,37 @@ export interface HtmlProps {
|
|
|
97
98
|
selectable?: boolean;
|
|
98
99
|
/** Extra author stylesheets, applied after the document's own. */
|
|
99
100
|
stylesheet?: string | string[];
|
|
101
|
+
/**
|
|
102
|
+
* The encoding the host decoded `source` from, as a label (`'shift_jis'`,
|
|
103
|
+
* `'windows-1251'`). A stylesheet `onResource` hands over as bytes, with no
|
|
104
|
+
* byte order mark, charset or `@charset` of its own, is decoded with it, as
|
|
105
|
+
* CSS says a sheet is in its document's encoding. Default UTF-8.
|
|
106
|
+
*/
|
|
107
|
+
charset?: string;
|
|
108
|
+
/**
|
|
109
|
+
* The URL the document came from. Given one — or a document with an
|
|
110
|
+
* absolute `<base href>` — every URL the document names reaches
|
|
111
|
+
* `onResource` and `onLink` absolute: resolved against its `<base href>`
|
|
112
|
+
* or this, and a `url()` in a linked stylesheet against the stylesheet's
|
|
113
|
+
* own URL, as a browser resolves it. Absent, URLs are handed over as the
|
|
114
|
+
* document wrote them.
|
|
115
|
+
*
|
|
116
|
+
* Nothing is fetched because of it: it says where relative URLs point,
|
|
117
|
+
* and `onResource` still decides whether anything goes there.
|
|
118
|
+
*/
|
|
119
|
+
baseUrl?: string | null;
|
|
100
120
|
/**
|
|
101
121
|
* An external resource is wanted — an `<img src>`, a `<link rel=stylesheet>`
|
|
102
|
-
* or an `@import
|
|
103
|
-
* `null` to
|
|
122
|
+
* or an `@import`, or a font an `@font-face` declares and the document
|
|
123
|
+
* uses. Return the bytes or the text, or a promise of them, or `null` to
|
|
124
|
+
* decline. A stylesheet's bytes are decoded as CSS says, from the
|
|
125
|
+
* `charset` the protocol named, if the host passes it on, and its `url`,
|
|
126
|
+
* if the host passes that, is where it came from after redirects.
|
|
104
127
|
*
|
|
105
128
|
* **Absent, nothing loads.** This component has no network and no
|
|
106
|
-
* filesystem of its own; images render as a frame
|
|
107
|
-
*
|
|
108
|
-
* whether this document is trusted.
|
|
129
|
+
* filesystem of its own; images render as a frame, linked stylesheets are
|
|
130
|
+
* skipped and text is set in the fonts the system has. The host is the one
|
|
131
|
+
* that knows its cache, its proxy and whether this document is trusted.
|
|
109
132
|
*/
|
|
110
133
|
onResource?: (
|
|
111
134
|
request: ResourceRequest,
|
|
@@ -118,15 +141,17 @@ export interface HtmlProps {
|
|
|
118
141
|
onScript?: (script: ScriptRequest) => void;
|
|
119
142
|
/**
|
|
120
143
|
* A link was activated. Absent means clicks do nothing: this component
|
|
121
|
-
* never navigates by itself.
|
|
144
|
+
* never navigates by itself. The `href` is resolved against the
|
|
145
|
+
* document's base where it has one (`baseUrl`), and as written where not.
|
|
122
146
|
*/
|
|
123
147
|
onLink?: (href: string, ev: X11MouseEvent<DrawnNode>) => void;
|
|
124
148
|
/** The parsed document, each time it is re-parsed — the DOM handle. */
|
|
125
149
|
onDocument?: (document: Document) => void;
|
|
126
150
|
/**
|
|
127
|
-
* A form control changed
|
|
128
|
-
*
|
|
129
|
-
*
|
|
151
|
+
* A form control changed, or a `<button>` was pressed — reported with its
|
|
152
|
+
* `value`. The element is the one in the DOM, so a handler that wants to
|
|
153
|
+
* keep the value writes it back with `setAttribute`-shaped mutation and
|
|
154
|
+
* calls the handle's `refresh()`.
|
|
130
155
|
*/
|
|
131
156
|
onControlChange?: (element: Element, value: string | boolean) => void;
|
|
132
157
|
/** Base text style. Defaults: theme `fontSize` (14), `sans-serif`. */
|
|
@@ -165,8 +190,23 @@ export interface HtmlHandle {
|
|
|
165
190
|
refresh(): void;
|
|
166
191
|
/** The element under a point, in the window's coordinates. */
|
|
167
192
|
elementAt(x: number, y: number): Element | null;
|
|
193
|
+
/** The link under a point, in the window's coordinates — resolved, as
|
|
194
|
+
* `onLink` is handed one — for a status bar, or a menu on a link. */
|
|
195
|
+
hrefAt(x: number, y: number): string | null;
|
|
196
|
+
/**
|
|
197
|
+
* Where an element is, in logical pixels from the document's top left:
|
|
198
|
+
* the space the offset of a box scrolling the document is in, so a link
|
|
199
|
+
* to `#section` is `scroller.scrollTo({ y: handle.elementRect(el).y })`.
|
|
200
|
+
* A block's border box; an inline element's across its fragments, padding
|
|
201
|
+
* and border included, as `getBoundingClientRect` measures it, and as
|
|
202
|
+
* tall as its lines. Null for an element with no box.
|
|
203
|
+
*/
|
|
204
|
+
elementRect(element: Element): Rect | null;
|
|
168
205
|
/** The document's `<title>`, if it had one. */
|
|
169
206
|
readonly title: string | null;
|
|
207
|
+
/** The URL the document's relative URLs resolve against — its
|
|
208
|
+
* `<base href>`, or `baseUrl` — or null where it has none. */
|
|
209
|
+
readonly base: string | null;
|
|
170
210
|
}
|
|
171
211
|
|
|
172
212
|
// --- the look ---------------------------------------------------------------
|
|
@@ -193,6 +233,30 @@ function deriveLook(
|
|
|
193
233
|
};
|
|
194
234
|
}
|
|
195
235
|
|
|
236
|
+
/** What a document sets in the code face: the elements the UA sheet puts in
|
|
237
|
+
* it, and a style sheet that names `monospace`, in either case. */
|
|
238
|
+
const CODE_MARKUP = /<(?:code|pre|kbd|samp|tt|listing|xmp)\b|monospace/i;
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* The code face, once the source holds code, and null before. A source that
|
|
242
|
+
* grows is read once, from a little before where it was last read to find a
|
|
243
|
+
* name a chunk split, so a document streamed in thousands of pieces is not
|
|
244
|
+
* read again at each one; a source that does not start with the last is
|
|
245
|
+
* read whole. Once found, found: warming a face twice warms nothing.
|
|
246
|
+
*/
|
|
247
|
+
function useCodeFamily(source: string, family: string): string | null {
|
|
248
|
+
const read = React.useRef({ source: '', found: false });
|
|
249
|
+
const seen = read.current;
|
|
250
|
+
if (!seen.found && source !== seen.source) {
|
|
251
|
+
const from = source.startsWith(seen.source)
|
|
252
|
+
? Math.max(0, seen.source.length - 'monospace'.length)
|
|
253
|
+
: 0;
|
|
254
|
+
seen.found = CODE_MARKUP.test(from ? source.slice(from) : source);
|
|
255
|
+
seen.source = source;
|
|
256
|
+
}
|
|
257
|
+
return seen.found ? family : null;
|
|
258
|
+
}
|
|
259
|
+
|
|
196
260
|
// --- the component ----------------------------------------------------------
|
|
197
261
|
|
|
198
262
|
/**
|
|
@@ -214,6 +278,8 @@ export function Html(props: HtmlProps): ReactElement {
|
|
|
214
278
|
partial = true,
|
|
215
279
|
selectable = true,
|
|
216
280
|
stylesheet,
|
|
281
|
+
charset,
|
|
282
|
+
baseUrl,
|
|
217
283
|
onLink,
|
|
218
284
|
onResource,
|
|
219
285
|
onScript,
|
|
@@ -224,12 +290,17 @@ export function Html(props: HtmlProps): ReactElement {
|
|
|
224
290
|
|
|
225
291
|
const theme = useTheme() as unknown as Record<string, unknown>;
|
|
226
292
|
const links = useLinkClicks(onLink);
|
|
293
|
+
const buttons = useButtonPresses(onControlChange);
|
|
227
294
|
const menu = useSelectionMenu(selectable);
|
|
228
295
|
|
|
229
296
|
const look = React.useMemo(
|
|
230
297
|
() => deriveLook(theme, props),
|
|
231
298
|
[theme, props.fontSize, props.fontFamily, props.monoFamily],
|
|
232
299
|
);
|
|
300
|
+
// a document with code in it sets that code in the mono family, and its
|
|
301
|
+
// render is the head start its first layout would otherwise wait on the
|
|
302
|
+
// system's font matcher for (`useFontPrewarm`)
|
|
303
|
+
useFontPrewarm(useCodeFamily(source, look.monoFamily));
|
|
233
304
|
|
|
234
305
|
const documentRef = React.useRef<Document | null>(null);
|
|
235
306
|
const [controls, setControls] = React.useState<ControlRect[]>([]);
|
|
@@ -258,6 +329,8 @@ export function Html(props: HtmlProps): ReactElement {
|
|
|
258
329
|
source,
|
|
259
330
|
complete: !partial,
|
|
260
331
|
stylesheet,
|
|
332
|
+
charset,
|
|
333
|
+
baseUrl,
|
|
261
334
|
look,
|
|
262
335
|
selectionColor,
|
|
263
336
|
onResource,
|
|
@@ -266,7 +339,9 @@ export function Html(props: HtmlProps): ReactElement {
|
|
|
266
339
|
onControls: handleControls,
|
|
267
340
|
domRevision,
|
|
268
341
|
ref: props.ref as React.Ref<unknown>,
|
|
269
|
-
|
|
342
|
+
// grown with the component, where an application grows it: the root's
|
|
343
|
+
// background covers the whole of it, as a page's covers the window
|
|
344
|
+
style: { alignSelf: 'stretch', flexGrow: 1 },
|
|
270
345
|
};
|
|
271
346
|
|
|
272
347
|
const children: ReactNode[] = [
|
|
@@ -297,6 +372,14 @@ export function Html(props: HtmlProps): ReactElement {
|
|
|
297
372
|
selectable,
|
|
298
373
|
selectionColor: props.selectionColor,
|
|
299
374
|
...links,
|
|
375
|
+
onMouseDown: (ev: X11MouseEvent<DrawnNode>) => {
|
|
376
|
+
links.onMouseDown(ev);
|
|
377
|
+
buttons.onMouseDown(ev);
|
|
378
|
+
},
|
|
379
|
+
onMouseUp: (ev: X11MouseEvent<DrawnNode>) => {
|
|
380
|
+
links.onMouseUp(ev);
|
|
381
|
+
buttons.onMouseUp(ev);
|
|
382
|
+
},
|
|
300
383
|
...menu,
|
|
301
384
|
'data-testname': props['data-testname'],
|
|
302
385
|
} as Record<string, unknown>,
|
|
@@ -327,17 +410,72 @@ export function useHtmlHandle(): HtmlHandle & { ref: React.Ref<unknown> } {
|
|
|
327
410
|
get title() {
|
|
328
411
|
return nodeRef.current?.title ?? null;
|
|
329
412
|
},
|
|
413
|
+
get base() {
|
|
414
|
+
return nodeRef.current?.documentBase ?? null;
|
|
415
|
+
},
|
|
330
416
|
refresh: () => {
|
|
331
417
|
nodeRef.current?.touchDocument();
|
|
332
418
|
force();
|
|
333
419
|
},
|
|
334
420
|
elementAt: (x: number, y: number) =>
|
|
335
421
|
nodeRef.current?.elementAtPoint(x, y) ?? null,
|
|
422
|
+
hrefAt: (x: number, y: number) =>
|
|
423
|
+
nodeRef.current?.hrefAtPoint(x, y) ?? null,
|
|
424
|
+
elementRect: (element: Element) =>
|
|
425
|
+
nodeRef.current?.elementRect(element) ?? null,
|
|
336
426
|
}),
|
|
337
427
|
[],
|
|
338
428
|
);
|
|
339
429
|
}
|
|
340
430
|
|
|
431
|
+
/**
|
|
432
|
+
* A press and a release on the same `<button>` the document draws, reported
|
|
433
|
+
* as a pressed widget reports one: `onControlChange` with the button and its
|
|
434
|
+
* `value`. A `<button>` is laid out and drawn like any box (the UA sheet's
|
|
435
|
+
* `button` rule) — its content is the page's, and most of the buttons on
|
|
436
|
+
* the web are an icon or a pill of a page's own design — so it is the
|
|
437
|
+
* element that finds out it was pressed, not a widget. A disabled one, or
|
|
438
|
+
* a press that lands in a link inside one, is not a press of it.
|
|
439
|
+
*/
|
|
440
|
+
function useButtonPresses(onControlChange: HtmlProps['onControlChange']): {
|
|
441
|
+
onMouseDown: (ev: X11MouseEvent<DrawnNode>) => void;
|
|
442
|
+
onMouseUp: (ev: X11MouseEvent<DrawnNode>) => void;
|
|
443
|
+
} {
|
|
444
|
+
const press = React.useRef<Element | null>(null);
|
|
445
|
+
const buttonAt = (ev: X11MouseEvent<DrawnNode>): Element | null => {
|
|
446
|
+
const target = ev.target as {
|
|
447
|
+
elementAtPoint?: (x: number, y: number) => Element | null;
|
|
448
|
+
} | null;
|
|
449
|
+
let node =
|
|
450
|
+
typeof target?.elementAtPoint === 'function'
|
|
451
|
+
? target.elementAtPoint(ev.x, ev.y)
|
|
452
|
+
: null;
|
|
453
|
+
for (
|
|
454
|
+
;
|
|
455
|
+
node;
|
|
456
|
+
node = node.parent?.type === 'tag' ? (node.parent as Element) : null
|
|
457
|
+
) {
|
|
458
|
+
if (tagOf(node) === 'a' && attr(node, 'href') !== undefined) return null;
|
|
459
|
+
if (tagOf(node) === 'button') {
|
|
460
|
+
return attr(node, 'disabled') === undefined ? node : null;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
return null;
|
|
464
|
+
};
|
|
465
|
+
return {
|
|
466
|
+
onMouseDown: (ev) => {
|
|
467
|
+
press.current = onControlChange && ev.button === 1 ? buttonAt(ev) : null;
|
|
468
|
+
},
|
|
469
|
+
onMouseUp: (ev) => {
|
|
470
|
+
const pressed = press.current;
|
|
471
|
+
press.current = null;
|
|
472
|
+
if (!pressed || !onControlChange || ev.button !== 1) return;
|
|
473
|
+
if (buttonAt(ev) !== pressed) return;
|
|
474
|
+
onControlChange(pressed, attr(pressed, 'value') ?? '');
|
|
475
|
+
},
|
|
476
|
+
};
|
|
477
|
+
}
|
|
478
|
+
|
|
341
479
|
// --- the widgets ------------------------------------------------------------
|
|
342
480
|
|
|
343
481
|
/**
|
|
@@ -359,13 +497,16 @@ function renderControl(
|
|
|
359
497
|
const key = `${rect.kind}:${rect.x},${rect.y}`;
|
|
360
498
|
const disabled = attr(el, 'disabled') !== undefined;
|
|
361
499
|
const readOnly = attr(el, 'readonly') !== undefined;
|
|
500
|
+
// a field whose box the document draws takes its content box
|
|
501
|
+
const at = rect.bare ?? rect;
|
|
362
502
|
const frame: Style = {
|
|
363
503
|
position: 'absolute',
|
|
364
|
-
left: Math.round(
|
|
365
|
-
top: Math.round(
|
|
366
|
-
width: Math.round(
|
|
367
|
-
height: Math.round(
|
|
504
|
+
left: Math.round(at.x),
|
|
505
|
+
top: Math.round(at.y),
|
|
506
|
+
width: Math.round(at.width),
|
|
507
|
+
height: Math.round(at.height),
|
|
368
508
|
};
|
|
509
|
+
const field = rect.bare ? bareField(rect.bare) : fieldChrome(look);
|
|
369
510
|
const report = (value: string | boolean): void => {
|
|
370
511
|
onChange?.(el, value);
|
|
371
512
|
touch();
|
|
@@ -444,7 +585,7 @@ function renderControl(
|
|
|
444
585
|
// with whatever was last echoed into the DOM.
|
|
445
586
|
widget = hx('textarea', {
|
|
446
587
|
defaultValue: textareaValue(el),
|
|
447
|
-
style: [
|
|
588
|
+
style: [field, { width: '100%', height: '100%' }],
|
|
448
589
|
onChange: readOnly ? undefined : (ev) => reportText(ev.value),
|
|
449
590
|
});
|
|
450
591
|
break;
|
|
@@ -456,7 +597,7 @@ function renderControl(
|
|
|
456
597
|
// Core's word for a password field: nothing in it reaches a
|
|
457
598
|
// selection, PRIMARY included.
|
|
458
599
|
sensitive: type === 'password',
|
|
459
|
-
style: [
|
|
600
|
+
style: [field, { width: '100%', height: '100%' }],
|
|
460
601
|
onChange: readOnly
|
|
461
602
|
? undefined
|
|
462
603
|
: (ev) => {
|
|
@@ -495,6 +636,25 @@ function fieldChrome(look: RootLook): Style {
|
|
|
495
636
|
};
|
|
496
637
|
}
|
|
497
638
|
|
|
639
|
+
/**
|
|
640
|
+
* A text field whose box the author styled: the document draws the border
|
|
641
|
+
* and the background, so the widget draws neither, and its text is the
|
|
642
|
+
* element's colour and font, which the author chose to go on that
|
|
643
|
+
* background, rather than the theme's.
|
|
644
|
+
*/
|
|
645
|
+
function bareField(bare: BareField): Style {
|
|
646
|
+
return {
|
|
647
|
+
backgroundColor: 'transparent',
|
|
648
|
+
borderWidth: 0,
|
|
649
|
+
borderRadius: 0,
|
|
650
|
+
paddingLeft: 0,
|
|
651
|
+
paddingRight: 0,
|
|
652
|
+
color: bare.color,
|
|
653
|
+
fontFamily: bare.fontFamily,
|
|
654
|
+
fontSize: bare.fontSize,
|
|
655
|
+
};
|
|
656
|
+
}
|
|
657
|
+
|
|
498
658
|
function clearRadioGroup(el: Element): void {
|
|
499
659
|
const name = attr(el, 'name');
|
|
500
660
|
if (!name) return;
|