@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,306 @@
|
|
|
1
|
+
// The built-in tokenizing engine: line-state stream tokenization.
|
|
2
|
+
//
|
|
3
|
+
// A mode reads one line through a `StringStream` and carries a small state
|
|
4
|
+
// across line boundaries — the shape CodeMirror 5 ran on for a decade and
|
|
5
|
+
// VS Code's Monarch still runs on. It was chosen over a parse-tree engine
|
|
6
|
+
// for the out-of-the-box languages because it matches how the editor paints
|
|
7
|
+
// (per line, lazily, only the visible window), it makes incremental
|
|
8
|
+
// re-tokenization after an edit almost free (recompute from the edited line,
|
|
9
|
+
// stop at the first line whose entry state is unchanged), and it costs zero
|
|
10
|
+
// dependencies. Real parsers plug in through the same `Language` interface —
|
|
11
|
+
// see `./lezer.ts`.
|
|
12
|
+
|
|
13
|
+
import type {
|
|
14
|
+
Language,
|
|
15
|
+
LanguageData,
|
|
16
|
+
LineEdit,
|
|
17
|
+
Token,
|
|
18
|
+
Tokenizer,
|
|
19
|
+
} from './types.js';
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* One line of text with a cursor, the surface a mode's `token()` reads
|
|
23
|
+
* through. The mode consumes some characters and names their token type;
|
|
24
|
+
* the engine turns (start, pos] into a `Token`.
|
|
25
|
+
*/
|
|
26
|
+
export class StringStream {
|
|
27
|
+
/** Where the current token started. The engine resets it between calls. */
|
|
28
|
+
start = 0;
|
|
29
|
+
pos = 0;
|
|
30
|
+
|
|
31
|
+
constructor(readonly string: string) {}
|
|
32
|
+
|
|
33
|
+
sol(): boolean {
|
|
34
|
+
return this.pos === 0;
|
|
35
|
+
}
|
|
36
|
+
eol(): boolean {
|
|
37
|
+
return this.pos >= this.string.length;
|
|
38
|
+
}
|
|
39
|
+
peek(): string | undefined {
|
|
40
|
+
return this.string.charAt(this.pos) || undefined;
|
|
41
|
+
}
|
|
42
|
+
next(): string | undefined {
|
|
43
|
+
if (this.pos < this.string.length) return this.string.charAt(this.pos++);
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Consume the next character when it matches (a string or a RegExp). */
|
|
47
|
+
eat(match: string | RegExp | ((ch: string) => boolean)): string | undefined {
|
|
48
|
+
const ch = this.string.charAt(this.pos);
|
|
49
|
+
if (!ch) return undefined;
|
|
50
|
+
const ok =
|
|
51
|
+
typeof match === 'string'
|
|
52
|
+
? ch === match
|
|
53
|
+
: match instanceof RegExp
|
|
54
|
+
? match.test(ch)
|
|
55
|
+
: match(ch);
|
|
56
|
+
if (!ok) return undefined;
|
|
57
|
+
this.pos++;
|
|
58
|
+
return ch;
|
|
59
|
+
}
|
|
60
|
+
eatWhile(match: RegExp | ((ch: string) => boolean)): boolean {
|
|
61
|
+
const from = this.pos;
|
|
62
|
+
while (this.eat(match) !== undefined) {
|
|
63
|
+
/* consumed in the condition */
|
|
64
|
+
}
|
|
65
|
+
return this.pos > from;
|
|
66
|
+
}
|
|
67
|
+
eatSpace(): boolean {
|
|
68
|
+
return this.eatWhile(/[\s ]/);
|
|
69
|
+
}
|
|
70
|
+
skipToEnd(): void {
|
|
71
|
+
this.pos = this.string.length;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Match at the cursor. A string compares directly; a RegExp is applied to
|
|
75
|
+
* the rest of the line and must match at its start (anchor with `^`).
|
|
76
|
+
* Consumes on success unless `consume` is `false`.
|
|
77
|
+
*/
|
|
78
|
+
match(
|
|
79
|
+
pattern: string | RegExp,
|
|
80
|
+
consume = true,
|
|
81
|
+
): boolean | RegExpMatchArray | null {
|
|
82
|
+
if (typeof pattern === 'string') {
|
|
83
|
+
if (!this.string.startsWith(pattern, this.pos)) return null;
|
|
84
|
+
if (consume) this.pos += pattern.length;
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
const m = pattern.exec(this.string.slice(this.pos));
|
|
88
|
+
if (!m || m.index! > 0) return null;
|
|
89
|
+
if (consume) this.pos += m[0].length;
|
|
90
|
+
return m;
|
|
91
|
+
}
|
|
92
|
+
backUp(n: number): void {
|
|
93
|
+
this.pos -= n;
|
|
94
|
+
}
|
|
95
|
+
current(): string {
|
|
96
|
+
return this.string.slice(this.start, this.pos);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* A stream mode: `startState` before line 0, `token` consuming one token at
|
|
102
|
+
* the stream's cursor (return its type, or `null` for plain text), the state
|
|
103
|
+
* mutated in place as it goes.
|
|
104
|
+
*
|
|
105
|
+
* States must be flat bags of primitives (strings, numbers, booleans) —
|
|
106
|
+
* that is what the default `copyState`/`stateEquals` handle, and what makes
|
|
107
|
+
* the stop-early check on re-tokenization cheap. A mode with a stack encodes
|
|
108
|
+
* it as a string (see the JavaScript mode's `ctx`).
|
|
109
|
+
*/
|
|
110
|
+
export interface StreamMode<S> {
|
|
111
|
+
name: string;
|
|
112
|
+
languageData?: LanguageData;
|
|
113
|
+
startState(): S;
|
|
114
|
+
token(stream: StringStream, state: S): string | null;
|
|
115
|
+
/** Override when a state is not a flat bag of primitives. */
|
|
116
|
+
copyState?(state: S): S;
|
|
117
|
+
/** Override alongside `copyState`, and keep the two consistent. */
|
|
118
|
+
stateEquals?(a: S, b: S): boolean;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* What the engine actually runs on: a whole-line tokenizer with carried
|
|
123
|
+
* state. `streamLanguage` builds one from a character-level `StreamMode`;
|
|
124
|
+
* the TextMate adapter builds one directly, because its grammars tokenize
|
|
125
|
+
* whole lines natively. Both get the same caching and convergence.
|
|
126
|
+
*/
|
|
127
|
+
export interface LineMode<S> {
|
|
128
|
+
name: string;
|
|
129
|
+
languageData?: LanguageData;
|
|
130
|
+
startState(): S;
|
|
131
|
+
runLine(text: string, state: S): Token[];
|
|
132
|
+
copyState?(state: S): S;
|
|
133
|
+
stateEquals?(a: S, b: S): boolean;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
function defaultCopy<S>(state: S): S {
|
|
137
|
+
if (state === null || typeof state !== 'object') return state;
|
|
138
|
+
return { ...(state as object) } as S;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function defaultEquals(a: unknown, b: unknown): boolean {
|
|
142
|
+
if (a === b) return true;
|
|
143
|
+
if (
|
|
144
|
+
a === null ||
|
|
145
|
+
b === null ||
|
|
146
|
+
typeof a !== 'object' ||
|
|
147
|
+
typeof b !== 'object'
|
|
148
|
+
) {
|
|
149
|
+
return false;
|
|
150
|
+
}
|
|
151
|
+
const ka = Object.keys(a as object);
|
|
152
|
+
const kb = Object.keys(b as object);
|
|
153
|
+
if (ka.length !== kb.length) return false;
|
|
154
|
+
for (const k of ka) {
|
|
155
|
+
if (
|
|
156
|
+
(a as Record<string, unknown>)[k] !== (b as Record<string, unknown>)[k]
|
|
157
|
+
) {
|
|
158
|
+
return false;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return true;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* The engine. Caches, per line, the state *entering* it (`states[i]`) and
|
|
166
|
+
* the tokens it produced (`tokens[i]`), the two written together so a cached
|
|
167
|
+
* pair is always self-consistent. `edit()` splices the caches to the new
|
|
168
|
+
* line numbering, leaving `undefined` holes exactly where text changed; the
|
|
169
|
+
* next `lineTokens()` re-tokenizes forward from the edit and stops as soon
|
|
170
|
+
* as a freshly computed entry state equals a cached one — the classic
|
|
171
|
+
* convergence trick, and the reason typing at the top of a 10k-line file
|
|
172
|
+
* re-tokenizes until the edit stops mattering (usually one line), not 10k
|
|
173
|
+
* lines. The `undefined` holes are also what makes convergence sound across
|
|
174
|
+
* multiple pending edits: the fast-forward below can never skip over a line
|
|
175
|
+
* whose text changed, because that line's cache is a hole.
|
|
176
|
+
*/
|
|
177
|
+
class StreamTokenizer<S> implements Tokenizer {
|
|
178
|
+
private lines: readonly string[] = [''];
|
|
179
|
+
/** states[i] = state entering line i. Trusted for i <= frontier; a
|
|
180
|
+
* defined entry beyond that is a pre-edit value, used only as a
|
|
181
|
+
* convergence candidate. */
|
|
182
|
+
private states: (S | undefined)[] = [];
|
|
183
|
+
private tokens: (Token[] | undefined)[] = [];
|
|
184
|
+
/** Lines `[0, frontier)` have trusted tokens. */
|
|
185
|
+
private frontier = 0;
|
|
186
|
+
|
|
187
|
+
constructor(private readonly mode: LineMode<S>) {}
|
|
188
|
+
|
|
189
|
+
setLines(lines: readonly string[]): void {
|
|
190
|
+
this.lines = lines;
|
|
191
|
+
this.states = new Array(lines.length + 1);
|
|
192
|
+
this.tokens = new Array(lines.length);
|
|
193
|
+
this.states[0] = this.mode.startState();
|
|
194
|
+
this.frontier = 0;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
edit({ fromLine, removed, inserted }: LineEdit): void {
|
|
198
|
+
// Align the caches below the edit with the new line numbering (their
|
|
199
|
+
// contents may still be right — convergence will decide), and punch
|
|
200
|
+
// `undefined` holes for the lines whose text actually changed.
|
|
201
|
+
this.states.splice(
|
|
202
|
+
fromLine + 1,
|
|
203
|
+
removed,
|
|
204
|
+
...new Array<S | undefined>(inserted),
|
|
205
|
+
);
|
|
206
|
+
this.tokens.splice(
|
|
207
|
+
fromLine,
|
|
208
|
+
removed,
|
|
209
|
+
...new Array<Token[] | undefined>(inserted),
|
|
210
|
+
);
|
|
211
|
+
this.frontier = Math.min(this.frontier, fromLine);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
lineTokens(line: number): readonly Token[] {
|
|
215
|
+
if (line < 0 || line >= this.lines.length) return [];
|
|
216
|
+
this.ensure(line);
|
|
217
|
+
return this.tokens[line] ?? [];
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
private ensure(line: number): void {
|
|
221
|
+
const copy = this.mode.copyState ?? defaultCopy;
|
|
222
|
+
const equals = this.mode.stateEquals ?? defaultEquals;
|
|
223
|
+
while (this.frontier <= line) {
|
|
224
|
+
const i = this.frontier;
|
|
225
|
+
// `states[i]` is trusted here: it is either below the old frontier or
|
|
226
|
+
// was written by the previous iteration. Copy before running — the
|
|
227
|
+
// mode mutates in place, and the cached entry must stay pristine.
|
|
228
|
+
const state = copy(this.states[i] as S);
|
|
229
|
+
this.tokens[i] = this.mode.runLine(this.lines[i], state);
|
|
230
|
+
const cached = this.states[i + 1];
|
|
231
|
+
if (
|
|
232
|
+
cached !== undefined &&
|
|
233
|
+
this.tokens[i + 1] !== undefined &&
|
|
234
|
+
equals(state, cached)
|
|
235
|
+
) {
|
|
236
|
+
// Converged: the cached suffix is still right (same entry state,
|
|
237
|
+
// and every cached pair was computed from the text it sits beside —
|
|
238
|
+
// an edit would have punched a hole). Fast-forward to the next hole
|
|
239
|
+
// and resume tokenizing for real there, if the caller needs it.
|
|
240
|
+
let f = i + 1;
|
|
241
|
+
while (
|
|
242
|
+
f < this.lines.length &&
|
|
243
|
+
this.tokens[f] !== undefined &&
|
|
244
|
+
this.states[f + 1] !== undefined
|
|
245
|
+
) {
|
|
246
|
+
f++;
|
|
247
|
+
}
|
|
248
|
+
this.frontier = f;
|
|
249
|
+
continue;
|
|
250
|
+
}
|
|
251
|
+
this.states[i + 1] = state;
|
|
252
|
+
this.frontier = i + 1;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** Run one line of a character-level mode, merging same-type runs. */
|
|
258
|
+
function runStreamLine<S>(
|
|
259
|
+
mode: StreamMode<S>,
|
|
260
|
+
text: string,
|
|
261
|
+
state: S,
|
|
262
|
+
): Token[] {
|
|
263
|
+
const out: Token[] = [];
|
|
264
|
+
const stream = new StringStream(text);
|
|
265
|
+
while (!stream.eol()) {
|
|
266
|
+
stream.start = stream.pos;
|
|
267
|
+
const type = mode.token(stream, state);
|
|
268
|
+
if (stream.pos <= stream.start) {
|
|
269
|
+
// A mode that consumes nothing would loop forever; skip a character
|
|
270
|
+
// and paint it plain, which also makes mode bugs visible instead of
|
|
271
|
+
// hanging the app.
|
|
272
|
+
stream.pos = stream.start + 1;
|
|
273
|
+
}
|
|
274
|
+
if (type) {
|
|
275
|
+
const last = out[out.length - 1];
|
|
276
|
+
if (last && last.to === stream.start && last.type === type) {
|
|
277
|
+
last.to = stream.pos; // merge adjacent same-type runs
|
|
278
|
+
} else {
|
|
279
|
+
out.push({ from: stream.start, to: stream.pos, type });
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
return out;
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
/** Wrap a whole-line {@link LineMode} as a {@link Language} — the seam the
|
|
287
|
+
* TextMate adapter enters through. */
|
|
288
|
+
export function lineModeLanguage<S>(mode: LineMode<S>): Language {
|
|
289
|
+
return {
|
|
290
|
+
name: mode.name,
|
|
291
|
+
data: mode.languageData,
|
|
292
|
+
createTokenizer: () => new StreamTokenizer(mode),
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/** Wrap a {@link StreamMode} as a {@link Language}. */
|
|
297
|
+
export function streamLanguage<S>(mode: StreamMode<S>): Language {
|
|
298
|
+
return lineModeLanguage({
|
|
299
|
+
name: mode.name,
|
|
300
|
+
languageData: mode.languageData,
|
|
301
|
+
startState: mode.startState,
|
|
302
|
+
runLine: (text, state) => runStreamLine(mode, text, state),
|
|
303
|
+
copyState: mode.copyState,
|
|
304
|
+
stateEquals: mode.stateEquals,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// The TextMate adapter: plug a grammar from the VS Code / Shiki world into
|
|
2
|
+
// `<CodeEditor language>`.
|
|
3
|
+
//
|
|
4
|
+
// TextMate grammars are the largest grammar collection in existence — every
|
|
5
|
+
// VS Code language extension ships one — and their tokenizer is *exactly*
|
|
6
|
+
// line-state shaped: `tokenizeLine(line, previousState)` returns scoped
|
|
7
|
+
// tokens plus the state the next line starts in, which is this editor's
|
|
8
|
+
// native model. So the adapter is a scope-name mapping over the same
|
|
9
|
+
// line-table engine the built-in modes use — incremental re-tokenization
|
|
10
|
+
// and convergence come for free, with `StateStack.equals` as the
|
|
11
|
+
// convergence test — and this package depends on none of the TextMate
|
|
12
|
+
// machinery. The app brings an initialized grammar:
|
|
13
|
+
//
|
|
14
|
+
// ```ts
|
|
15
|
+
// // via vscode-textmate + vscode-oniguruma, or shiki's core — app policy
|
|
16
|
+
// const grammar = await registry.loadGrammar('source.python');
|
|
17
|
+
// <CodeEditor language={textMateLanguage({ name: 'python', grammar })} />
|
|
18
|
+
// ```
|
|
19
|
+
import type { Language, LanguageData, Token } from './types.js';
|
|
20
|
+
import { lineModeLanguage } from './stream.js';
|
|
21
|
+
|
|
22
|
+
/** vscode-textmate's `StateStack`, structurally: opaque, with `equals`. */
|
|
23
|
+
export interface TextMateStateLike {
|
|
24
|
+
equals(other: TextMateStateLike): boolean;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/** The slice of vscode-textmate's `IGrammar` the adapter calls. */
|
|
28
|
+
export interface TextMateGrammarLike {
|
|
29
|
+
tokenizeLine(
|
|
30
|
+
line: string,
|
|
31
|
+
prevState: TextMateStateLike | null,
|
|
32
|
+
): {
|
|
33
|
+
tokens: Array<{ startIndex: number; endIndex?: number; scopes: string[] }>;
|
|
34
|
+
ruleStack: TextMateStateLike;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* TextMate scope prefix → editor token type, longest dotted prefix wins,
|
|
40
|
+
* most specific scope first. Extend with `scopeStyles` for a grammar that
|
|
41
|
+
* invents its own names.
|
|
42
|
+
*/
|
|
43
|
+
const DEFAULT_SCOPE_MAP: Readonly<Record<string, string>> = {
|
|
44
|
+
comment: 'comment',
|
|
45
|
+
'comment.block.documentation': 'docComment',
|
|
46
|
+
string: 'string',
|
|
47
|
+
'string.regexp': 'string2',
|
|
48
|
+
'constant.numeric': 'number',
|
|
49
|
+
'constant.language': 'atom',
|
|
50
|
+
'constant.character.escape': 'escape',
|
|
51
|
+
constant: 'atom',
|
|
52
|
+
keyword: 'keyword',
|
|
53
|
+
'keyword.operator': 'operator',
|
|
54
|
+
storage: 'keyword',
|
|
55
|
+
'storage.modifier': 'modifier',
|
|
56
|
+
'entity.name.function': 'function',
|
|
57
|
+
'entity.name.type': 'typeName',
|
|
58
|
+
'entity.name.class': 'className',
|
|
59
|
+
'entity.name.namespace': 'namespace',
|
|
60
|
+
'entity.name.tag': 'typeName',
|
|
61
|
+
'entity.other.attribute-name': 'propertyName',
|
|
62
|
+
'support.function': 'function',
|
|
63
|
+
'support.type': 'typeName',
|
|
64
|
+
'support.class': 'className',
|
|
65
|
+
'support.constant': 'atom',
|
|
66
|
+
variable: 'variableName',
|
|
67
|
+
'variable.other.property': 'propertyName',
|
|
68
|
+
'punctuation.definition.comment': 'comment',
|
|
69
|
+
'punctuation.definition.string': 'string',
|
|
70
|
+
punctuation: 'punctuation',
|
|
71
|
+
'meta.preprocessor': 'meta',
|
|
72
|
+
invalid: 'invalid',
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export interface TextMateLanguageOptions {
|
|
76
|
+
name: string;
|
|
77
|
+
grammar: TextMateGrammarLike;
|
|
78
|
+
data?: LanguageData;
|
|
79
|
+
/** Extra scope-prefix → token-type entries, consulted before the
|
|
80
|
+
* defaults. */
|
|
81
|
+
scopeStyles?: Readonly<Record<string, string>>;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function mapScopes(
|
|
85
|
+
scopes: readonly string[],
|
|
86
|
+
extra: Readonly<Record<string, string>> | undefined,
|
|
87
|
+
): string | null {
|
|
88
|
+
// the most specific scope is last; walk backwards and take the first
|
|
89
|
+
// (longest-prefix) mapping that answers
|
|
90
|
+
for (let i = scopes.length - 1; i >= 0; i--) {
|
|
91
|
+
const scope = scopes[i];
|
|
92
|
+
for (let cut = scope.length; cut > 0;) {
|
|
93
|
+
const prefix = scope.slice(0, cut);
|
|
94
|
+
const mapped = extra?.[prefix] ?? DEFAULT_SCOPE_MAP[prefix];
|
|
95
|
+
if (mapped) return mapped;
|
|
96
|
+
cut = prefix.lastIndexOf('.');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Wrap an initialized TextMate grammar as a {@link Language}. */
|
|
103
|
+
export function textMateLanguage(options: TextMateLanguageOptions): Language {
|
|
104
|
+
interface S {
|
|
105
|
+
stack: TextMateStateLike | null;
|
|
106
|
+
}
|
|
107
|
+
return lineModeLanguage<S>({
|
|
108
|
+
name: options.name,
|
|
109
|
+
languageData: options.data,
|
|
110
|
+
startState: () => ({ stack: null }),
|
|
111
|
+
copyState: (s) => ({ stack: s.stack }),
|
|
112
|
+
stateEquals: (a, b) =>
|
|
113
|
+
a.stack === b.stack ||
|
|
114
|
+
(a.stack != null && b.stack != null && a.stack.equals(b.stack)),
|
|
115
|
+
runLine(line: string, state: S): Token[] {
|
|
116
|
+
const result = options.grammar.tokenizeLine(line, state.stack);
|
|
117
|
+
state.stack = result.ruleStack;
|
|
118
|
+
const out: Token[] = [];
|
|
119
|
+
const tokens = result.tokens;
|
|
120
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
121
|
+
const t = tokens[i];
|
|
122
|
+
const from = t.startIndex;
|
|
123
|
+
const to = t.endIndex ?? tokens[i + 1]?.startIndex ?? line.length;
|
|
124
|
+
if (to <= from) continue;
|
|
125
|
+
const type = mapScopes(t.scopes, options.scopeStyles);
|
|
126
|
+
if (!type) continue;
|
|
127
|
+
const last = out[out.length - 1];
|
|
128
|
+
if (last && last.to === from && last.type === type) last.to = to;
|
|
129
|
+
else out.push({ from, to, type });
|
|
130
|
+
}
|
|
131
|
+
return out;
|
|
132
|
+
},
|
|
133
|
+
});
|
|
134
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
// Token styles: how the vocabulary in `types.ts` paints.
|
|
2
|
+
//
|
|
3
|
+
// Two built-in palettes, chosen for contrast against the backgrounds
|
|
4
|
+
// react-x11's own light and dark themes give a field. Neither is a clone of
|
|
5
|
+
// a licensed theme; both stay in the familiar register (keywords violet,
|
|
6
|
+
// strings green-in-dark / navy-in-light, comments dim italic) because a code
|
|
7
|
+
// editor that surprises the eye reads as broken. An app overrides per token
|
|
8
|
+
// type, and a value may be a `$token` into the react-x11 theme — resolved at
|
|
9
|
+
// paint against the editor's own `theme`, so `comment: { color: '$textMuted' }`
|
|
10
|
+
// follows the palette the rest of the window uses.
|
|
11
|
+
import type { TokenStyle, TokenStyles } from './types.js';
|
|
12
|
+
import { TOKEN_FALLBACK } from './types.js';
|
|
13
|
+
|
|
14
|
+
/** For light backgrounds (the default). */
|
|
15
|
+
export const LIGHT_TOKEN_STYLES: TokenStyles = {
|
|
16
|
+
keyword: { color: '#a626a4' },
|
|
17
|
+
operator: { color: '#526066' },
|
|
18
|
+
variableName: { color: '#383a42' },
|
|
19
|
+
typeName: { color: '#c18401' },
|
|
20
|
+
propertyName: { color: '#4078f2' },
|
|
21
|
+
function: { color: '#4078f2' },
|
|
22
|
+
string: { color: '#50a14f' },
|
|
23
|
+
string2: { color: '#2f7d3b' },
|
|
24
|
+
escape: { color: '#0184bc' },
|
|
25
|
+
number: { color: '#986801' },
|
|
26
|
+
atom: { color: '#986801' },
|
|
27
|
+
self: { color: '#e45649' },
|
|
28
|
+
comment: { color: '#a0a1a7', fontStyle: 'italic' },
|
|
29
|
+
meta: { color: '#a626a4' },
|
|
30
|
+
punctuation: { color: '#6a737d' },
|
|
31
|
+
invalid: { color: '#e45649' },
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/** For dark backgrounds. */
|
|
35
|
+
export const DARK_TOKEN_STYLES: TokenStyles = {
|
|
36
|
+
keyword: { color: '#c678dd' },
|
|
37
|
+
operator: { color: '#9da5b4' },
|
|
38
|
+
variableName: { color: '#abb2bf' },
|
|
39
|
+
typeName: { color: '#e5c07b' },
|
|
40
|
+
propertyName: { color: '#61afef' },
|
|
41
|
+
function: { color: '#61afef' },
|
|
42
|
+
string: { color: '#98c379' },
|
|
43
|
+
string2: { color: '#7bae62' },
|
|
44
|
+
escape: { color: '#56b6c2' },
|
|
45
|
+
number: { color: '#d19a66' },
|
|
46
|
+
atom: { color: '#d19a66' },
|
|
47
|
+
self: { color: '#e06c75' },
|
|
48
|
+
comment: { color: '#5c6370', fontStyle: 'italic' },
|
|
49
|
+
meta: { color: '#c678dd' },
|
|
50
|
+
punctuation: { color: '#7f848e' },
|
|
51
|
+
invalid: { color: '#e06c75' },
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Look a token type up, walking {@link TOKEN_FALLBACK} so a theme may style
|
|
56
|
+
* `string` once and have `string2`/`escape` follow. Null when nothing in the
|
|
57
|
+
* chain is styled — the editor then paints plain.
|
|
58
|
+
*/
|
|
59
|
+
export function tokenStyleFor(
|
|
60
|
+
styles: TokenStyles,
|
|
61
|
+
type: string,
|
|
62
|
+
): TokenStyle | null {
|
|
63
|
+
let t: string | undefined = type;
|
|
64
|
+
for (let hops = 0; t !== undefined && hops < 6; hops++) {
|
|
65
|
+
const style = styles[t];
|
|
66
|
+
if (style) return style;
|
|
67
|
+
t = TOKEN_FALLBACK[t];
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Is this a colour a light palette would be unreadable on? `null` when the
|
|
74
|
+
* string is not a colour this can judge (`'transparent'`, a gradient, an
|
|
75
|
+
* unresolved `$token`) — the caller then falls back to the next layer down
|
|
76
|
+
* (the react-x11 theme's `background`).
|
|
77
|
+
*
|
|
78
|
+
* Judged by WCAG relative luminance, cut at 0.42 rather than 0.5 because
|
|
79
|
+
* mid-grey editor themes (Solarized-ish `#657b83` neighbourhoods) read
|
|
80
|
+
* better with the dark set.
|
|
81
|
+
*/
|
|
82
|
+
export function isDarkBackground(color: string | undefined): boolean | null {
|
|
83
|
+
if (!color) return null;
|
|
84
|
+
const rgb = parseColor(color);
|
|
85
|
+
if (!rgb) return null;
|
|
86
|
+
const [r, g, b] = rgb.map((v) => {
|
|
87
|
+
const c = v / 255;
|
|
88
|
+
return c <= 0.03928 ? c / 12.92 : ((c + 0.055) / 1.055) ** 2.4;
|
|
89
|
+
});
|
|
90
|
+
return 0.2126 * r + 0.7152 * g + 0.0722 * b < 0.42;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function parseColor(color: string): [number, number, number] | null {
|
|
94
|
+
const c = color.trim();
|
|
95
|
+
const hex = /^#([0-9a-fA-F]{3,8})$/.exec(c)?.[1];
|
|
96
|
+
if (hex) {
|
|
97
|
+
if (hex.length === 3 || hex.length === 4) {
|
|
98
|
+
return [
|
|
99
|
+
parseInt(hex[0] + hex[0], 16),
|
|
100
|
+
parseInt(hex[1] + hex[1], 16),
|
|
101
|
+
parseInt(hex[2] + hex[2], 16),
|
|
102
|
+
];
|
|
103
|
+
}
|
|
104
|
+
if (hex.length === 6 || hex.length === 8) {
|
|
105
|
+
return [
|
|
106
|
+
parseInt(hex.slice(0, 2), 16),
|
|
107
|
+
parseInt(hex.slice(2, 4), 16),
|
|
108
|
+
parseInt(hex.slice(4, 6), 16),
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
const fn = /^rgba?\(\s*([\d.]+)\s*,\s*([\d.]+)\s*,\s*([\d.]+)/.exec(c);
|
|
114
|
+
if (fn) {
|
|
115
|
+
return [Number(fn[1]), Number(fn[2]), Number(fn[3])];
|
|
116
|
+
}
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/** The built-in palette for a background: dark set on dark, light set
|
|
121
|
+
* otherwise. What the editor uses when no `tokenStyles` prop is given. */
|
|
122
|
+
export function autoTokenStyles(background: string | undefined): TokenStyles {
|
|
123
|
+
return isDarkBackground(background) ? DARK_TOKEN_STYLES : LIGHT_TOKEN_STYLES;
|
|
124
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// Timers, reached through `globalThis`. The build compiles `src/` with
|
|
2
|
+
// `types: []` on purpose — a Node global that wanders in must fail the
|
|
3
|
+
// build rather than become an implicit `@types/node` dependency (AGENTS.md)
|
|
4
|
+
// — so the runtime-provided timers are typed here, structurally, once.
|
|
5
|
+
interface TimerGlobals {
|
|
6
|
+
setInterval?(fn: () => void, ms: number): unknown;
|
|
7
|
+
clearInterval?(id: unknown): void;
|
|
8
|
+
setTimeout?(fn: () => void, ms: number): unknown;
|
|
9
|
+
clearTimeout?(id: unknown): void;
|
|
10
|
+
queueMicrotask?(fn: () => void): void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const g = globalThis as TimerGlobals;
|
|
14
|
+
|
|
15
|
+
export type TimerId = unknown;
|
|
16
|
+
|
|
17
|
+
export function startInterval(fn: () => void, ms: number): TimerId {
|
|
18
|
+
return g.setInterval?.(fn, ms) ?? null;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function stopInterval(id: TimerId): void {
|
|
22
|
+
if (id != null) g.clearInterval?.(id);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export function startTimeout(fn: () => void, ms: number): TimerId {
|
|
26
|
+
return g.setTimeout?.(fn, ms) ?? null;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export function stopTimeout(id: TimerId): void {
|
|
30
|
+
if (id != null) g.clearTimeout?.(id);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function microtask(fn: () => void): void {
|
|
34
|
+
if (g.queueMicrotask) g.queueMicrotask(fn);
|
|
35
|
+
else void Promise.resolve().then(fn);
|
|
36
|
+
}
|