@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,900 @@
|
|
|
1
|
+
// `display: grid`, the subset documents are written in (CSS Grid 1).
|
|
2
|
+
//
|
|
3
|
+
// Tailwind's `grid grid-cols-3 gap-4`, a card list of `repeat(auto-fill,
|
|
4
|
+
// minmax(16rem, 1fr))`, a sidebar and a column in `16rem 1fr`, a page of
|
|
5
|
+
// `auto 1fr auto` rows: tracks of lengths, percentages, `fr`s, `auto`,
|
|
6
|
+
// `minmax()` and `fit-content()`, with `repeat()` by a count or by what
|
|
7
|
+
// fits, sized by what is in them as the track sizing algorithm has it
|
|
8
|
+
// (`tracks.ts`); items placed by line, span, name or area, or in order into
|
|
9
|
+
// the first cell free along the rows or down the columns, `dense` or not
|
|
10
|
+
// (the lines and their names are `grid-lines.ts`'s); gaps; the tracks
|
|
11
|
+
// placed by `justify-content` and `align-content`; and each item stretched
|
|
12
|
+
// to its area or aligned in it. Not here: subgrids, and baseline
|
|
13
|
+
// alignment.
|
|
14
|
+
//
|
|
15
|
+
// A grid container is a flex container to the box tree (`display: grid`
|
|
16
|
+
// reads as `flex` and sets `ComputedStyle.grid`): its children are the
|
|
17
|
+
// same blockified items, it holds its floats, and `flex.ts` hands it here.
|
|
18
|
+
// Unlike flex, the algorithm is written out rather than handed to Yoga,
|
|
19
|
+
// which has none; what it needs of an item — its width at no limit and at
|
|
20
|
+
// the smallest, and its height at a width — is what tables already ask.
|
|
21
|
+
import { AUTO, gapOf, isPct, resolve, resolveOrNull } from '../css/values.js';
|
|
22
|
+
import { scrolls } from '../css/style.js';
|
|
23
|
+
import { Box, GRID_TRACKS, isBlank } from './boxes.js';
|
|
24
|
+
import { FLEXED_HEIGHT, MIN_CONTENT_PROBE, clampHeight, clampWidth, exactMinContent, heightThroughRatio, measureIntrinsicWidth, moveTo, percentBaseInside, percentHeightsIn, positionOutOfFlow, resolveEdges, widthThroughRatio, } from './block.js';
|
|
25
|
+
import { gridLines, placement } from './grid-lines.js';
|
|
26
|
+
import { sizeTracks } from './tracks.js';
|
|
27
|
+
/**
|
|
28
|
+
* Lay out a grid container's children. Returns the content height.
|
|
29
|
+
*/
|
|
30
|
+
export function layoutGrid(box, ctx, contentWidth) {
|
|
31
|
+
const style = box.style;
|
|
32
|
+
const boxes = [];
|
|
33
|
+
for (const child of box.children) {
|
|
34
|
+
if (child.kind === 'text' && isBlank(child.text))
|
|
35
|
+
continue;
|
|
36
|
+
if (child.outOfFlow) {
|
|
37
|
+
// where it is as the grid's one item, in an area whose edges are the
|
|
38
|
+
// grid's padding edges (9.1)
|
|
39
|
+
positionOutOfFlow(child, box, ctx, false);
|
|
40
|
+
continue;
|
|
41
|
+
}
|
|
42
|
+
resolveEdges(child, Number.isFinite(contentWidth) ? contentWidth : 0);
|
|
43
|
+
boxes.push(child);
|
|
44
|
+
}
|
|
45
|
+
// the gaps: a percentage of the grid's content size along them, and of
|
|
46
|
+
// nothing where that is not known yet (CSS Box Alignment 3, 8.3)
|
|
47
|
+
const colGap = gapOf(style.columnGap, contentWidth);
|
|
48
|
+
let rowGap = gapOf(style.rowGap, percentBaseInside(box));
|
|
49
|
+
// the explicit grid: the templates' tracks, and as many more as the
|
|
50
|
+
// areas need, sized as the ones the placement makes past it are
|
|
51
|
+
const areas = style.gridAreas;
|
|
52
|
+
// a height of the grid's own, which the rows' `repeat()` counts against
|
|
53
|
+
const definite = percentBaseInside(box);
|
|
54
|
+
const template = trackList(style.gridColumns, contentWidth, colGap);
|
|
55
|
+
const rowList = trackList(style.gridRows, definite, rowGap);
|
|
56
|
+
const explicitCols = Math.max(template.tracks.length, areas?.columns ?? 0);
|
|
57
|
+
const explicitRows = Math.max(rowList.tracks.length, areas?.rows ?? 0);
|
|
58
|
+
const colLines = gridLines(explicitCols, template.names, areas, 'columns');
|
|
59
|
+
const rowLines = gridLines(explicitRows, rowList.names, areas, 'rows');
|
|
60
|
+
const items = place(boxes, colLines, rowLines, style.gridAutoFlow);
|
|
61
|
+
// every row the explicit grid has, whether or not an item is in it
|
|
62
|
+
const allRows = items.reduce((n, item) => Math.max(n, item.row + item.rows), explicitRows);
|
|
63
|
+
const explicit = rowList.tracks;
|
|
64
|
+
const cols = template.tracks.slice();
|
|
65
|
+
// an item placed past the explicit grid makes tracks of its own
|
|
66
|
+
const widest = items.reduce((n, item) => Math.max(n, item.col + item.cols), Math.max(1, explicitCols));
|
|
67
|
+
while (cols.length < widest)
|
|
68
|
+
cols.push(style.gridAutoColumns);
|
|
69
|
+
// An `auto-fit` repetition no item is in collapses (7.2.3.2): it is out
|
|
70
|
+
// of the sizing and the distribution, and the gaps on either side of it
|
|
71
|
+
// are one. The items are placed in the tracks that stay, and the ones
|
|
72
|
+
// that go are put back as nothing where the lines are read.
|
|
73
|
+
const keepCols = keptTracks(cols.length, template.fit, items, true);
|
|
74
|
+
const keepRows = keptTracks(allRows, rowList.fit, items, false);
|
|
75
|
+
const rowDefs = [];
|
|
76
|
+
for (let r = 0; r < allRows; r += 1) {
|
|
77
|
+
if (keepRows?.[r] ?? true)
|
|
78
|
+
rowDefs.push(explicit[r] ?? style.gridAutoRows);
|
|
79
|
+
}
|
|
80
|
+
if (keepCols) {
|
|
81
|
+
const kept = cols.filter((_, c) => keepCols[c]);
|
|
82
|
+
cols.length = 0;
|
|
83
|
+
cols.push(...kept);
|
|
84
|
+
}
|
|
85
|
+
if (keepCols || keepRows) {
|
|
86
|
+
const colAt = indexOfKept(keepCols);
|
|
87
|
+
const rowAt = indexOfKept(keepRows);
|
|
88
|
+
for (const item of items) {
|
|
89
|
+
if (colAt)
|
|
90
|
+
item.col = colAt[item.col];
|
|
91
|
+
if (rowAt)
|
|
92
|
+
item.row = rowAt[item.row];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
const rowCount = rowDefs.length;
|
|
96
|
+
// While the columns are sized, a row whose greatest size is a length is
|
|
97
|
+
// that size, and any other has none (CSS Grid 1, 12.1): what an item's
|
|
98
|
+
// height is then, where it is one — which a ratio makes a width of
|
|
99
|
+
const fixedRows = [];
|
|
100
|
+
for (let r = 0; r < rowCount; r += 1) {
|
|
101
|
+
const { max } = sizing(rowDefs[r], definite);
|
|
102
|
+
fixedRows.push(typeof max === 'number' ? max : null);
|
|
103
|
+
}
|
|
104
|
+
const spanBefore = (item) => {
|
|
105
|
+
let span = rowGap * Math.max(0, item.rows - 1);
|
|
106
|
+
for (let r = item.row; r < item.row + item.rows; r += 1) {
|
|
107
|
+
const fixed = fixedRows[r];
|
|
108
|
+
if (fixed === null || fixed === undefined)
|
|
109
|
+
return NaN;
|
|
110
|
+
span += fixed;
|
|
111
|
+
}
|
|
112
|
+
return span;
|
|
113
|
+
};
|
|
114
|
+
const heightBefore = (item) => heightBeforeRows(item.box, spanBefore(item));
|
|
115
|
+
// An item's percentage heights are of its area's, which the rows it
|
|
116
|
+
// spans are, rather than the grid's: of that where they are known now,
|
|
117
|
+
// and of nothing — `auto` — where they are not, until they are
|
|
118
|
+
for (const item of items)
|
|
119
|
+
item.box.percentHeightBase = spanBefore(item);
|
|
120
|
+
const measure = (item) => {
|
|
121
|
+
if (item.max >= 0)
|
|
122
|
+
return;
|
|
123
|
+
const box = item.box;
|
|
124
|
+
const margins = box.marginLeft + box.marginRight;
|
|
125
|
+
// Measured once in the box's life, as a table cell's are: measured for
|
|
126
|
+
// every layout of the grid, a grid in a grid in a grid laid out its
|
|
127
|
+
// innermost three times a level, and twelve levels took two thirds of
|
|
128
|
+
// a second.
|
|
129
|
+
const style = box.style;
|
|
130
|
+
let widest;
|
|
131
|
+
let narrowest;
|
|
132
|
+
if (typeof style.width === 'number') {
|
|
133
|
+
// a length for a width is its width at its narrowest and its widest
|
|
134
|
+
// — measured at no limit, it was its content's
|
|
135
|
+
const extra = style.boxSizing === 'border-box' ? 0 : box.horizontalExtra;
|
|
136
|
+
widest = narrowest = Math.max(style.width + extra, box.horizontalExtra);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
const fresh = box.intrinsicMaxContent < 0;
|
|
140
|
+
widest = maxContentOf(box, ctx);
|
|
141
|
+
if (box.intrinsicMinContent < 0) {
|
|
142
|
+
// where its words say it exactly, read from the layout just made —
|
|
143
|
+
// which is the max-content one only if it was made just now
|
|
144
|
+
const exact = fresh && ctx.fonts ? exactMinContent(box, ctx.fonts) : null;
|
|
145
|
+
box.intrinsicMinContent =
|
|
146
|
+
exact ?? measureIntrinsicWidth(box, ctx, MIN_CONTENT_PROBE);
|
|
147
|
+
}
|
|
148
|
+
narrowest = box.intrinsicMinContent;
|
|
149
|
+
}
|
|
150
|
+
// an item with a ratio and a height is as wide as that makes it, its
|
|
151
|
+
// content's sizes both (CSS Sizing 4, 5.1) — and one that is not
|
|
152
|
+
// replaced no narrower for it than its content at its narrowest, where
|
|
153
|
+
// it shows what overflows it (5.2). A scroll container's sizes are
|
|
154
|
+
// none of its content's, and take nothing from its ratio either.
|
|
155
|
+
if (typeof style.width !== 'number' &&
|
|
156
|
+
(box.kind === 'replaced' || !scrolls(style))) {
|
|
157
|
+
const tall = heightBefore(item);
|
|
158
|
+
const wide = tall === null ? null : widthThroughRatio(box, tall);
|
|
159
|
+
if (wide !== null) {
|
|
160
|
+
widest = narrowest =
|
|
161
|
+
box.kind === 'replaced' || !showsOverflow(box)
|
|
162
|
+
? wide
|
|
163
|
+
: Math.max(wide, narrowest);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// a width of its content's is that at its narrowest and its widest
|
|
167
|
+
if (style.widthKeyword === 'min-content')
|
|
168
|
+
widest = narrowest;
|
|
169
|
+
else if (style.widthKeyword === 'max-content')
|
|
170
|
+
narrowest = widest;
|
|
171
|
+
// within its own least and greatest widths
|
|
172
|
+
const [least, most] = ownWidths(box, narrowest, widest);
|
|
173
|
+
item.max = Math.min(most, Math.max(least, widest)) + margins;
|
|
174
|
+
item.min = Math.min(most, Math.max(least, narrowest)) + margins;
|
|
175
|
+
};
|
|
176
|
+
const colTracks = cols.map((track) => sizing(track, contentWidth));
|
|
177
|
+
const widths = sizeTracks(colTracks, items.map((item) => ({
|
|
178
|
+
start: item.col,
|
|
179
|
+
span: item.cols,
|
|
180
|
+
minContent: () => (measure(item), item.min),
|
|
181
|
+
maxContent: () => (measure(item), item.max),
|
|
182
|
+
minimum: () => leastWidth(item, colTracks, colGap, measure),
|
|
183
|
+
})), {
|
|
184
|
+
available: contentWidth,
|
|
185
|
+
least: 0,
|
|
186
|
+
gap: colGap,
|
|
187
|
+
stretch: style.justifyContent === 'normal' || style.justifyContent === 'stretch',
|
|
188
|
+
});
|
|
189
|
+
const lefts = starts(widths, colGap, style.justifyContent, contentWidth);
|
|
190
|
+
// each item at its area's width, for its height
|
|
191
|
+
for (const item of items) {
|
|
192
|
+
layoutItem(item, extent(widths, lefts, item.col, item.cols), ctx, heightBefore(item));
|
|
193
|
+
}
|
|
194
|
+
// a height of the grid's own, or else the least it may be, which the
|
|
195
|
+
// `fr` rows and the `auto` ones fill
|
|
196
|
+
const own = Number.isFinite(definite);
|
|
197
|
+
const least = own ? 0 : leastHeight(box);
|
|
198
|
+
// the rows against a height: percentages of it, or `auto` without one
|
|
199
|
+
const sizeRows = (base, available, atLeast) => {
|
|
200
|
+
const rowTracks = [];
|
|
201
|
+
for (let r = 0; r < rowCount; r += 1) {
|
|
202
|
+
rowTracks.push(sizing(rowDefs[r], base));
|
|
203
|
+
}
|
|
204
|
+
return sizeTracks(rowTracks, items.map((item) => rowItem(item, rowTracks, rowGap)), {
|
|
205
|
+
available,
|
|
206
|
+
least: atLeast,
|
|
207
|
+
gap: rowGap,
|
|
208
|
+
stretch: style.alignContent === 'stretch',
|
|
209
|
+
});
|
|
210
|
+
};
|
|
211
|
+
let heights = sizeRows(definite, own ? definite : Infinity, least);
|
|
212
|
+
// with no height of its own, the grid is as tall as its rows come to with
|
|
213
|
+
// their percentages `auto`, and the percentages are of that (7.2.1)
|
|
214
|
+
if (!own && [...explicit, style.gridAutoRows].some(percentTrack)) {
|
|
215
|
+
let tall = rowGap * Math.max(0, heights.length - 1);
|
|
216
|
+
for (const h of heights)
|
|
217
|
+
tall += h;
|
|
218
|
+
tall = Math.max(tall, least);
|
|
219
|
+
heights = sizeRows(tall, tall, 0);
|
|
220
|
+
}
|
|
221
|
+
let height = rowGap * Math.max(0, heights.length - 1);
|
|
222
|
+
for (const h of heights)
|
|
223
|
+
height += h;
|
|
224
|
+
// with no height of its own, a percentage gap is of the height its rows
|
|
225
|
+
// come to without it, and the rows are placed with it where the grid is
|
|
226
|
+
// that tall
|
|
227
|
+
if (!own && isPct(style.rowGap)) {
|
|
228
|
+
rowGap = gapOf(style.rowGap, Math.max(height, least));
|
|
229
|
+
}
|
|
230
|
+
// the rows are placed in the grid's height — which one from its
|
|
231
|
+
// `aspect-ratio` grows to what it holds (CSS Sizing 4, 5.2) — or with no
|
|
232
|
+
// height of its own, in its least height or its rows'
|
|
233
|
+
const grows = own &&
|
|
234
|
+
style.height === AUTO &&
|
|
235
|
+
style.aspectRatio !== null &&
|
|
236
|
+
style.minHeight === AUTO;
|
|
237
|
+
const room = own && !grows ? definite : Math.max(own ? definite : least, height);
|
|
238
|
+
const tops = starts(heights, rowGap, style.alignContent, room);
|
|
239
|
+
// an item that takes a percentage of its area's height, which is known
|
|
240
|
+
// now, is laid out again with it
|
|
241
|
+
for (const item of items) {
|
|
242
|
+
const child = item.box;
|
|
243
|
+
const tall = extent(heights, tops, item.row, item.rows);
|
|
244
|
+
if (Object.is(child.percentHeightBase, tall) || !percentOwn(child))
|
|
245
|
+
continue;
|
|
246
|
+
child.percentHeightBase = tall;
|
|
247
|
+
layoutItem(item, extent(widths, lefts, item.col, item.cols), ctx, heightBeforeRows(child, tall));
|
|
248
|
+
}
|
|
249
|
+
GRID_TRACKS.set(box, {
|
|
250
|
+
cols: tracksOf(widths, lefts, keepCols),
|
|
251
|
+
rows: tracksOf(heights, tops, keepRows),
|
|
252
|
+
colLines,
|
|
253
|
+
rowLines,
|
|
254
|
+
});
|
|
255
|
+
for (const item of items) {
|
|
256
|
+
const child = item.box;
|
|
257
|
+
const area = extent(widths, lefts, item.col, item.cols);
|
|
258
|
+
const tall = extent(heights, tops, item.row, item.rows);
|
|
259
|
+
const justify = child.style.justifySelf === 'auto'
|
|
260
|
+
? style.justifyItems
|
|
261
|
+
: child.style.justifySelf;
|
|
262
|
+
const align = child.style.alignSelf === AUTO ? style.alignItems : child.style.alignSelf;
|
|
263
|
+
const outerWidth = child.width + child.marginLeft + child.marginRight;
|
|
264
|
+
const outerHeight = child.height + child.marginTop + child.marginBottom;
|
|
265
|
+
// `auto` margins take the free space in the area first (CSS Grid 1,
|
|
266
|
+
// 10.2), and an item with them is not stretched
|
|
267
|
+
const [left, right] = autoMargins(child, 'x');
|
|
268
|
+
const [top, bottom] = autoMargins(child, 'y');
|
|
269
|
+
let dx = 0;
|
|
270
|
+
if (left || right) {
|
|
271
|
+
dx = (area - outerWidth) * (left && right ? 0.5 : left ? 1 : 0);
|
|
272
|
+
}
|
|
273
|
+
else if (justify === 'center')
|
|
274
|
+
dx = (area - outerWidth) / 2;
|
|
275
|
+
else if (justify === 'flex-end')
|
|
276
|
+
dx = area - outerWidth;
|
|
277
|
+
let dy = 0;
|
|
278
|
+
if (top || bottom) {
|
|
279
|
+
dy = (tall - outerHeight) * (top && bottom ? 0.5 : top ? 1 : 0);
|
|
280
|
+
}
|
|
281
|
+
else if (align === 'center')
|
|
282
|
+
dy = (tall - outerHeight) / 2;
|
|
283
|
+
else if (align === 'flex-end')
|
|
284
|
+
dy = tall - outerHeight;
|
|
285
|
+
else if ((align === 'stretch' || align === 'baseline') &&
|
|
286
|
+
child.style.height === AUTO &&
|
|
287
|
+
!child.style.heightKeyword &&
|
|
288
|
+
(child.style.alignSelf === 'stretch' ||
|
|
289
|
+
(child.kind !== 'replaced' && !child.style.aspectRatio))) {
|
|
290
|
+
// a stretched item is its area's height, within its own least and
|
|
291
|
+
// greatest (10.3): taller than what it holds, or shorter where its
|
|
292
|
+
// tracks let it be, what it holds then running past it. An image, a
|
|
293
|
+
// control or a box with an `aspect-ratio` keeps its own height, as
|
|
294
|
+
// `normal` has one with a natural size or a ratio — which is what
|
|
295
|
+
// the grid's `stretch` may be, and the item's own may not.
|
|
296
|
+
const stretched = tall - child.marginTop - child.marginBottom;
|
|
297
|
+
const height = clampHeight(child, Math.max(stretched, child.verticalExtra));
|
|
298
|
+
// and one with a ratio that is not stretched across is as wide as
|
|
299
|
+
// that height makes it (CSS Sizing 4, 5.1)
|
|
300
|
+
const wide = child.style.width === AUTO &&
|
|
301
|
+
!child.style.widthKeyword &&
|
|
302
|
+
!(justify === 'stretch' && !left && !right) &&
|
|
303
|
+
height !== child.height
|
|
304
|
+
? widthThroughRatio(child, height)
|
|
305
|
+
: null;
|
|
306
|
+
const width = wide === null ? child.width : clampWidth(child, wide, area, ctx);
|
|
307
|
+
// what is in it takes its percentages of that height, which a
|
|
308
|
+
// stretch makes definite, as it does a flex item's
|
|
309
|
+
if (child.kind !== 'replaced' &&
|
|
310
|
+
(wide !== null || percentHeightsIn(child))) {
|
|
311
|
+
FLEXED_HEIGHT.set(child, Math.max(0, height - child.verticalExtra));
|
|
312
|
+
try {
|
|
313
|
+
ctx.layoutSubtree(child, width);
|
|
314
|
+
}
|
|
315
|
+
finally {
|
|
316
|
+
FLEXED_HEIGHT.delete(child);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
child.width = width;
|
|
320
|
+
child.height = height;
|
|
321
|
+
}
|
|
322
|
+
moveTo(child, box.contentX + lefts[item.col] + child.marginLeft + Math.max(0, dx), box.contentY + tops[item.row] + child.marginTop + Math.max(0, dy));
|
|
323
|
+
}
|
|
324
|
+
return height;
|
|
325
|
+
}
|
|
326
|
+
/** An axis's explicit tracks and the names of their lines, a `repeat()`
|
|
327
|
+
* of what fits counted out against its size where it has one, and once
|
|
328
|
+
* where it has none (CSS Grid 1, 7.2.3.2). */
|
|
329
|
+
function trackList(template, width, gap) {
|
|
330
|
+
if (!template)
|
|
331
|
+
return { tracks: [], names: [[]], fit: null };
|
|
332
|
+
const { repeat } = template;
|
|
333
|
+
if (!repeat) {
|
|
334
|
+
return { tracks: template.tracks, names: template.names, fit: null };
|
|
335
|
+
}
|
|
336
|
+
const outer = template.tracks;
|
|
337
|
+
const unit = repeat.tracks;
|
|
338
|
+
// what one repetition takes: its tracks' maximums where those are
|
|
339
|
+
// lengths, and their minimums where not (7.2.3.2)
|
|
340
|
+
const base = Number.isFinite(width) ? width : 0;
|
|
341
|
+
const fixed = (track) => lengthOf(track.max, base) ?? lengthOf(track.min, base) ?? 0;
|
|
342
|
+
const others = outer.reduce((sum, t) => sum + fixed(t), 0);
|
|
343
|
+
const each = unit.reduce((sum, t) => sum + fixed(t), 0);
|
|
344
|
+
let count = 1;
|
|
345
|
+
if (Number.isFinite(width) && each > 0) {
|
|
346
|
+
const room = width - others - gap * outer.length;
|
|
347
|
+
count = Math.max(1, Math.floor((room + gap) / (each + gap * unit.length)));
|
|
348
|
+
}
|
|
349
|
+
// the repetitions' lines where they meet carry the names of both sides
|
|
350
|
+
const tracks = [];
|
|
351
|
+
const names = [];
|
|
352
|
+
for (let i = 0; i < repeat.at; i += 1) {
|
|
353
|
+
names.push(template.names[i]);
|
|
354
|
+
tracks.push(outer[i]);
|
|
355
|
+
}
|
|
356
|
+
let line = [...template.names[repeat.at]];
|
|
357
|
+
for (let k = 0; k < Math.min(count, 1000); k += 1) {
|
|
358
|
+
line.push(...repeat.names[0]);
|
|
359
|
+
for (let j = 0; j < unit.length; j += 1) {
|
|
360
|
+
names.push(line);
|
|
361
|
+
tracks.push(unit[j]);
|
|
362
|
+
line = [...repeat.names[j + 1]];
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
line.push(...repeat.after);
|
|
366
|
+
for (let i = repeat.at; i < outer.length; i += 1) {
|
|
367
|
+
names.push(line);
|
|
368
|
+
tracks.push(outer[i]);
|
|
369
|
+
line = [...template.names[i + 1]];
|
|
370
|
+
}
|
|
371
|
+
names.push(line);
|
|
372
|
+
const repeated = Math.min(count, 1000) * unit.length;
|
|
373
|
+
return {
|
|
374
|
+
tracks,
|
|
375
|
+
names,
|
|
376
|
+
fit: repeat.fit ? [repeat.at, repeat.at + repeated] : null,
|
|
377
|
+
};
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Place the items (CSS Grid 1, 8.5): an item with both its lines where it
|
|
381
|
+
* says; one that names only the lines across the flow — its row, where the
|
|
382
|
+
* grid fills its rows — in the first place free along them, past the ones
|
|
383
|
+
* placed there before it; and the rest in order from a cursor that moves
|
|
384
|
+
* along the flow and on to the next line of it — to the next where an
|
|
385
|
+
* item's own line is before it — or, `dense`, from the start each time.
|
|
386
|
+
* `grid-auto-flow: column` is the same with the axes turned round.
|
|
387
|
+
*/
|
|
388
|
+
function place(boxes, cols, rows, flow) {
|
|
389
|
+
const byColumn = flow.startsWith('column');
|
|
390
|
+
const dense = flow.endsWith('dense');
|
|
391
|
+
// in the flow's terms: `a` along it, `b` across it
|
|
392
|
+
const taken = [];
|
|
393
|
+
const free = (b, a, bs, as) => {
|
|
394
|
+
for (let r = b; r < b + bs; r += 1) {
|
|
395
|
+
for (let c = a; c < a + as; c += 1)
|
|
396
|
+
if (taken[r]?.[c])
|
|
397
|
+
return false;
|
|
398
|
+
}
|
|
399
|
+
return true;
|
|
400
|
+
};
|
|
401
|
+
const take = (b, a, bs, as) => {
|
|
402
|
+
for (let r = b; r < b + bs; r += 1) {
|
|
403
|
+
const line = (taken[r] ??= []);
|
|
404
|
+
for (let c = a; c < a + as; c += 1)
|
|
405
|
+
line[c] = true;
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
const placed = boxes.map((box) => {
|
|
409
|
+
const style = box.style;
|
|
410
|
+
const [col, colSpan] = placement(style.gridColumnStart, style.gridColumnEnd, cols);
|
|
411
|
+
const [row, rowSpan] = placement(style.gridRowStart, style.gridRowEnd, rows);
|
|
412
|
+
return byColumn
|
|
413
|
+
? { box, a: row ?? -1, as: rowSpan, b: col ?? -1, bs: colSpan }
|
|
414
|
+
: { box, a: col ?? -1, as: colSpan, b: row ?? -1, bs: rowSpan };
|
|
415
|
+
});
|
|
416
|
+
// 1. what says both where it goes
|
|
417
|
+
for (const p of placed)
|
|
418
|
+
if (p.a >= 0 && p.b >= 0)
|
|
419
|
+
take(p.b, p.a, p.bs, p.as);
|
|
420
|
+
// 2. what says only which line of the flow
|
|
421
|
+
const past = new Map();
|
|
422
|
+
for (const p of placed) {
|
|
423
|
+
if (p.b < 0 || p.a >= 0)
|
|
424
|
+
continue;
|
|
425
|
+
let a = dense ? 0 : (past.get(p.b) ?? 0);
|
|
426
|
+
while (!free(p.b, a, p.bs, p.as) && a < 10_000)
|
|
427
|
+
a += 1;
|
|
428
|
+
p.a = a;
|
|
429
|
+
take(p.b, a, p.bs, p.as);
|
|
430
|
+
past.set(p.b, a + p.as);
|
|
431
|
+
}
|
|
432
|
+
// 3. how long a line of the flow is: the explicit grid's, and as long as
|
|
433
|
+
// the items with a place along it and the longest span without one need
|
|
434
|
+
let length = byColumn ? rows.tracks : cols.tracks;
|
|
435
|
+
for (const p of placed)
|
|
436
|
+
length = Math.max(length, p.a >= 0 ? p.a + p.as : p.as);
|
|
437
|
+
// 4. the rest, in order, from the cursor
|
|
438
|
+
let cursorB = 0;
|
|
439
|
+
let cursorA = 0;
|
|
440
|
+
for (const p of placed) {
|
|
441
|
+
if (p.b >= 0)
|
|
442
|
+
continue;
|
|
443
|
+
if (dense) {
|
|
444
|
+
cursorB = 0;
|
|
445
|
+
cursorA = 0;
|
|
446
|
+
}
|
|
447
|
+
if (p.a >= 0) {
|
|
448
|
+
let b = p.a < cursorA ? cursorB + 1 : cursorB;
|
|
449
|
+
while (!free(b, p.a, p.bs, p.as))
|
|
450
|
+
b += 1;
|
|
451
|
+
p.b = b;
|
|
452
|
+
}
|
|
453
|
+
else {
|
|
454
|
+
let b = cursorB;
|
|
455
|
+
let a = cursorA;
|
|
456
|
+
for (;;) {
|
|
457
|
+
if (a + p.as > length) {
|
|
458
|
+
b += 1;
|
|
459
|
+
a = 0;
|
|
460
|
+
continue;
|
|
461
|
+
}
|
|
462
|
+
if (free(b, a, p.bs, p.as))
|
|
463
|
+
break;
|
|
464
|
+
a += 1;
|
|
465
|
+
}
|
|
466
|
+
p.b = b;
|
|
467
|
+
p.a = a;
|
|
468
|
+
}
|
|
469
|
+
take(p.b, p.a, p.bs, p.as);
|
|
470
|
+
cursorB = p.b;
|
|
471
|
+
cursorA = p.a + p.as;
|
|
472
|
+
}
|
|
473
|
+
return placed.map((p) => byColumn
|
|
474
|
+
? {
|
|
475
|
+
box: p.box,
|
|
476
|
+
row: p.a,
|
|
477
|
+
rows: p.as,
|
|
478
|
+
col: p.b,
|
|
479
|
+
cols: p.bs,
|
|
480
|
+
min: -1,
|
|
481
|
+
max: -1,
|
|
482
|
+
}
|
|
483
|
+
: {
|
|
484
|
+
box: p.box,
|
|
485
|
+
row: p.b,
|
|
486
|
+
rows: p.bs,
|
|
487
|
+
col: p.a,
|
|
488
|
+
cols: p.as,
|
|
489
|
+
min: -1,
|
|
490
|
+
max: -1,
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
/** A track's minimum or maximum where it is a length or a percentage of
|
|
494
|
+
* `base`, never below zero; null where it is content or an `fr`. */
|
|
495
|
+
function lengthOf(len, base) {
|
|
496
|
+
if (typeof len === 'number')
|
|
497
|
+
return Math.max(0, len);
|
|
498
|
+
if (typeof len === 'object' &&
|
|
499
|
+
len !== null &&
|
|
500
|
+
!('fr' in len) &&
|
|
501
|
+
!('fit' in len) &&
|
|
502
|
+
isPct(len)) {
|
|
503
|
+
return Math.max(0, resolve(len, base));
|
|
504
|
+
}
|
|
505
|
+
return null;
|
|
506
|
+
}
|
|
507
|
+
/** The size of the tracks from one to `count` after it, the gaps and the
|
|
508
|
+
* space distributed between them included. */
|
|
509
|
+
function extent(sizes, at, from, count) {
|
|
510
|
+
const last = Math.min(sizes.length, from + count) - 1;
|
|
511
|
+
return last < from ? 0 : at[last] + sizes[last] - at[from];
|
|
512
|
+
}
|
|
513
|
+
/** An item's max-content width, its border box's: measured once in the
|
|
514
|
+
* box's life, as a table cell's is (`Box.intrinsicMaxContent`). */
|
|
515
|
+
function maxContentOf(box, ctx) {
|
|
516
|
+
if (box.intrinsicMaxContent < 0) {
|
|
517
|
+
box.intrinsicMaxContent = measureIntrinsicWidth(box, ctx, Infinity);
|
|
518
|
+
}
|
|
519
|
+
return box.intrinsicMaxContent;
|
|
520
|
+
}
|
|
521
|
+
/** Lay an item out in its area: stretched across it where its width is
|
|
522
|
+
* `auto` and it is stretched, or at its content's width, no wider than
|
|
523
|
+
* the area, where it is aligned instead. */
|
|
524
|
+
function layoutItem(item, area, ctx,
|
|
525
|
+
/** Its border box's height before the rows are sized, where it has one. */
|
|
526
|
+
tall) {
|
|
527
|
+
const child = item.box;
|
|
528
|
+
const style = child.style;
|
|
529
|
+
const parent = child.parent?.style;
|
|
530
|
+
const justify = style.justifySelf === 'auto'
|
|
531
|
+
? (parent?.justifyItems ?? 'normal')
|
|
532
|
+
: style.justifySelf;
|
|
533
|
+
const margins = child.marginLeft + child.marginRight;
|
|
534
|
+
const room = Math.max(0, area - margins);
|
|
535
|
+
// its content's widths, border box: measured once in its life
|
|
536
|
+
const content = () => {
|
|
537
|
+
if (child.intrinsicMaxContent < 0)
|
|
538
|
+
maxContentOf(child, ctx);
|
|
539
|
+
if (child.intrinsicMinContent < 0) {
|
|
540
|
+
child.intrinsicMinContent = measureIntrinsicWidth(child, ctx, MIN_CONTENT_PROBE);
|
|
541
|
+
}
|
|
542
|
+
return [child.intrinsicMinContent, child.intrinsicMaxContent];
|
|
543
|
+
};
|
|
544
|
+
const keyword = style.widthKeyword;
|
|
545
|
+
// `stretch` fills its area, and so does `normal` but for a replaced
|
|
546
|
+
// element, which it sizes as a block's is: a box with a ratio is as wide
|
|
547
|
+
// as a block would be where it has no height yet (CSS Grid 1, 6.2)
|
|
548
|
+
const across = (justify === 'stretch' ||
|
|
549
|
+
(justify === 'normal' && child.kind !== 'replaced')) &&
|
|
550
|
+
!autoMargins(child, 'x').some(Boolean);
|
|
551
|
+
// a height it has already, through a ratio: its width, whatever its
|
|
552
|
+
// content says, where `stretch` does not fill its area (CSS Sizing 4,
|
|
553
|
+
// 5.1)
|
|
554
|
+
const fills = justify === 'stretch' && !autoMargins(child, 'x').some(Boolean);
|
|
555
|
+
const through = style.width === AUTO && !fills && tall !== null
|
|
556
|
+
? widthThroughRatio(child, tall)
|
|
557
|
+
: null;
|
|
558
|
+
let width;
|
|
559
|
+
if (style.width !== AUTO) {
|
|
560
|
+
const extra = style.boxSizing === 'border-box' ? 0 : child.horizontalExtra;
|
|
561
|
+
width = resolve(style.width, area, room - extra) + extra;
|
|
562
|
+
}
|
|
563
|
+
else if (through !== null) {
|
|
564
|
+
width = clampWidth(child, through, area, ctx);
|
|
565
|
+
// and no narrower than its content where it shows what overflows it
|
|
566
|
+
// (5.2), as a block with a ratio is
|
|
567
|
+
if (child.kind !== 'replaced' && showsOverflow(child) && !keyword) {
|
|
568
|
+
width = Math.max(width, content()[0]);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
else if (keyword) {
|
|
572
|
+
// a width of its content's is that, whatever aligns it
|
|
573
|
+
const [narrowest, widest] = content();
|
|
574
|
+
const fit = typeof keyword === 'object'
|
|
575
|
+
? resolve(keyword.fit, area, room) + child.horizontalExtra
|
|
576
|
+
: room;
|
|
577
|
+
width =
|
|
578
|
+
keyword === 'stretch'
|
|
579
|
+
? room
|
|
580
|
+
: keyword === 'min-content'
|
|
581
|
+
? narrowest
|
|
582
|
+
: keyword === 'max-content'
|
|
583
|
+
? widest
|
|
584
|
+
: Math.min(widest, Math.max(narrowest, fit));
|
|
585
|
+
}
|
|
586
|
+
else if (across) {
|
|
587
|
+
width = room;
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
// fit-content: no wider than its content at its widest, nor narrower
|
|
591
|
+
// than at its narrowest, which may run past its area
|
|
592
|
+
const [narrowest, widest] = content();
|
|
593
|
+
width = Math.min(widest, Math.max(narrowest, room));
|
|
594
|
+
}
|
|
595
|
+
if (child.kind !== 'replaced') {
|
|
596
|
+
ctx.layoutSubtree(child, width);
|
|
597
|
+
return;
|
|
598
|
+
}
|
|
599
|
+
// a replaced element sizes itself from its style: then it is given the
|
|
600
|
+
// width it was stretched to, or the one its height makes, and the height
|
|
601
|
+
// its ratio makes of that width where it has none of its own
|
|
602
|
+
ctx.layoutSubtree(child, area);
|
|
603
|
+
if (style.width !== AUTO || keyword)
|
|
604
|
+
return;
|
|
605
|
+
if (through !== null) {
|
|
606
|
+
child.width = width;
|
|
607
|
+
child.height = tall;
|
|
608
|
+
}
|
|
609
|
+
else if (fills) {
|
|
610
|
+
child.width = clampWidth(child, width, area, ctx);
|
|
611
|
+
const down = style.height === AUTO ? heightThroughRatio(child, child.width) : null;
|
|
612
|
+
if (down !== null)
|
|
613
|
+
child.height = clampHeight(child, down);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
/** Whether a box's content is its least size through a ratio, which it is
|
|
617
|
+
* where the box shows what overflows it and its least width is `auto`
|
|
618
|
+
* (CSS Sizing 4, 5.2). */
|
|
619
|
+
function showsOverflow(box) {
|
|
620
|
+
const style = box.style;
|
|
621
|
+
return (style.minWidth === AUTO &&
|
|
622
|
+
!style.minWidthKeyword &&
|
|
623
|
+
(style.overflowX === 'visible' || style.overflowX === 'clip') &&
|
|
624
|
+
(style.overflowY === 'visible' || style.overflowY === 'clip'));
|
|
625
|
+
}
|
|
626
|
+
/** Which tracks of an axis stay: all but those of an `auto-fit`
|
|
627
|
+
* repetition that no item is in, which collapse (CSS Grid 1, 7.2.3.2).
|
|
628
|
+
* Null where they all stay. */
|
|
629
|
+
function keptTracks(count, fit, items, columns) {
|
|
630
|
+
if (!fit)
|
|
631
|
+
return null;
|
|
632
|
+
const used = new Array(count).fill(false);
|
|
633
|
+
for (const item of items) {
|
|
634
|
+
const from = columns ? item.col : item.row;
|
|
635
|
+
const span = columns ? item.cols : item.rows;
|
|
636
|
+
for (let t = from; t < Math.min(count, from + span); t += 1)
|
|
637
|
+
used[t] = true;
|
|
638
|
+
}
|
|
639
|
+
let collapsed = false;
|
|
640
|
+
const keep = used.map((inUse, t) => {
|
|
641
|
+
const stays = inUse || t < fit[0] || t >= fit[1];
|
|
642
|
+
if (!stays)
|
|
643
|
+
collapsed = true;
|
|
644
|
+
return stays;
|
|
645
|
+
});
|
|
646
|
+
return collapsed ? keep : null;
|
|
647
|
+
}
|
|
648
|
+
/** Where each track that stays is among those that do. */
|
|
649
|
+
function indexOfKept(keep) {
|
|
650
|
+
if (!keep)
|
|
651
|
+
return null;
|
|
652
|
+
const at = [];
|
|
653
|
+
let n = 0;
|
|
654
|
+
for (const stays of keep) {
|
|
655
|
+
at.push(n);
|
|
656
|
+
if (stays)
|
|
657
|
+
n += 1;
|
|
658
|
+
}
|
|
659
|
+
return at;
|
|
660
|
+
}
|
|
661
|
+
/** Each track's start and end, the collapsed ones back among the others
|
|
662
|
+
* as nothing, at the end of the one before. */
|
|
663
|
+
function tracksOf(sizes, at, keep) {
|
|
664
|
+
if (!keep)
|
|
665
|
+
return sizes.map((size, i) => [at[i], at[i] + size]);
|
|
666
|
+
const out = [];
|
|
667
|
+
let edge = at.length ? at[0] : 0;
|
|
668
|
+
let k = 0;
|
|
669
|
+
for (const stays of keep) {
|
|
670
|
+
if (stays) {
|
|
671
|
+
out.push([at[k], at[k] + sizes[k]]);
|
|
672
|
+
edge = at[k] + sizes[k];
|
|
673
|
+
k += 1;
|
|
674
|
+
}
|
|
675
|
+
else
|
|
676
|
+
out.push([edge, edge]);
|
|
677
|
+
}
|
|
678
|
+
return out;
|
|
679
|
+
}
|
|
680
|
+
/** Whether a box's own height, least or greatest, is a percentage. */
|
|
681
|
+
function percentOwn(box) {
|
|
682
|
+
const style = box.style;
|
|
683
|
+
return (isPct(style.height) ||
|
|
684
|
+
isPct(style.minHeight) ||
|
|
685
|
+
(style.maxHeight !== 'none' && isPct(style.maxHeight)));
|
|
686
|
+
}
|
|
687
|
+
/**
|
|
688
|
+
* An item's border-box height before the rows are sized, where it has one
|
|
689
|
+
* then: a height of its own — a percentage of the rows it spans where they
|
|
690
|
+
* have a length for a size — or the rows' where it is stretched down them
|
|
691
|
+
* by its own `align-self`. Null where it has none, which is where its
|
|
692
|
+
* height is its content's.
|
|
693
|
+
*/
|
|
694
|
+
function heightBeforeRows(box, rows) {
|
|
695
|
+
const style = box.style;
|
|
696
|
+
const own = resolveOrNull(style.height, rows);
|
|
697
|
+
if (own !== null && Number.isFinite(own)) {
|
|
698
|
+
return clampHeight(box, style.boxSizing === 'border-box'
|
|
699
|
+
? Math.max(own, box.verticalExtra)
|
|
700
|
+
: own + box.verticalExtra);
|
|
701
|
+
}
|
|
702
|
+
if (style.height === AUTO &&
|
|
703
|
+
!style.heightKeyword &&
|
|
704
|
+
style.alignSelf === 'stretch' &&
|
|
705
|
+
Number.isFinite(rows) &&
|
|
706
|
+
!autoMargins(box, 'y').some(Boolean)) {
|
|
707
|
+
const room = rows - box.marginTop - box.marginBottom;
|
|
708
|
+
return clampHeight(box, Math.max(room, box.verticalExtra));
|
|
709
|
+
}
|
|
710
|
+
return null;
|
|
711
|
+
}
|
|
712
|
+
/** A track's sizing functions, its lengths resolved against the size of the
|
|
713
|
+
* axis: a percentage of a size the tracks are still finding is `auto`
|
|
714
|
+
* (CSS Grid 1, 7.2.1), and `fit-content()` of one its content's widest. */
|
|
715
|
+
function sizing(track, base) {
|
|
716
|
+
const length = (len) => typeof len === 'number'
|
|
717
|
+
? Math.max(0, len)
|
|
718
|
+
: len === AUTO || !Number.isFinite(base)
|
|
719
|
+
? null
|
|
720
|
+
: Math.max(0, resolve(len, base));
|
|
721
|
+
const { min, max } = track;
|
|
722
|
+
const least = min === 'min-content' || min === 'max-content'
|
|
723
|
+
? min
|
|
724
|
+
: (length(min) ?? 'auto');
|
|
725
|
+
let most;
|
|
726
|
+
if (max === 'min-content' || max === 'max-content')
|
|
727
|
+
most = max;
|
|
728
|
+
else if (typeof max === 'object' && max !== null && 'fr' in max) {
|
|
729
|
+
most = { fr: max.fr };
|
|
730
|
+
}
|
|
731
|
+
else if (typeof max === 'object' && max !== null && 'fit' in max) {
|
|
732
|
+
const fit = length(max.fit);
|
|
733
|
+
most = fit === null ? 'max-content' : { fit };
|
|
734
|
+
}
|
|
735
|
+
else
|
|
736
|
+
most = length(max) ?? 'auto';
|
|
737
|
+
return { min: least, max: most };
|
|
738
|
+
}
|
|
739
|
+
/** An item's own least and greatest border-box widths, where they are
|
|
740
|
+
* lengths or its content's: a percentage of the area the tracks are still
|
|
741
|
+
* being sized for is none (CSS Sizing 3, 5.2.1). */
|
|
742
|
+
function ownWidths(box, narrowest, widest) {
|
|
743
|
+
const style = box.style;
|
|
744
|
+
const extra = style.boxSizing === 'border-box' ? 0 : box.horizontalExtra;
|
|
745
|
+
const keyword = (k) => k === 'min-content' ? narrowest : k === 'max-content' ? widest : null;
|
|
746
|
+
const least = keyword(style.minWidthKeyword) ??
|
|
747
|
+
(typeof style.minWidth === 'number' ? style.minWidth + extra : 0);
|
|
748
|
+
const most = keyword(style.maxWidthKeyword) ??
|
|
749
|
+
(typeof style.maxWidth === 'number' ? style.maxWidth + extra : Infinity);
|
|
750
|
+
return [least, Math.max(least, most)];
|
|
751
|
+
}
|
|
752
|
+
/**
|
|
753
|
+
* The least an item makes the columns it is in (CSS Grid 1, 11.5, its
|
|
754
|
+
* "minimum contribution"): its narrowest where it has a width of its own,
|
|
755
|
+
* and its own least width where it has one of those.
|
|
756
|
+
*/
|
|
757
|
+
function leastWidth(item, tracks, gap, measure) {
|
|
758
|
+
const box = item.box;
|
|
759
|
+
const style = box.style;
|
|
760
|
+
const margins = box.marginLeft + box.marginRight;
|
|
761
|
+
measure(item);
|
|
762
|
+
if ((style.width !== AUTO && !isPct(style.width)) || style.widthKeyword) {
|
|
763
|
+
return item.min;
|
|
764
|
+
}
|
|
765
|
+
if (style.minWidthKeyword || style.minWidth !== AUTO) {
|
|
766
|
+
const [least] = ownWidths(box, box.intrinsicMinContent, box.intrinsicMaxContent);
|
|
767
|
+
return least + margins;
|
|
768
|
+
}
|
|
769
|
+
return (automaticMinimum(item.col, item.cols, tracks, gap, style.overflowX, margins, item.min - margins) + margins);
|
|
770
|
+
}
|
|
771
|
+
/**
|
|
772
|
+
* An item's automatic least size (CSS Grid 1, 6.6): its content's, where it
|
|
773
|
+
* shows what overflows it and is in an `auto` track — the only track, where
|
|
774
|
+
* one of them is an `fr` — and no larger than the tracks' lengths leave it
|
|
775
|
+
* room for where every one of them has a length for a maximum; else none.
|
|
776
|
+
*/
|
|
777
|
+
function automaticMinimum(start, count, tracks, gap, overflow, margins, content) {
|
|
778
|
+
// a scroll container has none; `clip` is not one (CSS Overflow 3, 3.1)
|
|
779
|
+
if (overflow !== 'visible' && overflow !== 'clip')
|
|
780
|
+
return 0;
|
|
781
|
+
const end = Math.min(tracks.length, start + count);
|
|
782
|
+
let auto = false;
|
|
783
|
+
let flexible = false;
|
|
784
|
+
let fixed = true;
|
|
785
|
+
let room = gap * Math.max(0, end - start - 1) - margins;
|
|
786
|
+
for (let t = start; t < end; t += 1) {
|
|
787
|
+
const { min, max } = tracks[t];
|
|
788
|
+
if (min === 'auto')
|
|
789
|
+
auto = true;
|
|
790
|
+
if (typeof max === 'object' && 'fr' in max)
|
|
791
|
+
flexible = true;
|
|
792
|
+
if (typeof max === 'number')
|
|
793
|
+
room += max;
|
|
794
|
+
else
|
|
795
|
+
fixed = false;
|
|
796
|
+
}
|
|
797
|
+
if (!auto || (flexible && end - start > 1))
|
|
798
|
+
return 0;
|
|
799
|
+
return Math.max(0, fixed ? Math.min(content, room) : content);
|
|
800
|
+
}
|
|
801
|
+
/** What an item makes of the rows it is in: its height at its area's
|
|
802
|
+
* width, whichever the constraint, and the least it can be, as a
|
|
803
|
+
* column's. */
|
|
804
|
+
function rowItem(item, tracks, gap) {
|
|
805
|
+
const box = item.box;
|
|
806
|
+
const margins = box.marginTop + box.marginBottom;
|
|
807
|
+
const outer = () => box.height + margins;
|
|
808
|
+
return {
|
|
809
|
+
start: item.row,
|
|
810
|
+
span: item.rows,
|
|
811
|
+
minContent: outer,
|
|
812
|
+
maxContent: outer,
|
|
813
|
+
minimum: () => {
|
|
814
|
+
const style = box.style;
|
|
815
|
+
if (style.height !== AUTO && !isPct(style.height))
|
|
816
|
+
return outer();
|
|
817
|
+
if (style.minHeight !== AUTO) {
|
|
818
|
+
const extra = style.boxSizing === 'border-box' ? 0 : box.verticalExtra;
|
|
819
|
+
const least = typeof style.minHeight === 'number' ? style.minHeight + extra : 0;
|
|
820
|
+
return least + margins;
|
|
821
|
+
}
|
|
822
|
+
return (automaticMinimum(item.row, item.rows, tracks, gap, style.overflowY, margins, box.height) + margins);
|
|
823
|
+
},
|
|
824
|
+
};
|
|
825
|
+
}
|
|
826
|
+
/** A grid's least content height where it has no height of its own: its
|
|
827
|
+
* `min-height`, a length or a percentage of a height. */
|
|
828
|
+
function leastHeight(box) {
|
|
829
|
+
const style = box.style;
|
|
830
|
+
if (style.minHeight === AUTO)
|
|
831
|
+
return 0;
|
|
832
|
+
const px = resolveOrNull(style.minHeight, box.percentHeightBase);
|
|
833
|
+
if (px === null || !Number.isFinite(px))
|
|
834
|
+
return 0;
|
|
835
|
+
return Math.max(0, style.boxSizing === 'border-box' ? px - box.verticalExtra : px);
|
|
836
|
+
}
|
|
837
|
+
/**
|
|
838
|
+
* Where each track starts from the grid's content edge, with the space the
|
|
839
|
+
* tracks leave placed as `justify-content` or `align-content` has it (CSS
|
|
840
|
+
* Box Alignment 3, 5.1): before them, after them, between them or around
|
|
841
|
+
* each — none where the axis has no size of its own. `center` and `end`
|
|
842
|
+
* overflow the start as well, where the tracks are larger than the room;
|
|
843
|
+
* the distributions fall back to the start.
|
|
844
|
+
*/
|
|
845
|
+
function starts(sizes, gap, distribution, room) {
|
|
846
|
+
let used = gap * Math.max(0, sizes.length - 1);
|
|
847
|
+
for (const size of sizes)
|
|
848
|
+
used += size;
|
|
849
|
+
const free = Number.isFinite(room) ? room - used : 0;
|
|
850
|
+
const n = sizes.length;
|
|
851
|
+
let at = 0;
|
|
852
|
+
let between = 0;
|
|
853
|
+
if (n && free !== 0) {
|
|
854
|
+
if (distribution === 'center')
|
|
855
|
+
at = free / 2;
|
|
856
|
+
else if (distribution === 'end' ||
|
|
857
|
+
distribution === 'flex-end' ||
|
|
858
|
+
distribution === 'right') {
|
|
859
|
+
at = free;
|
|
860
|
+
}
|
|
861
|
+
else if (free > 0 && distribution === 'space-between') {
|
|
862
|
+
between = n > 1 ? free / (n - 1) : 0;
|
|
863
|
+
}
|
|
864
|
+
else if (free > 0 && distribution === 'space-around') {
|
|
865
|
+
between = free / n;
|
|
866
|
+
at = between / 2;
|
|
867
|
+
}
|
|
868
|
+
else if (free > 0 && distribution === 'space-evenly') {
|
|
869
|
+
between = free / (n + 1);
|
|
870
|
+
at = between;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
const out = [];
|
|
874
|
+
for (const size of sizes) {
|
|
875
|
+
out.push(at);
|
|
876
|
+
at += size + gap + between;
|
|
877
|
+
}
|
|
878
|
+
return out;
|
|
879
|
+
}
|
|
880
|
+
/** Which of an item's margins on an axis are `auto`, start and end. */
|
|
881
|
+
function autoMargins(box, axis) {
|
|
882
|
+
const style = box.style;
|
|
883
|
+
return axis === 'x'
|
|
884
|
+
? [style.marginLeft === AUTO, style.marginRight === AUTO]
|
|
885
|
+
: [style.marginTop === AUTO, style.marginBottom === AUTO];
|
|
886
|
+
}
|
|
887
|
+
/** Whether a track's least or greatest size is a percentage. */
|
|
888
|
+
function percentTrack(track) {
|
|
889
|
+
const { min, max } = track;
|
|
890
|
+
if (typeof min === 'object' && isPct(min))
|
|
891
|
+
return true;
|
|
892
|
+
if (typeof max !== 'object' || max === null)
|
|
893
|
+
return false;
|
|
894
|
+
if ('fr' in max)
|
|
895
|
+
return false;
|
|
896
|
+
if ('fit' in max)
|
|
897
|
+
return typeof max.fit === 'object' && isPct(max.fit);
|
|
898
|
+
return isPct(max);
|
|
899
|
+
}
|
|
900
|
+
//# sourceMappingURL=css-grid.js.map
|