@inhuman.tools/quickdraw 0.0.0-bootstrap.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/LICENSE.md +7 -0
- package/README.md +102 -1
- package/aurora.vert +168 -0
- package/dist/bench/host.d.ts +62 -0
- package/dist/bench/host.d.ts.map +1 -0
- package/dist/bench/host.js +77 -0
- package/dist/bench/host.js.map +1 -0
- package/dist/bench/main.d.ts +6 -0
- package/dist/bench/main.d.ts.map +1 -0
- package/dist/bench/main.js +118 -0
- package/dist/bench/main.js.map +1 -0
- package/dist/bench/model.d.ts +36 -0
- package/dist/bench/model.d.ts.map +1 -0
- package/dist/bench/model.js +112 -0
- package/dist/bench/model.js.map +1 -0
- package/dist/bench/tea.d.ts +14 -0
- package/dist/bench/tea.d.ts.map +1 -0
- package/dist/bench/tea.js +6 -0
- package/dist/bench/tea.js.map +1 -0
- package/dist/bench/view.d.ts +9 -0
- package/dist/bench/view.d.ts.map +1 -0
- package/dist/bench/view.js +88 -0
- package/dist/bench/view.js.map +1 -0
- package/dist/bench/worker.d.ts +6 -0
- package/dist/bench/worker.d.ts.map +1 -0
- package/dist/bench/worker.js +46 -0
- package/dist/bench/worker.js.map +1 -0
- package/dist/buffer/bgfx-mark.d.ts +32 -0
- package/dist/buffer/bgfx-mark.d.ts.map +1 -0
- package/dist/buffer/bgfx-mark.js +43 -0
- package/dist/buffer/bgfx-mark.js.map +1 -0
- package/dist/buffer/index.d.ts +191 -0
- package/dist/buffer/index.d.ts.map +1 -0
- package/dist/buffer/index.js +353 -0
- package/dist/buffer/index.js.map +1 -0
- package/dist/capabilities/env.d.ts +23 -0
- package/dist/capabilities/env.d.ts.map +1 -0
- package/dist/capabilities/env.js +35 -0
- package/dist/capabilities/env.js.map +1 -0
- package/dist/capabilities/index.d.ts +13 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +13 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/parse.d.ts +41 -0
- package/dist/capabilities/parse.d.ts.map +1 -0
- package/dist/capabilities/parse.js +86 -0
- package/dist/capabilities/parse.js.map +1 -0
- package/dist/capabilities/probe.d.ts +37 -0
- package/dist/capabilities/probe.d.ts.map +1 -0
- package/dist/capabilities/probe.js +75 -0
- package/dist/capabilities/probe.js.map +1 -0
- package/dist/capabilities/sequences.d.ts +33 -0
- package/dist/capabilities/sequences.d.ts.map +1 -0
- package/dist/capabilities/sequences.js +36 -0
- package/dist/capabilities/sequences.js.map +1 -0
- package/dist/capabilities/types.d.ts +25 -0
- package/dist/capabilities/types.d.ts.map +1 -0
- package/dist/capabilities/types.js +5 -0
- package/dist/capabilities/types.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/input/decode.d.ts +167 -0
- package/dist/input/decode.d.ts.map +1 -0
- package/dist/input/decode.js +825 -0
- package/dist/input/decode.js.map +1 -0
- package/dist/input/draft.d.ts +85 -0
- package/dist/input/draft.d.ts.map +1 -0
- package/dist/input/draft.js +276 -0
- package/dist/input/draft.js.map +1 -0
- package/dist/input/index.d.ts +3 -0
- package/dist/input/index.d.ts.map +1 -0
- package/dist/input/index.js +3 -0
- package/dist/input/index.js.map +1 -0
- package/dist/input/prompt-blocks.d.ts +58 -0
- package/dist/input/prompt-blocks.d.ts.map +1 -0
- package/dist/input/prompt-blocks.js +48 -0
- package/dist/input/prompt-blocks.js.map +1 -0
- package/dist/input/rich-draft.d.ts +46 -0
- package/dist/input/rich-draft.d.ts.map +1 -0
- package/dist/input/rich-draft.js +391 -0
- package/dist/input/rich-draft.js.map +1 -0
- package/dist/input/rich-hit.d.ts +17 -0
- package/dist/input/rich-hit.d.ts.map +1 -0
- package/dist/input/rich-hit.js +89 -0
- package/dist/input/rich-hit.js.map +1 -0
- package/dist/input/rich-intake.d.ts +16 -0
- package/dist/input/rich-intake.d.ts.map +1 -0
- package/dist/input/rich-intake.js +22 -0
- package/dist/input/rich-intake.js.map +1 -0
- package/dist/input/rich-paint.d.ts +13 -0
- package/dist/input/rich-paint.d.ts.map +1 -0
- package/dist/input/rich-paint.js +18 -0
- package/dist/input/rich-paint.js.map +1 -0
- package/dist/internals/bgfx/index.d.ts +17 -0
- package/dist/internals/bgfx/index.d.ts.map +1 -0
- package/dist/internals/bgfx/index.js +17 -0
- package/dist/internals/bgfx/index.js.map +1 -0
- package/dist/internals/bgfx/materialize.d.ts +31 -0
- package/dist/internals/bgfx/materialize.d.ts.map +1 -0
- package/dist/internals/bgfx/materialize.js +117 -0
- package/dist/internals/bgfx/materialize.js.map +1 -0
- package/dist/internals/bgfx/opacity.d.ts +37 -0
- package/dist/internals/bgfx/opacity.d.ts.map +1 -0
- package/dist/internals/bgfx/opacity.js +76 -0
- package/dist/internals/bgfx/opacity.js.map +1 -0
- package/dist/internals/bgfx/registry.d.ts +13 -0
- package/dist/internals/bgfx/registry.d.ts.map +1 -0
- package/dist/internals/bgfx/registry.js +24 -0
- package/dist/internals/bgfx/registry.js.map +1 -0
- package/dist/internals/bgfx/sab-layout.d.ts +61 -0
- package/dist/internals/bgfx/sab-layout.d.ts.map +1 -0
- package/dist/internals/bgfx/sab-layout.js +107 -0
- package/dist/internals/bgfx/sab-layout.js.map +1 -0
- package/dist/internals/bgfx/shader-frame-host.d.ts +22 -0
- package/dist/internals/bgfx/shader-frame-host.d.ts.map +1 -0
- package/dist/internals/bgfx/shader-frame-host.js +165 -0
- package/dist/internals/bgfx/shader-frame-host.js.map +1 -0
- package/dist/internals/bgfx/shadertoy-catalog.d.ts +41 -0
- package/dist/internals/bgfx/shadertoy-catalog.d.ts.map +1 -0
- package/dist/internals/bgfx/shadertoy-catalog.js +200 -0
- package/dist/internals/bgfx/shadertoy-catalog.js.map +1 -0
- package/dist/internals/bgfx/shadertoy-gl.d.ts +38 -0
- package/dist/internals/bgfx/shadertoy-gl.d.ts.map +1 -0
- package/dist/internals/bgfx/shadertoy-gl.js +283 -0
- package/dist/internals/bgfx/shadertoy-gl.js.map +1 -0
- package/dist/internals/bgfx/types.d.ts +51 -0
- package/dist/internals/bgfx/types.d.ts.map +1 -0
- package/dist/internals/bgfx/types.js +14 -0
- package/dist/internals/bgfx/types.js.map +1 -0
- package/dist/internals/bgfx-worker.d.ts +6 -0
- package/dist/internals/bgfx-worker.d.ts.map +1 -0
- package/dist/internals/bgfx-worker.js +131 -0
- package/dist/internals/bgfx-worker.js.map +1 -0
- package/dist/layout/birth.d.ts +77 -0
- package/dist/layout/birth.d.ts.map +1 -0
- package/dist/layout/birth.js +148 -0
- package/dist/layout/birth.js.map +1 -0
- package/dist/layout/children.d.ts +5 -0
- package/dist/layout/children.d.ts.map +1 -0
- package/dist/layout/children.js +19 -0
- package/dist/layout/children.js.map +1 -0
- package/dist/layout/chrome_frame.d.ts +254 -0
- package/dist/layout/chrome_frame.d.ts.map +1 -0
- package/dist/layout/chrome_frame.js +1080 -0
- package/dist/layout/chrome_frame.js.map +1 -0
- package/dist/layout/chrome_mask.d.ts +40 -0
- package/dist/layout/chrome_mask.d.ts.map +1 -0
- package/dist/layout/chrome_mask.js +150 -0
- package/dist/layout/chrome_mask.js.map +1 -0
- package/dist/layout/engine.d.ts +49 -0
- package/dist/layout/engine.d.ts.map +1 -0
- package/dist/layout/engine.js +1269 -0
- package/dist/layout/engine.js.map +1 -0
- package/dist/layout/flex.d.ts +36 -0
- package/dist/layout/flex.d.ts.map +1 -0
- package/dist/layout/flex.js +111 -0
- package/dist/layout/flex.js.map +1 -0
- package/dist/layout/grid.d.ts +36 -0
- package/dist/layout/grid.d.ts.map +1 -0
- package/dist/layout/grid.js +126 -0
- package/dist/layout/grid.js.map +1 -0
- package/dist/layout/index.d.ts +30 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +30 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/indication.d.ts +34 -0
- package/dist/layout/indication.d.ts.map +1 -0
- package/dist/layout/indication.js +68 -0
- package/dist/layout/indication.js.map +1 -0
- package/dist/layout/length.d.ts +18 -0
- package/dist/layout/length.d.ts.map +1 -0
- package/dist/layout/length.js +24 -0
- package/dist/layout/length.js.map +1 -0
- package/dist/layout/live_paint.d.ts +145 -0
- package/dist/layout/live_paint.d.ts.map +1 -0
- package/dist/layout/live_paint.js +255 -0
- package/dist/layout/live_paint.js.map +1 -0
- package/dist/layout/markdown.d.ts +22 -0
- package/dist/layout/markdown.d.ts.map +1 -0
- package/dist/layout/markdown.js +167 -0
- package/dist/layout/markdown.js.map +1 -0
- package/dist/layout/measure.d.ts +46 -0
- package/dist/layout/measure.d.ts.map +1 -0
- package/dist/layout/measure.js +307 -0
- package/dist/layout/measure.js.map +1 -0
- package/dist/layout/paint-hotkey.d.ts +45 -0
- package/dist/layout/paint-hotkey.d.ts.map +1 -0
- package/dist/layout/paint-hotkey.js +152 -0
- package/dist/layout/paint-hotkey.js.map +1 -0
- package/dist/layout/paint.d.ts +25 -0
- package/dist/layout/paint.d.ts.map +1 -0
- package/dist/layout/paint.js +189 -0
- package/dist/layout/paint.js.map +1 -0
- package/dist/layout/paint_theme.d.ts +85 -0
- package/dist/layout/paint_theme.d.ts.map +1 -0
- package/dist/layout/paint_theme.js +76 -0
- package/dist/layout/paint_theme.js.map +1 -0
- package/dist/layout/progress.d.ts +31 -0
- package/dist/layout/progress.d.ts.map +1 -0
- package/dist/layout/progress.js +83 -0
- package/dist/layout/progress.js.map +1 -0
- package/dist/layout/selection.d.ts +136 -0
- package/dist/layout/selection.d.ts.map +1 -0
- package/dist/layout/selection.js +312 -0
- package/dist/layout/selection.js.map +1 -0
- package/dist/layout/selection_gesture.d.ts +88 -0
- package/dist/layout/selection_gesture.d.ts.map +1 -0
- package/dist/layout/selection_gesture.js +239 -0
- package/dist/layout/selection_gesture.js.map +1 -0
- package/dist/layout/selection_paint.d.ts +47 -0
- package/dist/layout/selection_paint.d.ts.map +1 -0
- package/dist/layout/selection_paint.js +320 -0
- package/dist/layout/selection_paint.js.map +1 -0
- package/dist/layout/serialize.d.ts +49 -0
- package/dist/layout/serialize.d.ts.map +1 -0
- package/dist/layout/serialize.js +437 -0
- package/dist/layout/serialize.js.map +1 -0
- package/dist/layout/squeeze.d.ts +58 -0
- package/dist/layout/squeeze.d.ts.map +1 -0
- package/dist/layout/squeeze.js +239 -0
- package/dist/layout/squeeze.js.map +1 -0
- package/dist/layout/text.d.ts +44 -0
- package/dist/layout/text.d.ts.map +1 -0
- package/dist/layout/text.js +230 -0
- package/dist/layout/text.js.map +1 -0
- package/dist/layout/theme_store.d.ts +21 -0
- package/dist/layout/theme_store.d.ts.map +1 -0
- package/dist/layout/theme_store.js +133 -0
- package/dist/layout/theme_store.js.map +1 -0
- package/dist/layout/types.d.ts +564 -0
- package/dist/layout/types.d.ts.map +1 -0
- package/dist/layout/types.js +2 -0
- package/dist/layout/types.js.map +1 -0
- package/dist/layout/visual_draft.d.ts +60 -0
- package/dist/layout/visual_draft.d.ts.map +1 -0
- package/dist/layout/visual_draft.js +199 -0
- package/dist/layout/visual_draft.js.map +1 -0
- package/dist/lexicon/color.d.ts +22 -0
- package/dist/lexicon/color.d.ts.map +1 -0
- package/dist/lexicon/color.js +6 -0
- package/dist/lexicon/color.js.map +1 -0
- package/dist/lexicon/index.d.ts +15 -0
- package/dist/lexicon/index.d.ts.map +1 -0
- package/dist/lexicon/index.js +15 -0
- package/dist/lexicon/index.js.map +1 -0
- package/dist/lexicon/prominence.d.ts +46 -0
- package/dist/lexicon/prominence.d.ts.map +1 -0
- package/dist/lexicon/prominence.js +73 -0
- package/dist/lexicon/prominence.js.map +1 -0
- package/dist/lexicon/quarantine.d.ts +21 -0
- package/dist/lexicon/quarantine.d.ts.map +1 -0
- package/dist/lexicon/quarantine.js +15 -0
- package/dist/lexicon/quarantine.js.map +1 -0
- package/dist/lexicon/roles.d.ts +37 -0
- package/dist/lexicon/roles.d.ts.map +1 -0
- package/dist/lexicon/roles.js +52 -0
- package/dist/lexicon/roles.js.map +1 -0
- package/dist/lexicon/tiers.d.ts +18 -0
- package/dist/lexicon/tiers.d.ts.map +1 -0
- package/dist/lexicon/tiers.js +17 -0
- package/dist/lexicon/tiers.js.map +1 -0
- package/dist/measure/index.d.ts +43 -0
- package/dist/measure/index.d.ts.map +1 -0
- package/dist/measure/index.js +120 -0
- package/dist/measure/index.js.map +1 -0
- package/dist/render.d.ts +72 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +164 -0
- package/dist/render.js.map +1 -0
- package/dist/runtime/agents_keys.d.ts +8 -0
- package/dist/runtime/agents_keys.d.ts.map +1 -0
- package/dist/runtime/agents_keys.js +24 -0
- package/dist/runtime/agents_keys.js.map +1 -0
- package/dist/runtime/agents_peek.d.ts +44 -0
- package/dist/runtime/agents_peek.d.ts.map +1 -0
- package/dist/runtime/agents_peek.js +96 -0
- package/dist/runtime/agents_peek.js.map +1 -0
- package/dist/runtime/agents_preview.d.ts +27 -0
- package/dist/runtime/agents_preview.d.ts.map +1 -0
- package/dist/runtime/agents_preview.js +122 -0
- package/dist/runtime/agents_preview.js.map +1 -0
- package/dist/runtime/box_bus.d.ts +144 -0
- package/dist/runtime/box_bus.d.ts.map +1 -0
- package/dist/runtime/box_bus.js +74 -0
- package/dist/runtime/box_bus.js.map +1 -0
- package/dist/runtime/clipboard-image.d.ts +20 -0
- package/dist/runtime/clipboard-image.d.ts.map +1 -0
- package/dist/runtime/clipboard-image.js +62 -0
- package/dist/runtime/clipboard-image.js.map +1 -0
- package/dist/runtime/copy_toast.d.ts +46 -0
- package/dist/runtime/copy_toast.d.ts.map +1 -0
- package/dist/runtime/copy_toast.js +117 -0
- package/dist/runtime/copy_toast.js.map +1 -0
- package/dist/runtime/echo.d.ts +41 -0
- package/dist/runtime/echo.d.ts.map +1 -0
- package/dist/runtime/echo.js +112 -0
- package/dist/runtime/echo.js.map +1 -0
- package/dist/runtime/frame.d.ts +79 -0
- package/dist/runtime/frame.d.ts.map +1 -0
- package/dist/runtime/frame.js +258 -0
- package/dist/runtime/frame.js.map +1 -0
- package/dist/runtime/index.d.ts +16 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +16 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/key_buffer.d.ts +19 -0
- package/dist/runtime/key_buffer.d.ts.map +1 -0
- package/dist/runtime/key_buffer.js +24 -0
- package/dist/runtime/key_buffer.js.map +1 -0
- package/dist/runtime/keys.d.ts +66 -0
- package/dist/runtime/keys.d.ts.map +1 -0
- package/dist/runtime/keys.js +220 -0
- package/dist/runtime/keys.js.map +1 -0
- package/dist/runtime/paint_snapshot.d.ts +9 -0
- package/dist/runtime/paint_snapshot.d.ts.map +1 -0
- package/dist/runtime/paint_snapshot.js +8 -0
- package/dist/runtime/paint_snapshot.js.map +1 -0
- package/dist/runtime/paint_source.d.ts +266 -0
- package/dist/runtime/paint_source.d.ts.map +1 -0
- package/dist/runtime/paint_source.js +532 -0
- package/dist/runtime/paint_source.js.map +1 -0
- package/dist/runtime/present_loop.d.ts +11 -0
- package/dist/runtime/present_loop.d.ts.map +1 -0
- package/dist/runtime/present_loop.js +46 -0
- package/dist/runtime/present_loop.js.map +1 -0
- package/dist/runtime/present_profile.d.ts +58 -0
- package/dist/runtime/present_profile.d.ts.map +1 -0
- package/dist/runtime/present_profile.js +130 -0
- package/dist/runtime/present_profile.js.map +1 -0
- package/dist/runtime/raster.d.ts +24 -0
- package/dist/runtime/raster.d.ts.map +1 -0
- package/dist/runtime/raster.js +43 -0
- package/dist/runtime/raster.js.map +1 -0
- package/dist/runtime/renderer.d.ts +151 -0
- package/dist/runtime/renderer.d.ts.map +1 -0
- package/dist/runtime/renderer.js +1607 -0
- package/dist/runtime/renderer.js.map +1 -0
- package/dist/runtime/screenshot.d.ts +9 -0
- package/dist/runtime/screenshot.d.ts.map +1 -0
- package/dist/runtime/screenshot.js +111 -0
- package/dist/runtime/screenshot.js.map +1 -0
- package/dist/runtime/selection_host.d.ts +41 -0
- package/dist/runtime/selection_host.d.ts.map +1 -0
- package/dist/runtime/selection_host.js +190 -0
- package/dist/runtime/selection_host.js.map +1 -0
- package/dist/runtime/stderr_hold.d.ts +16 -0
- package/dist/runtime/stderr_hold.d.ts.map +1 -0
- package/dist/runtime/stderr_hold.js +23 -0
- package/dist/runtime/stderr_hold.js.map +1 -0
- package/dist/runtime/thought_birth.d.ts +25 -0
- package/dist/runtime/thought_birth.d.ts.map +1 -0
- package/dist/runtime/thought_birth.js +122 -0
- package/dist/runtime/thought_birth.js.map +1 -0
- package/dist/runtime/thought_collapsed.d.ts +35 -0
- package/dist/runtime/thought_collapsed.d.ts.map +1 -0
- package/dist/runtime/thought_collapsed.js +94 -0
- package/dist/runtime/thought_collapsed.js.map +1 -0
- package/dist/runtime/tty.d.ts +58 -0
- package/dist/runtime/tty.d.ts.map +1 -0
- package/dist/runtime/tty.js +130 -0
- package/dist/runtime/tty.js.map +1 -0
- package/dist/theme/ansi16.d.ts +34 -0
- package/dist/theme/ansi16.d.ts.map +1 -0
- package/dist/theme/ansi16.js +181 -0
- package/dist/theme/ansi16.js.map +1 -0
- package/dist/theme/ansi256.d.ts +15 -0
- package/dist/theme/ansi256.d.ts.map +1 -0
- package/dist/theme/ansi256.js +94 -0
- package/dist/theme/ansi256.js.map +1 -0
- package/dist/theme/ground.d.ts +8 -0
- package/dist/theme/ground.d.ts.map +1 -0
- package/dist/theme/ground.js +11 -0
- package/dist/theme/ground.js.map +1 -0
- package/dist/theme/index.d.ts +10 -0
- package/dist/theme/index.d.ts.map +1 -0
- package/dist/theme/index.js +10 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/theme/region.d.ts +42 -0
- package/dist/theme/region.d.ts.map +1 -0
- package/dist/theme/region.js +105 -0
- package/dist/theme/region.js.map +1 -0
- package/dist/theme/resolver.d.ts +126 -0
- package/dist/theme/resolver.d.ts.map +1 -0
- package/dist/theme/resolver.js +366 -0
- package/dist/theme/resolver.js.map +1 -0
- package/dist/theme/salience.d.ts +90 -0
- package/dist/theme/salience.d.ts.map +1 -0
- package/dist/theme/salience.js +208 -0
- package/dist/theme/salience.js.map +1 -0
- package/dist/theme/seeds.d.ts +113 -0
- package/dist/theme/seeds.d.ts.map +1 -0
- package/dist/theme/seeds.js +52 -0
- package/dist/theme/seeds.js.map +1 -0
- package/dist/theme/selection.d.ts +94 -0
- package/dist/theme/selection.d.ts.map +1 -0
- package/dist/theme/selection.js +135 -0
- package/dist/theme/selection.js.map +1 -0
- package/dist/theme/theme.d.ts +41 -0
- package/dist/theme/theme.d.ts.map +1 -0
- package/dist/theme/theme.js +34 -0
- package/dist/theme/theme.js.map +1 -0
- package/dist/widgets/composer-caret.d.ts +47 -0
- package/dist/widgets/composer-caret.d.ts.map +1 -0
- package/dist/widgets/composer-caret.js +90 -0
- package/dist/widgets/composer-caret.js.map +1 -0
- package/dist/widgets/composer-click.d.ts +30 -0
- package/dist/widgets/composer-click.d.ts.map +1 -0
- package/dist/widgets/composer-click.js +89 -0
- package/dist/widgets/composer-click.js.map +1 -0
- package/dist/widgets/composer-command.d.ts +64 -0
- package/dist/widgets/composer-command.d.ts.map +1 -0
- package/dist/widgets/composer-command.js +127 -0
- package/dist/widgets/composer-command.js.map +1 -0
- package/dist/widgets/composer-frame.d.ts +74 -0
- package/dist/widgets/composer-frame.d.ts.map +1 -0
- package/dist/widgets/composer-frame.js +284 -0
- package/dist/widgets/composer-frame.js.map +1 -0
- package/dist/widgets/composer-picker.d.ts +89 -0
- package/dist/widgets/composer-picker.d.ts.map +1 -0
- package/dist/widgets/composer-picker.js +240 -0
- package/dist/widgets/composer-picker.js.map +1 -0
- package/dist/widgets/diff.d.ts +11 -0
- package/dist/widgets/diff.d.ts.map +1 -0
- package/dist/widgets/diff.js +19 -0
- package/dist/widgets/diff.js.map +1 -0
- package/dist/widgets/expand.d.ts +28 -0
- package/dist/widgets/expand.d.ts.map +1 -0
- package/dist/widgets/expand.js +94 -0
- package/dist/widgets/expand.js.map +1 -0
- package/dist/widgets/index.d.ts +126 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +455 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/internals/arrival-lang.d.ts +88 -0
- package/dist/widgets/internals/arrival-lang.d.ts.map +1 -0
- package/dist/widgets/internals/arrival-lang.js +211 -0
- package/dist/widgets/internals/arrival-lang.js.map +1 -0
- package/dist/widgets/internals/diff-expand.d.ts +93 -0
- package/dist/widgets/internals/diff-expand.d.ts.map +1 -0
- package/dist/widgets/internals/diff-expand.js +1106 -0
- package/dist/widgets/internals/diff-expand.js.map +1 -0
- package/dist/widgets/internals/embedded-syntax.d.ts +62 -0
- package/dist/widgets/internals/embedded-syntax.d.ts.map +1 -0
- package/dist/widgets/internals/embedded-syntax.js +465 -0
- package/dist/widgets/internals/embedded-syntax.js.map +1 -0
- package/dist/widgets/internals/markdown-expand.d.ts +57 -0
- package/dist/widgets/internals/markdown-expand.d.ts.map +1 -0
- package/dist/widgets/internals/markdown-expand.js +980 -0
- package/dist/widgets/internals/markdown-expand.js.map +1 -0
- package/dist/widgets/internals/overlay-syntax.d.ts +24 -0
- package/dist/widgets/internals/overlay-syntax.d.ts.map +1 -0
- package/dist/widgets/internals/overlay-syntax.js +90 -0
- package/dist/widgets/internals/overlay-syntax.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/cleanLastNewline.d.ts +6 -0
- package/dist/widgets/internals/pierre-parse/cleanLastNewline.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/cleanLastNewline.js +8 -0
- package/dist/widgets/internals/pierre-parse/cleanLastNewline.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/constants.d.ts +13 -0
- package/dist/widgets/internals/pierre-parse/constants.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/constants.js +13 -0
- package/dist/widgets/internals/pierre-parse/constants.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/detachString.d.ts +3 -0
- package/dist/widgets/internals/pierre-parse/detachString.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/detachString.js +24 -0
- package/dist/widgets/internals/pierre-parse/detachString.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/index.d.ts +8 -0
- package/dist/widgets/internals/pierre-parse/index.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/index.js +8 -0
- package/dist/widgets/internals/pierre-parse/index.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/parseDiffFromFile.d.ts +15 -0
- package/dist/widgets/internals/pierre-parse/parseDiffFromFile.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/parseDiffFromFile.js +39 -0
- package/dist/widgets/internals/pierre-parse/parseDiffFromFile.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/parsePatchFiles.d.ts +11 -0
- package/dist/widgets/internals/pierre-parse/parsePatchFiles.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/parsePatchFiles.js +621 -0
- package/dist/widgets/internals/pierre-parse/parsePatchFiles.js.map +1 -0
- package/dist/widgets/internals/pierre-parse/types.d.ts +73 -0
- package/dist/widgets/internals/pierre-parse/types.d.ts.map +1 -0
- package/dist/widgets/internals/pierre-parse/types.js +7 -0
- package/dist/widgets/internals/pierre-parse/types.js.map +1 -0
- package/dist/widgets/internals/syntax.d.ts +55 -0
- package/dist/widgets/internals/syntax.d.ts.map +1 -0
- package/dist/widgets/internals/syntax.js +261 -0
- package/dist/widgets/internals/syntax.js.map +1 -0
- package/dist/widgets/markdown.d.ts +14 -0
- package/dist/widgets/markdown.d.ts.map +1 -0
- package/dist/widgets/markdown.js +9 -0
- package/dist/widgets/markdown.js.map +1 -0
- package/dist/widgets/shadow-stream.d.ts +88 -0
- package/dist/widgets/shadow-stream.d.ts.map +1 -0
- package/dist/widgets/shadow-stream.js +359 -0
- package/dist/widgets/shadow-stream.js.map +1 -0
- package/dist/widgets/speech.d.ts +36 -0
- package/dist/widgets/speech.d.ts.map +1 -0
- package/dist/widgets/speech.js +238 -0
- package/dist/widgets/speech.js.map +1 -0
- package/dist/widgets/stream-birth.d.ts +13 -0
- package/dist/widgets/stream-birth.d.ts.map +1 -0
- package/dist/widgets/stream-birth.js +70 -0
- package/dist/widgets/stream-birth.js.map +1 -0
- package/dist/widgets/syntax-boot.d.ts +25 -0
- package/dist/widgets/syntax-boot.d.ts.map +1 -0
- package/dist/widgets/syntax-boot.js +181 -0
- package/dist/widgets/syntax-boot.js.map +1 -0
- package/dist/widgets/text.d.ts +16 -0
- package/dist/widgets/text.d.ts.map +1 -0
- package/dist/widgets/text.js +14 -0
- package/dist/widgets/text.js.map +1 -0
- package/dist/widgets/transcript.d.ts +44 -0
- package/dist/widgets/transcript.d.ts.map +1 -0
- package/dist/widgets/transcript.js +106 -0
- package/dist/widgets/transcript.js.map +1 -0
- package/doom.vert +1840 -0
- package/fonts/DejaVuSans.ttf +0 -0
- package/fonts/DejaVuSansMono.ttf +0 -0
- package/fonts/LICENSE-DejaVu.txt +187 -0
- package/fonts/README.md +6 -0
- package/gradient.vert +75 -0
- package/package.json +147 -4
|
@@ -0,0 +1,353 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dual-frame cell buffer + row damage + ANSI emit + content guard.
|
|
3
|
+
* No layout. No TEA. Pure grid → bytes.
|
|
4
|
+
*
|
|
5
|
+
* Wide glyphs: display width 2+ → glyph cell + trailing placeholder cells.
|
|
6
|
+
* Emit **skips** placeholders (TERMINAL P3) so terminals don't advance 3 cols.
|
|
7
|
+
*/
|
|
8
|
+
import { graphemeWidth, isTwoColumnSymbol, isUnitWidthRun } from "../measure/index.js";
|
|
9
|
+
const GRAPHEME_SEGMENTER = new Intl.Segmenter(undefined, {
|
|
10
|
+
granularity: "grapheme",
|
|
11
|
+
});
|
|
12
|
+
/** Clamp a byte channel to [0,255]; non-finite → 0. Used by SGR emit. */
|
|
13
|
+
function clampByte(n) {
|
|
14
|
+
if (!Number.isFinite(n))
|
|
15
|
+
return 0;
|
|
16
|
+
return Math.max(0, Math.min(255, Math.round(n)));
|
|
17
|
+
}
|
|
18
|
+
// ── Content guard ───────────────────────────────────────────────────────────
|
|
19
|
+
// Model/user text must never emit CSI that mutates the terminal.
|
|
20
|
+
const CSI_OR_ESC = /\u001B\[[0-9;?]*[ -/]*[@-~]|\u001B./g;
|
|
21
|
+
// C2: OSC (ESC ] ... BEL/ST), DCS/SOS/PM/APC (ESC P/X/^/_ ... ST) carry payloads
|
|
22
|
+
// (hyperlinks via OSC 8, titles via OSC 0, color queries) that must not leak as
|
|
23
|
+
// visible text. Match terminated first, then strip any dangling intro byte.
|
|
24
|
+
const OSC_OR_DCS = /\u001B\][^\u0007\u001B]*(?:\u0007|\u001B\\)|\u001B[PX^_][^\u001B]*\u001B\\/g;
|
|
25
|
+
// Partial intros only: OSC = ESC ], DCS/SOS/PM/APC = ESC P / X / ^ / _.
|
|
26
|
+
// (Was `/\x1b[][PX^_]/g` — empty class `[]` matched nothing, ever.)
|
|
27
|
+
const OSC_OR_DCS_PARTIAL = /\u001B[\]PX^_]/g;
|
|
28
|
+
/**
|
|
29
|
+
* Sanitize text that will be painted as content cells (not our emit path).
|
|
30
|
+
* Removes ESC/CSI/OSC/DCS entirely for v1 (safest).
|
|
31
|
+
*/
|
|
32
|
+
export function guardContent(text) {
|
|
33
|
+
if (!text.includes("\u001B") && !text.includes("\u009B"))
|
|
34
|
+
return text;
|
|
35
|
+
// OSC/DCS first — they contain their own ESC, so strip before CSI regex sees them.
|
|
36
|
+
let out = text.replaceAll(OSC_OR_DCS, "");
|
|
37
|
+
out = out.replaceAll(OSC_OR_DCS_PARTIAL, "");
|
|
38
|
+
out = out.replaceAll(CSI_OR_ESC, "");
|
|
39
|
+
out = out.replaceAll(/\u009B[0-9;?]*[ -/]*[@-~]/g, "");
|
|
40
|
+
out = out.replaceAll("\u001B", "");
|
|
41
|
+
return out;
|
|
42
|
+
}
|
|
43
|
+
const BLANK = { ch: " ", style: {} };
|
|
44
|
+
/** Sentinel ch for placeholder mates — never emitted. */
|
|
45
|
+
export const PLACEHOLDER_CH = "";
|
|
46
|
+
// ── Grid ops ────────────────────────────────────────────────────────────────
|
|
47
|
+
export function createBuffer(width, height) {
|
|
48
|
+
const n = width * height;
|
|
49
|
+
const cells = new Array(n);
|
|
50
|
+
for (let i = 0; i < n; i++)
|
|
51
|
+
cells[i] = { ...BLANK, style: {} };
|
|
52
|
+
return { width, height, cells };
|
|
53
|
+
}
|
|
54
|
+
export function clear(buf) {
|
|
55
|
+
for (let i = 0; i < buf.cells.length; i++) {
|
|
56
|
+
buf.cells[i] = { ch: " ", style: {} };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Transparent bg inherits the cell under paint (panel fill under border/text).
|
|
61
|
+
* Explicit `bg` / `bgRgb` / `bgFx` on the incoming style wins. Matches TERMINAL O1:
|
|
62
|
+
* undefined bg means transparent, not "clear to black."
|
|
63
|
+
* `cast: "transparent"` claims that absence — occupy the cell, do not fuse.
|
|
64
|
+
* Procedural `bgFx` (+ baked UV) also inherits so text/border over fx keeps the field.
|
|
65
|
+
*/
|
|
66
|
+
export function mergeStyle(under, over) {
|
|
67
|
+
const out = { ...over };
|
|
68
|
+
const overClaimsBg = over.bg !== undefined || over.bgRgb !== undefined || over.bgFx !== undefined;
|
|
69
|
+
if (overClaimsBg || over.cast === "transparent")
|
|
70
|
+
return out;
|
|
71
|
+
if (under.bgFx !== undefined) {
|
|
72
|
+
out.bgFx = under.bgFx;
|
|
73
|
+
if (under.bgFxU !== undefined)
|
|
74
|
+
out.bgFxU = under.bgFxU;
|
|
75
|
+
if (under.bgFxV !== undefined)
|
|
76
|
+
out.bgFxV = under.bgFxV;
|
|
77
|
+
if (under.bgFxOpacity !== undefined)
|
|
78
|
+
out.bgFxOpacity = under.bgFxOpacity;
|
|
79
|
+
if (under.bgRgb !== undefined)
|
|
80
|
+
out.bgRgb = under.bgRgb;
|
|
81
|
+
}
|
|
82
|
+
else if (under.bgRgb !== undefined) {
|
|
83
|
+
out.bgRgb = under.bgRgb;
|
|
84
|
+
}
|
|
85
|
+
else if (under.bg !== undefined) {
|
|
86
|
+
out.bg = under.bg;
|
|
87
|
+
}
|
|
88
|
+
return out;
|
|
89
|
+
}
|
|
90
|
+
function writeCell(buf, x, y, cell) {
|
|
91
|
+
if (x < 0 || x >= buf.width || y < 0 || y >= buf.height)
|
|
92
|
+
return;
|
|
93
|
+
const i = y * buf.width + x;
|
|
94
|
+
const prev = buf.cells[i];
|
|
95
|
+
// C1/C6: overwriting a wide glyph's primary cell (prev non-placeholder whose
|
|
96
|
+
// trailing mate(s) are placeholders) orphans those placeholders — whether the
|
|
97
|
+
// incoming cell is a narrow glyph (C1) or a new wide glyph's placeholder that
|
|
98
|
+
// lands on the old primary (C6: put("a漢") then put("漢")). Emit skips
|
|
99
|
+
// placeholders, so an orphan shifts subsequent columns. Clear consecutive
|
|
100
|
+
// trailing mates on this row before writing.
|
|
101
|
+
if (!prev.placeholder) {
|
|
102
|
+
const rowEnd = (y + 1) * buf.width;
|
|
103
|
+
for (let j = i + 1; j < rowEnd; j++) {
|
|
104
|
+
const mate = buf.cells[j];
|
|
105
|
+
if (!mate?.placeholder)
|
|
106
|
+
break;
|
|
107
|
+
buf.cells[j] = { ...BLANK };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
buf.cells[i] = {
|
|
111
|
+
...cell,
|
|
112
|
+
style: mergeStyle(prev.style, cell.style),
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Put text at (x,y) walking **grapheme clusters** by display width.
|
|
117
|
+
* - **ContentGuard first** — strip ESC/CSI so measure (string-width strips ANSI)
|
|
118
|
+
* and put agree. Bare ESC is width 0; leaving `[2J…` after skipping ESC desyncs
|
|
119
|
+
* layout width and can still break a live terminal if re-emitted.
|
|
120
|
+
* - width 0 (combining/ZW alone): refused — do not advance
|
|
121
|
+
* - width 1: one cell
|
|
122
|
+
* - width ≥ 2: glyph + (w-1) mates; clips if no room for full wide span.
|
|
123
|
+
* CJK/emoji mates are placeholders (emit skips). {@link isTwoColumnSymbol}
|
|
124
|
+
* mates are a real space so a wcwidth-1 TTY still advances past the ink.
|
|
125
|
+
*/
|
|
126
|
+
export function put(buf, x, y, text, style = {}) {
|
|
127
|
+
if (y < 0 || y >= buf.height)
|
|
128
|
+
return;
|
|
129
|
+
// Chokepoint: all content paths (markdown, highlight, widgets) land here.
|
|
130
|
+
text = guardContent(text);
|
|
131
|
+
let cx = x;
|
|
132
|
+
if (isUnitWidthRun(text)) {
|
|
133
|
+
for (const element of text) {
|
|
134
|
+
if (cx >= buf.width)
|
|
135
|
+
break;
|
|
136
|
+
if (cx >= 0) {
|
|
137
|
+
writeCell(buf, cx, y, { ch: element, style, placeholder: false });
|
|
138
|
+
}
|
|
139
|
+
cx += 1;
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
for (const { segment } of GRAPHEME_SEGMENTER.segment(text)) {
|
|
144
|
+
const w = Math.max(0, graphemeWidth(segment));
|
|
145
|
+
if (w === 0)
|
|
146
|
+
continue;
|
|
147
|
+
if (cx + w > buf.width) {
|
|
148
|
+
if (cx >= buf.width)
|
|
149
|
+
break;
|
|
150
|
+
if (w > 1)
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
if (cx < 0) {
|
|
154
|
+
cx += w;
|
|
155
|
+
continue;
|
|
156
|
+
}
|
|
157
|
+
writeCell(buf, cx, y, { ch: segment, style, placeholder: false });
|
|
158
|
+
const pad = isTwoColumnSymbol(segment);
|
|
159
|
+
for (let k = 1; k < w; k++) {
|
|
160
|
+
writeCell(buf, cx + k, y, {
|
|
161
|
+
ch: pad ? " " : PLACEHOLDER_CH,
|
|
162
|
+
style,
|
|
163
|
+
placeholder: !pad,
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
cx += w;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// ── Damage ──────────────────────────────────────────────────────────────────
|
|
170
|
+
function rgbEq(a, b) {
|
|
171
|
+
if (a === b)
|
|
172
|
+
return true;
|
|
173
|
+
if (!a || !b)
|
|
174
|
+
return false;
|
|
175
|
+
return a.r === b.r && a.g === b.g && a.b === b.b;
|
|
176
|
+
}
|
|
177
|
+
function cellEq(a, b) {
|
|
178
|
+
return (a.ch === b.ch &&
|
|
179
|
+
!!a.placeholder === !!b.placeholder &&
|
|
180
|
+
a.style.bold === b.style.bold &&
|
|
181
|
+
a.style.dim === b.style.dim &&
|
|
182
|
+
a.style.strike === b.style.strike &&
|
|
183
|
+
a.style.italic === b.style.italic &&
|
|
184
|
+
a.style.underline === b.style.underline &&
|
|
185
|
+
a.style.href === b.style.href &&
|
|
186
|
+
a.style.fg === b.style.fg &&
|
|
187
|
+
a.style.bg === b.style.bg &&
|
|
188
|
+
a.style.bgFx === b.style.bgFx &&
|
|
189
|
+
a.style.bgFxU === b.style.bgFxU &&
|
|
190
|
+
a.style.bgFxV === b.style.bgFxV &&
|
|
191
|
+
// C3: dual-dirty resolver fields — a role/prominence shift between frames
|
|
192
|
+
// must mark the row dirty, or emitAnsi skips it (silent stale frame).
|
|
193
|
+
a.style.role === b.style.role &&
|
|
194
|
+
a.style.prominence === b.style.prominence &&
|
|
195
|
+
a.style.bgRole === b.style.bgRole &&
|
|
196
|
+
a.style.bgProminence === b.style.bgProminence &&
|
|
197
|
+
a.style.surfaceRole === b.style.surfaceRole &&
|
|
198
|
+
a.style.surfaceProminence === b.style.surfaceProminence &&
|
|
199
|
+
a.style.fuseRole === b.style.fuseRole &&
|
|
200
|
+
a.style.fuseProminence === b.style.fuseProminence &&
|
|
201
|
+
a.style.tintRole === b.style.tintRole &&
|
|
202
|
+
a.style.tint === b.style.tint &&
|
|
203
|
+
a.style.regionProminence === b.style.regionProminence &&
|
|
204
|
+
a.style.bgFxOpacity === b.style.bgFxOpacity &&
|
|
205
|
+
a.style.cast === b.style.cast &&
|
|
206
|
+
rgbEq(a.style.fgRgb, b.style.fgRgb) &&
|
|
207
|
+
rgbEq(a.style.bgRgb, b.style.bgRgb) &&
|
|
208
|
+
// Selection toggle must dirty the row so the recolor re-resolves.
|
|
209
|
+
a.style.selected === b.style.selected);
|
|
210
|
+
}
|
|
211
|
+
function rowEq(prev, next, y) {
|
|
212
|
+
const w = next.width;
|
|
213
|
+
const base = y * w;
|
|
214
|
+
for (let x = 0; x < w; x++) {
|
|
215
|
+
if (!cellEq(prev.cells[base + x], next.cells[base + x]))
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
return true;
|
|
219
|
+
}
|
|
220
|
+
/** Rows that differ (or all rows if size changed / no prev). */
|
|
221
|
+
export function dirtyRows(prev, next) {
|
|
222
|
+
if (!prev || prev.width !== next.width || prev.height !== next.height) {
|
|
223
|
+
return Array.from({ length: next.height }, (_, i) => i);
|
|
224
|
+
}
|
|
225
|
+
const out = [];
|
|
226
|
+
for (let y = 0; y < next.height; y++) {
|
|
227
|
+
if (!rowEq(prev, next, y))
|
|
228
|
+
out.push(y);
|
|
229
|
+
}
|
|
230
|
+
return out;
|
|
231
|
+
}
|
|
232
|
+
// ── ANSI emit ───────────────────────────────────────────────────────────────
|
|
233
|
+
/** Clamp an ANSI 256 color index; non-finite/out-of-range → undefined (omit). */
|
|
234
|
+
function clampIndex(n) {
|
|
235
|
+
if (!Number.isFinite(n))
|
|
236
|
+
return undefined;
|
|
237
|
+
return Math.max(0, Math.min(255, Math.round(n)));
|
|
238
|
+
}
|
|
239
|
+
function osc8Href(href) {
|
|
240
|
+
if (href === undefined || href === "")
|
|
241
|
+
return "";
|
|
242
|
+
if (!/^https?:\/\//i.test(href))
|
|
243
|
+
return "";
|
|
244
|
+
if (/[\u0000-\u001F\u007F]/.test(href))
|
|
245
|
+
return "";
|
|
246
|
+
return href;
|
|
247
|
+
}
|
|
248
|
+
function sgr(style) {
|
|
249
|
+
const parts = ["0"];
|
|
250
|
+
if (style.bold)
|
|
251
|
+
parts.push("1");
|
|
252
|
+
if (style.dim)
|
|
253
|
+
parts.push("2");
|
|
254
|
+
if (style.italic)
|
|
255
|
+
parts.push("3");
|
|
256
|
+
if (style.underline)
|
|
257
|
+
parts.push("4");
|
|
258
|
+
if (style.strike)
|
|
259
|
+
parts.push("9");
|
|
260
|
+
if (style.fgRgb) {
|
|
261
|
+
// H2: clamp each channel — NaN/Infinity/out-of-range must not corrupt SGR.
|
|
262
|
+
const { r, g, b } = style.fgRgb;
|
|
263
|
+
parts.push(`38;2;${clampByte(r)};${clampByte(g)};${clampByte(b)}`);
|
|
264
|
+
}
|
|
265
|
+
else if (style.fg !== undefined) {
|
|
266
|
+
const c = clampIndex(style.fg);
|
|
267
|
+
if (c !== undefined)
|
|
268
|
+
parts.push(`38;5;${c}`);
|
|
269
|
+
}
|
|
270
|
+
if (style.bgRgb) {
|
|
271
|
+
const { r, g, b } = style.bgRgb;
|
|
272
|
+
parts.push(`48;2;${clampByte(r)};${clampByte(g)};${clampByte(b)}`);
|
|
273
|
+
}
|
|
274
|
+
else if (style.bg !== undefined) {
|
|
275
|
+
const c = clampIndex(style.bg);
|
|
276
|
+
if (c !== undefined)
|
|
277
|
+
parts.push(`48;5;${c}`);
|
|
278
|
+
}
|
|
279
|
+
return `\u001B[${parts.join(";")}m`;
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Emit ANSI for dirty rows with wire metrics.
|
|
283
|
+
* Absolute CUP, clear line, write row.
|
|
284
|
+
* **Skips placeholder cells** so wide glyphs advance 2 columns, not 3.
|
|
285
|
+
* Optional Mode 2026 wrap.
|
|
286
|
+
*/
|
|
287
|
+
export function emitAnsiDetailed(prev, next, opts = {}) {
|
|
288
|
+
const rows = opts.forceFull ? Array.from({ length: next.height }, (_, i) => i) : dirtyRows(prev, next);
|
|
289
|
+
if (rows.length === 0) {
|
|
290
|
+
return { ansi: "", dirtyRows: 0, bytes: 0 };
|
|
291
|
+
}
|
|
292
|
+
const chunks = [];
|
|
293
|
+
if (opts.sync2026)
|
|
294
|
+
chunks.push("\u001B[?2026h");
|
|
295
|
+
if (opts.forceFull || !prev)
|
|
296
|
+
chunks.push("\u001B[2J");
|
|
297
|
+
for (const y of rows) {
|
|
298
|
+
chunks.push(`\u001B[${y + 1};1H\u001B[0m\u001B[2K`);
|
|
299
|
+
let runStyle = "";
|
|
300
|
+
let runHref = "";
|
|
301
|
+
let run = "";
|
|
302
|
+
const flush = () => {
|
|
303
|
+
if (!run)
|
|
304
|
+
return;
|
|
305
|
+
if (runHref !== "")
|
|
306
|
+
chunks.push(`\u001B]8;;${runHref}\u001B\\`);
|
|
307
|
+
chunks.push(`${runStyle + run}\u001B[0m`);
|
|
308
|
+
if (runHref !== "")
|
|
309
|
+
chunks.push("\u001B]8;;\u001B\\");
|
|
310
|
+
run = "";
|
|
311
|
+
};
|
|
312
|
+
for (let x = 0; x < next.width; x++) {
|
|
313
|
+
const cell = next.cells[y * next.width + x];
|
|
314
|
+
if (cell.placeholder)
|
|
315
|
+
continue;
|
|
316
|
+
const st = sgr(cell.style);
|
|
317
|
+
const href = osc8Href(cell.style.href);
|
|
318
|
+
if (st !== runStyle || href !== runHref) {
|
|
319
|
+
flush();
|
|
320
|
+
runStyle = st;
|
|
321
|
+
runHref = href;
|
|
322
|
+
}
|
|
323
|
+
run += cell.ch;
|
|
324
|
+
}
|
|
325
|
+
flush();
|
|
326
|
+
}
|
|
327
|
+
if (opts.sync2026)
|
|
328
|
+
chunks.push("\u001B[?2026l");
|
|
329
|
+
const ansi = chunks.join("");
|
|
330
|
+
return { ansi, dirtyRows: rows.length, bytes: ansi.length };
|
|
331
|
+
}
|
|
332
|
+
/**
|
|
333
|
+
* Emit ANSI for dirty rows. Absolute CUP, clear line, write row.
|
|
334
|
+
* **Skips placeholder cells** so wide glyphs advance 2 columns, not 3.
|
|
335
|
+
* Optional Mode 2026 wrap.
|
|
336
|
+
*/
|
|
337
|
+
export function emitAnsi(prev, next, opts = {}) {
|
|
338
|
+
return emitAnsiDetailed(prev, next, opts).ansi;
|
|
339
|
+
}
|
|
340
|
+
/** Shallow copy of buffer cells (for storing previous frame). */
|
|
341
|
+
export function cloneBuffer(buf) {
|
|
342
|
+
return {
|
|
343
|
+
width: buf.width,
|
|
344
|
+
height: buf.height,
|
|
345
|
+
cells: buf.cells.map((c) => ({
|
|
346
|
+
ch: c.ch,
|
|
347
|
+
style: { ...c.style },
|
|
348
|
+
placeholder: c.placeholder,
|
|
349
|
+
})),
|
|
350
|
+
};
|
|
351
|
+
}
|
|
352
|
+
export { fillBgFx } from "./bgfx-mark.js";
|
|
353
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/buffer/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env-based color depth heuristics when probes are unavailable.
|
|
3
|
+
* Conservative defaults — prefer under-claiming over broken truecolor.
|
|
4
|
+
*/
|
|
5
|
+
import type { ColorDepth } from "./types.js";
|
|
6
|
+
export type EnvLike = {
|
|
7
|
+
COLORTERM?: string | undefined;
|
|
8
|
+
TERM?: string | undefined;
|
|
9
|
+
TERM_PROGRAM?: string | undefined;
|
|
10
|
+
WT_SESSION?: string | undefined;
|
|
11
|
+
/** https://no-color.org — presence (any value, including "") wins over everything else. */
|
|
12
|
+
NO_COLOR?: string | undefined;
|
|
13
|
+
[key: string]: string | undefined;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Guess ColorDepth from environment.
|
|
17
|
+
* - NO_COLOR set (any value) → mono, before any other signal (no-color.org)
|
|
18
|
+
* - COLORTERM=truecolor|24bit → truecolor
|
|
19
|
+
* - TERM=*256color* → ansi256
|
|
20
|
+
* - else ansi16
|
|
21
|
+
*/
|
|
22
|
+
export declare function guessColorDepth(env?: EnvLike): ColorDepth;
|
|
23
|
+
//# sourceMappingURL=env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../src/capabilities/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,OAAqB,GAAG,UAAU,CAqBtE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Env-based color depth heuristics when probes are unavailable.
|
|
3
|
+
* Conservative defaults — prefer under-claiming over broken truecolor.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Guess ColorDepth from environment.
|
|
7
|
+
* - NO_COLOR set (any value) → mono, before any other signal (no-color.org)
|
|
8
|
+
* - COLORTERM=truecolor|24bit → truecolor
|
|
9
|
+
* - TERM=*256color* → ansi256
|
|
10
|
+
* - else ansi16
|
|
11
|
+
*/
|
|
12
|
+
export function guessColorDepth(env = process.env) {
|
|
13
|
+
if (env.NO_COLOR !== undefined)
|
|
14
|
+
return "mono";
|
|
15
|
+
const ct = (env.COLORTERM ?? "").toLowerCase();
|
|
16
|
+
if (ct === "truecolor" || ct === "24bit")
|
|
17
|
+
return "truecolor";
|
|
18
|
+
const term = env.TERM ?? "";
|
|
19
|
+
if (/256color|truecolor|direct/i.test(term)) {
|
|
20
|
+
// xterm-direct / *-truecolor often still set TERM with 256color or truecolor
|
|
21
|
+
if (/truecolor|direct/i.test(term))
|
|
22
|
+
return "truecolor";
|
|
23
|
+
return "ansi256";
|
|
24
|
+
}
|
|
25
|
+
// Well-known truecolor hosts even with dumb TERM.
|
|
26
|
+
// Terminal.app (`Apple_Terminal`) is not truecolor — do not add it here.
|
|
27
|
+
if (env.TERM_PROGRAM === "iTerm.app")
|
|
28
|
+
return "truecolor";
|
|
29
|
+
if (env.WT_SESSION)
|
|
30
|
+
return "truecolor";
|
|
31
|
+
if (/^xterm|^screen|^tmux|^rxvt|^vt100/i.test(term))
|
|
32
|
+
return "ansi16";
|
|
33
|
+
return "ansi16";
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../src/capabilities/env.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe,OAAO,CAAC,GAAG;IACxD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAE9C,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/C,IAAI,EAAE,KAAK,WAAW,IAAI,EAAE,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IAE7D,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;IAC5B,IAAI,4BAA4B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5C,6EAA6E;QAC7E,IAAI,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,WAAW,CAAC;QACvD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kDAAkD;IAClD,yEAAyE;IACzE,IAAI,GAAG,CAAC,YAAY,KAAK,WAAW;QAAE,OAAO,WAAW,CAAC;IACzD,IAAI,GAAG,CAAC,UAAU;QAAE,OAAO,WAAW,CAAC;IAEvC,IAAI,oCAAoC,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAErE,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./index.js — terminal feature detection.
|
|
3
|
+
*
|
|
4
|
+
* Pure parse + env heuristics + optional I/O probes.
|
|
5
|
+
* No theme math (ground OKLCH lives in ../theme/index.js).
|
|
6
|
+
* No TTY lifecycle (alt-screen lives in ../runtime/index.js).
|
|
7
|
+
*/
|
|
8
|
+
export * from "./types.js";
|
|
9
|
+
export * from "./sequences.js";
|
|
10
|
+
export * from "./parse.js";
|
|
11
|
+
export * from "./env.js";
|
|
12
|
+
export * from "./probe.js";
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ./index.js — terminal feature detection.
|
|
3
|
+
*
|
|
4
|
+
* Pure parse + env heuristics + optional I/O probes.
|
|
5
|
+
* No theme math (ground OKLCH lives in ../theme/index.js).
|
|
6
|
+
* No TTY lifecycle (alt-screen lives in ../runtime/index.js).
|
|
7
|
+
*/
|
|
8
|
+
export * from "./types.js";
|
|
9
|
+
export * from "./sequences.js";
|
|
10
|
+
export * from "./parse.js";
|
|
11
|
+
export * from "./env.js";
|
|
12
|
+
export * from "./probe.js";
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure parsers for terminal capability replies — no I/O.
|
|
3
|
+
*/
|
|
4
|
+
import type { Rgb } from "../lexicon/index.js";
|
|
5
|
+
/**
|
|
6
|
+
* Parse OSC 11 (or OSC 10) color payload.
|
|
7
|
+
* Accepts `rgb:rrrr/gggg/bbbb` (XParseColor) and `#rrggbb` / `rrggbb`.
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseOscColorPayload(payload: string): Rgb | null;
|
|
10
|
+
/** Alias — OSC 11 is the common ground probe. */
|
|
11
|
+
export declare const parseOsc11Payload: typeof parseOscColorPayload;
|
|
12
|
+
/**
|
|
13
|
+
* Extract OSC 11 payload from a reply buffer (BEL or ST terminated).
|
|
14
|
+
* H3: requires a terminator — an unterminated partial chunk (e.g. the first
|
|
15
|
+
* stdin read delivering only `\x1b]11;rgb:1`) must return null so the probe
|
|
16
|
+
* keeps waiting for the rest, instead of finishing early with a truncated
|
|
17
|
+
* payload and `groundRgb: undefined`.
|
|
18
|
+
*/
|
|
19
|
+
export declare function extractOsc11FromBuffer(buf: string): string | null;
|
|
20
|
+
/**
|
|
21
|
+
* Parse DECRQM reply for mode 2026.
|
|
22
|
+
* CSI ? 2026 ; Ps $ y — Ps 1 or 3 ⇒ set/supported; 2 or 4 ⇒ reset.
|
|
23
|
+
* Returns true if mode is reported as settable/set, false if reset, null if absent.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseDecrqm2026(buf: string): boolean | null;
|
|
26
|
+
/** True if DA1 (primary DA) reply present — probe batch completed. */
|
|
27
|
+
export declare function hasDa1Reply(buf: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Remove known capability probe replies from a stdin accumulation buffer.
|
|
30
|
+
* Residual bytes are user keystrokes (or unrelated sequences) typed during
|
|
31
|
+
* the probe window — re-inject into the app's input path.
|
|
32
|
+
*
|
|
33
|
+
* Only complete, terminated replies are stripped:
|
|
34
|
+
* - OSC 11 ground (BEL or ST)
|
|
35
|
+
* - DECRQM mode 2026 (`CSI ? 2026 ; Ps $ y`)
|
|
36
|
+
* - DA1 (`CSI ? … c`)
|
|
37
|
+
*
|
|
38
|
+
* Partial fragments that never completed (timeout mid-reply) are left as-is.
|
|
39
|
+
*/
|
|
40
|
+
export declare function stripProbeReplies(buf: string): string;
|
|
41
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/capabilities/parse.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE/C;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CA4BhE;AAED,iDAAiD;AACjD,eAAO,MAAM,iBAAiB,6BAAuB,CAAC;AAEtD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAQ3D;AAED,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKrD"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure parsers for terminal capability replies — no I/O.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse OSC 11 (or OSC 10) color payload.
|
|
6
|
+
* Accepts `rgb:rrrr/gggg/bbbb` (XParseColor) and `#rrggbb` / `rrggbb`.
|
|
7
|
+
*/
|
|
8
|
+
export function parseOscColorPayload(payload) {
|
|
9
|
+
const s = payload.trim();
|
|
10
|
+
const xparse = /^rgb:([0-9a-fA-F]{1,4})\/([0-9a-fA-F]{1,4})\/([0-9a-fA-F]{1,4})$/.exec(s);
|
|
11
|
+
if (xparse) {
|
|
12
|
+
const scale = (hex) => {
|
|
13
|
+
const n = Number.parseInt(hex, 16);
|
|
14
|
+
const max = (1 << (hex.length * 4)) - 1;
|
|
15
|
+
return Math.round((n / max) * 255);
|
|
16
|
+
};
|
|
17
|
+
return {
|
|
18
|
+
r: scale(xparse[1]),
|
|
19
|
+
g: scale(xparse[2]),
|
|
20
|
+
b: scale(xparse[3]),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const hex = /^#?([0-9a-f]{6})$/i.exec(s);
|
|
24
|
+
if (hex) {
|
|
25
|
+
const h = hex[1];
|
|
26
|
+
return {
|
|
27
|
+
r: Number.parseInt(h.slice(0, 2), 16),
|
|
28
|
+
g: Number.parseInt(h.slice(2, 4), 16),
|
|
29
|
+
b: Number.parseInt(h.slice(4, 6), 16),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
/** Alias — OSC 11 is the common ground probe. */
|
|
35
|
+
export const parseOsc11Payload = parseOscColorPayload;
|
|
36
|
+
/**
|
|
37
|
+
* Extract OSC 11 payload from a reply buffer (BEL or ST terminated).
|
|
38
|
+
* H3: requires a terminator — an unterminated partial chunk (e.g. the first
|
|
39
|
+
* stdin read delivering only `\x1b]11;rgb:1`) must return null so the probe
|
|
40
|
+
* keeps waiting for the rest, instead of finishing early with a truncated
|
|
41
|
+
* payload and `groundRgb: undefined`.
|
|
42
|
+
*/
|
|
43
|
+
export function extractOsc11FromBuffer(buf) {
|
|
44
|
+
const m = /\u001B\]11;([^\u0007\u001B]+)(?:\u0007|\u001B\\)/.exec(buf);
|
|
45
|
+
return m?.[1] ?? null;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Parse DECRQM reply for mode 2026.
|
|
49
|
+
* CSI ? 2026 ; Ps $ y — Ps 1 or 3 ⇒ set/supported; 2 or 4 ⇒ reset.
|
|
50
|
+
* Returns true if mode is reported as settable/set, false if reset, null if absent.
|
|
51
|
+
*/
|
|
52
|
+
export function parseDecrqm2026(buf) {
|
|
53
|
+
const m = /\u001B\[\?2026;(\d+)\$y/.exec(buf);
|
|
54
|
+
if (!m)
|
|
55
|
+
return null;
|
|
56
|
+
const ps = Number.parseInt(m[1], 10);
|
|
57
|
+
// 0 unknown, 1 set, 2 reset, 3 permanently set, 4 permanently reset
|
|
58
|
+
if (ps === 1 || ps === 3)
|
|
59
|
+
return true;
|
|
60
|
+
if (ps === 2 || ps === 4)
|
|
61
|
+
return false;
|
|
62
|
+
return null;
|
|
63
|
+
}
|
|
64
|
+
/** True if DA1 (primary DA) reply present — probe batch completed. */
|
|
65
|
+
export function hasDa1Reply(buf) {
|
|
66
|
+
return /\u001B\[\?[\d;]*c/.test(buf);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Remove known capability probe replies from a stdin accumulation buffer.
|
|
70
|
+
* Residual bytes are user keystrokes (or unrelated sequences) typed during
|
|
71
|
+
* the probe window — re-inject into the app's input path.
|
|
72
|
+
*
|
|
73
|
+
* Only complete, terminated replies are stripped:
|
|
74
|
+
* - OSC 11 ground (BEL or ST)
|
|
75
|
+
* - DECRQM mode 2026 (`CSI ? 2026 ; Ps $ y`)
|
|
76
|
+
* - DA1 (`CSI ? … c`)
|
|
77
|
+
*
|
|
78
|
+
* Partial fragments that never completed (timeout mid-reply) are left as-is.
|
|
79
|
+
*/
|
|
80
|
+
export function stripProbeReplies(buf) {
|
|
81
|
+
return buf
|
|
82
|
+
.replaceAll(/\u001B\]11;[^\u0007\u001B]+(?:\u0007|\u001B\\)/g, "")
|
|
83
|
+
.replaceAll(/\u001B\[\?2026;\d+\$y/g, "")
|
|
84
|
+
.replaceAll(/\u001B\[\?[\d;]*c/g, "");
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/capabilities/parse.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Interactive terminal probes — I/O only.
|
|
3
|
+
* Pure parse lives in parse.ts; env heuristics in env.ts.
|
|
4
|
+
*/
|
|
5
|
+
import type { Readable, Writable } from "node:stream";
|
|
6
|
+
import type { TerminalCaps } from "./types.js";
|
|
7
|
+
export type ProbeOpts = {
|
|
8
|
+
stdin: Readable & {
|
|
9
|
+
isTTY?: boolean;
|
|
10
|
+
};
|
|
11
|
+
stdout: Writable & {
|
|
12
|
+
isTTY?: boolean;
|
|
13
|
+
};
|
|
14
|
+
timeoutMs?: number;
|
|
15
|
+
/** Env for depth heuristics (default process.env) */
|
|
16
|
+
env?: NodeJS.ProcessEnv;
|
|
17
|
+
/**
|
|
18
|
+
* When true (default), also send DECRQM 2026 + DA1 after OSC11.
|
|
19
|
+
* Disable for minimal ground-only probe.
|
|
20
|
+
*/
|
|
21
|
+
batch?: boolean;
|
|
22
|
+
};
|
|
23
|
+
export type DetectResult = {
|
|
24
|
+
caps: TerminalCaps;
|
|
25
|
+
/**
|
|
26
|
+
* Stdin bytes accumulated during the probe that were not capability replies
|
|
27
|
+
* (keystrokes / unrelated sequences). Re-inject into the app input path.
|
|
28
|
+
* Empty when non-TTY or when the window only contained probe replies.
|
|
29
|
+
*/
|
|
30
|
+
leftover: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Detect terminal capabilities: env depth + optional OSC11 + DECRQM 2026.
|
|
34
|
+
* Non-TTY → tty:false, env depth, no probes.
|
|
35
|
+
*/
|
|
36
|
+
export declare function detectCapabilities(opts: ProbeOpts): Promise<DetectResult>;
|
|
37
|
+
//# sourceMappingURL=probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"probe.d.ts","sourceRoot":"","sources":["../../src/capabilities/probe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAKtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,QAAQ,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtC,MAAM,EAAE,QAAQ,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,YAAY,CAAC;IACnB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAqE/E"}
|