@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
|
@@ -0,0 +1,755 @@
|
|
|
1
|
+
import * as ntk from 'react-x11/ntk';
|
|
2
|
+
|
|
3
|
+
// CSS Color 4's functional colours: read here, and written back in the one
|
|
4
|
+
// form every drawing context reads — `#rrggbb`, or `rgba(r, g, b, a)` with
|
|
5
|
+
// channels from 0 to 255.
|
|
6
|
+
//
|
|
7
|
+
// They used to be handed to the context as written, since ntk's context
|
|
8
|
+
// parses a CSS colour for `fillStyle` itself. It reads less than CSS has: the
|
|
9
|
+
// comma forms of `rgb()` and `hsl()` and nothing else — no space-separated
|
|
10
|
+
// `rgb(59 130 246 / 1)`, which Tailwind 3's utilities are written in, no
|
|
11
|
+
// `oklch()`, which Tailwind 4's palette is, no `lab()`, `hwb()` or `color()`
|
|
12
|
+
// — and it read `rgb()`'s percentages as numbers from 0 to 255, so
|
|
13
|
+
// `rgb(0%, 50%, 0%)` was nearly black. Reading the value here also leaves a
|
|
14
|
+
// document one reading of a colour on both backends.
|
|
15
|
+
//
|
|
16
|
+
// A colour outside sRGB is clipped into it channel by channel, which is what
|
|
17
|
+
// an sRGB drawing context can show.
|
|
18
|
+
|
|
19
|
+
/** The value of a colour function, or null where it is not one. */
|
|
20
|
+
export function functionalColor(value: string): string | null {
|
|
21
|
+
let hit = CACHE.get(value);
|
|
22
|
+
if (hit === undefined) {
|
|
23
|
+
hit = readFunction(value);
|
|
24
|
+
// a document repeats its colours, a utility stylesheet most of all
|
|
25
|
+
if (CACHE.size >= 1024) CACHE.clear();
|
|
26
|
+
CACHE.set(value, hit);
|
|
27
|
+
}
|
|
28
|
+
return hit;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const CACHE = new Map<string, string | null>();
|
|
32
|
+
|
|
33
|
+
type Unit = '' | '%' | 'deg' | 'grad' | 'rad' | 'turn' | 'none';
|
|
34
|
+
|
|
35
|
+
interface Component {
|
|
36
|
+
value: number;
|
|
37
|
+
unit: Unit;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const NUMBER = /^([+-]?(?:\d*\.\d+|\d+)(?:e[+-]?\d+)?)(%|deg|grad|rad|turn)?$/i;
|
|
41
|
+
|
|
42
|
+
function component(token: string): Component | null {
|
|
43
|
+
if (token.toLowerCase() === 'none') return { value: 0, unit: 'none' };
|
|
44
|
+
const m = NUMBER.exec(token);
|
|
45
|
+
if (!m) return null;
|
|
46
|
+
return {
|
|
47
|
+
value: parseFloat(m[1]),
|
|
48
|
+
unit: (m[2] ?? '').toLowerCase() as Unit,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function readFunction(value: string): string | null {
|
|
53
|
+
const colour = readRgbaFunction(value);
|
|
54
|
+
return colour ? serialize(colour.rgb, colour.a) : null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* The two shades a 3D border style paints in (`groove`, `ridge`, `inset`,
|
|
59
|
+
* `outset`), as Chromium shades them: the shadowed sides the colour
|
|
60
|
+
* darkened — its brightest channel down by a third — and the lit sides the
|
|
61
|
+
* colour itself; but where darkening leaves black, the colour is the
|
|
62
|
+
* shadow and the lit sides are lightened instead, so a black groove is
|
|
63
|
+
* black against #545454 rather than black against black. Null for a
|
|
64
|
+
* colour this cannot read, `currentColor` resolved first.
|
|
65
|
+
*/
|
|
66
|
+
export function borderShades(
|
|
67
|
+
color: string,
|
|
68
|
+
): { lit: string; shadowed: string } | null {
|
|
69
|
+
const read = readRgba(color);
|
|
70
|
+
if (!read) return null;
|
|
71
|
+
const { rgb, a } = read;
|
|
72
|
+
const v = Math.max(rgb[0], rgb[1], rgb[2]);
|
|
73
|
+
const dark = v > 0.33 ? (v - 0.33) / v : 0;
|
|
74
|
+
const css = (c: Triple) =>
|
|
75
|
+
`rgba(${c.map((n) => Math.round(Math.min(1, Math.max(0, n)) * 255)).join(', ')}, ${a})`;
|
|
76
|
+
if (dark > 0) return { lit: css(rgb), shadowed: css(scaled(rgb, dark)) };
|
|
77
|
+
const light =
|
|
78
|
+
v === 0
|
|
79
|
+
? ([0.33, 0.33, 0.33] as Triple)
|
|
80
|
+
: scaled(rgb, Math.min(1, v + 0.33) / v);
|
|
81
|
+
return { lit: css(light), shadowed: css(rgb) };
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* The colour a fraction `t` of the way from `a` to `b`, premultiplied, as a
|
|
86
|
+
* gradient interpolates between two stops (CSS Images 4, 3.4.3): so a
|
|
87
|
+
* transparent stop lends its alpha and not its colour. Null for a colour
|
|
88
|
+
* this cannot read.
|
|
89
|
+
*/
|
|
90
|
+
export function blend(a: string, b: string, t: number): string | null {
|
|
91
|
+
const x = readRgba(a);
|
|
92
|
+
const y = readRgba(b);
|
|
93
|
+
if (!x || !y) return null;
|
|
94
|
+
const alpha = x.a + (y.a - x.a) * t;
|
|
95
|
+
if (!(alpha > 0)) return 'transparent';
|
|
96
|
+
const rgb = [0, 1, 2].map(
|
|
97
|
+
(i) => (x.rgb[i] * x.a + (y.rgb[i] * y.a - x.rgb[i] * x.a) * t) / alpha,
|
|
98
|
+
) as Triple;
|
|
99
|
+
return serialize(rgb, alpha);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function scaled(c: Triple, k: number): Triple {
|
|
103
|
+
return [c[0] * k, c[1] * k, c[2] * k];
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** A colour as gamma-encoded sRGB, unclipped, and its alpha. */
|
|
107
|
+
interface Rgba {
|
|
108
|
+
rgb: Triple;
|
|
109
|
+
a: number;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/** Any colour but `currentColor`, as numbers: what `color-mix()` mixes. */
|
|
113
|
+
function readRgba(value: string): Rgba | null {
|
|
114
|
+
const v = value.trim();
|
|
115
|
+
const lower = v.toLowerCase();
|
|
116
|
+
if (lower === 'transparent') return { rgb: [0, 0, 0], a: 0 };
|
|
117
|
+
if (v.startsWith('#')) return readHex(v);
|
|
118
|
+
if (v.includes('(')) return readRgbaFunction(v);
|
|
119
|
+
const named = cssColorStraight?.(lower);
|
|
120
|
+
if (!Array.isArray(named) || named.length < 3) return null;
|
|
121
|
+
return {
|
|
122
|
+
rgb: [named[0], named[1], named[2]],
|
|
123
|
+
a: named.length > 3 ? named[3] : 1,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function readHex(v: string): Rgba | null {
|
|
128
|
+
const hex = v.slice(1);
|
|
129
|
+
if (!/^(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(hex)) return null;
|
|
130
|
+
const long = hex.length <= 4 ? [...hex].map((c) => c + c).join('') : hex;
|
|
131
|
+
const byte = (i: number) => parseInt(long.slice(i * 2, i * 2 + 2), 16) / 255;
|
|
132
|
+
return {
|
|
133
|
+
rgb: [byte(0), byte(1), byte(2)],
|
|
134
|
+
a: long.length === 8 ? byte(3) : 1,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/** ntk's reading of a named colour. It is on ntk's entry point but not in
|
|
139
|
+
* react-x11/ntk's declarations, so it is probed. */
|
|
140
|
+
const cssColorStraight = (
|
|
141
|
+
ntk as unknown as { cssColorStraight?: (value: string) => unknown }
|
|
142
|
+
).cssColorStraight as ((value: string) => number[] | null) | undefined;
|
|
143
|
+
|
|
144
|
+
function readRgbaFunction(value: string): Rgba | null {
|
|
145
|
+
const open = value.indexOf('(');
|
|
146
|
+
if (open < 0) return null;
|
|
147
|
+
const name = value.slice(0, open).toLowerCase();
|
|
148
|
+
let body = value.slice(open + 1);
|
|
149
|
+
// the end of a style sheet closes whatever is still open (CSS 2.1 4.2):
|
|
150
|
+
// `rgb(0, 128, 0` as a sheet's last words is green
|
|
151
|
+
if (body.endsWith(')')) body = body.slice(0, -1);
|
|
152
|
+
if (name === 'color-mix') return mix(body);
|
|
153
|
+
// `calc()`, `var()`, a relative colour's channel keywords: not read here,
|
|
154
|
+
// and a declaration this cannot read is dropped
|
|
155
|
+
if (body.includes('(') || body.includes(')')) return null;
|
|
156
|
+
|
|
157
|
+
let channels: Component[];
|
|
158
|
+
let alpha: Component | null = null;
|
|
159
|
+
let space = '';
|
|
160
|
+
if (body.includes(',')) {
|
|
161
|
+
// the legacy comma form, which only these four have
|
|
162
|
+
if (!LEGACY.has(name)) return null;
|
|
163
|
+
const parts = body.split(',');
|
|
164
|
+
if (parts.length !== 3 && parts.length !== 4) return null;
|
|
165
|
+
const read: Component[] = [];
|
|
166
|
+
for (const part of parts) {
|
|
167
|
+
const token = part.trim();
|
|
168
|
+
if (!token || /\s/.test(token)) return null;
|
|
169
|
+
const c = component(token);
|
|
170
|
+
if (!c || c.unit === 'none') return null;
|
|
171
|
+
read.push(c);
|
|
172
|
+
}
|
|
173
|
+
channels = read.slice(0, 3);
|
|
174
|
+
alpha = read[3] ?? null;
|
|
175
|
+
if (name === 'rgb' || name === 'rgba') {
|
|
176
|
+
// all numbers or all percentages
|
|
177
|
+
const unit = channels[0].unit;
|
|
178
|
+
if (unit !== '' && unit !== '%') return null;
|
|
179
|
+
if (channels[1].unit !== unit || channels[2].unit !== unit) return null;
|
|
180
|
+
} else if (channels[1].unit !== '%' || channels[2].unit !== '%') {
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
} else {
|
|
184
|
+
const slash = body.split('/');
|
|
185
|
+
if (slash.length > 2) return null;
|
|
186
|
+
const tokens = slash[0].trim().split(/\s+/);
|
|
187
|
+
if (name === 'color') space = (tokens.shift() ?? '').toLowerCase();
|
|
188
|
+
if (tokens.length !== 3) return null;
|
|
189
|
+
const read: Component[] = [];
|
|
190
|
+
for (const token of tokens) {
|
|
191
|
+
const c = component(token);
|
|
192
|
+
if (!c) return null;
|
|
193
|
+
read.push(c);
|
|
194
|
+
}
|
|
195
|
+
channels = read;
|
|
196
|
+
if (slash.length === 2) {
|
|
197
|
+
const token = slash[1].trim();
|
|
198
|
+
if (!token || /\s/.test(token)) return null;
|
|
199
|
+
alpha = component(token);
|
|
200
|
+
if (!alpha) return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
let a = 1;
|
|
205
|
+
if (alpha) {
|
|
206
|
+
if (alpha.unit !== '' && alpha.unit !== '%' && alpha.unit !== 'none') {
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
a = clamp01(alpha.unit === '%' ? alpha.value / 100 : alpha.value);
|
|
210
|
+
}
|
|
211
|
+
const rgb = toSrgb(name, space, channels);
|
|
212
|
+
return rgb ? { rgb, a } : null;
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const LEGACY = new Set(['rgb', 'rgba', 'hsl', 'hsla']);
|
|
216
|
+
|
|
217
|
+
/** A channel as a number, or null where its unit is not one it takes:
|
|
218
|
+
* `pct` is what 100% means for it. */
|
|
219
|
+
function amount(c: Component, pct: number): number | null {
|
|
220
|
+
if (c.unit === '') return c.value;
|
|
221
|
+
if (c.unit === 'none') return 0;
|
|
222
|
+
if (c.unit === '%') return (c.value / 100) * pct;
|
|
223
|
+
return null;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function hue(c: Component): number | null {
|
|
227
|
+
switch (c.unit) {
|
|
228
|
+
case '':
|
|
229
|
+
case 'deg':
|
|
230
|
+
return c.value;
|
|
231
|
+
case 'grad':
|
|
232
|
+
return c.value * 0.9;
|
|
233
|
+
case 'rad':
|
|
234
|
+
return (c.value * 180) / Math.PI;
|
|
235
|
+
case 'turn':
|
|
236
|
+
return c.value * 360;
|
|
237
|
+
case 'none':
|
|
238
|
+
return 0;
|
|
239
|
+
default:
|
|
240
|
+
return null;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
type Triple = [number, number, number];
|
|
245
|
+
|
|
246
|
+
/** The colour in gamma-encoded sRGB, each channel from 0 to 1 (before
|
|
247
|
+
* clipping), or null where a channel is not one its function takes. */
|
|
248
|
+
function toSrgb(name: string, space: string, c: Component[]): Triple | null {
|
|
249
|
+
switch (name) {
|
|
250
|
+
case 'rgb':
|
|
251
|
+
case 'rgba': {
|
|
252
|
+
const r = amount(c[0], 255);
|
|
253
|
+
const g = amount(c[1], 255);
|
|
254
|
+
const b = amount(c[2], 255);
|
|
255
|
+
if (r === null || g === null || b === null) return null;
|
|
256
|
+
return [r / 255, g / 255, b / 255];
|
|
257
|
+
}
|
|
258
|
+
case 'hsl':
|
|
259
|
+
case 'hsla': {
|
|
260
|
+
const h = hue(c[0]);
|
|
261
|
+
const s = amount(c[1], 100);
|
|
262
|
+
const l = amount(c[2], 100);
|
|
263
|
+
if (h === null || s === null || l === null) return null;
|
|
264
|
+
return hslToRgb(h, clamp01(s / 100), clamp01(l / 100));
|
|
265
|
+
}
|
|
266
|
+
case 'hwb': {
|
|
267
|
+
const h = hue(c[0]);
|
|
268
|
+
const w = amount(c[1], 100);
|
|
269
|
+
const b = amount(c[2], 100);
|
|
270
|
+
if (h === null || w === null || b === null) return null;
|
|
271
|
+
return hwbToRgb(h, clamp01(w / 100), clamp01(b / 100));
|
|
272
|
+
}
|
|
273
|
+
case 'lab':
|
|
274
|
+
case 'lch': {
|
|
275
|
+
const l = amount(c[0], 100);
|
|
276
|
+
if (l === null) return null;
|
|
277
|
+
let a: number | null;
|
|
278
|
+
let b: number | null;
|
|
279
|
+
if (name === 'lab') {
|
|
280
|
+
a = amount(c[1], 125);
|
|
281
|
+
b = amount(c[2], 125);
|
|
282
|
+
} else {
|
|
283
|
+
const chroma = amount(c[1], 150);
|
|
284
|
+
const h = hue(c[2]);
|
|
285
|
+
if (chroma === null || h === null) return null;
|
|
286
|
+
[a, b] = polar(Math.max(0, chroma), h);
|
|
287
|
+
}
|
|
288
|
+
if (a === null || b === null) return null;
|
|
289
|
+
// the gamut mapping CSS draws with takes a lightness at either end to
|
|
290
|
+
// white or black, whatever its chroma (CSS Color 4 13.2)
|
|
291
|
+
if (l >= 100) return [1, 1, 1];
|
|
292
|
+
if (l <= 0) return [0, 0, 0];
|
|
293
|
+
const xyz = labToXyzD50(l, a, b);
|
|
294
|
+
return gamma(multiply(XYZ_TO_LINEAR_SRGB, multiply(D50_TO_D65, xyz)));
|
|
295
|
+
}
|
|
296
|
+
case 'oklab':
|
|
297
|
+
case 'oklch': {
|
|
298
|
+
const l = amount(c[0], 1);
|
|
299
|
+
if (l === null) return null;
|
|
300
|
+
let a: number | null;
|
|
301
|
+
let b: number | null;
|
|
302
|
+
if (name === 'oklab') {
|
|
303
|
+
a = amount(c[1], 0.4);
|
|
304
|
+
b = amount(c[2], 0.4);
|
|
305
|
+
} else {
|
|
306
|
+
const chroma = amount(c[1], 0.4);
|
|
307
|
+
const h = hue(c[2]);
|
|
308
|
+
if (chroma === null || h === null) return null;
|
|
309
|
+
[a, b] = polar(Math.max(0, chroma), h);
|
|
310
|
+
}
|
|
311
|
+
if (a === null || b === null) return null;
|
|
312
|
+
if (l >= 1) return [1, 1, 1];
|
|
313
|
+
if (l <= 0) return [0, 0, 0];
|
|
314
|
+
return gamma(oklabToLinearSrgb(l, a, b));
|
|
315
|
+
}
|
|
316
|
+
case 'color': {
|
|
317
|
+
const v: number[] = [];
|
|
318
|
+
for (const channel of c) {
|
|
319
|
+
const x = amount(channel, 1);
|
|
320
|
+
if (x === null) return null;
|
|
321
|
+
v.push(x);
|
|
322
|
+
}
|
|
323
|
+
return predefined(space, v as Triple);
|
|
324
|
+
}
|
|
325
|
+
default:
|
|
326
|
+
return null;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** One of `color()`'s predefined spaces, in gamma-encoded sRGB. */
|
|
331
|
+
function predefined(space: string, v: Triple): Triple | null {
|
|
332
|
+
switch (space) {
|
|
333
|
+
case 'srgb':
|
|
334
|
+
return v;
|
|
335
|
+
case 'srgb-linear':
|
|
336
|
+
return gamma(v);
|
|
337
|
+
case 'display-p3':
|
|
338
|
+
return fromXyzD65(multiply(P3_TO_XYZ, v.map(srgbLinear) as Triple));
|
|
339
|
+
case 'display-p3-linear':
|
|
340
|
+
return fromXyzD65(multiply(P3_TO_XYZ, v));
|
|
341
|
+
case 'a98-rgb':
|
|
342
|
+
return fromXyzD65(
|
|
343
|
+
multiply(
|
|
344
|
+
A98_TO_XYZ,
|
|
345
|
+
v.map((x) => Math.sign(x) * Math.abs(x) ** (563 / 256)) as Triple,
|
|
346
|
+
),
|
|
347
|
+
);
|
|
348
|
+
case 'prophoto-rgb':
|
|
349
|
+
return fromXyzD65(
|
|
350
|
+
multiply(
|
|
351
|
+
D50_TO_D65,
|
|
352
|
+
multiply(PROPHOTO_TO_XYZ_D50, v.map(prophotoLinear) as Triple),
|
|
353
|
+
),
|
|
354
|
+
);
|
|
355
|
+
case 'rec2020':
|
|
356
|
+
return fromXyzD65(
|
|
357
|
+
multiply(REC2020_TO_XYZ, v.map(rec2020Linear) as Triple),
|
|
358
|
+
);
|
|
359
|
+
case 'xyz':
|
|
360
|
+
case 'xyz-d65':
|
|
361
|
+
return fromXyzD65(v);
|
|
362
|
+
case 'xyz-d50':
|
|
363
|
+
return fromXyzD65(multiply(D50_TO_D65, v));
|
|
364
|
+
default:
|
|
365
|
+
return null;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// --- color-mix() (CSS Color 5 3) ---------------------------------------------
|
|
370
|
+
|
|
371
|
+
/** `color-mix(in <space> [<hue> hue]?, <colour> <p>?, <colour> <p>?)`: the
|
|
372
|
+
* two colours in `space`, premultiplied, weighted by their percentages. */
|
|
373
|
+
function mix(body: string): Rgba | null {
|
|
374
|
+
const parts = topLevelParts(body, ',');
|
|
375
|
+
if (parts.length !== 3) return null;
|
|
376
|
+
const head = parts[0].trim().toLowerCase().split(/\s+/);
|
|
377
|
+
if (head[0] !== 'in' || head.length < 2) return null;
|
|
378
|
+
const space = head[1];
|
|
379
|
+
let method = 'shorter';
|
|
380
|
+
if (head.length === 4 && head[3] === 'hue' && space in HUE) {
|
|
381
|
+
if (!HUE_METHODS.has(head[2])) return null;
|
|
382
|
+
method = head[2];
|
|
383
|
+
} else if (head.length !== 2) {
|
|
384
|
+
return null;
|
|
385
|
+
}
|
|
386
|
+
const first = weighted(parts[1]);
|
|
387
|
+
const second = weighted(parts[2]);
|
|
388
|
+
if (!first || !second) return null;
|
|
389
|
+
let p1 = first.pct;
|
|
390
|
+
let p2 = second.pct;
|
|
391
|
+
if (p1 === null && p2 === null) p1 = p2 = 50;
|
|
392
|
+
else if (p1 === null) p1 = 100 - (p2 as number);
|
|
393
|
+
else if (p2 === null) p2 = 100 - p1;
|
|
394
|
+
const sum = (p1 as number) + (p2 as number);
|
|
395
|
+
if (!(sum > 0)) return null;
|
|
396
|
+
const t = (p2 as number) / sum;
|
|
397
|
+
const x = toSpace(space, first.colour.rgb);
|
|
398
|
+
const y = toSpace(space, second.colour.rgb);
|
|
399
|
+
if (!x || !y) return null;
|
|
400
|
+
const a1 = first.colour.a;
|
|
401
|
+
const a2 = second.colour.a;
|
|
402
|
+
const alpha = a1 * (1 - t) + a2 * t;
|
|
403
|
+
const hueAt = HUE[space] ?? -1;
|
|
404
|
+
const out: Triple = [0, 0, 0];
|
|
405
|
+
for (let i = 0; i < 3; i += 1) {
|
|
406
|
+
if (i === hueAt) {
|
|
407
|
+
out[i] = mixHue(x[i], y[i], t, method);
|
|
408
|
+
} else {
|
|
409
|
+
// premultiplied, so a transparent side lends its alpha and not its
|
|
410
|
+
// colour: Tailwind's `bg-blue-500/50` is blue, half as opaque
|
|
411
|
+
const v = x[i] * a1 * (1 - t) + y[i] * a2 * t;
|
|
412
|
+
out[i] = alpha === 0 ? 0 : v / alpha;
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
const rgb = fromSpace(space, out);
|
|
416
|
+
// percentages that come to less than 100% take their share of the alpha
|
|
417
|
+
return rgb ? { rgb, a: alpha * Math.min(1, sum / 100) } : null;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/** Which component of a polar space is its hue. */
|
|
421
|
+
const HUE: Record<string, number> = { hsl: 0, hwb: 0, lch: 2, oklch: 2 };
|
|
422
|
+
|
|
423
|
+
const HUE_METHODS = new Set(['shorter', 'longer', 'increasing', 'decreasing']);
|
|
424
|
+
|
|
425
|
+
/** A colour and the percentage beside it, either way round. */
|
|
426
|
+
function weighted(text: string): { colour: Rgba; pct: number | null } | null {
|
|
427
|
+
const tokens = topLevelParts(text.trim(), ' ').filter(Boolean);
|
|
428
|
+
let pct: number | null = null;
|
|
429
|
+
let colour: string | null = null;
|
|
430
|
+
for (const token of tokens) {
|
|
431
|
+
const m = /^((?:\d*\.\d+|\d+)(?:e[+-]?\d+)?)%$/i.exec(token);
|
|
432
|
+
if (m) {
|
|
433
|
+
if (pct !== null) return null;
|
|
434
|
+
pct = Number(m[1]);
|
|
435
|
+
if (pct > 100) return null;
|
|
436
|
+
} else {
|
|
437
|
+
if (colour !== null) return null;
|
|
438
|
+
colour = token;
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
const read = colour === null ? null : readRgba(colour);
|
|
442
|
+
return read ? { colour: read, pct } : null;
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
/** `text` split on `sep` outside brackets. */
|
|
446
|
+
function topLevelParts(text: string, sep: string): string[] {
|
|
447
|
+
const out: string[] = [];
|
|
448
|
+
let depth = 0;
|
|
449
|
+
let start = 0;
|
|
450
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
451
|
+
const c = text[i];
|
|
452
|
+
if (c === '(') depth += 1;
|
|
453
|
+
else if (c === ')') depth -= 1;
|
|
454
|
+
else if (depth === 0 && (c === sep || (sep === ' ' && /\s/.test(c)))) {
|
|
455
|
+
out.push(text.slice(start, i));
|
|
456
|
+
start = i + 1;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
out.push(text.slice(start));
|
|
460
|
+
return out;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
function mixHue(h1: number, h2: number, t: number, method: string): number {
|
|
464
|
+
// an achromatic side has no hue, and takes the other's
|
|
465
|
+
if (Number.isNaN(h1)) return Number.isNaN(h2) ? 0 : h2;
|
|
466
|
+
if (Number.isNaN(h2)) return h1;
|
|
467
|
+
let a = ((h1 % 360) + 360) % 360;
|
|
468
|
+
let b = ((h2 % 360) + 360) % 360;
|
|
469
|
+
const d = b - a;
|
|
470
|
+
if (method === 'longer') {
|
|
471
|
+
if (d > 0 && d < 180) a += 360;
|
|
472
|
+
else if (d > -180 && d <= 0) b += 360;
|
|
473
|
+
} else if (method === 'increasing') {
|
|
474
|
+
if (d < 0) b += 360;
|
|
475
|
+
} else if (method === 'decreasing') {
|
|
476
|
+
if (d > 0) a += 360;
|
|
477
|
+
} else if (d > 180) {
|
|
478
|
+
a += 360;
|
|
479
|
+
} else if (d < -180) {
|
|
480
|
+
b += 360;
|
|
481
|
+
}
|
|
482
|
+
return (((a + (b - a) * t) % 360) + 360) % 360;
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
/** Gamma-encoded sRGB into a space a mix can be taken in. */
|
|
486
|
+
function toSpace(space: string, rgb: Triple): Triple | null {
|
|
487
|
+
switch (space) {
|
|
488
|
+
case 'srgb':
|
|
489
|
+
return rgb;
|
|
490
|
+
case 'srgb-linear':
|
|
491
|
+
return linearize(rgb);
|
|
492
|
+
case 'xyz':
|
|
493
|
+
case 'xyz-d65':
|
|
494
|
+
return multiply(LINEAR_SRGB_TO_XYZ, linearize(rgb));
|
|
495
|
+
case 'xyz-d50':
|
|
496
|
+
return multiply(D65_TO_D50, multiply(LINEAR_SRGB_TO_XYZ, linearize(rgb)));
|
|
497
|
+
case 'lab':
|
|
498
|
+
case 'lch': {
|
|
499
|
+
const lab = xyzD50ToLab(
|
|
500
|
+
multiply(D65_TO_D50, multiply(LINEAR_SRGB_TO_XYZ, linearize(rgb))),
|
|
501
|
+
);
|
|
502
|
+
return space === 'lab' ? lab : toPolar(lab, 0.0015);
|
|
503
|
+
}
|
|
504
|
+
case 'oklab':
|
|
505
|
+
case 'oklch': {
|
|
506
|
+
const oklab = linearSrgbToOklab(linearize(rgb));
|
|
507
|
+
return space === 'oklab' ? oklab : toPolar(oklab, 0.000004);
|
|
508
|
+
}
|
|
509
|
+
case 'hsl':
|
|
510
|
+
return srgbToHsl(rgb);
|
|
511
|
+
case 'hwb': {
|
|
512
|
+
const [h] = srgbToHsl(rgb);
|
|
513
|
+
return [h, Math.min(...rgb) * 100, (1 - Math.max(...rgb)) * 100];
|
|
514
|
+
}
|
|
515
|
+
default:
|
|
516
|
+
return null;
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
/** A space's components back to gamma-encoded sRGB. */
|
|
521
|
+
function fromSpace(space: string, c: Triple): Triple | null {
|
|
522
|
+
switch (space) {
|
|
523
|
+
case 'srgb':
|
|
524
|
+
return c;
|
|
525
|
+
case 'srgb-linear':
|
|
526
|
+
return gamma(c);
|
|
527
|
+
case 'xyz':
|
|
528
|
+
case 'xyz-d65':
|
|
529
|
+
return fromXyzD65(c);
|
|
530
|
+
case 'xyz-d50':
|
|
531
|
+
return fromXyzD65(multiply(D50_TO_D65, c));
|
|
532
|
+
case 'lab':
|
|
533
|
+
case 'lch': {
|
|
534
|
+
const [l, a, b] =
|
|
535
|
+
space === 'lab' ? c : [c[0], ...polar(Math.max(0, c[1]), c[2])];
|
|
536
|
+
return fromXyzD65(multiply(D50_TO_D65, labToXyzD50(l, a, b)));
|
|
537
|
+
}
|
|
538
|
+
case 'oklab':
|
|
539
|
+
case 'oklch': {
|
|
540
|
+
const [l, a, b] =
|
|
541
|
+
space === 'oklab' ? c : [c[0], ...polar(Math.max(0, c[1]), c[2])];
|
|
542
|
+
return gamma(oklabToLinearSrgb(l, a, b));
|
|
543
|
+
}
|
|
544
|
+
case 'hsl':
|
|
545
|
+
return hslToRgb(c[0], clamp01(c[1] / 100), clamp01(c[2] / 100));
|
|
546
|
+
case 'hwb':
|
|
547
|
+
return hwbToRgb(c[0], clamp01(c[1] / 100), clamp01(c[2] / 100));
|
|
548
|
+
default:
|
|
549
|
+
return null;
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
function linearize(rgb: Triple): Triple {
|
|
554
|
+
return rgb.map(srgbLinear) as Triple;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
function linearSrgbToOklab([r, g, b]: Triple): Triple {
|
|
558
|
+
const l = Math.cbrt(0.4122214708 * r + 0.5363325363 * g + 0.0514459929 * b);
|
|
559
|
+
const m = Math.cbrt(0.2119034982 * r + 0.6806995451 * g + 0.1073969566 * b);
|
|
560
|
+
const s = Math.cbrt(0.0883024619 * r + 0.2817188376 * g + 0.6299787005 * b);
|
|
561
|
+
return [
|
|
562
|
+
0.2104542553 * l + 0.793617785 * m - 0.0040720468 * s,
|
|
563
|
+
1.9779984951 * l - 2.428592205 * m + 0.4505937099 * s,
|
|
564
|
+
0.0259040371 * l + 0.7827717662 * m - 0.808675766 * s,
|
|
565
|
+
];
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
function xyzD50ToLab(xyz: Triple): Triple {
|
|
569
|
+
const f = xyz.map((v, i) => {
|
|
570
|
+
const x = v / D50_WHITE[i];
|
|
571
|
+
return x > EPSILON ? Math.cbrt(x) : (KAPPA * x + 16) / 116;
|
|
572
|
+
});
|
|
573
|
+
return [116 * f[1] - 16, 500 * (f[0] - f[1]), 200 * (f[1] - f[2])];
|
|
574
|
+
}
|
|
575
|
+
|
|
576
|
+
/** Lightness, chroma and hue — no hue where there is next to no chroma,
|
|
577
|
+
* which is what a grey's hue is. */
|
|
578
|
+
function toPolar([l, a, b]: Triple, grey: number): Triple {
|
|
579
|
+
const chroma = Math.sqrt(a * a + b * b);
|
|
580
|
+
if (chroma < grey) return [l, chroma, NaN];
|
|
581
|
+
const h = (Math.atan2(b, a) * 180) / Math.PI;
|
|
582
|
+
return [l, chroma, h < 0 ? h + 360 : h];
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
function srgbToHsl([r, g, b]: Triple): Triple {
|
|
586
|
+
const max = Math.max(r, g, b);
|
|
587
|
+
const min = Math.min(r, g, b);
|
|
588
|
+
const l = (min + max) / 2;
|
|
589
|
+
const d = max - min;
|
|
590
|
+
if (d === 0) return [NaN, 0, l * 100];
|
|
591
|
+
const s = l === 0 || l === 1 ? 0 : (max - l) / Math.min(l, 1 - l);
|
|
592
|
+
let h: number;
|
|
593
|
+
if (max === r) h = (g - b) / d + (g < b ? 6 : 0);
|
|
594
|
+
else if (max === g) h = (b - r) / d + 2;
|
|
595
|
+
else h = (r - g) / d + 4;
|
|
596
|
+
return [h * 60, s * 100, l * 100];
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
function serialize(rgb: Triple, a: number): string {
|
|
600
|
+
const [r, g, b] = rgb.map((x) => Math.round(clamp01(x) * 255));
|
|
601
|
+
if (a === 1) return `#${hex2(r)}${hex2(g)}${hex2(b)}`;
|
|
602
|
+
return `rgba(${r}, ${g}, ${b}, ${Math.round(a * 1000) / 1000})`;
|
|
603
|
+
}
|
|
604
|
+
|
|
605
|
+
function hex2(n: number): string {
|
|
606
|
+
return n.toString(16).padStart(2, '0');
|
|
607
|
+
}
|
|
608
|
+
|
|
609
|
+
function clamp01(x: number): number {
|
|
610
|
+
return x < 0 ? 0 : x > 1 ? 1 : x;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
function polar(chroma: number, h: number): [number, number] {
|
|
614
|
+
const rad = (h * Math.PI) / 180;
|
|
615
|
+
return [chroma * Math.cos(rad), chroma * Math.sin(rad)];
|
|
616
|
+
}
|
|
617
|
+
|
|
618
|
+
// --- the conversions: CSS Color 4's sample code (§18) -----------------------
|
|
619
|
+
|
|
620
|
+
function hslToRgb(h: number, s: number, l: number): Triple {
|
|
621
|
+
const hue = ((h % 360) + 360) % 360;
|
|
622
|
+
const f = (n: number) => {
|
|
623
|
+
const k = (n + hue / 30) % 12;
|
|
624
|
+
const a = s * Math.min(l, 1 - l);
|
|
625
|
+
return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));
|
|
626
|
+
};
|
|
627
|
+
return [f(0), f(8), f(4)];
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
function hwbToRgb(h: number, w: number, b: number): Triple {
|
|
631
|
+
if (w + b >= 1) {
|
|
632
|
+
const gray = w / (w + b);
|
|
633
|
+
return [gray, gray, gray];
|
|
634
|
+
}
|
|
635
|
+
const rgb = hslToRgb(h, 1, 0.5);
|
|
636
|
+
return rgb.map((x) => x * (1 - w - b) + w) as Triple;
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
const KAPPA = 24389 / 27;
|
|
640
|
+
const EPSILON = 216 / 24389;
|
|
641
|
+
const D50_WHITE: Triple = [0.3457 / 0.3585, 1, (1 - 0.3457 - 0.3585) / 0.3585];
|
|
642
|
+
|
|
643
|
+
function labToXyzD50(l: number, a: number, b: number): Triple {
|
|
644
|
+
const f1 = (l + 16) / 116;
|
|
645
|
+
const f0 = a / 500 + f1;
|
|
646
|
+
const f2 = f1 - b / 200;
|
|
647
|
+
const x = f0 ** 3 > EPSILON ? f0 ** 3 : (116 * f0 - 16) / KAPPA;
|
|
648
|
+
const y = l > KAPPA * EPSILON ? f1 ** 3 : l / KAPPA;
|
|
649
|
+
const z = f2 ** 3 > EPSILON ? f2 ** 3 : (116 * f2 - 16) / KAPPA;
|
|
650
|
+
return [x * D50_WHITE[0], y * D50_WHITE[1], z * D50_WHITE[2]];
|
|
651
|
+
}
|
|
652
|
+
|
|
653
|
+
function oklabToLinearSrgb(l: number, a: number, b: number): Triple {
|
|
654
|
+
const l1 = (l + 0.3963377774 * a + 0.2158037573 * b) ** 3;
|
|
655
|
+
const m1 = (l - 0.1055613458 * a - 0.0638541728 * b) ** 3;
|
|
656
|
+
const s1 = (l - 0.0894841775 * a - 1.291485548 * b) ** 3;
|
|
657
|
+
return [
|
|
658
|
+
4.0767416621 * l1 - 3.3077115913 * m1 + 0.2309699292 * s1,
|
|
659
|
+
-1.2684380046 * l1 + 2.6097574011 * m1 - 0.3413193965 * s1,
|
|
660
|
+
-0.0041960863 * l1 - 0.7034186147 * m1 + 1.707614701 * s1,
|
|
661
|
+
];
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
function fromXyzD65(xyz: Triple): Triple {
|
|
665
|
+
return gamma(multiply(XYZ_TO_LINEAR_SRGB, xyz));
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
function srgbLinear(x: number): number {
|
|
669
|
+
const abs = Math.abs(x);
|
|
670
|
+
return abs <= 0.04045
|
|
671
|
+
? x / 12.92
|
|
672
|
+
: Math.sign(x) * ((abs + 0.055) / 1.055) ** 2.4;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
function gamma(rgb: Triple): Triple {
|
|
676
|
+
return rgb.map((x) => {
|
|
677
|
+
const abs = Math.abs(x);
|
|
678
|
+
return abs > 0.0031308
|
|
679
|
+
? Math.sign(x) * (1.055 * abs ** (1 / 2.4) - 0.055)
|
|
680
|
+
: 12.92 * x;
|
|
681
|
+
}) as Triple;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
function prophotoLinear(x: number): number {
|
|
685
|
+
const abs = Math.abs(x);
|
|
686
|
+
return abs <= 16 / 512 ? x / 16 : Math.sign(x) * abs ** 1.8;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
function rec2020Linear(x: number): number {
|
|
690
|
+
const alpha = 1.09929682680944;
|
|
691
|
+
const beta = 0.018053968510807;
|
|
692
|
+
const abs = Math.abs(x);
|
|
693
|
+
return abs < beta * 4.5
|
|
694
|
+
? x / 4.5
|
|
695
|
+
: Math.sign(x) * ((abs + alpha - 1) / alpha) ** (1 / 0.45);
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
function multiply(m: readonly Triple[], v: Triple): Triple {
|
|
699
|
+
return [
|
|
700
|
+
m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2],
|
|
701
|
+
m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2],
|
|
702
|
+
m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2],
|
|
703
|
+
];
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
// Each takes its space's white to its white point's XYZ, which the tests
|
|
707
|
+
// check by sending white through every space.
|
|
708
|
+
|
|
709
|
+
const LINEAR_SRGB_TO_XYZ: readonly Triple[] = [
|
|
710
|
+
[506752 / 1228815, 87881 / 245763, 12673 / 70218],
|
|
711
|
+
[87098 / 409605, 175762 / 245763, 12673 / 175545],
|
|
712
|
+
[7918 / 409605, 87881 / 737289, 1001167 / 1053270],
|
|
713
|
+
];
|
|
714
|
+
|
|
715
|
+
const D65_TO_D50: readonly Triple[] = [
|
|
716
|
+
[1.0479297925449969, 0.022946870601609652, -0.05019226628920524],
|
|
717
|
+
[0.02962780877005599, 0.9904344267538799, -0.017073799063418826],
|
|
718
|
+
[-0.009243040646204504, 0.015055191490298152, 0.7518742814281371],
|
|
719
|
+
];
|
|
720
|
+
|
|
721
|
+
const XYZ_TO_LINEAR_SRGB: readonly Triple[] = [
|
|
722
|
+
[12831 / 3959, -329 / 214, -1974 / 3959],
|
|
723
|
+
[-851781 / 878810, 1648619 / 878810, 36519 / 878810],
|
|
724
|
+
[705 / 12673, -2585 / 12673, 705 / 667],
|
|
725
|
+
];
|
|
726
|
+
|
|
727
|
+
const D50_TO_D65: readonly Triple[] = [
|
|
728
|
+
[0.955473421488075, -0.02309845494876471, 0.06325924320057072],
|
|
729
|
+
[-0.0283697093338637, 1.0099953980813041, 0.021041441191917323],
|
|
730
|
+
[0.012314014864481998, -0.020507649298898964, 1.330365926242124],
|
|
731
|
+
];
|
|
732
|
+
|
|
733
|
+
const P3_TO_XYZ: readonly Triple[] = [
|
|
734
|
+
[608311 / 1250200, 189793 / 714400, 198249 / 1000160],
|
|
735
|
+
[35783 / 156275, 247089 / 357200, 198249 / 2500400],
|
|
736
|
+
[0, 32229 / 714400, 5220557 / 5000800],
|
|
737
|
+
];
|
|
738
|
+
|
|
739
|
+
const A98_TO_XYZ: readonly Triple[] = [
|
|
740
|
+
[573536 / 994567, 263643 / 1420810, 187206 / 994567],
|
|
741
|
+
[591459 / 1989134, 6239551 / 9945670, 374412 / 4972835],
|
|
742
|
+
[53769 / 1989134, 351524 / 4972835, 4929758 / 4972835],
|
|
743
|
+
];
|
|
744
|
+
|
|
745
|
+
const PROPHOTO_TO_XYZ_D50: readonly Triple[] = [
|
|
746
|
+
[0.7977666449006423, 0.13518129740053308, 0.0313477341283922],
|
|
747
|
+
[0.2880748288194013, 0.711835234241873, 0.00008993693872564],
|
|
748
|
+
[0, 0, 0.8251046025104602],
|
|
749
|
+
];
|
|
750
|
+
|
|
751
|
+
const REC2020_TO_XYZ: readonly Triple[] = [
|
|
752
|
+
[63426534 / 99577255, 20160776 / 139408157, 47086771 / 278816314],
|
|
753
|
+
[26158966 / 99577255, 472592308 / 697040785, 8267143 / 139408157],
|
|
754
|
+
[0, 19567812 / 697040785, 295819943 / 278816314],
|
|
755
|
+
];
|