@react-x11/components 0.1.0 → 0.2.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 +979 -21
- package/dist/ansi/cast.d.ts +48 -0
- package/dist/ansi/cast.d.ts.map +1 -0
- package/dist/ansi/cast.js +135 -0
- package/dist/ansi/cast.js.map +1 -0
- package/dist/ansi/index.d.ts +10 -0
- package/dist/ansi/index.d.ts.map +1 -0
- package/dist/ansi/index.js +27 -0
- package/dist/ansi/index.js.map +1 -0
- package/dist/ansi/palette.d.ts +79 -0
- package/dist/ansi/palette.d.ts.map +1 -0
- package/dist/ansi/palette.js +155 -0
- package/dist/ansi/palette.js.map +1 -0
- package/dist/ansi/parse.d.ts +114 -0
- package/dist/ansi/parse.d.ts.map +1 -0
- package/dist/ansi/parse.js +687 -0
- package/dist/ansi/parse.js.map +1 -0
- package/dist/ansi/sgr.d.ts +87 -0
- package/dist/ansi/sgr.d.ts.map +1 -0
- package/dist/ansi/sgr.js +302 -0
- package/dist/ansi/sgr.js.map +1 -0
- package/dist/ansi/utf8.d.ts +15 -0
- package/dist/ansi/utf8.d.ts.map +1 -0
- package/dist/ansi/utf8.js +82 -0
- package/dist/ansi/utf8.js.map +1 -0
- package/dist/calendar/Calendar.d.ts +136 -0
- package/dist/calendar/Calendar.d.ts.map +1 -0
- package/dist/calendar/Calendar.js +460 -0
- package/dist/calendar/Calendar.js.map +1 -0
- package/dist/calendar/DatePicker.d.ts +52 -0
- package/dist/calendar/DatePicker.d.ts.map +1 -0
- package/dist/calendar/DatePicker.js +257 -0
- package/dist/calendar/DatePicker.js.map +1 -0
- package/dist/calendar/dates.d.ts +90 -0
- package/dist/calendar/dates.d.ts.map +1 -0
- package/dist/calendar/dates.js +236 -0
- package/dist/calendar/dates.js.map +1 -0
- package/dist/calendar/index.d.ts +8 -0
- package/dist/calendar/index.d.ts.map +1 -0
- package/dist/calendar/index.js +15 -0
- package/dist/calendar/index.js.map +1 -0
- package/dist/charts/components.d.ts +141 -0
- package/dist/charts/components.d.ts.map +1 -0
- package/dist/charts/components.js +580 -0
- package/dist/charts/components.js.map +1 -0
- package/dist/charts/data.d.ts +198 -0
- package/dist/charts/data.d.ts.map +1 -0
- package/dist/charts/data.js +616 -0
- package/dist/charts/data.js.map +1 -0
- package/dist/charts/hx.d.ts +21 -0
- package/dist/charts/hx.d.ts.map +1 -0
- package/dist/charts/hx.js +15 -0
- package/dist/charts/hx.js.map +1 -0
- package/dist/charts/index.d.ts +27 -0
- package/dist/charts/index.d.ts.map +1 -0
- package/dist/charts/index.js +38 -0
- package/dist/charts/index.js.map +1 -0
- package/dist/charts/node.d.ts +96 -0
- package/dist/charts/node.d.ts.map +1 -0
- package/dist/charts/node.js +720 -0
- package/dist/charts/node.js.map +1 -0
- package/dist/charts/render.d.ts +153 -0
- package/dist/charts/render.d.ts.map +1 -0
- package/dist/charts/render.js +762 -0
- package/dist/charts/render.js.map +1 -0
- package/dist/charts/scale.d.ts +42 -0
- package/dist/charts/scale.d.ts.map +1 -0
- package/dist/charts/scale.js +173 -0
- package/dist/charts/scale.js.map +1 -0
- package/dist/charts/spec.d.ts +91 -0
- package/dist/charts/spec.d.ts.map +1 -0
- package/dist/charts/spec.js +33 -0
- package/dist/charts/spec.js.map +1 -0
- package/dist/charts/timers.d.ts +6 -0
- package/dist/charts/timers.d.ts.map +1 -0
- package/dist/charts/timers.js +14 -0
- package/dist/charts/timers.js.map +1 -0
- package/dist/code/hx.d.ts +24 -0
- package/dist/code/hx.d.ts.map +1 -0
- package/dist/code/hx.js +25 -0
- package/dist/code/hx.js.map +1 -0
- package/dist/code/index.d.ts +45 -0
- package/dist/code/index.d.ts.map +1 -0
- package/dist/code/index.js +93 -0
- package/dist/code/index.js.map +1 -0
- package/dist/code-editor/completion.d.ts +26 -0
- package/dist/code-editor/completion.d.ts.map +1 -0
- package/dist/code-editor/completion.js +129 -0
- package/dist/code-editor/completion.js.map +1 -0
- package/dist/code-editor/doc.d.ts +35 -0
- package/dist/code-editor/doc.d.ts.map +1 -0
- package/dist/code-editor/doc.js +162 -0
- package/dist/code-editor/doc.js.map +1 -0
- package/dist/code-editor/hx.d.ts +13 -0
- package/dist/code-editor/hx.d.ts.map +1 -0
- package/dist/code-editor/hx.js +10 -0
- package/dist/code-editor/hx.js.map +1 -0
- package/dist/code-editor/index.d.ts +88 -0
- package/dist/code-editor/index.d.ts.map +1 -0
- package/dist/code-editor/index.js +401 -0
- package/dist/code-editor/index.js.map +1 -0
- package/dist/code-editor/node.d.ts +343 -0
- package/dist/code-editor/node.d.ts.map +1 -0
- package/dist/code-editor/node.js +1521 -0
- package/dist/code-editor/node.js.map +1 -0
- package/dist/code-language/hljs.d.ts +47 -0
- package/dist/code-language/hljs.d.ts.map +1 -0
- package/dist/code-language/hljs.js +211 -0
- package/dist/code-language/hljs.js.map +1 -0
- package/dist/code-language/index.d.ts +22 -0
- package/dist/code-language/index.d.ts.map +1 -0
- package/dist/code-language/index.js +20 -0
- package/dist/code-language/index.js.map +1 -0
- package/dist/code-language/languages/glsl.d.ts +4 -0
- package/dist/code-language/languages/glsl.d.ts.map +1 -0
- package/dist/code-language/languages/glsl.js +99 -0
- package/dist/code-language/languages/glsl.js.map +1 -0
- package/dist/code-language/languages/javascript.d.ts +10 -0
- package/dist/code-language/languages/javascript.d.ts.map +1 -0
- package/dist/code-language/languages/javascript.js +360 -0
- package/dist/code-language/languages/javascript.js.map +1 -0
- package/dist/code-language/languages/json.d.ts +4 -0
- package/dist/code-language/languages/json.d.ts.map +1 -0
- package/dist/code-language/languages/json.js +68 -0
- package/dist/code-language/languages/json.js.map +1 -0
- package/dist/code-language/languages/shell.d.ts +4 -0
- package/dist/code-language/languages/shell.d.ts.map +1 -0
- package/dist/code-language/languages/shell.js +189 -0
- package/dist/code-language/languages/shell.js.map +1 -0
- package/dist/code-language/languages/sql.d.ts +11 -0
- package/dist/code-language/languages/sql.d.ts.map +1 -0
- package/dist/code-language/languages/sql.js +133 -0
- package/dist/code-language/languages/sql.js.map +1 -0
- package/dist/code-language/lezer.d.ts +24 -0
- package/dist/code-language/lezer.d.ts.map +1 -0
- package/dist/code-language/lezer.js +148 -0
- package/dist/code-language/lezer.js.map +1 -0
- package/dist/code-language/registry.d.ts +19 -0
- package/dist/code-language/registry.d.ts.map +1 -0
- package/dist/code-language/registry.js +56 -0
- package/dist/code-language/registry.js.map +1 -0
- package/dist/code-language/runs.d.ts +35 -0
- package/dist/code-language/runs.d.ts.map +1 -0
- package/dist/code-language/runs.js +88 -0
- package/dist/code-language/runs.js.map +1 -0
- package/dist/code-language/stream.d.ts +70 -0
- package/dist/code-language/stream.d.ts.map +1 -0
- package/dist/code-language/stream.js +243 -0
- package/dist/code-language/stream.js.map +1 -0
- package/dist/code-language/textmate.d.ts +27 -0
- package/dist/code-language/textmate.d.ts.map +1 -0
- package/dist/code-language/textmate.js +86 -0
- package/dist/code-language/textmate.js.map +1 -0
- package/dist/code-language/theme.d.ts +26 -0
- package/dist/code-language/theme.d.ts.map +1 -0
- package/dist/code-language/theme.js +108 -0
- package/dist/code-language/theme.js.map +1 -0
- package/dist/code-language/timers.d.ts +7 -0
- package/dist/code-language/timers.d.ts.map +1 -0
- package/dist/code-language/timers.js +22 -0
- package/dist/code-language/timers.js.map +1 -0
- package/dist/code-language/types.d.ts +173 -0
- package/dist/code-language/types.d.ts.map +1 -0
- package/dist/code-language/types.js +41 -0
- package/dist/code-language/types.js.map +1 -0
- package/dist/codeblock/index.d.ts +69 -0
- package/dist/codeblock/index.d.ts.map +1 -0
- package/dist/codeblock/index.js +85 -0
- package/dist/codeblock/index.js.map +1 -0
- package/dist/color-picker/ColorField.d.ts +39 -0
- package/dist/color-picker/ColorField.d.ts.map +1 -0
- package/dist/color-picker/ColorField.js +239 -0
- package/dist/color-picker/ColorField.js.map +1 -0
- package/dist/color-picker/ColorPicker.d.ts +109 -0
- package/dist/color-picker/ColorPicker.d.ts.map +1 -0
- package/dist/color-picker/ColorPicker.js +757 -0
- package/dist/color-picker/ColorPicker.js.map +1 -0
- package/dist/color-picker/color.d.ts +105 -0
- package/dist/color-picker/color.d.ts.map +1 -0
- package/dist/color-picker/color.js +313 -0
- package/dist/color-picker/color.js.map +1 -0
- package/dist/color-picker/index.d.ts +8 -0
- package/dist/color-picker/index.d.ts.map +1 -0
- package/dist/color-picker/index.js +19 -0
- package/dist/color-picker/index.js.map +1 -0
- package/dist/desktop-calendar/eds.d.ts +102 -0
- package/dist/desktop-calendar/eds.d.ts.map +1 -0
- package/dist/desktop-calendar/eds.js +356 -0
- package/dist/desktop-calendar/eds.js.map +1 -0
- package/dist/desktop-calendar/ical.d.ts +63 -0
- package/dist/desktop-calendar/ical.d.ts.map +1 -0
- package/dist/desktop-calendar/ical.js +57 -0
- package/dist/desktop-calendar/ical.js.map +1 -0
- package/dist/desktop-calendar/index.d.ts +72 -0
- package/dist/desktop-calendar/index.d.ts.map +1 -0
- package/dist/desktop-calendar/index.js +213 -0
- package/dist/desktop-calendar/index.js.map +1 -0
- package/dist/embed/client.d.ts +121 -0
- package/dist/embed/client.d.ts.map +1 -0
- package/dist/embed/client.js +203 -0
- package/dist/embed/client.js.map +1 -0
- package/dist/embed/host.d.ts +96 -0
- package/dist/embed/host.d.ts.map +1 -0
- package/dist/embed/host.js +266 -0
- package/dist/embed/host.js.map +1 -0
- package/dist/embed/index.d.ts +5 -0
- package/dist/embed/index.d.ts.map +1 -0
- package/dist/embed/index.js +13 -0
- package/dist/embed/index.js.map +1 -0
- package/dist/embed/timers.d.ts +6 -0
- package/dist/embed/timers.d.ts.map +1 -0
- package/dist/embed/timers.js +16 -0
- package/dist/embed/timers.js.map +1 -0
- package/dist/flow/draw.d.ts +45 -0
- package/dist/flow/draw.d.ts.map +1 -0
- package/dist/flow/draw.js +295 -0
- package/dist/flow/draw.js.map +1 -0
- package/dist/flow/index.d.ts +64 -0
- package/dist/flow/index.d.ts.map +1 -0
- package/dist/flow/index.js +306 -0
- package/dist/flow/index.js.map +1 -0
- package/dist/flow/model.d.ts +158 -0
- package/dist/flow/model.d.ts.map +1 -0
- package/dist/flow/model.js +566 -0
- package/dist/flow/model.js.map +1 -0
- package/dist/flow/node.d.ts +429 -0
- package/dist/flow/node.d.ts.map +1 -0
- package/dist/flow/node.js +3025 -0
- package/dist/flow/node.js.map +1 -0
- package/dist/flow/paths.d.ts +43 -0
- package/dist/flow/paths.d.ts.map +1 -0
- package/dist/flow/paths.js +327 -0
- package/dist/flow/paths.js.map +1 -0
- package/dist/flow/types.d.ts +561 -0
- package/dist/flow/types.d.ts.map +1 -0
- package/dist/flow/types.js +2 -0
- package/dist/flow/types.js.map +1 -0
- package/dist/formula/hx.d.ts +24 -0
- package/dist/formula/hx.d.ts.map +1 -0
- package/dist/formula/hx.js +25 -0
- package/dist/formula/hx.js.map +1 -0
- package/dist/formula/index.d.ts +74 -0
- package/dist/formula/index.d.ts.map +1 -0
- package/dist/formula/index.js +155 -0
- package/dist/formula/index.js.map +1 -0
- package/dist/formula/katex.d.ts +78 -0
- package/dist/formula/katex.d.ts.map +1 -0
- package/dist/formula/katex.js +130 -0
- package/dist/formula/katex.js.map +1 -0
- package/dist/formula/layout.d.ts +103 -0
- package/dist/formula/layout.d.ts.map +1 -0
- package/dist/formula/layout.js +716 -0
- package/dist/formula/layout.js.map +1 -0
- package/dist/formula/node.d.ts +50 -0
- package/dist/formula/node.d.ts.map +1 -0
- package/dist/formula/node.js +351 -0
- package/dist/formula/node.js.map +1 -0
- package/dist/html/controls.d.ts +48 -0
- package/dist/html/controls.d.ts.map +1 -0
- package/dist/html/controls.js +195 -0
- package/dist/html/controls.js.map +1 -0
- package/dist/html/css/cascade.d.ts +51 -0
- package/dist/html/css/cascade.d.ts.map +1 -0
- package/dist/html/css/cascade.js +552 -0
- package/dist/html/css/cascade.js.map +1 -0
- package/dist/html/css/parse.d.ts +74 -0
- package/dist/html/css/parse.d.ts.map +1 -0
- package/dist/html/css/parse.js +464 -0
- package/dist/html/css/parse.js.map +1 -0
- package/dist/html/css/style.d.ts +142 -0
- package/dist/html/css/style.d.ts.map +1 -0
- package/dist/html/css/style.js +1145 -0
- package/dist/html/css/style.js.map +1 -0
- package/dist/html/css/ua.d.ts +5 -0
- package/dist/html/css/ua.d.ts.map +1 -0
- package/dist/html/css/ua.js +171 -0
- package/dist/html/css/ua.js.map +1 -0
- package/dist/html/css/values.d.ts +78 -0
- package/dist/html/css/values.d.ts.map +1 -0
- package/dist/html/css/values.js +330 -0
- package/dist/html/css/values.js.map +1 -0
- package/dist/html/dom.d.ts +112 -0
- package/dist/html/dom.d.ts.map +1 -0
- package/dist/html/dom.js +374 -0
- package/dist/html/dom.js.map +1 -0
- package/dist/html/hx.d.ts +24 -0
- package/dist/html/hx.d.ts.map +1 -0
- package/dist/html/hx.js +29 -0
- package/dist/html/hx.js.map +1 -0
- package/dist/html/index.d.ts +137 -0
- package/dist/html/index.d.ts.map +1 -0
- package/dist/html/index.js +339 -0
- package/dist/html/index.js.map +1 -0
- package/dist/html/layout/block.d.ts +58 -0
- package/dist/html/layout/block.d.ts.map +1 -0
- package/dist/html/layout/block.js +724 -0
- package/dist/html/layout/block.js.map +1 -0
- package/dist/html/layout/boxes.d.ts +261 -0
- package/dist/html/layout/boxes.d.ts.map +1 -0
- package/dist/html/layout/boxes.js +725 -0
- package/dist/html/layout/boxes.js.map +1 -0
- package/dist/html/layout/flex.d.ts +16 -0
- package/dist/html/layout/flex.d.ts.map +1 -0
- package/dist/html/layout/flex.js +242 -0
- package/dist/html/layout/flex.js.map +1 -0
- package/dist/html/layout/floats.d.ts +50 -0
- package/dist/html/layout/floats.d.ts.map +1 -0
- package/dist/html/layout/floats.js +110 -0
- package/dist/html/layout/floats.js.map +1 -0
- package/dist/html/layout/inline.d.ts +44 -0
- package/dist/html/layout/inline.d.ts.map +1 -0
- package/dist/html/layout/inline.js +700 -0
- package/dist/html/layout/inline.js.map +1 -0
- package/dist/html/layout/table.d.ts +5 -0
- package/dist/html/layout/table.d.ts.map +1 -0
- package/dist/html/layout/table.js +340 -0
- package/dist/html/layout/table.js.map +1 -0
- package/dist/html/node.d.ts +149 -0
- package/dist/html/node.d.ts.map +1 -0
- package/dist/html/node.js +861 -0
- package/dist/html/node.js.map +1 -0
- package/dist/html/paint.d.ts +48 -0
- package/dist/html/paint.d.ts.map +1 -0
- package/dist/html/paint.js +495 -0
- package/dist/html/paint.js.map +1 -0
- package/dist/html/resources.d.ts +48 -0
- package/dist/html/resources.d.ts.map +1 -0
- package/dist/html/resources.js +156 -0
- package/dist/html/resources.js.map +1 -0
- package/dist/index.d.ts +48 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +92 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/heights.d.ts +81 -0
- package/dist/internal/heights.d.ts.map +1 -0
- package/dist/internal/heights.js +193 -0
- package/dist/internal/heights.js.map +1 -0
- package/dist/internal/hx.d.ts +24 -0
- package/dist/internal/hx.d.ts.map +1 -0
- package/dist/internal/hx.js +27 -0
- package/dist/internal/hx.js.map +1 -0
- package/dist/internal/text.d.ts +6 -0
- package/dist/internal/text.d.ts.map +1 -0
- package/dist/internal/text.js +44 -0
- package/dist/internal/text.js.map +1 -0
- package/dist/internal/timers.d.ts +8 -0
- package/dist/internal/timers.d.ts.map +1 -0
- package/dist/internal/timers.js +22 -0
- package/dist/internal/timers.js.map +1 -0
- package/dist/internal/widget.d.ts +40 -0
- package/dist/internal/widget.d.ts.map +1 -0
- package/dist/internal/widget.js +44 -0
- package/dist/internal/widget.js.map +1 -0
- package/dist/markdown/ast.d.ts +126 -0
- package/dist/markdown/ast.d.ts.map +1 -0
- package/dist/markdown/ast.js +8 -0
- package/dist/markdown/ast.js.map +1 -0
- package/dist/markdown/hx.d.ts +24 -0
- package/dist/markdown/hx.d.ts.map +1 -0
- package/dist/markdown/hx.js +25 -0
- package/dist/markdown/hx.js.map +1 -0
- package/dist/markdown/index.d.ts +90 -0
- package/dist/markdown/index.d.ts.map +1 -0
- package/dist/markdown/index.js +413 -0
- package/dist/markdown/index.js.map +1 -0
- package/dist/markdown/parse.d.ts +8 -0
- package/dist/markdown/parse.d.ts.map +1 -0
- package/dist/markdown/parse.js +911 -0
- package/dist/markdown/parse.js.map +1 -0
- package/dist/markdown/spans.d.ts +20 -0
- package/dist/markdown/spans.d.ts.map +1 -0
- package/dist/markdown/spans.js +96 -0
- package/dist/markdown/spans.js.map +1 -0
- package/dist/media-player/backends.d.ts +64 -0
- package/dist/media-player/backends.d.ts.map +1 -0
- package/dist/media-player/backends.js +110 -0
- package/dist/media-player/backends.js.map +1 -0
- package/dist/media-player/control.d.ts +40 -0
- package/dist/media-player/control.d.ts.map +1 -0
- package/dist/media-player/control.js +44 -0
- package/dist/media-player/control.js.map +1 -0
- package/dist/media-player/hx.d.ts +24 -0
- package/dist/media-player/hx.d.ts.map +1 -0
- package/dist/media-player/hx.js +25 -0
- package/dist/media-player/hx.js.map +1 -0
- package/dist/media-player/index.d.ts +107 -0
- package/dist/media-player/index.d.ts.map +1 -0
- package/dist/media-player/index.js +219 -0
- package/dist/media-player/index.js.map +1 -0
- package/dist/media-player/mpv.d.ts +4 -0
- package/dist/media-player/mpv.d.ts.map +1 -0
- package/dist/media-player/mpv.js +120 -0
- package/dist/media-player/mpv.js.map +1 -0
- package/dist/media-player/vlc.d.ts +8 -0
- package/dist/media-player/vlc.d.ts.map +1 -0
- package/dist/media-player/vlc.js +83 -0
- package/dist/media-player/vlc.js.map +1 -0
- package/dist/richtext/index.d.ts +19 -0
- package/dist/richtext/index.d.ts.map +1 -0
- package/dist/richtext/index.js +4 -0
- package/dist/richtext/index.js.map +1 -0
- package/dist/richtext/links.d.ts +12 -0
- package/dist/richtext/links.d.ts.map +1 -0
- package/dist/richtext/links.js +64 -0
- package/dist/richtext/links.js.map +1 -0
- package/dist/richtext/menu.d.ts +11 -0
- package/dist/richtext/menu.d.ts.map +1 -0
- package/dist/richtext/menu.js +43 -0
- package/dist/richtext/menu.js.map +1 -0
- package/dist/richtext/node.d.ts +151 -0
- package/dist/richtext/node.d.ts.map +1 -0
- package/dist/richtext/node.js +255 -0
- package/dist/richtext/node.js.map +1 -0
- package/dist/richtext/runs.d.ts +92 -0
- package/dist/richtext/runs.d.ts.map +1 -0
- package/dist/richtext/runs.js +158 -0
- package/dist/richtext/runs.js.map +1 -0
- package/dist/table/hx.d.ts +24 -0
- package/dist/table/hx.d.ts.map +1 -0
- package/dist/table/hx.js +25 -0
- package/dist/table/hx.js.map +1 -0
- package/dist/table/index.d.ts +169 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +844 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/rows.d.ts +136 -0
- package/dist/table/rows.d.ts.map +1 -0
- package/dist/table/rows.js +146 -0
- package/dist/table/rows.js.map +1 -0
- package/dist/terminal/backends.d.ts +105 -0
- package/dist/terminal/backends.d.ts.map +1 -0
- package/dist/terminal/backends.js +185 -0
- package/dist/terminal/backends.js.map +1 -0
- package/dist/terminal/hx.d.ts +24 -0
- package/dist/terminal/hx.d.ts.map +1 -0
- package/dist/terminal/hx.js +25 -0
- package/dist/terminal/hx.js.map +1 -0
- package/dist/terminal/index.d.ts +160 -0
- package/dist/terminal/index.d.ts.map +1 -0
- package/dist/terminal/index.js +344 -0
- package/dist/terminal/index.js.map +1 -0
- package/dist/terminal/title.d.ts +24 -0
- package/dist/terminal/title.d.ts.map +1 -0
- package/dist/terminal/title.js +129 -0
- package/dist/terminal/title.js.map +1 -0
- package/dist/terminal/vt/colors.d.ts +63 -0
- package/dist/terminal/vt/colors.d.ts.map +1 -0
- package/dist/terminal/vt/colors.js +203 -0
- package/dist/terminal/vt/colors.js.map +1 -0
- package/dist/terminal/vt/diff.d.ts +117 -0
- package/dist/terminal/vt/diff.d.ts.map +1 -0
- package/dist/terminal/vt/diff.js +358 -0
- package/dist/terminal/vt/diff.js.map +1 -0
- package/dist/terminal/vt/fonts.d.ts +92 -0
- package/dist/terminal/vt/fonts.d.ts.map +1 -0
- package/dist/terminal/vt/fonts.js +178 -0
- package/dist/terminal/vt/fonts.js.map +1 -0
- package/dist/terminal/vt/index.d.ts +78 -0
- package/dist/terminal/vt/index.d.ts.map +1 -0
- package/dist/terminal/vt/index.js +312 -0
- package/dist/terminal/vt/index.js.map +1 -0
- package/dist/terminal/vt/keys.d.ts +74 -0
- package/dist/terminal/vt/keys.d.ts.map +1 -0
- package/dist/terminal/vt/keys.js +309 -0
- package/dist/terminal/vt/keys.js.map +1 -0
- package/dist/terminal/vt/mouse.d.ts +44 -0
- package/dist/terminal/vt/mouse.d.ts.map +1 -0
- package/dist/terminal/vt/mouse.js +106 -0
- package/dist/terminal/vt/mouse.js.map +1 -0
- package/dist/terminal/vt/node.d.ts +246 -0
- package/dist/terminal/vt/node.d.ts.map +1 -0
- package/dist/terminal/vt/node.js +1068 -0
- package/dist/terminal/vt/node.js.map +1 -0
- package/dist/terminal/vt/pty.d.ts +81 -0
- package/dist/terminal/vt/pty.d.ts.map +1 -0
- package/dist/terminal/vt/pty.js +201 -0
- package/dist/terminal/vt/pty.js.map +1 -0
- package/dist/terminal/vt/renderer.d.ts +179 -0
- package/dist/terminal/vt/renderer.d.ts.map +1 -0
- package/dist/terminal/vt/renderer.js +357 -0
- package/dist/terminal/vt/renderer.js.map +1 -0
- package/dist/terminal/vt/timers.d.ts +6 -0
- package/dist/terminal/vt/timers.d.ts.map +1 -0
- package/dist/terminal/vt/timers.js +16 -0
- package/dist/terminal/vt/timers.js.map +1 -0
- package/dist/terminal/vt/xterm.d.ts +142 -0
- package/dist/terminal/vt/xterm.d.ts.map +1 -0
- package/dist/terminal/vt/xterm.js +32 -0
- package/dist/terminal/vt/xterm.js.map +1 -0
- package/dist/terminal-output/hx.d.ts +24 -0
- package/dist/terminal-output/hx.d.ts.map +1 -0
- package/dist/terminal-output/hx.js +25 -0
- package/dist/terminal-output/hx.js.map +1 -0
- package/dist/terminal-output/index.d.ts +92 -0
- package/dist/terminal-output/index.d.ts.map +1 -0
- package/dist/terminal-output/index.js +179 -0
- package/dist/terminal-output/index.js.map +1 -0
- package/dist/terminal-output/runs.d.ts +27 -0
- package/dist/terminal-output/runs.d.ts.map +1 -0
- package/dist/terminal-output/runs.js +66 -0
- package/dist/terminal-output/runs.js.map +1 -0
- package/dist/three/canvas.d.ts +46 -0
- package/dist/three/canvas.d.ts.map +1 -0
- package/dist/three/canvas.js +305 -0
- package/dist/three/canvas.js.map +1 -0
- package/dist/three/events.d.ts +64 -0
- package/dist/three/events.d.ts.map +1 -0
- package/dist/three/events.js +146 -0
- package/dist/three/events.js.map +1 -0
- package/dist/three/geometries.d.ts +89 -0
- package/dist/three/geometries.d.ts.map +1 -0
- package/dist/three/geometries.js +345 -0
- package/dist/three/geometries.js.map +1 -0
- package/dist/three/globals.d.ts +7 -0
- package/dist/three/globals.d.ts.map +1 -0
- package/dist/three/globals.js +20 -0
- package/dist/three/globals.js.map +1 -0
- package/dist/three/hx.d.ts +9 -0
- package/dist/three/hx.d.ts.map +1 -0
- package/dist/three/hx.js +10 -0
- package/dist/three/hx.js.map +1 -0
- package/dist/three/index.d.ts +22 -0
- package/dist/three/index.d.ts.map +1 -0
- package/dist/three/index.js +24 -0
- package/dist/three/index.js.map +1 -0
- package/dist/three/jsx-dev-runtime.d.ts +19 -0
- package/dist/three/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/three/jsx-dev-runtime.js +2 -0
- package/dist/three/jsx-dev-runtime.js.map +1 -0
- package/dist/three/jsx-runtime.d.ts +19 -0
- package/dist/three/jsx-runtime.d.ts.map +1 -0
- package/dist/three/jsx-runtime.js +2 -0
- package/dist/three/jsx-runtime.js.map +1 -0
- package/dist/three/jsx.d.ts +198 -0
- package/dist/three/jsx.d.ts.map +1 -0
- package/dist/three/jsx.js +2 -0
- package/dist/three/jsx.js.map +1 -0
- package/dist/three/materials.d.ts +125 -0
- package/dist/three/materials.d.ts.map +1 -0
- package/dist/three/materials.js +229 -0
- package/dist/three/materials.js.map +1 -0
- package/dist/three/math.d.ts +146 -0
- package/dist/three/math.d.ts.map +1 -0
- package/dist/three/math.js +464 -0
- package/dist/three/math.js.map +1 -0
- package/dist/three/objects.d.ts +185 -0
- package/dist/three/objects.d.ts.map +1 -0
- package/dist/three/objects.js +309 -0
- package/dist/three/objects.js.map +1 -0
- package/dist/three/passes.d.ts +54 -0
- package/dist/three/passes.d.ts.map +1 -0
- package/dist/three/passes.js +78 -0
- package/dist/three/passes.js.map +1 -0
- package/dist/three/postprocess.d.ts +85 -0
- package/dist/three/postprocess.d.ts.map +1 -0
- package/dist/three/postprocess.js +503 -0
- package/dist/three/postprocess.js.map +1 -0
- package/dist/three/raycast.d.ts +24 -0
- package/dist/three/raycast.d.ts.map +1 -0
- package/dist/three/raycast.js +138 -0
- package/dist/three/raycast.js.map +1 -0
- package/dist/three/reconciler.d.ts +48 -0
- package/dist/three/reconciler.d.ts.map +1 -0
- package/dist/three/reconciler.js +416 -0
- package/dist/three/reconciler.js.map +1 -0
- package/dist/three/renderer-direct.d.ts +102 -0
- package/dist/three/renderer-direct.d.ts.map +1 -0
- package/dist/three/renderer-direct.js +782 -0
- package/dist/three/renderer-direct.js.map +1 -0
- package/dist/three/renderer-indirect.d.ts +68 -0
- package/dist/three/renderer-indirect.d.ts.map +1 -0
- package/dist/three/renderer-indirect.js +438 -0
- package/dist/three/renderer-indirect.js.map +1 -0
- package/dist/three/store.d.ts +81 -0
- package/dist/three/store.d.ts.map +1 -0
- package/dist/three/store.js +110 -0
- package/dist/three/store.js.map +1 -0
- package/dist/timeline/hx.d.ts +18 -0
- package/dist/timeline/hx.d.ts.map +1 -0
- package/dist/timeline/hx.js +10 -0
- package/dist/timeline/hx.js.map +1 -0
- package/dist/timeline/index.d.ts +152 -0
- package/dist/timeline/index.d.ts.map +1 -0
- package/dist/timeline/index.js +383 -0
- package/dist/timeline/index.js.map +1 -0
- package/dist/tray-host/hx.d.ts +24 -0
- package/dist/tray-host/hx.d.ts.map +1 -0
- package/dist/tray-host/hx.js +25 -0
- package/dist/tray-host/hx.js.map +1 -0
- package/dist/tray-host/index.d.ts +110 -0
- package/dist/tray-host/index.d.ts.map +1 -0
- package/dist/tray-host/index.js +191 -0
- package/dist/tray-host/index.js.map +1 -0
- package/dist/tray-host/manager.d.ts +137 -0
- package/dist/tray-host/manager.d.ts.map +1 -0
- package/dist/tray-host/manager.js +462 -0
- package/dist/tray-host/manager.js.map +1 -0
- package/dist/tray-host/notify.d.ts +22 -0
- package/dist/tray-host/notify.d.ts.map +1 -0
- package/dist/tray-host/notify.js +74 -0
- package/dist/tray-host/notify.js.map +1 -0
- package/dist/tray-host/protocol.d.ts +106 -0
- package/dist/tray-host/protocol.d.ts.map +1 -0
- package/dist/tray-host/protocol.js +191 -0
- package/dist/tray-host/protocol.js.map +1 -0
- package/dist/tree/hx.d.ts +24 -0
- package/dist/tree/hx.d.ts.map +1 -0
- package/dist/tree/hx.js +25 -0
- package/dist/tree/hx.js.map +1 -0
- package/dist/tree/index.d.ts +221 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +716 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/internal.d.ts +18 -0
- package/dist/tree/internal.d.ts.map +1 -0
- package/dist/tree/internal.js +66 -0
- package/dist/tree/internal.js.map +1 -0
- package/dist/tree/rows.d.ts +177 -0
- package/dist/tree/rows.d.ts.map +1 -0
- package/dist/tree/rows.js +179 -0
- package/dist/tree/rows.js.map +1 -0
- package/package.json +166 -12
- package/src/ansi/cast.ts +159 -0
- package/src/ansi/index.ts +53 -0
- package/src/ansi/palette.ts +226 -0
- package/src/ansi/parse.ts +780 -0
- package/src/ansi/sgr.ts +380 -0
- package/src/ansi/utf8.ts +84 -0
- package/src/calendar/Calendar.ts +744 -0
- package/src/calendar/DatePicker.ts +368 -0
- package/src/calendar/dates.ts +307 -0
- package/src/calendar/index.ts +51 -0
- package/src/charts/components.ts +864 -0
- package/src/charts/data.ts +776 -0
- package/src/charts/hx.ts +39 -0
- package/src/charts/index.ts +99 -0
- package/src/charts/node.ts +932 -0
- package/src/charts/render.ts +982 -0
- package/src/charts/scale.ts +214 -0
- package/src/charts/spec.ts +122 -0
- package/src/charts/timers.ts +24 -0
- package/src/code/hx.ts +51 -0
- package/src/code/index.ts +174 -0
- package/src/code-editor/completion.ts +161 -0
- package/src/code-editor/doc.ts +198 -0
- package/src/code-editor/hx.ts +26 -0
- package/src/code-editor/index.ts +615 -0
- package/src/code-editor/node.ts +1926 -0
- package/src/code-language/hljs.ts +302 -0
- package/src/code-language/index.ts +51 -0
- package/src/code-language/languages/glsl.ts +120 -0
- package/src/code-language/languages/javascript.ts +419 -0
- package/src/code-language/languages/json.ts +72 -0
- package/src/code-language/languages/shell.ts +221 -0
- package/src/code-language/languages/sql.ts +165 -0
- package/src/code-language/lezer.ts +190 -0
- package/src/code-language/registry.ts +66 -0
- package/src/code-language/runs.ts +128 -0
- package/src/code-language/stream.ts +306 -0
- package/src/code-language/textmate.ts +134 -0
- package/src/code-language/theme.ts +124 -0
- package/src/code-language/timers.ts +36 -0
- package/src/code-language/types.ts +252 -0
- package/src/codeblock/index.ts +146 -0
- package/src/color-picker/ColorField.ts +333 -0
- package/src/color-picker/ColorPicker.ts +1069 -0
- package/src/color-picker/color.ts +399 -0
- package/src/color-picker/index.ts +50 -0
- package/src/desktop-calendar/eds.ts +484 -0
- package/src/desktop-calendar/ical.ts +119 -0
- package/src/desktop-calendar/index.ts +287 -0
- package/src/embed/client.ts +311 -0
- package/src/embed/host.ts +432 -0
- package/src/embed/index.ts +33 -0
- package/src/embed/timers.ts +32 -0
- package/src/flow/draw.ts +418 -0
- package/src/flow/index.ts +473 -0
- package/src/flow/model.ts +687 -0
- package/src/flow/node.ts +3694 -0
- package/src/flow/paths.ts +403 -0
- package/src/flow/types.ts +634 -0
- package/src/formula/hx.ts +51 -0
- package/src/formula/index.ts +243 -0
- package/src/formula/katex.ts +209 -0
- package/src/formula/layout.ts +876 -0
- package/src/formula/node.ts +467 -0
- package/src/html/controls.ts +244 -0
- package/src/html/css/cascade.ts +606 -0
- package/src/html/css/parse.ts +500 -0
- package/src/html/css/style.ts +1371 -0
- package/src/html/css/ua.ts +174 -0
- package/src/html/css/values.ts +358 -0
- package/src/html/dom.ts +410 -0
- package/src/html/hx.ts +55 -0
- package/src/html/index.ts +545 -0
- package/src/html/layout/block.ts +876 -0
- package/src/html/layout/boxes.ts +981 -0
- package/src/html/layout/flex.ts +297 -0
- package/src/html/layout/floats.ts +125 -0
- package/src/html/layout/inline.ts +870 -0
- package/src/html/layout/table.ts +380 -0
- package/src/html/node.ts +967 -0
- package/src/html/paint.ts +605 -0
- package/src/html/resources.ts +214 -0
- package/src/index.ts +638 -0
- package/src/internal/heights.ts +211 -0
- package/src/internal/hx.ts +53 -0
- package/src/internal/text.ts +44 -0
- package/src/internal/timers.ts +44 -0
- package/src/internal/widget.ts +92 -0
- package/src/markdown/ast.ts +163 -0
- package/src/markdown/hx.ts +51 -0
- package/src/markdown/index.ts +686 -0
- package/src/markdown/parse.ts +1037 -0
- package/src/markdown/spans.ts +143 -0
- package/src/media-player/backends.ts +155 -0
- package/src/media-player/control.ts +70 -0
- package/src/media-player/hx.ts +51 -0
- package/src/media-player/index.ts +378 -0
- package/src/media-player/mpv.ts +146 -0
- package/src/media-player/vlc.ts +97 -0
- package/src/richtext/index.ts +42 -0
- package/src/richtext/links.ts +78 -0
- package/src/richtext/menu.ts +49 -0
- package/src/richtext/node.ts +406 -0
- package/src/richtext/runs.ts +253 -0
- package/src/table/hx.ts +51 -0
- package/src/table/index.ts +1219 -0
- package/src/table/rows.ts +275 -0
- package/src/terminal/backends.ts +242 -0
- package/src/terminal/hx.ts +51 -0
- package/src/terminal/index.ts +574 -0
- package/src/terminal/title.ts +172 -0
- package/src/terminal/vt/colors.ts +247 -0
- package/src/terminal/vt/diff.ts +467 -0
- package/src/terminal/vt/fonts.ts +233 -0
- package/src/terminal/vt/index.ts +443 -0
- package/src/terminal/vt/keys.ts +369 -0
- package/src/terminal/vt/mouse.ts +144 -0
- package/src/terminal/vt/node.ts +1242 -0
- package/src/terminal/vt/pty.ts +334 -0
- package/src/terminal/vt/renderer.ts +555 -0
- package/src/terminal/vt/timers.ts +31 -0
- package/src/terminal/vt/xterm.ts +193 -0
- package/src/terminal-output/hx.ts +51 -0
- package/src/terminal-output/index.ts +340 -0
- package/src/terminal-output/runs.ts +79 -0
- package/src/three/canvas.ts +451 -0
- package/src/three/events.ts +197 -0
- package/src/three/geometries.ts +429 -0
- package/src/three/globals.ts +34 -0
- package/src/three/hx.ts +22 -0
- package/src/three/index.ts +98 -0
- package/src/three/jsx-dev-runtime.ts +27 -0
- package/src/three/jsx-runtime.ts +38 -0
- package/src/three/jsx.ts +275 -0
- package/src/three/materials.ts +270 -0
- package/src/three/math.ts +585 -0
- package/src/three/objects.ts +397 -0
- package/src/three/passes.ts +90 -0
- package/src/three/postprocess.ts +677 -0
- package/src/three/raycast.ts +189 -0
- package/src/three/react-reconciler.d.ts +50 -0
- package/src/three/reconciler.ts +624 -0
- package/src/three/renderer-direct.ts +1055 -0
- package/src/three/renderer-indirect.ts +570 -0
- package/src/three/store.ts +207 -0
- package/src/timeline/hx.ts +31 -0
- package/src/timeline/index.ts +603 -0
- package/src/tray-host/hx.ts +51 -0
- package/src/tray-host/index.ts +331 -0
- package/src/tray-host/manager.ts +639 -0
- package/src/tray-host/notify.ts +102 -0
- package/src/tray-host/protocol.ts +235 -0
- package/src/tree/hx.ts +51 -0
- package/src/tree/index.ts +1087 -0
- package/src/tree/internal.ts +87 -0
- package/src/tree/rows.ts +334 -0
- package/src/index.d.ts +0 -2
- package/src/index.js +0 -9
- package/src/sparkline/index.d.ts +0 -29
- package/src/sparkline/index.js +0 -50
- package/src/sparkline/node.js +0 -72
|
@@ -0,0 +1,725 @@
|
|
|
1
|
+
import { attr, childrenOf, isElement, isText, NON_RENDERED, tagOf, } from '../dom.js';
|
|
2
|
+
/**
|
|
3
|
+
* One box. Fields are assigned rather than passed so the shape stays
|
|
4
|
+
* monomorphic — every box has every field, which is what keeps the property
|
|
5
|
+
* access in the layout and paint loops a fixed offset rather than a
|
|
6
|
+
* megamorphic lookup.
|
|
7
|
+
*/
|
|
8
|
+
export class Box {
|
|
9
|
+
kind;
|
|
10
|
+
el;
|
|
11
|
+
style;
|
|
12
|
+
parent = null;
|
|
13
|
+
children = [];
|
|
14
|
+
/** Border-box, in document coordinates, after layout. */
|
|
15
|
+
x = 0;
|
|
16
|
+
y = 0;
|
|
17
|
+
width = 0;
|
|
18
|
+
height = 0;
|
|
19
|
+
/** Resolved edges — border + padding, per side. */
|
|
20
|
+
borderTop = 0;
|
|
21
|
+
borderRight = 0;
|
|
22
|
+
borderBottom = 0;
|
|
23
|
+
borderLeft = 0;
|
|
24
|
+
padTop = 0;
|
|
25
|
+
padRight = 0;
|
|
26
|
+
padBottom = 0;
|
|
27
|
+
padLeft = 0;
|
|
28
|
+
marginTop = 0;
|
|
29
|
+
marginRight = 0;
|
|
30
|
+
marginBottom = 0;
|
|
31
|
+
marginLeft = 0;
|
|
32
|
+
/** Text, for a `text` box: already whitespace-processed and transformed. */
|
|
33
|
+
text = '';
|
|
34
|
+
/** This box's slice of the document text index. */
|
|
35
|
+
textStart = 0;
|
|
36
|
+
textEnd = 0;
|
|
37
|
+
/** Lines, for a box that established an inline formatting context. */
|
|
38
|
+
lines = null;
|
|
39
|
+
/** Intrinsic size, for a replaced box that knows one. */
|
|
40
|
+
intrinsicWidth = 0;
|
|
41
|
+
intrinsicHeight = 0;
|
|
42
|
+
/**
|
|
43
|
+
* Cached min-/max-content widths, for a table cell. -1 until measured.
|
|
44
|
+
*
|
|
45
|
+
* Intrinsic widths are width-independent by definition, so measuring them
|
|
46
|
+
* per layout pass was this engine breaking its own phase rule — a resize
|
|
47
|
+
* re-probed every cell twice and cost as much as the first layout. The
|
|
48
|
+
* cache lives on the box because the box's lifetime is exactly the
|
|
49
|
+
* invalidation rule: any DOM or style change rebuilds the tree, and a new
|
|
50
|
+
* box starts unmeasured.
|
|
51
|
+
*/
|
|
52
|
+
intrinsicMinContent = -1;
|
|
53
|
+
intrinsicMaxContent = -1;
|
|
54
|
+
/** What a replaced box is: the resource seam and the control host both
|
|
55
|
+
* key on this rather than re-reading the tag. */
|
|
56
|
+
replaced = 'none';
|
|
57
|
+
/** The marker text of a `list-item`, if it generated one, and where it
|
|
58
|
+
* was laid out. The marker is not a box: it is not in the flow, nothing
|
|
59
|
+
* can select it (CSS spells that `::marker`, and no author styles it
|
|
60
|
+
* here), and giving it one would put a bullet in every copied list. */
|
|
61
|
+
markerText = '';
|
|
62
|
+
markerLayout = null;
|
|
63
|
+
markerX = 0;
|
|
64
|
+
markerY = 0;
|
|
65
|
+
/**
|
|
66
|
+
* The bounds of everything this box and its descendants draw, in document
|
|
67
|
+
* coordinates — **ink** bounds, not the border box, because `overflow:
|
|
68
|
+
* visible` lets a child draw outside its parent and a box-rect test would
|
|
69
|
+
* then cull something still on screen. Filled by `computePaintBounds`
|
|
70
|
+
* after layout; the paint pass culls against it.
|
|
71
|
+
*/
|
|
72
|
+
boundsX = 0;
|
|
73
|
+
boundsY = 0;
|
|
74
|
+
boundsWidth = 0;
|
|
75
|
+
boundsHeight = 0;
|
|
76
|
+
/**
|
|
77
|
+
* The viewport query over a wide child list, built by `computePaintBounds`
|
|
78
|
+
* past a size threshold: the paintable in-flow children sorted by ink top,
|
|
79
|
+
* with each entry's document-order position and a running maximum of ink
|
|
80
|
+
* bottoms. What it buys is the promise this component makes about tall
|
|
81
|
+
* documents — the cost of a paint is the viewport's, not the document's —
|
|
82
|
+
* because without it every expose walked all N children of a flat
|
|
83
|
+
* document to reject N−20 of them.
|
|
84
|
+
*/
|
|
85
|
+
paintIndex = null;
|
|
86
|
+
/** Out-of-flow children in paint order (z-index, then document order),
|
|
87
|
+
* precomputed so a paint does not filter and sort per box per frame. */
|
|
88
|
+
positionedPaint = null;
|
|
89
|
+
/** The tallest line box under this box — the slack a binary search over
|
|
90
|
+
* the y-sorted lines needs, since a line's bottom is not monotone. */
|
|
91
|
+
maxLineHeight = 0;
|
|
92
|
+
/**
|
|
93
|
+
* The document range this box's *subtree* covers, in code units. `[0, 0)`
|
|
94
|
+
* for a subtree with no text. Assigned once per build; the selection
|
|
95
|
+
* walks prune on it, which is what keeps "which pixels does this range
|
|
96
|
+
* cover" from touching the ninety-nine paragraphs a selection is not in.
|
|
97
|
+
*/
|
|
98
|
+
subtreeTextStart = 0;
|
|
99
|
+
subtreeTextEnd = 0;
|
|
100
|
+
/** Set on a box whose `position` takes it out of flow, so the block pass
|
|
101
|
+
* can skip it and the positioned pass can find it. */
|
|
102
|
+
outOfFlow = false;
|
|
103
|
+
/** Set on a float, for the same reason. */
|
|
104
|
+
isFloat = false;
|
|
105
|
+
constructor(kind, el, style) {
|
|
106
|
+
this.kind = kind;
|
|
107
|
+
this.el = el;
|
|
108
|
+
this.style = style;
|
|
109
|
+
}
|
|
110
|
+
append(child) {
|
|
111
|
+
child.parent = this;
|
|
112
|
+
this.children.push(child);
|
|
113
|
+
}
|
|
114
|
+
/** Content-box left edge, in document coordinates. */
|
|
115
|
+
get contentX() {
|
|
116
|
+
return this.x + this.borderLeft + this.padLeft;
|
|
117
|
+
}
|
|
118
|
+
get contentY() {
|
|
119
|
+
return this.y + this.borderTop + this.padTop;
|
|
120
|
+
}
|
|
121
|
+
get contentWidth() {
|
|
122
|
+
return Math.max(0, this.width -
|
|
123
|
+
this.borderLeft -
|
|
124
|
+
this.borderRight -
|
|
125
|
+
this.padLeft -
|
|
126
|
+
this.padRight);
|
|
127
|
+
}
|
|
128
|
+
get contentHeight() {
|
|
129
|
+
return Math.max(0, this.height -
|
|
130
|
+
this.borderTop -
|
|
131
|
+
this.borderBottom -
|
|
132
|
+
this.padTop -
|
|
133
|
+
this.padBottom);
|
|
134
|
+
}
|
|
135
|
+
/** Border + padding across, which is what a `border-box` width already
|
|
136
|
+
* contains and a `content-box` width does not. */
|
|
137
|
+
get horizontalExtra() {
|
|
138
|
+
return this.borderLeft + this.borderRight + this.padLeft + this.padRight;
|
|
139
|
+
}
|
|
140
|
+
get verticalExtra() {
|
|
141
|
+
return this.borderTop + this.borderBottom + this.padTop + this.padBottom;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/** Build the box tree for a document. */
|
|
145
|
+
export function buildBoxes(root, options) {
|
|
146
|
+
const builder = new Builder(options);
|
|
147
|
+
return builder.run(root);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* How deep the box tree may go. Everything downstream of the builder — the
|
|
151
|
+
* fix-up pass, layout, paint, the accessor walks — recurses on box depth, so
|
|
152
|
+
* this is the one bound that keeps a degenerately nested document (fuzzer
|
|
153
|
+
* output, a runaway template) from a stack overflow five phases later.
|
|
154
|
+
* Blink's parser flattens at 512 for the same reason; content past the cap
|
|
155
|
+
* is dropped, which beats the alternative of crashing the application.
|
|
156
|
+
*/
|
|
157
|
+
const MAX_DEPTH = 512;
|
|
158
|
+
class Builder {
|
|
159
|
+
_options;
|
|
160
|
+
_text = '';
|
|
161
|
+
_textBoxes = [];
|
|
162
|
+
_controls = [];
|
|
163
|
+
_links = [];
|
|
164
|
+
/** Counter stack for `<ol>` numbering, one entry per open list. */
|
|
165
|
+
_counters = [];
|
|
166
|
+
_depth = 0;
|
|
167
|
+
constructor(options) {
|
|
168
|
+
this._options = options;
|
|
169
|
+
}
|
|
170
|
+
run(root) {
|
|
171
|
+
const cascade = this._options.cascade;
|
|
172
|
+
const rootStyle = cascade.rootStyle(hasBody(root));
|
|
173
|
+
const rootBox = new Box('block', null, rootStyle);
|
|
174
|
+
// The DOM's `<html>`/`<body>` are ordinary elements with ordinary styles;
|
|
175
|
+
// the box above them exists only to be the initial containing block, so
|
|
176
|
+
// it carries no margins of its own and cannot collapse with anything.
|
|
177
|
+
this._children(root, rootBox, rootStyle, false);
|
|
178
|
+
fixUp(rootBox);
|
|
179
|
+
assignSubtreeRanges(rootBox);
|
|
180
|
+
return {
|
|
181
|
+
root: rootBox,
|
|
182
|
+
text: this._text,
|
|
183
|
+
textBoxes: this._textBoxes,
|
|
184
|
+
controls: this._controls,
|
|
185
|
+
links: this._links,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/** Build boxes for a parent's children into `into`. */
|
|
189
|
+
_children(node, into, parentStyle, inFlex, owner = null) {
|
|
190
|
+
for (const child of childrenOf(node)) {
|
|
191
|
+
if (isText(child)) {
|
|
192
|
+
this._textNode(child.data, into, parentStyle, owner);
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
if (!isElement(child))
|
|
196
|
+
continue;
|
|
197
|
+
this._element(child, into, parentStyle, inFlex);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
_element(el, into, parentStyle, inFlex) {
|
|
201
|
+
const tag = tagOf(el);
|
|
202
|
+
if (NON_RENDERED.has(tag))
|
|
203
|
+
return;
|
|
204
|
+
const style = this._options.cascade.styleFor(el, parentStyle, inFlex);
|
|
205
|
+
if (style.display === 'none')
|
|
206
|
+
return;
|
|
207
|
+
// `<br>` is a line break rather than a box, and it is the one element
|
|
208
|
+
// whose *absence* of a box still has to reach the inline layout.
|
|
209
|
+
if (tag === 'br') {
|
|
210
|
+
const box = new Box('break', el, style);
|
|
211
|
+
into.append(box);
|
|
212
|
+
this._push('\n', box);
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const replaced = replacedKind(el, tag);
|
|
216
|
+
if (replaced !== 'none') {
|
|
217
|
+
this._replaced(el, tag, replaced, style, into);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
if (this._depth >= MAX_DEPTH)
|
|
221
|
+
return;
|
|
222
|
+
const kind = boxKindFor(style.display);
|
|
223
|
+
const box = new Box(kind, el, style);
|
|
224
|
+
into.append(box);
|
|
225
|
+
if (style.position === 'absolute' || style.position === 'fixed')
|
|
226
|
+
box.outOfFlow = true;
|
|
227
|
+
else if (style.float !== 'none')
|
|
228
|
+
box.isFloat = true;
|
|
229
|
+
if (attr(el, 'href') && (tag === 'a' || tag === 'area'))
|
|
230
|
+
this._links.push(box);
|
|
231
|
+
if (style.display === 'list-item') {
|
|
232
|
+
box.markerText = markerFor(el, style, this._counters);
|
|
233
|
+
}
|
|
234
|
+
const opensCounter = tag === 'ol' || tag === 'ul';
|
|
235
|
+
if (opensCounter) {
|
|
236
|
+
const start = Number(attr(el, 'start') ?? '1');
|
|
237
|
+
this._counters.push(Number.isFinite(start) ? start : 1);
|
|
238
|
+
}
|
|
239
|
+
const childInFlex = style.display === 'flex' || style.display === 'inline-flex';
|
|
240
|
+
this._depth += 1;
|
|
241
|
+
this._children(el, box, style, childInFlex, el);
|
|
242
|
+
this._depth -= 1;
|
|
243
|
+
if (opensCounter)
|
|
244
|
+
this._counters.pop();
|
|
245
|
+
}
|
|
246
|
+
_replaced(el, tag, replaced, style, into) {
|
|
247
|
+
const box = new Box('replaced', el, style);
|
|
248
|
+
box.replaced = replaced;
|
|
249
|
+
into.append(box);
|
|
250
|
+
if (style.position === 'absolute' || style.position === 'fixed')
|
|
251
|
+
box.outOfFlow = true;
|
|
252
|
+
else if (style.float !== 'none')
|
|
253
|
+
box.isFloat = true;
|
|
254
|
+
if (replaced === 'image') {
|
|
255
|
+
const loaded = this._options.imageSize(el);
|
|
256
|
+
if (loaded) {
|
|
257
|
+
box.intrinsicWidth = loaded.width;
|
|
258
|
+
box.intrinsicHeight = loaded.height;
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
// An image that has not arrived still needs a box, or the document
|
|
262
|
+
// reflows under the reader when it does. The attributes are the
|
|
263
|
+
// author telling us the size in advance; without them the box is a
|
|
264
|
+
// small placeholder rather than nothing.
|
|
265
|
+
box.intrinsicWidth = numberAttr(el, 'width') ?? 0;
|
|
266
|
+
box.intrinsicHeight = numberAttr(el, 'height') ?? 0;
|
|
267
|
+
}
|
|
268
|
+
// The alt text joins the document text, so a document read with the
|
|
269
|
+
// images blocked still copies as prose.
|
|
270
|
+
const alt = attr(el, 'alt');
|
|
271
|
+
if (alt)
|
|
272
|
+
this._push(alt, box);
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
if (replaced === 'hr')
|
|
276
|
+
return;
|
|
277
|
+
const size = this._options.controlSize(el, replaced, style);
|
|
278
|
+
box.intrinsicWidth = size.width;
|
|
279
|
+
box.intrinsicHeight = size.height;
|
|
280
|
+
this._controls.push(box);
|
|
281
|
+
// A control's value is the widget's, not the document's: putting it in
|
|
282
|
+
// the selection index would make Ctrl+A copy the contents of every text
|
|
283
|
+
// field, which no document viewer does.
|
|
284
|
+
}
|
|
285
|
+
/** A text node, whitespace-processed per the inherited `white-space`. */
|
|
286
|
+
_textNode(data, into, style, owner) {
|
|
287
|
+
const ws = style.whiteSpace;
|
|
288
|
+
let text;
|
|
289
|
+
if (ws === 'pre' || ws === 'pre-wrap') {
|
|
290
|
+
text = data;
|
|
291
|
+
}
|
|
292
|
+
else if (ws === 'pre-line') {
|
|
293
|
+
text = data.replace(/[ \t]+/g, ' ').replace(/ *\n */g, '\n');
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
text = data.replace(/[\t\n\r\f ]+/g, ' ');
|
|
297
|
+
// A run of whitespace against the start of a block collapses away
|
|
298
|
+
// entirely; between two inline boxes it collapses to one space, which
|
|
299
|
+
// the replace above already did.
|
|
300
|
+
if (text === ' ' && !hasInlineContent(into))
|
|
301
|
+
return;
|
|
302
|
+
}
|
|
303
|
+
if (!text)
|
|
304
|
+
return;
|
|
305
|
+
text = transformText(text, style.textTransform);
|
|
306
|
+
// The owning element rides on the text box, and from there onto the
|
|
307
|
+
// `TextRun`: hit testing inside a paragraph has no rectangle to test —
|
|
308
|
+
// an inline box is the runs on its lines — so the run is what has to
|
|
309
|
+
// know whose text it is.
|
|
310
|
+
const box = new Box('text', owner, style);
|
|
311
|
+
box.text = text;
|
|
312
|
+
into.append(box);
|
|
313
|
+
this._push(text, box);
|
|
314
|
+
}
|
|
315
|
+
/** Give a box its slice of the document text index. */
|
|
316
|
+
_push(text, box) {
|
|
317
|
+
box.textStart = this._text.length;
|
|
318
|
+
this._text += text;
|
|
319
|
+
box.textEnd = this._text.length;
|
|
320
|
+
if (box.kind === 'text')
|
|
321
|
+
this._textBoxes.push(box);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
/** Whether the parsed document has a `<body>`. htmlparser2 does not
|
|
325
|
+
* synthesise one — it parses what it was given — so a fragment has none,
|
|
326
|
+
* and the root box stands in for it. */
|
|
327
|
+
function hasBody(root) {
|
|
328
|
+
for (const child of childrenOf(root)) {
|
|
329
|
+
if (!isElement(child))
|
|
330
|
+
continue;
|
|
331
|
+
const tag = tagOf(child);
|
|
332
|
+
if (tag === 'body')
|
|
333
|
+
return true;
|
|
334
|
+
if (tag === 'html' && hasBody(child))
|
|
335
|
+
return true;
|
|
336
|
+
}
|
|
337
|
+
return false;
|
|
338
|
+
}
|
|
339
|
+
function numberAttr(el, name) {
|
|
340
|
+
const raw = attr(el, name);
|
|
341
|
+
if (!raw)
|
|
342
|
+
return null;
|
|
343
|
+
const n = parseFloat(raw);
|
|
344
|
+
return Number.isFinite(n) ? n : null;
|
|
345
|
+
}
|
|
346
|
+
function hasInlineContent(box) {
|
|
347
|
+
for (let i = box.children.length - 1; i >= 0; i -= 1) {
|
|
348
|
+
const kind = box.children[i].kind;
|
|
349
|
+
if (kind === 'text' || kind === 'inline' || kind === 'replaced')
|
|
350
|
+
return true;
|
|
351
|
+
if (kind === 'block' || kind === 'flex' || kind === 'table')
|
|
352
|
+
return false;
|
|
353
|
+
}
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
function transformText(text, transform) {
|
|
357
|
+
switch (transform) {
|
|
358
|
+
case 'uppercase':
|
|
359
|
+
return text.toUpperCase();
|
|
360
|
+
case 'lowercase':
|
|
361
|
+
return text.toLowerCase();
|
|
362
|
+
case 'capitalize':
|
|
363
|
+
return text.replace(/(^|\s)(\S)/g, (_, sp, c) => sp + c.toUpperCase());
|
|
364
|
+
default:
|
|
365
|
+
return text;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
function boxKindFor(display) {
|
|
369
|
+
switch (display) {
|
|
370
|
+
case 'inline':
|
|
371
|
+
return 'inline';
|
|
372
|
+
case 'flex':
|
|
373
|
+
case 'inline-flex':
|
|
374
|
+
return 'flex';
|
|
375
|
+
case 'table':
|
|
376
|
+
case 'inline-table':
|
|
377
|
+
return 'table';
|
|
378
|
+
case 'table-row-group':
|
|
379
|
+
case 'table-header-group':
|
|
380
|
+
case 'table-footer-group':
|
|
381
|
+
return 'table-row-group';
|
|
382
|
+
case 'table-row':
|
|
383
|
+
return 'table-row';
|
|
384
|
+
case 'table-cell':
|
|
385
|
+
return 'table-cell';
|
|
386
|
+
case 'table-caption':
|
|
387
|
+
return 'table-caption';
|
|
388
|
+
case 'table-column':
|
|
389
|
+
case 'table-column-group':
|
|
390
|
+
// A column box paints nothing and lays out nothing; the table reads
|
|
391
|
+
// its style for the column width and skips the box.
|
|
392
|
+
return 'block';
|
|
393
|
+
default:
|
|
394
|
+
// `inline-block` and `list-item` are block *containers* that happen to
|
|
395
|
+
// be inline-level or to carry a marker; both lay out inside like a
|
|
396
|
+
// block, and the difference is what the parent does with them.
|
|
397
|
+
return 'block';
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
function replacedKind(el, tag) {
|
|
401
|
+
switch (tag) {
|
|
402
|
+
case 'img':
|
|
403
|
+
return 'image';
|
|
404
|
+
case 'hr':
|
|
405
|
+
return 'hr';
|
|
406
|
+
case 'textarea':
|
|
407
|
+
return 'textarea';
|
|
408
|
+
case 'select':
|
|
409
|
+
return 'select';
|
|
410
|
+
case 'button':
|
|
411
|
+
return 'button';
|
|
412
|
+
case 'input': {
|
|
413
|
+
const type = (attr(el, 'type') ?? 'text').toLowerCase();
|
|
414
|
+
if (type === 'checkbox')
|
|
415
|
+
return 'checkbox';
|
|
416
|
+
if (type === 'radio')
|
|
417
|
+
return 'radio';
|
|
418
|
+
if (type === 'button' || type === 'submit' || type === 'reset')
|
|
419
|
+
return 'button';
|
|
420
|
+
if (type === 'hidden')
|
|
421
|
+
return 'none';
|
|
422
|
+
return 'input';
|
|
423
|
+
}
|
|
424
|
+
default:
|
|
425
|
+
return 'none';
|
|
426
|
+
}
|
|
427
|
+
}
|
|
428
|
+
const ROMAN = [
|
|
429
|
+
[1000, 'm'],
|
|
430
|
+
[900, 'cm'],
|
|
431
|
+
[500, 'd'],
|
|
432
|
+
[400, 'cd'],
|
|
433
|
+
[100, 'c'],
|
|
434
|
+
[90, 'xc'],
|
|
435
|
+
[50, 'l'],
|
|
436
|
+
[40, 'xl'],
|
|
437
|
+
[10, 'x'],
|
|
438
|
+
[9, 'ix'],
|
|
439
|
+
[5, 'v'],
|
|
440
|
+
[4, 'iv'],
|
|
441
|
+
[1, 'i'],
|
|
442
|
+
];
|
|
443
|
+
/**
|
|
444
|
+
* The marker a `list-item` draws. The counter is the *builder's*, not the
|
|
445
|
+
* element's, because `value` on an `<li>` restarts it and a nested list has
|
|
446
|
+
* its own — both of which are lost if the number is derived from the index
|
|
447
|
+
* of the child in its parent.
|
|
448
|
+
*/
|
|
449
|
+
function markerFor(el, style, counters) {
|
|
450
|
+
const type = style.listStyleType;
|
|
451
|
+
if (type === 'none')
|
|
452
|
+
return '';
|
|
453
|
+
const depth = counters.length;
|
|
454
|
+
if (depth) {
|
|
455
|
+
const value = numberAttr(el, 'value');
|
|
456
|
+
if (value !== null)
|
|
457
|
+
counters[depth - 1] = value;
|
|
458
|
+
}
|
|
459
|
+
const n = depth ? counters[depth - 1]++ : 1;
|
|
460
|
+
switch (type) {
|
|
461
|
+
case 'decimal':
|
|
462
|
+
return `${n}.`;
|
|
463
|
+
case 'decimal-leading-zero':
|
|
464
|
+
return `${n < 10 ? '0' : ''}${n}.`;
|
|
465
|
+
case 'lower-alpha':
|
|
466
|
+
case 'lower-latin':
|
|
467
|
+
return `${alpha(n).toLowerCase()}.`;
|
|
468
|
+
case 'upper-alpha':
|
|
469
|
+
case 'upper-latin':
|
|
470
|
+
return `${alpha(n)}.`;
|
|
471
|
+
case 'lower-roman':
|
|
472
|
+
return `${roman(n)}.`;
|
|
473
|
+
case 'upper-roman':
|
|
474
|
+
return `${roman(n).toUpperCase()}.`;
|
|
475
|
+
case 'circle':
|
|
476
|
+
return '◦';
|
|
477
|
+
case 'square':
|
|
478
|
+
return '▪';
|
|
479
|
+
case 'disc':
|
|
480
|
+
default:
|
|
481
|
+
return '•';
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
function alpha(n) {
|
|
485
|
+
let out = '';
|
|
486
|
+
let v = Math.max(1, n);
|
|
487
|
+
while (v > 0) {
|
|
488
|
+
const rem = (v - 1) % 26;
|
|
489
|
+
out = String.fromCharCode(65 + rem) + out;
|
|
490
|
+
v = Math.floor((v - 1) / 26);
|
|
491
|
+
}
|
|
492
|
+
return out;
|
|
493
|
+
}
|
|
494
|
+
function roman(n) {
|
|
495
|
+
let v = Math.max(1, Math.min(3999, n));
|
|
496
|
+
let out = '';
|
|
497
|
+
for (const [value, sym] of ROMAN) {
|
|
498
|
+
while (v >= value) {
|
|
499
|
+
out += sym;
|
|
500
|
+
v -= value;
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
return out;
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* Give every box the document range its subtree covers. Runs after `fixUp`,
|
|
507
|
+
* because fix-up reparents children into anonymous boxes and the ranges have
|
|
508
|
+
* to describe the tree the walks will actually traverse. Document order
|
|
509
|
+
* makes each subtree's range contiguous, so min/max over the children is
|
|
510
|
+
* exact rather than an approximation.
|
|
511
|
+
*/
|
|
512
|
+
function assignSubtreeRanges(box) {
|
|
513
|
+
let start = box.textEnd > box.textStart ? box.textStart : Infinity;
|
|
514
|
+
let end = box.textEnd > box.textStart ? box.textEnd : -Infinity;
|
|
515
|
+
for (const child of box.children) {
|
|
516
|
+
const range = assignSubtreeRanges(child);
|
|
517
|
+
if (range.end > range.start) {
|
|
518
|
+
start = Math.min(start, range.start);
|
|
519
|
+
end = Math.max(end, range.end);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
if (end <= start) {
|
|
523
|
+
box.subtreeTextStart = 0;
|
|
524
|
+
box.subtreeTextEnd = 0;
|
|
525
|
+
return { start: 0, end: 0 };
|
|
526
|
+
}
|
|
527
|
+
box.subtreeTextStart = start;
|
|
528
|
+
box.subtreeTextEnd = end;
|
|
529
|
+
return { start, end };
|
|
530
|
+
}
|
|
531
|
+
// --- anonymous boxes --------------------------------------------------------
|
|
532
|
+
/**
|
|
533
|
+
* The fix-up pass: CSS's anonymous box rules, applied bottom-up.
|
|
534
|
+
*
|
|
535
|
+
* Two of them, and both are the difference between a document that lays out
|
|
536
|
+
* and one that silently drops content:
|
|
537
|
+
*
|
|
538
|
+
* - **A block container with a mix of block-level and inline-level children
|
|
539
|
+
* wraps each run of inline children in an anonymous block.** Without it
|
|
540
|
+
* `<div>text<p>para</p></div>` has to decide whether the div is a block
|
|
541
|
+
* context or an inline one, and either answer loses something.
|
|
542
|
+
* - **A table's structure is completed.** Real documents write `<table>`
|
|
543
|
+
* straight to `<tr>`, and CSS says the missing row group is generated
|
|
544
|
+
* rather than the rows being dropped.
|
|
545
|
+
*/
|
|
546
|
+
function fixUp(box) {
|
|
547
|
+
for (const child of box.children)
|
|
548
|
+
fixUp(child);
|
|
549
|
+
if (box.kind === 'table') {
|
|
550
|
+
fixUpTable(box);
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
if (box.kind === 'table-row-group') {
|
|
554
|
+
wrapOrphans(box, 'table-row', (k) => k === 'table-row');
|
|
555
|
+
return;
|
|
556
|
+
}
|
|
557
|
+
if (box.kind === 'table-row') {
|
|
558
|
+
wrapOrphans(box, 'table-cell', (k) => k === 'table-cell');
|
|
559
|
+
return;
|
|
560
|
+
}
|
|
561
|
+
if (!box.children.length)
|
|
562
|
+
return;
|
|
563
|
+
let hasBlockLevel = false;
|
|
564
|
+
let hasInlineLevel = false;
|
|
565
|
+
for (const child of box.children) {
|
|
566
|
+
if (child.outOfFlow)
|
|
567
|
+
continue;
|
|
568
|
+
if (isBlockLevel(child))
|
|
569
|
+
hasBlockLevel = true;
|
|
570
|
+
else
|
|
571
|
+
hasInlineLevel = true;
|
|
572
|
+
}
|
|
573
|
+
// A flex container has no inline formatting context at all: every run of
|
|
574
|
+
// inline-level content becomes an anonymous flex *item*, whether or not a
|
|
575
|
+
// block-level sibling forced the question. `<div style="display:flex">some
|
|
576
|
+
// text</div>` is the case the mixed-content rule alone drops on the floor —
|
|
577
|
+
// all-inline children, so no wrapping, so the flex pass finds bare text
|
|
578
|
+
// boxes it cannot lay out and renders nothing.
|
|
579
|
+
const wrapAllInline = box.kind === 'flex';
|
|
580
|
+
if (!wrapAllInline && (!hasBlockLevel || !hasInlineLevel))
|
|
581
|
+
return;
|
|
582
|
+
if (wrapAllInline && !hasInlineLevel)
|
|
583
|
+
return;
|
|
584
|
+
const next = [];
|
|
585
|
+
let run = null;
|
|
586
|
+
for (const child of box.children) {
|
|
587
|
+
// A float or an absolutely positioned box sits in whichever context it
|
|
588
|
+
// finds itself; it does not force an anonymous block on its own.
|
|
589
|
+
if (isBlockLevel(child) && !child.outOfFlow && !child.isFloat) {
|
|
590
|
+
if (run) {
|
|
591
|
+
next.push(anonymousBlock(box, run));
|
|
592
|
+
run = null;
|
|
593
|
+
}
|
|
594
|
+
next.push(child);
|
|
595
|
+
continue;
|
|
596
|
+
}
|
|
597
|
+
// Whitespace between two blocks is not content and must not generate a
|
|
598
|
+
// line box — `<div><p>a</p> <p>b</p></div>` has no blank line in it.
|
|
599
|
+
if (!run && child.kind === 'text' && !child.text.trim())
|
|
600
|
+
continue;
|
|
601
|
+
(run ??= []).push(child);
|
|
602
|
+
}
|
|
603
|
+
if (run) {
|
|
604
|
+
if (run.every((c) => c.kind === 'text' && !c.text.trim())) {
|
|
605
|
+
// trailing whitespace after the last block: same rule
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
next.push(anonymousBlock(box, run));
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
box.children = next;
|
|
612
|
+
}
|
|
613
|
+
function anonymousBlock(parent, run) {
|
|
614
|
+
const box = new Box('block', null, parent.style);
|
|
615
|
+
box.parent = parent;
|
|
616
|
+
for (const child of run) {
|
|
617
|
+
child.parent = box;
|
|
618
|
+
box.children.push(child);
|
|
619
|
+
}
|
|
620
|
+
return box;
|
|
621
|
+
}
|
|
622
|
+
function isBlockLevel(box) {
|
|
623
|
+
switch (box.kind) {
|
|
624
|
+
case 'block':
|
|
625
|
+
case 'flex':
|
|
626
|
+
case 'table':
|
|
627
|
+
case 'table-row':
|
|
628
|
+
case 'table-row-group':
|
|
629
|
+
case 'table-cell':
|
|
630
|
+
case 'table-caption':
|
|
631
|
+
// An `inline-block` or `inline-flex` is a block *container* with an
|
|
632
|
+
// inline-level outer role, so it belongs to the inline run around it.
|
|
633
|
+
return !isInlineLevelDisplay(box.style.display);
|
|
634
|
+
default:
|
|
635
|
+
return false;
|
|
636
|
+
}
|
|
637
|
+
}
|
|
638
|
+
function isInlineLevelDisplay(display) {
|
|
639
|
+
return (display === 'inline-block' ||
|
|
640
|
+
display === 'inline-flex' ||
|
|
641
|
+
display === 'inline-table');
|
|
642
|
+
}
|
|
643
|
+
/** Wrap children that are not of `expect` in an anonymous box that is. */
|
|
644
|
+
function wrapOrphans(box, kind, accept) {
|
|
645
|
+
let needed = false;
|
|
646
|
+
for (const child of box.children) {
|
|
647
|
+
if (!accept(child.kind) && !isDroppableWhitespace(child)) {
|
|
648
|
+
needed = true;
|
|
649
|
+
break;
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
if (!needed)
|
|
653
|
+
return;
|
|
654
|
+
const next = [];
|
|
655
|
+
let run = null;
|
|
656
|
+
for (const child of box.children) {
|
|
657
|
+
if (accept(child.kind)) {
|
|
658
|
+
if (run) {
|
|
659
|
+
next.push(anonymousOf(box, kind, run));
|
|
660
|
+
run = null;
|
|
661
|
+
}
|
|
662
|
+
next.push(child);
|
|
663
|
+
continue;
|
|
664
|
+
}
|
|
665
|
+
if (isDroppableWhitespace(child))
|
|
666
|
+
continue;
|
|
667
|
+
(run ??= []).push(child);
|
|
668
|
+
}
|
|
669
|
+
if (run)
|
|
670
|
+
next.push(anonymousOf(box, kind, run));
|
|
671
|
+
box.children = next;
|
|
672
|
+
}
|
|
673
|
+
function anonymousOf(parent, kind, run) {
|
|
674
|
+
const box = new Box(kind, null, parent.style);
|
|
675
|
+
box.parent = parent;
|
|
676
|
+
for (const child of run) {
|
|
677
|
+
child.parent = box;
|
|
678
|
+
box.children.push(child);
|
|
679
|
+
}
|
|
680
|
+
return box;
|
|
681
|
+
}
|
|
682
|
+
function isDroppableWhitespace(box) {
|
|
683
|
+
return box.kind === 'text' && !box.text.trim();
|
|
684
|
+
}
|
|
685
|
+
function fixUpTable(table) {
|
|
686
|
+
const groups = [];
|
|
687
|
+
const captions = [];
|
|
688
|
+
let looseRows = null;
|
|
689
|
+
for (const child of table.children) {
|
|
690
|
+
if (child.kind === 'table-row-group') {
|
|
691
|
+
if (looseRows) {
|
|
692
|
+
groups.push(anonymousOf(table, 'table-row-group', looseRows));
|
|
693
|
+
looseRows = null;
|
|
694
|
+
}
|
|
695
|
+
groups.push(child);
|
|
696
|
+
}
|
|
697
|
+
else if (child.kind === 'table-caption') {
|
|
698
|
+
captions.push(child);
|
|
699
|
+
}
|
|
700
|
+
else if (isDroppableWhitespace(child)) {
|
|
701
|
+
continue;
|
|
702
|
+
}
|
|
703
|
+
else {
|
|
704
|
+
// A `<tr>`, or anything else that ended up here: rows go into an
|
|
705
|
+
// anonymous group, and anything that is not a row becomes a cell in
|
|
706
|
+
// one, which is how a browser rescues `<table>text</table>`.
|
|
707
|
+
const row = child.kind === 'table-row'
|
|
708
|
+
? child
|
|
709
|
+
: anonymousOf(table, 'table-row', [child]);
|
|
710
|
+
(looseRows ??= []).push(row);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
if (looseRows)
|
|
714
|
+
groups.push(anonymousOf(table, 'table-row-group', looseRows));
|
|
715
|
+
for (const group of groups) {
|
|
716
|
+
wrapOrphans(group, 'table-row', (k) => k === 'table-row');
|
|
717
|
+
for (const row of group.children) {
|
|
718
|
+
wrapOrphans(row, 'table-cell', (k) => k === 'table-cell');
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
table.children = [...captions, ...groups];
|
|
722
|
+
for (const child of table.children)
|
|
723
|
+
child.parent = table;
|
|
724
|
+
}
|
|
725
|
+
//# sourceMappingURL=boxes.js.map
|