@flyingrobots/bijou 7.2.0 → 8.0.0-rc.1
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 +14 -0
- package/dist/core/ansi.d.ts +2 -0
- package/dist/core/ansi.d.ts.map +1 -1
- package/dist/core/ansi.js +4 -0
- package/dist/core/ansi.js.map +1 -1
- package/dist/core/app-shell-composition-normalize.d.ts +10 -0
- package/dist/core/app-shell-composition-normalize.d.ts.map +1 -0
- package/dist/core/app-shell-composition-normalize.js +63 -0
- package/dist/core/app-shell-composition-normalize.js.map +1 -0
- package/dist/core/app-shell-composition.d.ts.map +1 -1
- package/dist/core/app-shell-composition.js +10 -71
- package/dist/core/app-shell-composition.js.map +1 -1
- package/dist/core/binding-frame-issues.d.ts +5 -0
- package/dist/core/binding-frame-issues.d.ts.map +1 -0
- package/dist/core/binding-frame-issues.js +31 -0
- package/dist/core/binding-frame-issues.js.map +1 -0
- package/dist/core/binding-frame-records.d.ts +10 -0
- package/dist/core/binding-frame-records.d.ts.map +1 -0
- package/dist/core/binding-frame-records.js +53 -0
- package/dist/core/binding-frame-records.js.map +1 -0
- package/dist/core/binding-frame-update.d.ts.map +1 -1
- package/dist/core/binding-frame-update.js +6 -85
- package/dist/core/binding-frame-update.js.map +1 -1
- package/dist/core/block-tree-render-contract.d.ts +24 -0
- package/dist/core/block-tree-render-contract.d.ts.map +1 -0
- package/dist/core/block-tree-render-contract.js +8 -0
- package/dist/core/block-tree-render-contract.js.map +1 -0
- package/dist/core/block-tree-render-snapshot.d.ts +6 -0
- package/dist/core/block-tree-render-snapshot.d.ts.map +1 -0
- package/dist/core/block-tree-render-snapshot.js +55 -0
- package/dist/core/block-tree-render-snapshot.js.map +1 -0
- package/dist/core/block-tree-render.d.ts +4 -16
- package/dist/core/block-tree-render.d.ts.map +1 -1
- package/dist/core/block-tree-render.js +3 -184
- package/dist/core/block-tree-render.js.map +1 -1
- package/dist/core/block-tree-render.part01.d.ts +4 -0
- package/dist/core/block-tree-render.part01.d.ts.map +1 -0
- package/dist/core/block-tree-render.part01.js +10 -0
- package/dist/core/block-tree-render.part01.js.map +1 -0
- package/dist/core/block-tree-render.part02.d.ts +7 -0
- package/dist/core/block-tree-render.part02.d.ts.map +1 -0
- package/dist/core/block-tree-render.part02.js +59 -0
- package/dist/core/block-tree-render.part02.js.map +1 -0
- package/dist/core/block-tree-render.part03.d.ts +14 -0
- package/dist/core/block-tree-render.part03.d.ts.map +1 -0
- package/dist/core/block-tree-render.part03.js +64 -0
- package/dist/core/block-tree-render.part03.js.map +1 -0
- package/dist/core/components/box-fill.d.ts +2 -0
- package/dist/core/components/box-fill.d.ts.map +1 -0
- package/dist/core/components/box-fill.js +7 -0
- package/dist/core/components/box-fill.js.map +1 -0
- package/dist/core/components/box-render.d.ts +9 -0
- package/dist/core/components/box-render.d.ts.map +1 -0
- package/dist/core/components/box-render.js +76 -0
- package/dist/core/components/box-render.js.map +1 -0
- package/dist/core/components/box-v3.d.ts +2 -15
- package/dist/core/components/box-v3.d.ts.map +1 -1
- package/dist/core/components/box-v3.js +2 -222
- package/dist/core/components/box-v3.js.map +1 -1
- package/dist/core/components/box-v3.part01.d.ts +30 -0
- package/dist/core/components/box-v3.part01.d.ts.map +1 -0
- package/dist/core/components/box-v3.part01.js +72 -0
- package/dist/core/components/box-v3.part01.js.map +1 -0
- package/dist/core/components/box-v3.part02.d.ts +9 -0
- package/dist/core/components/box-v3.part02.d.ts.map +1 -0
- package/dist/core/components/box-v3.part02.js +131 -0
- package/dist/core/components/box-v3.part02.js.map +1 -0
- package/dist/core/components/box-v3.part03.d.ts +10 -0
- package/dist/core/components/box-v3.part03.d.ts.map +1 -0
- package/dist/core/components/box-v3.part03.js +29 -0
- package/dist/core/components/box-v3.part03.js.map +1 -0
- package/dist/core/components/box.d.ts +2 -7
- package/dist/core/components/box.d.ts.map +1 -1
- package/dist/core/components/box.js +13 -106
- package/dist/core/components/box.js.map +1 -1
- package/dist/core/components/dag-edges.d.ts +5 -100
- package/dist/core/components/dag-edges.d.ts.map +1 -1
- package/dist/core/components/dag-edges.js +4 -222
- package/dist/core/components/dag-edges.js.map +1 -1
- package/dist/core/components/dag-edges.part01.d.ts +67 -0
- package/dist/core/components/dag-edges.part01.d.ts.map +1 -0
- package/dist/core/components/dag-edges.part01.js +99 -0
- package/dist/core/components/dag-edges.part01.js.map +1 -0
- package/dist/core/components/dag-edges.part02.d.ts +31 -0
- package/dist/core/components/dag-edges.part02.d.ts.map +1 -0
- package/dist/core/components/dag-edges.part02.js +57 -0
- package/dist/core/components/dag-edges.part02.js.map +1 -0
- package/dist/core/components/dag-edges.part03.d.ts +18 -0
- package/dist/core/components/dag-edges.part03.d.ts.map +1 -0
- package/dist/core/components/dag-edges.part03.js +41 -0
- package/dist/core/components/dag-edges.part03.js.map +1 -0
- package/dist/core/components/dag-edges.part04.d.ts +9 -0
- package/dist/core/components/dag-edges.part04.d.ts.map +1 -0
- package/dist/core/components/dag-edges.part04.js +67 -0
- package/dist/core/components/dag-edges.part04.js.map +1 -0
- package/dist/core/components/dag-layers.d.ts +3 -0
- package/dist/core/components/dag-layers.d.ts.map +1 -0
- package/dist/core/components/dag-layers.js +92 -0
- package/dist/core/components/dag-layers.js.map +1 -0
- package/dist/core/components/dag-layout.d.ts +1 -11
- package/dist/core/components/dag-layout.d.ts.map +1 -1
- package/dist/core/components/dag-layout.js +3 -114
- package/dist/core/components/dag-layout.js.map +1 -1
- package/dist/core/components/dag-render-contract.d.ts +42 -0
- package/dist/core/components/dag-render-contract.d.ts.map +1 -0
- package/dist/core/components/dag-render-contract.js +2 -0
- package/dist/core/components/dag-render-contract.js.map +1 -0
- package/dist/core/components/dag-render-grid.d.ts +6 -0
- package/dist/core/components/dag-render-grid.d.ts.map +1 -0
- package/dist/core/components/dag-render-grid.js +90 -0
- package/dist/core/components/dag-render-grid.js.map +1 -0
- package/dist/core/components/dag-render-interactive.d.ts +11 -0
- package/dist/core/components/dag-render-interactive.d.ts.map +1 -0
- package/dist/core/components/dag-render-interactive.js +18 -0
- package/dist/core/components/dag-render-interactive.js.map +1 -0
- package/dist/core/components/dag-render-layout.d.ts +6 -0
- package/dist/core/components/dag-render-layout.d.ts.map +1 -0
- package/dist/core/components/dag-render-layout.js +80 -0
- package/dist/core/components/dag-render-layout.js.map +1 -0
- package/dist/core/components/dag-render-metrics.d.ts +21 -0
- package/dist/core/components/dag-render-metrics.d.ts.map +1 -0
- package/dist/core/components/dag-render-metrics.js +95 -0
- package/dist/core/components/dag-render-metrics.js.map +1 -0
- package/dist/core/components/dag-render-node.d.ts +9 -0
- package/dist/core/components/dag-render-node.d.ts.map +1 -0
- package/dist/core/components/dag-render-node.js +71 -0
- package/dist/core/components/dag-render-node.js.map +1 -0
- package/dist/core/components/dag-render-place.d.ts +6 -0
- package/dist/core/components/dag-render-place.d.ts.map +1 -0
- package/dist/core/components/dag-render-place.js +59 -0
- package/dist/core/components/dag-render-place.js.map +1 -0
- package/dist/core/components/dag-render-text.d.ts +4 -0
- package/dist/core/components/dag-render-text.d.ts.map +1 -0
- package/dist/core/components/dag-render-text.js +55 -0
- package/dist/core/components/dag-render-text.js.map +1 -0
- package/dist/core/components/dag-render.d.ts +3 -51
- package/dist/core/components/dag-render.d.ts.map +1 -1
- package/dist/core/components/dag-render.js +3 -550
- package/dist/core/components/dag-render.js.map +1 -1
- package/dist/core/components/enumerated-list-format.d.ts +5 -0
- package/dist/core/components/enumerated-list-format.d.ts.map +1 -0
- package/dist/core/components/enumerated-list-format.js +93 -0
- package/dist/core/components/enumerated-list-format.js.map +1 -0
- package/dist/core/components/enumerated-list.d.ts.map +1 -1
- package/dist/core/components/enumerated-list.js +8 -128
- package/dist/core/components/enumerated-list.js.map +1 -1
- package/dist/core/components/guided-flow-sections.d.ts +6 -0
- package/dist/core/components/guided-flow-sections.d.ts.map +1 -0
- package/dist/core/components/guided-flow-sections.js +81 -0
- package/dist/core/components/guided-flow-sections.js.map +1 -0
- package/dist/core/components/guided-flow.d.ts.map +1 -1
- package/dist/core/components/guided-flow.js +4 -77
- package/dist/core/components/guided-flow.js.map +1 -1
- package/dist/core/components/markdown-parse.d.ts +4 -65
- package/dist/core/components/markdown-parse.d.ts.map +1 -1
- package/dist/core/components/markdown-parse.js +3 -320
- package/dist/core/components/markdown-parse.js.map +1 -1
- package/dist/core/components/markdown-parse.part01.d.ts +58 -0
- package/dist/core/components/markdown-parse.part01.d.ts.map +1 -0
- package/dist/core/components/markdown-parse.part01.js +111 -0
- package/dist/core/components/markdown-parse.part01.js.map +1 -0
- package/dist/core/components/markdown-parse.part02.d.ts +14 -0
- package/dist/core/components/markdown-parse.part02.d.ts.map +1 -0
- package/dist/core/components/markdown-parse.part02.js +110 -0
- package/dist/core/components/markdown-parse.part02.js.map +1 -0
- package/dist/core/components/markdown-parse.part03.d.ts +12 -0
- package/dist/core/components/markdown-parse.part03.d.ts.map +1 -0
- package/dist/core/components/markdown-parse.part03.js +104 -0
- package/dist/core/components/markdown-parse.part03.js.map +1 -0
- package/dist/core/components/preference-list.d.ts +4 -60
- package/dist/core/components/preference-list.d.ts.map +1 -1
- package/dist/core/components/preference-list.js +3 -305
- package/dist/core/components/preference-list.js.map +1 -1
- package/dist/core/components/preference-list.part01.d.ts +69 -0
- package/dist/core/components/preference-list.part01.d.ts.map +1 -0
- package/dist/core/components/preference-list.part01.js +61 -0
- package/dist/core/components/preference-list.part01.js.map +1 -0
- package/dist/core/components/preference-list.part02.d.ts +18 -0
- package/dist/core/components/preference-list.part02.d.ts.map +1 -0
- package/dist/core/components/preference-list.part02.js +113 -0
- package/dist/core/components/preference-list.part02.js.map +1 -0
- package/dist/core/components/preference-list.part04.d.ts +4 -0
- package/dist/core/components/preference-list.part04.d.ts.map +1 -0
- package/dist/core/components/preference-list.part04.js +88 -0
- package/dist/core/components/preference-list.part04.js.map +1 -0
- package/dist/core/components/preference-list.part05.d.ts +4 -0
- package/dist/core/components/preference-list.part05.d.ts.map +1 -0
- package/dist/core/components/preference-list.part05.js +60 -0
- package/dist/core/components/preference-list.part05.js.map +1 -0
- package/dist/core/components/progress.d.ts +5 -86
- package/dist/core/components/progress.d.ts.map +1 -1
- package/dist/core/components/progress.js +3 -205
- package/dist/core/components/progress.js.map +1 -1
- package/dist/core/components/progress.part01.d.ts +57 -0
- package/dist/core/components/progress.part01.d.ts.map +1 -0
- package/dist/core/components/progress.part01.js +69 -0
- package/dist/core/components/progress.part01.js.map +1 -0
- package/dist/core/components/progress.part02.d.ts +21 -0
- package/dist/core/components/progress.part02.d.ts.map +1 -0
- package/dist/core/components/progress.part02.js +53 -0
- package/dist/core/components/progress.part02.js.map +1 -0
- package/dist/core/components/progress.part03.d.ts +14 -0
- package/dist/core/components/progress.part03.d.ts.map +1 -0
- package/dist/core/components/progress.part03.js +96 -0
- package/dist/core/components/progress.part03.js.map +1 -0
- package/dist/core/components/surface-text-layout.d.ts +5 -0
- package/dist/core/components/surface-text-layout.d.ts.map +1 -0
- package/dist/core/components/surface-text-layout.js +47 -0
- package/dist/core/components/surface-text-layout.js.map +1 -0
- package/dist/core/components/surface-text-style.d.ts +17 -0
- package/dist/core/components/surface-text-style.d.ts.map +1 -0
- package/dist/core/components/surface-text-style.js +36 -0
- package/dist/core/components/surface-text-style.js.map +1 -0
- package/dist/core/components/surface-text.d.ts +5 -6
- package/dist/core/components/surface-text.d.ts.map +1 -1
- package/dist/core/components/surface-text.js +13 -92
- package/dist/core/components/surface-text.js.map +1 -1
- package/dist/core/components/table-build.d.ts +12 -0
- package/dist/core/components/table-build.d.ts.map +1 -0
- package/dist/core/components/table-build.js +48 -0
- package/dist/core/components/table-build.js.map +1 -0
- package/dist/core/components/table-cell-format.d.ts +4 -0
- package/dist/core/components/table-cell-format.d.ts.map +1 -0
- package/dist/core/components/table-cell-format.js +11 -0
- package/dist/core/components/table-cell-format.js.map +1 -0
- package/dist/core/components/table-contract.d.ts +66 -0
- package/dist/core/components/table-contract.d.ts.map +1 -0
- package/dist/core/components/table-contract.js +17 -0
- package/dist/core/components/table-contract.js.map +1 -0
- package/dist/core/components/table-fit.d.ts +3 -0
- package/dist/core/components/table-fit.d.ts.map +1 -0
- package/dist/core/components/table-fit.js +73 -0
- package/dist/core/components/table-fit.js.map +1 -0
- package/dist/core/components/table-measure.d.ts +11 -0
- package/dist/core/components/table-measure.d.ts.map +1 -0
- package/dist/core/components/table-measure.js +78 -0
- package/dist/core/components/table-measure.js.map +1 -0
- package/dist/core/components/table-model.d.ts +33 -0
- package/dist/core/components/table-model.d.ts.map +1 -0
- package/dist/core/components/table-model.js +2 -0
- package/dist/core/components/table-model.js.map +1 -0
- package/dist/core/components/table-normalize.d.ts +7 -0
- package/dist/core/components/table-normalize.d.ts.map +1 -0
- package/dist/core/components/table-normalize.js +47 -0
- package/dist/core/components/table-normalize.js.map +1 -0
- package/dist/core/components/table-render-borderless.d.ts +7 -0
- package/dist/core/components/table-render-borderless.d.ts.map +1 -0
- package/dist/core/components/table-render-borderless.js +62 -0
- package/dist/core/components/table-render-borderless.js.map +1 -0
- package/dist/core/components/table-render-expanded.d.ts +5 -0
- package/dist/core/components/table-render-expanded.d.ts.map +1 -0
- package/dist/core/components/table-render-expanded.js +58 -0
- package/dist/core/components/table-render-expanded.js.map +1 -0
- package/dist/core/components/table-render-grid.d.ts +5 -0
- package/dist/core/components/table-render-grid.d.ts.map +1 -0
- package/dist/core/components/table-render-grid.js +64 -0
- package/dist/core/components/table-render-grid.js.map +1 -0
- package/dist/core/components/table-render-markdown.d.ts +4 -0
- package/dist/core/components/table-render-markdown.d.ts.map +1 -0
- package/dist/core/components/table-render-markdown.js +52 -0
- package/dist/core/components/table-render-markdown.js.map +1 -0
- package/dist/core/components/table-render-pipe.d.ts +5 -0
- package/dist/core/components/table-render-pipe.d.ts.map +1 -0
- package/dist/core/components/table-render-pipe.js +46 -0
- package/dist/core/components/table-render-pipe.js.map +1 -0
- package/dist/core/components/table-render-visual.d.ts +5 -0
- package/dist/core/components/table-render-visual.d.ts.map +1 -0
- package/dist/core/components/table-render-visual.js +30 -0
- package/dist/core/components/table-render-visual.js.map +1 -0
- package/dist/core/components/table-text-ansi.d.ts +3 -0
- package/dist/core/components/table-text-ansi.d.ts.map +1 -0
- package/dist/core/components/table-text-ansi.js +121 -0
- package/dist/core/components/table-text-ansi.js.map +1 -0
- package/dist/core/components/table.d.ts +2 -64
- package/dist/core/components/table.d.ts.map +1 -1
- package/dist/core/components/table.js +22 -680
- package/dist/core/components/table.js.map +1 -1
- package/dist/core/components/timer-format.d.ts +6 -0
- package/dist/core/components/timer-format.d.ts.map +1 -0
- package/dist/core/components/timer-format.js +39 -0
- package/dist/core/components/timer-format.js.map +1 -0
- package/dist/core/components/timer.d.ts +3 -73
- package/dist/core/components/timer.d.ts.map +1 -1
- package/dist/core/components/timer.js +2 -220
- package/dist/core/components/timer.js.map +1 -1
- package/dist/core/components/timer.part01.d.ts +93 -0
- package/dist/core/components/timer.part01.d.ts.map +1 -0
- package/dist/core/components/timer.part01.js +35 -0
- package/dist/core/components/timer.part01.js.map +1 -0
- package/dist/core/components/timer.part02.d.ts +5 -0
- package/dist/core/components/timer.part02.d.ts.map +1 -0
- package/dist/core/components/timer.part02.js +120 -0
- package/dist/core/components/timer.part02.js.map +1 -0
- package/dist/core/components/timer.part03.d.ts +20 -0
- package/dist/core/components/timer.part03.d.ts.map +1 -0
- package/dist/core/components/timer.part03.js +53 -0
- package/dist/core/components/timer.part03.js.map +1 -0
- package/dist/core/detect/tty.d.ts +13 -3
- package/dist/core/detect/tty.d.ts.map +1 -1
- package/dist/core/detect/tty.js +12 -4
- package/dist/core/detect/tty.js.map +1 -1
- package/dist/core/forms/multiselect-interactive.d.ts +4 -0
- package/dist/core/forms/multiselect-interactive.d.ts.map +1 -0
- package/dist/core/forms/multiselect-interactive.js +106 -0
- package/dist/core/forms/multiselect-interactive.js.map +1 -0
- package/dist/core/forms/multiselect.d.ts.map +1 -1
- package/dist/core/forms/multiselect.js +2 -106
- package/dist/core/forms/multiselect.js.map +1 -1
- package/dist/core/layout/geometry.d.ts +3 -38
- package/dist/core/layout/geometry.d.ts.map +1 -1
- package/dist/core/layout/geometry.js +2 -198
- package/dist/core/layout/geometry.js.map +1 -1
- package/dist/core/layout/geometry.part01.d.ts +38 -0
- package/dist/core/layout/geometry.part01.d.ts.map +1 -0
- package/dist/core/layout/geometry.part01.js +42 -0
- package/dist/core/layout/geometry.part01.js.map +1 -0
- package/dist/core/layout/geometry.part02.d.ts +5 -0
- package/dist/core/layout/geometry.part02.d.ts.map +1 -0
- package/dist/core/layout/geometry.part02.js +77 -0
- package/dist/core/layout/geometry.part02.js.map +1 -0
- package/dist/core/layout/geometry.part03.d.ts +8 -0
- package/dist/core/layout/geometry.part03.d.ts.map +1 -0
- package/dist/core/layout/geometry.part03.js +85 -0
- package/dist/core/layout/geometry.part03.js.map +1 -0
- package/dist/core/mode-lowering.d.ts +2 -47
- package/dist/core/mode-lowering.d.ts.map +1 -1
- package/dist/core/mode-lowering.js +1 -175
- package/dist/core/mode-lowering.js.map +1 -1
- package/dist/core/mode-lowering.part01.d.ts +51 -0
- package/dist/core/mode-lowering.part01.d.ts.map +1 -0
- package/dist/core/mode-lowering.part01.js +11 -0
- package/dist/core/mode-lowering.part01.js.map +1 -0
- package/dist/core/mode-lowering.part02.d.ts +11 -0
- package/dist/core/mode-lowering.part02.d.ts.map +1 -0
- package/dist/core/mode-lowering.part02.js +81 -0
- package/dist/core/mode-lowering.part02.js.map +1 -0
- package/dist/core/mode-lowering.part03.d.ts +12 -0
- package/dist/core/mode-lowering.part03.d.ts.map +1 -0
- package/dist/core/mode-lowering.part03.js +86 -0
- package/dist/core/mode-lowering.part03.js.map +1 -0
- package/dist/core/mode-lowering.part04.d.ts +5 -0
- package/dist/core/mode-lowering.part04.d.ts.map +1 -0
- package/dist/core/mode-lowering.part04.js +14 -0
- package/dist/core/mode-lowering.part04.js.map +1 -0
- package/dist/core/packed-bijou-cells-adapter.d.ts +3 -0
- package/dist/core/packed-bijou-cells-adapter.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-adapter.js +14 -0
- package/dist/core/packed-bijou-cells-adapter.js.map +1 -0
- package/dist/core/packed-bijou-cells-contract.d.ts +48 -0
- package/dist/core/packed-bijou-cells-contract.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-contract.js +38 -0
- package/dist/core/packed-bijou-cells-contract.js.map +1 -0
- package/dist/core/packed-bijou-cells-glyph-policy.d.ts +3 -0
- package/dist/core/packed-bijou-cells-glyph-policy.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-glyph-policy.js +45 -0
- package/dist/core/packed-bijou-cells-glyph-policy.js.map +1 -0
- package/dist/core/packed-bijou-cells-schema-record.d.ts +4 -0
- package/dist/core/packed-bijou-cells-schema-record.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-schema-record.js +84 -0
- package/dist/core/packed-bijou-cells-schema-record.js.map +1 -0
- package/dist/core/packed-bijou-cells-schema-values.d.ts +7 -0
- package/dist/core/packed-bijou-cells-schema-values.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-schema-values.js +66 -0
- package/dist/core/packed-bijou-cells-schema-values.js.map +1 -0
- package/dist/core/packed-bijou-cells-schema.d.ts +4 -0
- package/dist/core/packed-bijou-cells-schema.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-schema.js +3 -0
- package/dist/core/packed-bijou-cells-schema.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-bytes.d.ts +3 -0
- package/dist/core/packed-bijou-cells-validate-bytes.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-bytes.js +22 -0
- package/dist/core/packed-bijou-cells-validate-bytes.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-cells.d.ts +4 -0
- package/dist/core/packed-bijou-cells-validate-cells.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-cells.js +4 -0
- package/dist/core/packed-bijou-cells-validate-cells.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-colors.d.ts +2 -0
- package/dist/core/packed-bijou-cells-validate-colors.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-colors.js +31 -0
- package/dist/core/packed-bijou-cells-validate-colors.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-focus.d.ts +4 -0
- package/dist/core/packed-bijou-cells-validate-focus.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-focus.js +54 -0
- package/dist/core/packed-bijou-cells-validate-focus.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-glyphs.d.ts +3 -0
- package/dist/core/packed-bijou-cells-validate-glyphs.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-glyphs.js +50 -0
- package/dist/core/packed-bijou-cells-validate-glyphs.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-metadata.d.ts +8 -0
- package/dist/core/packed-bijou-cells-validate-metadata.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-metadata.js +12 -0
- package/dist/core/packed-bijou-cells-validate-metadata.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate-scene.d.ts +3 -0
- package/dist/core/packed-bijou-cells-validate-scene.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate-scene.js +54 -0
- package/dist/core/packed-bijou-cells-validate-scene.js.map +1 -0
- package/dist/core/packed-bijou-cells-validate.d.ts +3 -0
- package/dist/core/packed-bijou-cells-validate.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells-validate.js +58 -0
- package/dist/core/packed-bijou-cells-validate.js.map +1 -0
- package/dist/core/packed-bijou-cells.d.ts +4 -0
- package/dist/core/packed-bijou-cells.d.ts.map +1 -0
- package/dist/core/packed-bijou-cells.js +4 -0
- package/dist/core/packed-bijou-cells.js.map +1 -0
- package/dist/core/profunctor-page-actions.d.ts +7 -0
- package/dist/core/profunctor-page-actions.d.ts.map +1 -0
- package/dist/core/profunctor-page-actions.js +41 -0
- package/dist/core/profunctor-page-actions.js.map +1 -0
- package/dist/core/profunctor-page-block-contract.d.ts +4 -0
- package/dist/core/profunctor-page-block-contract.d.ts.map +1 -0
- package/dist/core/profunctor-page-block-contract.js +65 -0
- package/dist/core/profunctor-page-block-contract.js.map +1 -0
- package/dist/core/profunctor-page-capabilities.d.ts +3 -0
- package/dist/core/profunctor-page-capabilities.d.ts.map +1 -0
- package/dist/core/profunctor-page-capabilities.js +31 -0
- package/dist/core/profunctor-page-capabilities.js.map +1 -0
- package/dist/core/profunctor-page-contract.d.ts +13 -0
- package/dist/core/profunctor-page-contract.d.ts.map +1 -0
- package/dist/core/profunctor-page-contract.js +99 -0
- package/dist/core/profunctor-page-contract.js.map +1 -0
- package/dist/core/profunctor-page-error.d.ts +9 -0
- package/dist/core/profunctor-page-error.d.ts.map +1 -0
- package/dist/core/profunctor-page-error.js +16 -0
- package/dist/core/profunctor-page-error.js.map +1 -0
- package/dist/core/profunctor-page-json-record.d.ts +77 -0
- package/dist/core/profunctor-page-json-record.d.ts.map +1 -0
- package/dist/core/profunctor-page-json-record.js +2 -0
- package/dist/core/profunctor-page-json-record.js.map +1 -0
- package/dist/core/profunctor-page-json.d.ts +14 -0
- package/dist/core/profunctor-page-json.d.ts.map +1 -0
- package/dist/core/profunctor-page-json.js +72 -0
- package/dist/core/profunctor-page-json.js.map +1 -0
- package/dist/core/profunctor-page-lines.d.ts +10 -0
- package/dist/core/profunctor-page-lines.d.ts.map +1 -0
- package/dist/core/profunctor-page-lines.js +77 -0
- package/dist/core/profunctor-page-lines.js.map +1 -0
- package/dist/core/profunctor-page-map.d.ts +7 -0
- package/dist/core/profunctor-page-map.d.ts.map +1 -0
- package/dist/core/profunctor-page-map.js +61 -0
- package/dist/core/profunctor-page-map.js.map +1 -0
- package/dist/core/profunctor-page-model.d.ts +87 -0
- package/dist/core/profunctor-page-model.d.ts.map +1 -0
- package/dist/core/profunctor-page-model.js +2 -0
- package/dist/core/profunctor-page-model.js.map +1 -0
- package/dist/core/profunctor-page-output.d.ts +18 -0
- package/dist/core/profunctor-page-output.d.ts.map +1 -0
- package/dist/core/profunctor-page-output.js +45 -0
- package/dist/core/profunctor-page-output.js.map +1 -0
- package/dist/core/profunctor-page-parse-page-structure.d.ts +6 -0
- package/dist/core/profunctor-page-parse-page-structure.d.ts.map +1 -0
- package/dist/core/profunctor-page-parse-page-structure.js +87 -0
- package/dist/core/profunctor-page-parse-page-structure.js.map +1 -0
- package/dist/core/profunctor-page-parse-page.d.ts +3 -0
- package/dist/core/profunctor-page-parse-page.d.ts.map +1 -0
- package/dist/core/profunctor-page-parse-page.js +50 -0
- package/dist/core/profunctor-page-parse-page.js.map +1 -0
- package/dist/core/profunctor-page-parse-support.d.ts +4 -0
- package/dist/core/profunctor-page-parse-support.d.ts.map +1 -0
- package/dist/core/profunctor-page-parse-support.js +67 -0
- package/dist/core/profunctor-page-parse-support.js.map +1 -0
- package/dist/core/profunctor-page-parse.d.ts +3 -0
- package/dist/core/profunctor-page-parse.d.ts.map +1 -0
- package/dist/core/profunctor-page-parse.js +16 -0
- package/dist/core/profunctor-page-parse.js.map +1 -0
- package/dist/core/profunctor-page-provenance.d.ts +9 -0
- package/dist/core/profunctor-page-provenance.d.ts.map +1 -0
- package/dist/core/profunctor-page-provenance.js +30 -0
- package/dist/core/profunctor-page-provenance.js.map +1 -0
- package/dist/core/profunctor-page-scene-bounds.d.ts +3 -0
- package/dist/core/profunctor-page-scene-bounds.d.ts.map +1 -0
- package/dist/core/profunctor-page-scene-bounds.js +42 -0
- package/dist/core/profunctor-page-scene-bounds.js.map +1 -0
- package/dist/core/profunctor-page-scene-nodes.d.ts +6 -0
- package/dist/core/profunctor-page-scene-nodes.d.ts.map +1 -0
- package/dist/core/profunctor-page-scene-nodes.js +49 -0
- package/dist/core/profunctor-page-scene-nodes.js.map +1 -0
- package/dist/core/profunctor-page-scene.d.ts +28 -0
- package/dist/core/profunctor-page-scene.d.ts.map +1 -0
- package/dist/core/profunctor-page-scene.js +77 -0
- package/dist/core/profunctor-page-scene.js.map +1 -0
- package/dist/core/profunctor-page-source-shape.d.ts +3 -0
- package/dist/core/profunctor-page-source-shape.d.ts.map +1 -0
- package/dist/core/profunctor-page-source-shape.js +89 -0
- package/dist/core/profunctor-page-source-shape.js.map +1 -0
- package/dist/core/profunctor-page-source-span.d.ts +3 -0
- package/dist/core/profunctor-page-source-span.d.ts.map +1 -0
- package/dist/core/profunctor-page-source-span.js +22 -0
- package/dist/core/profunctor-page-source-span.js.map +1 -0
- package/dist/core/profunctor-page-source-target-state.d.ts +3 -0
- package/dist/core/profunctor-page-source-target-state.d.ts.map +1 -0
- package/dist/core/profunctor-page-source-target-state.js +24 -0
- package/dist/core/profunctor-page-source-target-state.js.map +1 -0
- package/dist/core/profunctor-page-target-types.d.ts +93 -0
- package/dist/core/profunctor-page-target-types.d.ts.map +1 -0
- package/dist/core/profunctor-page-target-types.js +2 -0
- package/dist/core/profunctor-page-target-types.js.map +1 -0
- package/dist/core/profunctor-page-target.d.ts +8 -0
- package/dist/core/profunctor-page-target.d.ts.map +1 -0
- package/dist/core/profunctor-page-target.js +87 -0
- package/dist/core/profunctor-page-target.js.map +1 -0
- package/dist/core/profunctor-page-validate-dependencies.d.ts +3 -0
- package/dist/core/profunctor-page-validate-dependencies.d.ts.map +1 -0
- package/dist/core/profunctor-page-validate-dependencies.js +25 -0
- package/dist/core/profunctor-page-validate-dependencies.js.map +1 -0
- package/dist/core/profunctor-page-validate-family.d.ts +3 -0
- package/dist/core/profunctor-page-validate-family.d.ts.map +1 -0
- package/dist/core/profunctor-page-validate-family.js +95 -0
- package/dist/core/profunctor-page-validate-family.js.map +1 -0
- package/dist/core/profunctor-page-validate-graph.d.ts +3 -0
- package/dist/core/profunctor-page-validate-graph.d.ts.map +1 -0
- package/dist/core/profunctor-page-validate-graph.js +98 -0
- package/dist/core/profunctor-page-validate-graph.js.map +1 -0
- package/dist/core/render/differ-ansi.d.ts +3 -0
- package/dist/core/render/differ-ansi.d.ts.map +1 -0
- package/dist/core/render/differ-ansi.js +100 -0
- package/dist/core/render/differ-ansi.js.map +1 -0
- package/dist/core/render/differ-cell.d.ts +10 -0
- package/dist/core/render/differ-cell.d.ts.map +1 -0
- package/dist/core/render/differ-cell.js +81 -0
- package/dist/core/render/differ-cell.js.map +1 -0
- package/dist/core/render/differ-cells.d.ts +4 -0
- package/dist/core/render/differ-cells.d.ts.map +1 -0
- package/dist/core/render/differ-cells.js +72 -0
- package/dist/core/render/differ-cells.js.map +1 -0
- package/dist/core/render/differ-packed-bytes.d.ts +7 -0
- package/dist/core/render/differ-packed-bytes.d.ts.map +1 -0
- package/dist/core/render/differ-packed-bytes.js +111 -0
- package/dist/core/render/differ-packed-bytes.js.map +1 -0
- package/dist/core/render/differ-packed.d.ts +4 -0
- package/dist/core/render/differ-packed.d.ts.map +1 -0
- package/dist/core/render/differ-packed.js +98 -0
- package/dist/core/render/differ-packed.js.map +1 -0
- package/dist/core/render/differ-paint.d.ts +3 -0
- package/dist/core/render/differ-paint.d.ts.map +1 -0
- package/dist/core/render/differ-paint.js +9 -0
- package/dist/core/render/differ-paint.js.map +1 -0
- package/dist/core/render/differ-string.d.ts +6 -0
- package/dist/core/render/differ-string.d.ts.map +1 -0
- package/dist/core/render/differ-string.js +63 -0
- package/dist/core/render/differ-string.js.map +1 -0
- package/dist/core/render/differ.d.ts +9 -55
- package/dist/core/render/differ.d.ts.map +1 -1
- package/dist/core/render/differ.js +11 -826
- package/dist/core/render/differ.js.map +1 -1
- package/dist/core/render/packed-cell.d.ts +1 -1
- package/dist/core/render/packed-cell.d.ts.map +1 -1
- package/dist/core/render/packed-cell.js +1 -1
- package/dist/core/render/packed-cell.js.map +1 -1
- package/dist/core/render/packed-cell.part01.d.ts +1 -0
- package/dist/core/render/packed-cell.part01.d.ts.map +1 -1
- package/dist/core/render/packed-cell.part01.js +1 -0
- package/dist/core/render/packed-cell.part01.js.map +1 -1
- package/dist/core/sha256-text.d.ts +2 -0
- package/dist/core/sha256-text.d.ts.map +1 -0
- package/dist/core/sha256-text.js +97 -0
- package/dist/core/sha256-text.js.map +1 -0
- package/dist/core/stable-json.d.ts +3 -0
- package/dist/core/stable-json.d.ts.map +1 -0
- package/dist/core/stable-json.js +41 -0
- package/dist/core/stable-json.js.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.d.ts +4 -27
- package/dist/core/standard-blocks/metadata-standard.d.ts.map +1 -1
- package/dist/core/standard-blocks/metadata-standard.js +4 -421
- package/dist/core/standard-blocks/metadata-standard.js.map +1 -1
- package/dist/core/standard-blocks/metadata-standard.part01.d.ts +22 -0
- package/dist/core/standard-blocks/metadata-standard.part01.d.ts.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part01.js +110 -0
- package/dist/core/standard-blocks/metadata-standard.part01.js.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part02.d.ts +10 -0
- package/dist/core/standard-blocks/metadata-standard.part02.d.ts.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part02.js +123 -0
- package/dist/core/standard-blocks/metadata-standard.part02.js.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part03.d.ts +10 -0
- package/dist/core/standard-blocks/metadata-standard.part03.d.ts.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part03.js +123 -0
- package/dist/core/standard-blocks/metadata-standard.part03.js.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part04.d.ts +8 -0
- package/dist/core/standard-blocks/metadata-standard.part04.d.ts.map +1 -0
- package/dist/core/standard-blocks/metadata-standard.part04.js +76 -0
- package/dist/core/standard-blocks/metadata-standard.part04.js.map +1 -0
- package/dist/core/standard-blocks/render.d.ts +2 -15
- package/dist/core/standard-blocks/render.d.ts.map +1 -1
- package/dist/core/standard-blocks/render.js +2 -340
- package/dist/core/standard-blocks/render.js.map +1 -1
- package/dist/core/standard-blocks/render.part01.d.ts +24 -0
- package/dist/core/standard-blocks/render.part01.d.ts.map +1 -0
- package/dist/core/standard-blocks/render.part01.js +99 -0
- package/dist/core/standard-blocks/render.part01.js.map +1 -0
- package/dist/core/standard-blocks/render.part02.d.ts +10 -0
- package/dist/core/standard-blocks/render.part02.d.ts.map +1 -0
- package/dist/core/standard-blocks/render.part02.js +108 -0
- package/dist/core/standard-blocks/render.part02.js.map +1 -0
- package/dist/core/standard-blocks/render.part03.d.ts +15 -0
- package/dist/core/standard-blocks/render.part03.d.ts.map +1 -0
- package/dist/core/standard-blocks/render.part03.js +96 -0
- package/dist/core/standard-blocks/render.part03.js.map +1 -0
- package/dist/core/standard-blocks/render.part04.d.ts +14 -0
- package/dist/core/standard-blocks/render.part04.d.ts.map +1 -0
- package/dist/core/standard-blocks/render.part04.js +50 -0
- package/dist/core/standard-blocks/render.part04.js.map +1 -0
- package/dist/core/standard-blocks/schema-helpers.d.ts +1 -1
- package/dist/core/text/grapheme-plain.d.ts +25 -0
- package/dist/core/text/grapheme-plain.d.ts.map +1 -0
- package/dist/core/text/grapheme-plain.js +20 -0
- package/dist/core/text/grapheme-plain.js.map +1 -0
- package/dist/core/text/grapheme.d.ts +7 -137
- package/dist/core/text/grapheme.d.ts.map +1 -1
- package/dist/core/text/grapheme.js +5 -297
- package/dist/core/text/grapheme.js.map +1 -1
- package/dist/core/text/grapheme.part01.d.ts +35 -0
- package/dist/core/text/grapheme.part01.d.ts.map +1 -0
- package/dist/core/text/grapheme.part01.js +102 -0
- package/dist/core/text/grapheme.part01.js.map +1 -0
- package/dist/core/text/grapheme.part02.d.ts +59 -0
- package/dist/core/text/grapheme.part02.d.ts.map +1 -0
- package/dist/core/text/grapheme.part02.js +88 -0
- package/dist/core/text/grapheme.part02.js.map +1 -0
- package/dist/core/text/grapheme.part03.d.ts +19 -0
- package/dist/core/text/grapheme.part03.d.ts.map +1 -0
- package/dist/core/text/grapheme.part03.js +72 -0
- package/dist/core/text/grapheme.part03.js.map +1 -0
- package/dist/core/text/grapheme.part04.d.ts +15 -0
- package/dist/core/text/grapheme.part04.d.ts.map +1 -0
- package/dist/core/text/grapheme.part04.js +28 -0
- package/dist/core/text/grapheme.part04.js.map +1 -0
- package/dist/core/text/wrap-tokens.d.ts +29 -0
- package/dist/core/text/wrap-tokens.d.ts.map +1 -0
- package/dist/core/text/wrap-tokens.js +96 -0
- package/dist/core/text/wrap-tokens.js.map +1 -0
- package/dist/core/text/wrap.d.ts +3 -17
- package/dist/core/text/wrap.d.ts.map +1 -1
- package/dist/core/text/wrap.js +4 -99
- package/dist/core/text/wrap.js.map +1 -1
- package/dist/core/theme/accessors.d.ts +1 -1
- package/dist/core/theme/accessors.d.ts.map +1 -1
- package/dist/core/theme/accessors.js +7 -1
- package/dist/core/theme/accessors.js.map +1 -1
- package/dist/core/theme/builder.d.ts +3 -90
- package/dist/core/theme/builder.d.ts.map +1 -1
- package/dist/core/theme/builder.js +2 -235
- package/dist/core/theme/builder.js.map +1 -1
- package/dist/core/theme/builder.part01.d.ts +92 -0
- package/dist/core/theme/builder.part01.d.ts.map +1 -0
- package/dist/core/theme/builder.part01.js +25 -0
- package/dist/core/theme/builder.part01.js.map +1 -0
- package/dist/core/theme/builder.part02.d.ts +16 -0
- package/dist/core/theme/builder.part02.d.ts.map +1 -0
- package/dist/core/theme/builder.part02.js +100 -0
- package/dist/core/theme/builder.part02.js.map +1 -0
- package/dist/core/theme/builder.part03.d.ts +5 -0
- package/dist/core/theme/builder.part03.d.ts.map +1 -0
- package/dist/core/theme/builder.part03.js +74 -0
- package/dist/core/theme/builder.part03.js.map +1 -0
- package/dist/core/theme/builder.part04.d.ts +3 -0
- package/dist/core/theme/builder.part04.d.ts.map +1 -0
- package/dist/core/theme/builder.part04.js +49 -0
- package/dist/core/theme/builder.part04.js.map +1 -0
- package/dist/core/theme/doctor.d.ts +4 -51
- package/dist/core/theme/doctor.d.ts.map +1 -1
- package/dist/core/theme/doctor.js +3 -223
- package/dist/core/theme/doctor.js.map +1 -1
- package/dist/core/theme/doctor.part01.d.ts +77 -0
- package/dist/core/theme/doctor.part01.d.ts.map +1 -0
- package/dist/core/theme/doctor.part01.js +20 -0
- package/dist/core/theme/doctor.part01.js.map +1 -0
- package/dist/core/theme/doctor.part02.d.ts +13 -0
- package/dist/core/theme/doctor.part02.d.ts.map +1 -0
- package/dist/core/theme/doctor.part02.js +100 -0
- package/dist/core/theme/doctor.part02.js.map +1 -0
- package/dist/core/theme/doctor.part03.d.ts +6 -0
- package/dist/core/theme/doctor.part03.d.ts.map +1 -0
- package/dist/core/theme/doctor.part03.js +68 -0
- package/dist/core/theme/doctor.part03.js.map +1 -0
- package/dist/core/theme/doctor.part04.d.ts +4 -0
- package/dist/core/theme/doctor.part04.d.ts.map +1 -0
- package/dist/core/theme/doctor.part04.js +48 -0
- package/dist/core/theme/doctor.part04.js.map +1 -0
- package/dist/core/theme/dtcg.d.ts +3 -47
- package/dist/core/theme/dtcg.d.ts.map +1 -1
- package/dist/core/theme/dtcg.js +2 -261
- package/dist/core/theme/dtcg.js.map +1 -1
- package/dist/core/theme/dtcg.part01.d.ts +25 -0
- package/dist/core/theme/dtcg.part01.d.ts.map +1 -0
- package/dist/core/theme/dtcg.part01.js +89 -0
- package/dist/core/theme/dtcg.part01.js.map +1 -0
- package/dist/core/theme/dtcg.part02.d.ts +15 -0
- package/dist/core/theme/dtcg.part02.d.ts.map +1 -0
- package/dist/core/theme/dtcg.part02.js +105 -0
- package/dist/core/theme/dtcg.part02.js.map +1 -0
- package/dist/core/theme/dtcg.part03.d.ts +33 -0
- package/dist/core/theme/dtcg.part03.d.ts.map +1 -0
- package/dist/core/theme/dtcg.part03.js +85 -0
- package/dist/core/theme/dtcg.part03.js.map +1 -0
- package/dist/core/theme/extend.d.ts +10 -1
- package/dist/core/theme/extend.d.ts.map +1 -1
- package/dist/core/theme/extend.js +10 -1
- package/dist/core/theme/extend.js.map +1 -1
- package/dist/core/theme/presets.d.ts +5 -38
- package/dist/core/theme/presets.d.ts.map +1 -1
- package/dist/core/theme/presets.js +5 -291
- package/dist/core/theme/presets.js.map +1 -1
- package/dist/core/theme/presets.part01.d.ts +27 -0
- package/dist/core/theme/presets.part01.d.ts.map +1 -0
- package/dist/core/theme/presets.part01.js +105 -0
- package/dist/core/theme/presets.part01.js.map +1 -0
- package/dist/core/theme/presets.part02.d.ts +9 -0
- package/dist/core/theme/presets.part02.d.ts.map +1 -0
- package/dist/core/theme/presets.part02.js +66 -0
- package/dist/core/theme/presets.part02.js.map +1 -0
- package/dist/core/theme/presets.part03.d.ts +4 -0
- package/dist/core/theme/presets.part03.d.ts.map +1 -0
- package/dist/core/theme/presets.part03.js +125 -0
- package/dist/core/theme/presets.part03.js.map +1 -0
- package/dist/core/theme/resolve-rgb.d.ts +4 -0
- package/dist/core/theme/resolve-rgb.d.ts.map +1 -0
- package/dist/core/theme/resolve-rgb.js +21 -0
- package/dist/core/theme/resolve-rgb.js.map +1 -0
- package/dist/core/theme/resolve-types.d.ts +64 -0
- package/dist/core/theme/resolve-types.d.ts.map +1 -0
- package/dist/core/theme/resolve-types.js +2 -0
- package/dist/core/theme/resolve-types.js.map +1 -0
- package/dist/core/theme/resolve.d.ts +3 -61
- package/dist/core/theme/resolve.d.ts.map +1 -1
- package/dist/core/theme/resolve.js +8 -22
- package/dist/core/theme/resolve.js.map +1 -1
- package/dist/core/ui-scene-canonical.d.ts +6 -0
- package/dist/core/ui-scene-canonical.d.ts.map +1 -0
- package/dist/core/ui-scene-canonical.js +37 -0
- package/dist/core/ui-scene-canonical.js.map +1 -0
- package/dist/core/ui-scene-contract.d.ts +100 -0
- package/dist/core/ui-scene-contract.d.ts.map +1 -0
- package/dist/core/ui-scene-contract.js +3 -0
- package/dist/core/ui-scene-contract.js.map +1 -0
- package/dist/core/ui-scene-ir.d.ts +11 -194
- package/dist/core/ui-scene-ir.d.ts.map +1 -1
- package/dist/core/ui-scene-ir.js +6 -569
- package/dist/core/ui-scene-ir.js.map +1 -1
- package/dist/core/ui-scene-lowering-utils.d.ts +21 -0
- package/dist/core/ui-scene-lowering-utils.d.ts.map +1 -0
- package/dist/core/ui-scene-lowering-utils.js +99 -0
- package/dist/core/ui-scene-lowering-utils.js.map +1 -0
- package/dist/core/ui-scene-lowering.d.ts +31 -0
- package/dist/core/ui-scene-lowering.d.ts.map +1 -0
- package/dist/core/ui-scene-lowering.js +49 -0
- package/dist/core/ui-scene-lowering.js.map +1 -0
- package/dist/core/ui-scene-receipt.d.ts +29 -0
- package/dist/core/ui-scene-receipt.d.ts.map +1 -0
- package/dist/core/ui-scene-receipt.js +37 -0
- package/dist/core/ui-scene-receipt.js.map +1 -0
- package/dist/core/ui-scene-target-profile.d.ts +35 -0
- package/dist/core/ui-scene-target-profile.d.ts.map +1 -0
- package/dist/core/ui-scene-target-profile.js +38 -0
- package/dist/core/ui-scene-target-profile.js.map +1 -0
- package/dist/core/ui-scene-terminal-proof.d.ts +10 -0
- package/dist/core/ui-scene-terminal-proof.d.ts.map +1 -0
- package/dist/core/ui-scene-terminal-proof.js +26 -0
- package/dist/core/ui-scene-terminal-proof.js.map +1 -0
- package/dist/core/ui-scene-validation.d.ts +3 -0
- package/dist/core/ui-scene-validation.d.ts.map +1 -0
- package/dist/core/ui-scene-validation.js +88 -0
- package/dist/core/ui-scene-validation.js.map +1 -0
- package/dist/core/visor-artifact-bundle.d.ts +4 -0
- package/dist/core/visor-artifact-bundle.d.ts.map +1 -0
- package/dist/core/visor-artifact-bundle.js +3 -0
- package/dist/core/visor-artifact-bundle.js.map +1 -0
- package/dist/core/visor-artifact-bundle.part01.d.ts +115 -0
- package/dist/core/visor-artifact-bundle.part01.d.ts.map +1 -0
- package/dist/core/visor-artifact-bundle.part01.js +4 -0
- package/dist/core/visor-artifact-bundle.part01.js.map +1 -0
- package/dist/core/visor-artifact-bundle.part02.d.ts +4 -0
- package/dist/core/visor-artifact-bundle.part02.d.ts.map +1 -0
- package/dist/core/visor-artifact-bundle.part02.js +89 -0
- package/dist/core/visor-artifact-bundle.part02.js.map +1 -0
- package/dist/core/visor-artifact-bundle.part03.d.ts +16 -0
- package/dist/core/visor-artifact-bundle.part03.d.ts.map +1 -0
- package/dist/core/visor-artifact-bundle.part03.js +76 -0
- package/dist/core/visor-artifact-bundle.part03.js.map +1 -0
- package/dist/core/visor-artifact-bundle.part04.d.ts +18 -0
- package/dist/core/visor-artifact-bundle.part04.d.ts.map +1 -0
- package/dist/core/visor-artifact-bundle.part04.js +90 -0
- package/dist/core/visor-artifact-bundle.part04.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/index.part02.d.ts +2 -0
- package/dist/index.part02.d.ts.map +1 -1
- package/dist/index.part02.js +2 -0
- package/dist/index.part02.js.map +1 -1
- package/dist/index.part11.d.ts +2 -0
- package/dist/index.part11.d.ts.map +1 -0
- package/dist/index.part11.js +2 -0
- package/dist/index.part11.js.map +1 -0
- package/dist/ports/surface-cell.d.ts +36 -0
- package/dist/ports/surface-cell.d.ts.map +1 -0
- package/dist/ports/surface-cell.js +42 -0
- package/dist/ports/surface-cell.js.map +1 -0
- package/dist/ports/surface-contract.d.ts +53 -0
- package/dist/ports/surface-contract.d.ts.map +1 -0
- package/dist/ports/surface-contract.js +5 -0
- package/dist/ports/surface-contract.js.map +1 -0
- package/dist/ports/surface-create.d.ts +4 -0
- package/dist/ports/surface-create.d.ts.map +1 -0
- package/dist/ports/surface-create.js +48 -0
- package/dist/ports/surface-create.js.map +1 -0
- package/dist/ports/surface-layout.d.ts +29 -0
- package/dist/ports/surface-layout.d.ts.map +1 -0
- package/dist/ports/surface-layout.js +2 -0
- package/dist/ports/surface-layout.js.map +1 -0
- package/dist/ports/surface-packed-codec.d.ts +6 -0
- package/dist/ports/surface-packed-codec.d.ts.map +1 -0
- package/dist/ports/surface-packed-codec.js +86 -0
- package/dist/ports/surface-packed-codec.js.map +1 -0
- package/dist/ports/surface-packed-color.d.ts +7 -0
- package/dist/ports/surface-packed-color.d.ts.map +1 -0
- package/dist/ports/surface-packed-color.js +53 -0
- package/dist/ports/surface-packed-color.js.map +1 -0
- package/dist/ports/surface-packed-compose.d.ts +7 -0
- package/dist/ports/surface-packed-compose.d.ts.map +1 -0
- package/dist/ports/surface-packed-compose.js +66 -0
- package/dist/ports/surface-packed-compose.js.map +1 -0
- package/dist/ports/surface-packed-read.d.ts +9 -0
- package/dist/ports/surface-packed-read.d.ts.map +1 -0
- package/dist/ports/surface-packed-read.js +77 -0
- package/dist/ports/surface-packed-read.js.map +1 -0
- package/dist/ports/surface-packed-state.d.ts +19 -0
- package/dist/ports/surface-packed-state.d.ts.map +1 -0
- package/dist/ports/surface-packed-state.js +60 -0
- package/dist/ports/surface-packed-state.js.map +1 -0
- package/dist/ports/surface-packed-write.d.ts +7 -0
- package/dist/ports/surface-packed-write.d.ts.map +1 -0
- package/dist/ports/surface-packed-write.js +73 -0
- package/dist/ports/surface-packed-write.js.map +1 -0
- package/dist/ports/surface-transform.d.ts +19 -0
- package/dist/ports/surface-transform.d.ts.map +1 -0
- package/dist/ports/surface-transform.js +19 -0
- package/dist/ports/surface-transform.js.map +1 -0
- package/dist/ports/surface.d.ts +7 -234
- package/dist/ports/surface.d.ts.map +1 -1
- package/dist/ports/surface.js +4 -514
- package/dist/ports/surface.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,836 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
function hasVisibleStyle(cell) {
|
|
9
|
-
return cell.fg !== undefined
|
|
10
|
-
|| cell.bg !== undefined
|
|
11
|
-
|| (cell.modifiers?.length ?? 0) > 0;
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Convert a multi-line string into a Surface.
|
|
15
|
-
*
|
|
16
|
-
* This is a plain-text bridge. It strips ANSI and treats all characters
|
|
17
|
-
* as the default style.
|
|
18
|
-
*/
|
|
19
|
-
export function stringToSurface(text, width, height) {
|
|
20
|
-
const surface = createSurface(width, height);
|
|
21
|
-
const plainText = sanitizeTerminalText(text);
|
|
22
|
-
const lines = plainText.split('\n');
|
|
23
|
-
for (let y = 0; y < Math.min(height, lines.length); y++) {
|
|
24
|
-
const line = lines[y] ?? '';
|
|
25
|
-
const gs = segmentGraphemes(line);
|
|
26
|
-
let x = 0;
|
|
27
|
-
for (const char of gs) {
|
|
28
|
-
if (x >= width)
|
|
29
|
-
break;
|
|
30
|
-
x += writeSurfaceGrapheme(surface, x, y, char);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return surface;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Robust ANSI-aware string to Surface conversion.
|
|
37
|
-
*/
|
|
38
|
-
export function parseAnsiToSurface(text, width, height) {
|
|
39
|
-
const surface = createSurface(width, height);
|
|
40
|
-
const safeText = sanitizeTerminalText(text, {
|
|
41
|
-
allowAnsiStyling: true,
|
|
42
|
-
allowHyperlinks: true,
|
|
43
|
-
});
|
|
44
|
-
const lines = safeText.replace(ANSI_OSC8_RE, '').split('\n');
|
|
45
|
-
const ANSI_RE = new RegExp(ANSI_ESCAPE + '\\[([0-9;]*)m', 'g');
|
|
46
|
-
for (let y = 0; y < Math.min(height, lines.length); y++) {
|
|
47
|
-
const line = lines[y] ?? '';
|
|
48
|
-
let x = 0;
|
|
49
|
-
let currentFg;
|
|
50
|
-
let currentBg;
|
|
51
|
-
const currentMods = new Set();
|
|
52
|
-
const matches = Array.from(line.matchAll(ANSI_RE));
|
|
53
|
-
let lastIndex = 0;
|
|
54
|
-
for (const match of matches) {
|
|
55
|
-
const matchIndex = match.index;
|
|
56
|
-
const part = line.slice(lastIndex, matchIndex);
|
|
57
|
-
const gs = segmentGraphemes(part);
|
|
58
|
-
for (const char of gs) {
|
|
59
|
-
if (x >= width)
|
|
60
|
-
break;
|
|
61
|
-
x += writeSurfaceGrapheme(surface, x, y, char, {
|
|
62
|
-
fg: currentFg,
|
|
63
|
-
bg: currentBg,
|
|
64
|
-
modifiers: Array.from(currentMods),
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
const codeStr = match[1] ?? '';
|
|
68
|
-
if (codeStr === '0' || codeStr === '') {
|
|
69
|
-
currentFg = undefined;
|
|
70
|
-
currentBg = undefined;
|
|
71
|
-
currentMods.clear();
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
const parts = codeStr.split(';');
|
|
75
|
-
let i = 0;
|
|
76
|
-
while (i < parts.length) {
|
|
77
|
-
const code = parts[i] ?? '';
|
|
78
|
-
if (code === '0') {
|
|
79
|
-
currentFg = undefined;
|
|
80
|
-
currentBg = undefined;
|
|
81
|
-
currentMods.clear();
|
|
82
|
-
}
|
|
83
|
-
else if (code === '1')
|
|
84
|
-
currentMods.add('bold');
|
|
85
|
-
else if (code === '2')
|
|
86
|
-
currentMods.add('dim');
|
|
87
|
-
else if (code === '3')
|
|
88
|
-
currentMods.add('italic');
|
|
89
|
-
else if (code === '4')
|
|
90
|
-
currentMods.add('underline');
|
|
91
|
-
else if (code === '7')
|
|
92
|
-
currentMods.add('inverse');
|
|
93
|
-
else if (code === '9')
|
|
94
|
-
currentMods.add('strike');
|
|
95
|
-
else if (code === '22') {
|
|
96
|
-
currentMods.delete('bold');
|
|
97
|
-
currentMods.delete('dim');
|
|
98
|
-
}
|
|
99
|
-
else if (code === '23')
|
|
100
|
-
currentMods.delete('italic');
|
|
101
|
-
else if (code === '24')
|
|
102
|
-
currentMods.delete('underline');
|
|
103
|
-
else if (code === '27')
|
|
104
|
-
currentMods.delete('inverse');
|
|
105
|
-
else if (code === '29')
|
|
106
|
-
currentMods.delete('strike');
|
|
107
|
-
else if (code === '39')
|
|
108
|
-
currentFg = undefined;
|
|
109
|
-
else if (code === '49')
|
|
110
|
-
currentBg = undefined;
|
|
111
|
-
else if (code === '38' && parts[i + 1] === '2') {
|
|
112
|
-
// Truecolor FG: 38;2;R;G;B
|
|
113
|
-
const r = sgrByteHex(parts, i + 2);
|
|
114
|
-
const g = sgrByteHex(parts, i + 3);
|
|
115
|
-
const b = sgrByteHex(parts, i + 4);
|
|
116
|
-
currentFg = '#' + r + g + b;
|
|
117
|
-
i += 4;
|
|
118
|
-
}
|
|
119
|
-
else if (code === '48' && parts[i + 1] === '2') {
|
|
120
|
-
// Truecolor BG: 48;2;R;G;B
|
|
121
|
-
const r = sgrByteHex(parts, i + 2);
|
|
122
|
-
const g = sgrByteHex(parts, i + 3);
|
|
123
|
-
const b = sgrByteHex(parts, i + 4);
|
|
124
|
-
currentBg = '#' + r + g + b;
|
|
125
|
-
i += 4;
|
|
126
|
-
}
|
|
127
|
-
i++;
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
lastIndex = matchIndex + match[0].length;
|
|
131
|
-
}
|
|
132
|
-
const remaining = line.slice(lastIndex);
|
|
133
|
-
const gs = segmentGraphemes(remaining);
|
|
134
|
-
for (const char of gs) {
|
|
135
|
-
if (x >= width)
|
|
136
|
-
break;
|
|
137
|
-
x += writeSurfaceGrapheme(surface, x, y, char, {
|
|
138
|
-
fg: currentFg,
|
|
139
|
-
bg: currentBg,
|
|
140
|
-
modifiers: Array.from(currentMods),
|
|
141
|
-
});
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return surface;
|
|
145
|
-
}
|
|
146
|
-
function writeSurfaceGrapheme(surface, x, y, char, style) {
|
|
147
|
-
if (x >= surface.width)
|
|
148
|
-
return 0;
|
|
149
|
-
const width = Math.max(1, graphemeClusterWidth(char));
|
|
150
|
-
if (isPackedSurface(surface) && (style?.fg || style?.bg)) {
|
|
151
|
-
const fg = colorRgb(style.fg);
|
|
152
|
-
let fR = -1, fG = 0, fB = 0;
|
|
153
|
-
if (fg) {
|
|
154
|
-
fR = fg[0];
|
|
155
|
-
fG = fg[1];
|
|
156
|
-
fB = fg[2];
|
|
157
|
-
}
|
|
158
|
-
const bg = colorRgb(style.bg);
|
|
159
|
-
let bR = -1, bG = 0, bB = 0;
|
|
160
|
-
if (bg) {
|
|
161
|
-
bR = bg[0];
|
|
162
|
-
bG = bg[1];
|
|
163
|
-
bB = bg[2];
|
|
164
|
-
}
|
|
165
|
-
surface.setRGB(x, y, char, fR, fG, fB, bR, bG, bB);
|
|
166
|
-
for (let offset = 1; offset < width && x + offset < surface.width; offset++) {
|
|
167
|
-
surface.setRGB(x + offset, y, '', fR, fG, fB, bR, bG, bB);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
else {
|
|
171
|
-
surface.set(x, y, { char, ...style, empty: false });
|
|
172
|
-
for (let offset = 1; offset < width && x + offset < surface.width; offset++) {
|
|
173
|
-
surface.set(x + offset, y, { char: '', ...style, empty: false });
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
return width;
|
|
177
|
-
}
|
|
178
|
-
/**
|
|
179
|
-
* Convert a Surface into a multi-line string with ANSI escape codes.
|
|
180
|
-
*
|
|
181
|
-
* This is an explicit bridge for string-first APIs and terminal writes.
|
|
182
|
-
*
|
|
183
|
-
* @param surface - The surface to convert.
|
|
184
|
-
* @param style - The style port to use for color resolution.
|
|
185
|
-
* @returns A string representation of the surface.
|
|
186
|
-
*/
|
|
187
|
-
export function surfaceToString(surface, style) {
|
|
188
|
-
const lines = [];
|
|
189
|
-
for (let y = 0; y < surface.height; y++) {
|
|
190
|
-
let line = '';
|
|
191
|
-
for (let x = 0; x < surface.width; x++) {
|
|
192
|
-
const cell = surface.get(x, y);
|
|
193
|
-
line += hasVisibleStyle(cell)
|
|
194
|
-
? style.styled(cellToken(cell), cell.char)
|
|
195
|
-
: cell.char;
|
|
196
|
-
}
|
|
197
|
-
lines.push(line);
|
|
198
|
-
}
|
|
199
|
-
return lines.join('\n');
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Paint a LayoutNode tree onto a Surface.
|
|
203
|
-
*
|
|
204
|
-
* @param target - The surface to paint onto.
|
|
205
|
-
* @param node - The root layout node to paint.
|
|
206
|
-
*/
|
|
207
|
-
export function paintLayoutNode(target, node) {
|
|
208
|
-
if (node.surface) {
|
|
209
|
-
target.blit(node.surface, node.rect.x, node.rect.y);
|
|
210
|
-
}
|
|
211
|
-
for (const child of node.children) {
|
|
212
|
-
paintLayoutNode(target, child);
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
/**
|
|
216
|
-
* Compare two cells for equality (content and style).
|
|
217
|
-
*/
|
|
218
|
-
export function isSameCell(a, b) {
|
|
219
|
-
if (a === b)
|
|
220
|
-
return true;
|
|
221
|
-
if (a.char !== b.char)
|
|
222
|
-
return false;
|
|
223
|
-
if (a.fg !== b.fg)
|
|
224
|
-
return false;
|
|
225
|
-
if (a.bg !== b.bg)
|
|
226
|
-
return false;
|
|
227
|
-
if (a.empty !== b.empty)
|
|
228
|
-
return false;
|
|
229
|
-
const aMods = a.modifiers ?? [];
|
|
230
|
-
const bMods = b.modifiers ?? [];
|
|
231
|
-
if (aMods === bMods)
|
|
232
|
-
return true;
|
|
233
|
-
if (aMods.length !== bMods.length)
|
|
234
|
-
return false;
|
|
235
|
-
// Order-insensitive comparison: every modifier in a must exist in b.
|
|
236
|
-
// For short arrays (typically 0-3 modifiers) this is faster than sorting.
|
|
237
|
-
for (const modifier of aMods) {
|
|
238
|
-
if (!bMods.includes(modifier))
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
return true;
|
|
242
|
-
}
|
|
243
|
-
/**
|
|
244
|
-
* Move the terminal cursor to (x, y) using CUP (Cursor Position) escape code.
|
|
245
|
-
* Coordinates are 0-based in Bijou, but 1-based in ANSI.
|
|
246
|
-
*/
|
|
247
|
-
function moveCursor(x, y) {
|
|
248
|
-
return `\x1b[${String(y + 1)};${String(x + 1)}H`;
|
|
249
|
-
}
|
|
1
|
+
import { isPackedSurface, } from '../../ports/surface.js';
|
|
2
|
+
import { renderDiffCells } from './differ-cells.js';
|
|
3
|
+
import { renderDiffPacked } from './differ-packed.js';
|
|
4
|
+
export { parseAnsiToSurface } from './differ-ansi.js';
|
|
5
|
+
export { isSameCell } from './differ-cell.js';
|
|
6
|
+
export { paintLayoutNode } from './differ-paint.js';
|
|
7
|
+
export { stringToSurface, surfaceToString, } from './differ-string.js';
|
|
250
8
|
/**
|
|
251
|
-
* Diff two surfaces and write the minimal set of changes to the
|
|
9
|
+
* Diff two surfaces and write the minimal set of changes to the output port.
|
|
252
10
|
*
|
|
253
|
-
*
|
|
254
|
-
*
|
|
255
|
-
* 2. Minimizes CUP (move cursor) commands by detecting contiguous changes.
|
|
256
|
-
* 3. Batches cells with identical styles to minimize SGR codes and keep strings contiguous.
|
|
257
|
-
*
|
|
258
|
-
* When both surfaces are {@link PackedSurface}, the caller owns a pooled
|
|
259
|
-
* `outBuf`, and the IO port implements {@link WritePort.writeBytes}, the
|
|
260
|
-
* composed frame is UTF-8 encoded into the supplied buffer once and
|
|
261
|
-
* handed off via `writeBytes` instead of `write(string)`. This lets the
|
|
262
|
-
* TUI runtime own the output allocation and bypass the implicit
|
|
263
|
-
* string→UTF-8 conversion inside the underlying stream.
|
|
264
|
-
*
|
|
265
|
-
* Callers without an `outBuf` (tests, bench scenarios, simple drivers)
|
|
266
|
-
* fall through to the legacy `io.write(string)` path with no overhead.
|
|
267
|
-
*
|
|
268
|
-
* @param current - The surface currently on the terminal.
|
|
269
|
-
* @param target - The desired surface state.
|
|
270
|
-
* @param io - The port to write ANSI codes to.
|
|
271
|
-
* @param style - The port to resolve cell styling.
|
|
272
|
-
* @param outBuf - Optional pooled byte buffer for the packed byte path.
|
|
11
|
+
* Packed surfaces use pooled direct UTF-8 emission when available. Other
|
|
12
|
+
* surfaces retain the string-based compatibility path.
|
|
273
13
|
*/
|
|
274
14
|
export function renderDiff(current, target, io, style, outBuf) {
|
|
275
|
-
// Use packed byte path when both surfaces have buffers
|
|
276
15
|
if (isPackedSurface(target) && isPackedSurface(current)) {
|
|
277
|
-
renderDiffPacked(current, target, io,
|
|
16
|
+
renderDiffPacked(current, target, io, outBuf);
|
|
278
17
|
return;
|
|
279
18
|
}
|
|
280
19
|
renderDiffCells(current, target, io, style);
|
|
281
20
|
}
|
|
282
|
-
// ── Packed byte-comparison differ ───────────────────────
|
|
283
|
-
/**
|
|
284
|
-
* Empty cell encoded as packed bytes for out-of-bounds boundary comparison.
|
|
285
|
-
* Must match what createSurface produces for `{ char: ' ', empty: true }`.
|
|
286
|
-
* Static shared buffer — do not mutate.
|
|
287
|
-
*/
|
|
288
|
-
const EMPTY_PACKED = new Uint8Array(CELL_STRIDE);
|
|
289
|
-
EMPTY_PACKED[0] = 0x20; // char: space (0x0020 LE)
|
|
290
|
-
EMPTY_PACKED[8] = FLAG_EMPTY; // flags: empty bit set
|
|
291
|
-
EMPTY_PACKED[9] = 63; // alpha: opacity=63 (1.0), fg/bg not present
|
|
292
|
-
function packedBytesEqual(a, aOff, b, bOff) {
|
|
293
|
-
for (let i = 0; i < CELL_STRIDE; i++) {
|
|
294
|
-
if (a[aOff + i] !== b[bOff + i])
|
|
295
|
-
return false;
|
|
296
|
-
}
|
|
297
|
-
return true;
|
|
298
|
-
}
|
|
299
|
-
function packedStyleBytesEqual(a, aOff, b, bOff) {
|
|
300
|
-
// Compare from OFF_FG_R through end (fg, bg, flags, alpha) — skip char
|
|
301
|
-
for (let i = OFF_FG_R; i < CELL_STRIDE; i++) {
|
|
302
|
-
if (a[aOff + i] !== b[bOff + i])
|
|
303
|
-
return false;
|
|
304
|
-
}
|
|
305
|
-
return true;
|
|
306
|
-
}
|
|
307
|
-
function packedHasVisibleStyle(buf, off) {
|
|
308
|
-
const alpha = byteAt(buf, off + 9);
|
|
309
|
-
return (alpha & (FLAG_FG_SET | FLAG_BG_SET)) !== 0
|
|
310
|
-
|| (byteAt(buf, off + 8) & ~FLAG_EMPTY) !== 0;
|
|
311
|
-
}
|
|
312
|
-
// --- Direct ANSI byte emission ─────────────────────────
|
|
313
|
-
//
|
|
314
|
-
// II-4: the differ no longer builds SGR/cursor/batch strings and
|
|
315
|
-
// concatenates them. It writes raw UTF-8 bytes directly into the
|
|
316
|
-
// pooled output buffer using the helpers below. The legacy
|
|
317
|
-
// `sgrCache` / `buildSgr` / `styleCacheKey` machinery is gone — the
|
|
318
|
-
// direct byte writers are fast enough that caching hash-indexed
|
|
319
|
-
// strings is pure overhead.
|
|
320
|
-
// Reusable UTF-8 encoder/decoder for the byte-output path. encodeInto
|
|
321
|
-
// writes UTF-8 directly into a target view without an intermediate
|
|
322
|
-
// Uint8Array; the decoder is only used on the fallback path where the
|
|
323
|
-
// IO port lacks writeBytes (tests, mock sinks).
|
|
324
|
-
const textEncoder = new TextEncoder();
|
|
325
|
-
const textDecoder = new TextDecoder('utf-8');
|
|
326
|
-
// Lazy module-level scratch buffer used when the caller does not pass
|
|
327
|
-
// an outBuf (tests, bench scenarios, simple drivers). Grown once to
|
|
328
|
-
// match the largest surface seen and reused thereafter.
|
|
329
|
-
let scratchOutBuf = null;
|
|
330
|
-
/** Upper bound on bytes the differ may emit per surface cell. */
|
|
331
|
-
const SCRATCH_BYTES_PER_CELL = 96;
|
|
332
|
-
/** Fixed slack on top of the scratch cell budget. */
|
|
333
|
-
const SCRATCH_SLACK = 8192;
|
|
334
|
-
// ANSI byte constants are emitted as inline `buf[off++] = …` writes in
|
|
335
|
-
// writeCursorBytes / writeSgrFromBufBytes. TypedArray.set has per-call
|
|
336
|
-
// setup cost that dominates for 4-byte sequences, so inline writes beat
|
|
337
|
-
// pre-allocated Uint8Array constants in the hot path.
|
|
338
|
-
/**
|
|
339
|
-
* Write an unsigned integer (0–9999) as ASCII digits. Returns new offset.
|
|
340
|
-
* Covers cursor coordinates (1-based, up to 9999 for ultra-wide
|
|
341
|
-
* terminals) and RGB components (0–255).
|
|
342
|
-
*/
|
|
343
|
-
function writeDecimal(buf, off, n) {
|
|
344
|
-
if (n >= 1000) {
|
|
345
|
-
const th = (n / 1000) | 0;
|
|
346
|
-
const rem3 = n - th * 1000;
|
|
347
|
-
const h = (rem3 / 100) | 0;
|
|
348
|
-
const rem2 = rem3 - h * 100;
|
|
349
|
-
const t = (rem2 / 10) | 0;
|
|
350
|
-
buf[off] = 0x30 + th;
|
|
351
|
-
buf[off + 1] = 0x30 + h;
|
|
352
|
-
buf[off + 2] = 0x30 + t;
|
|
353
|
-
buf[off + 3] = 0x30 + (rem2 - t * 10);
|
|
354
|
-
return off + 4;
|
|
355
|
-
}
|
|
356
|
-
if (n >= 100) {
|
|
357
|
-
const h = (n / 100) | 0;
|
|
358
|
-
const rem = n - h * 100;
|
|
359
|
-
const t = (rem / 10) | 0;
|
|
360
|
-
buf[off] = 0x30 + h;
|
|
361
|
-
buf[off + 1] = 0x30 + t;
|
|
362
|
-
buf[off + 2] = 0x30 + (rem - t * 10);
|
|
363
|
-
return off + 3;
|
|
364
|
-
}
|
|
365
|
-
if (n >= 10) {
|
|
366
|
-
const t = (n / 10) | 0;
|
|
367
|
-
buf[off] = 0x30 + t;
|
|
368
|
-
buf[off + 1] = 0x30 + (n - t * 10);
|
|
369
|
-
return off + 2;
|
|
370
|
-
}
|
|
371
|
-
buf[off] = 0x30 + n;
|
|
372
|
-
return off + 1;
|
|
373
|
-
}
|
|
374
|
-
/** Write `\x1b[Y;XH` (CUP) with 1-based coordinates. */
|
|
375
|
-
function writeCursorBytes(buf, off, x, y) {
|
|
376
|
-
buf[off] = 0x1b; // ESC
|
|
377
|
-
buf[off + 1] = 0x5b; // [
|
|
378
|
-
off += 2;
|
|
379
|
-
off = writeDecimal(buf, off, y + 1);
|
|
380
|
-
buf[off++] = 0x3b; // ;
|
|
381
|
-
off = writeDecimal(buf, off, x + 1);
|
|
382
|
-
buf[off++] = 0x48; // H
|
|
383
|
-
return off;
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Emit the full SGR prelude for the style bytes at `srcOff` into `buf`.
|
|
387
|
-
* Functionally equivalent to the legacy `buildSgr()` emission: reset,
|
|
388
|
-
* optional truecolor FG, optional truecolor BG, modifier flags (bold,
|
|
389
|
-
* dim, strike, inverse in that order), optional underline.
|
|
390
|
-
*
|
|
391
|
-
* Short (≤6 byte) byte sequences are inlined via direct index writes
|
|
392
|
-
* rather than `buf.set(CONST, off)` — the call overhead on a tiny
|
|
393
|
-
* TypedArray.set outweighs the memcpy for 4-byte bursts in V8.
|
|
394
|
-
*/
|
|
395
|
-
function writeSgrFromBufBytes(buf, off, srcBuf, srcOff) {
|
|
396
|
-
// Leading reset: \x1b[0m — 4 inline byte writes.
|
|
397
|
-
buf[off] = 0x1b;
|
|
398
|
-
buf[off + 1] = 0x5b;
|
|
399
|
-
buf[off + 2] = 0x30;
|
|
400
|
-
buf[off + 3] = 0x6d;
|
|
401
|
-
off += 4;
|
|
402
|
-
const flags = byteAt(srcBuf, srcOff + 8);
|
|
403
|
-
const alpha = byteAt(srcBuf, srcOff + 9);
|
|
404
|
-
if (alpha & FLAG_FG_SET) {
|
|
405
|
-
// \x1b[38;2;R;G;Bm — 7-byte prefix inlined as individual writes.
|
|
406
|
-
buf[off] = 0x1b;
|
|
407
|
-
buf[off + 1] = 0x5b;
|
|
408
|
-
buf[off + 2] = 0x33;
|
|
409
|
-
buf[off + 3] = 0x38;
|
|
410
|
-
buf[off + 4] = 0x3b;
|
|
411
|
-
buf[off + 5] = 0x32;
|
|
412
|
-
buf[off + 6] = 0x3b;
|
|
413
|
-
off += 7;
|
|
414
|
-
off = writeDecimal(buf, off, byteAt(srcBuf, srcOff + OFF_FG_R));
|
|
415
|
-
buf[off++] = 0x3b;
|
|
416
|
-
off = writeDecimal(buf, off, byteAt(srcBuf, srcOff + OFF_FG_R + 1));
|
|
417
|
-
buf[off++] = 0x3b;
|
|
418
|
-
off = writeDecimal(buf, off, byteAt(srcBuf, srcOff + OFF_FG_R + 2));
|
|
419
|
-
buf[off++] = 0x6d;
|
|
420
|
-
}
|
|
421
|
-
if (alpha & FLAG_BG_SET) {
|
|
422
|
-
// \x1b[48;2;R;G;Bm
|
|
423
|
-
buf[off] = 0x1b;
|
|
424
|
-
buf[off + 1] = 0x5b;
|
|
425
|
-
buf[off + 2] = 0x34;
|
|
426
|
-
buf[off + 3] = 0x38;
|
|
427
|
-
buf[off + 4] = 0x3b;
|
|
428
|
-
buf[off + 5] = 0x32;
|
|
429
|
-
buf[off + 6] = 0x3b;
|
|
430
|
-
off += 7;
|
|
431
|
-
off = writeDecimal(buf, off, byteAt(srcBuf, srcOff + OFF_BG_R));
|
|
432
|
-
buf[off++] = 0x3b;
|
|
433
|
-
off = writeDecimal(buf, off, byteAt(srcBuf, srcOff + OFF_BG_G));
|
|
434
|
-
buf[off++] = 0x3b;
|
|
435
|
-
off = writeDecimal(buf, off, byteAt(srcBuf, srcOff + OFF_BG_B));
|
|
436
|
-
buf[off++] = 0x6d;
|
|
437
|
-
}
|
|
438
|
-
// Modifier flags — 4-byte sequences inlined.
|
|
439
|
-
if (flags & FLAG_BOLD) {
|
|
440
|
-
buf[off] = 0x1b;
|
|
441
|
-
buf[off + 1] = 0x5b;
|
|
442
|
-
buf[off + 2] = 0x31;
|
|
443
|
-
buf[off + 3] = 0x6d;
|
|
444
|
-
off += 4;
|
|
445
|
-
}
|
|
446
|
-
if (flags & FLAG_DIM) {
|
|
447
|
-
buf[off] = 0x1b;
|
|
448
|
-
buf[off + 1] = 0x5b;
|
|
449
|
-
buf[off + 2] = 0x32;
|
|
450
|
-
buf[off + 3] = 0x6d;
|
|
451
|
-
off += 4;
|
|
452
|
-
}
|
|
453
|
-
if (flags & FLAG_STRIKETHROUGH) {
|
|
454
|
-
buf[off] = 0x1b;
|
|
455
|
-
buf[off + 1] = 0x5b;
|
|
456
|
-
buf[off + 2] = 0x39;
|
|
457
|
-
buf[off + 3] = 0x6d;
|
|
458
|
-
off += 4;
|
|
459
|
-
}
|
|
460
|
-
if (flags & FLAG_INVERSE) {
|
|
461
|
-
buf[off] = 0x1b;
|
|
462
|
-
buf[off + 1] = 0x5b;
|
|
463
|
-
buf[off + 2] = 0x37;
|
|
464
|
-
buf[off + 3] = 0x6d;
|
|
465
|
-
off += 4;
|
|
466
|
-
}
|
|
467
|
-
const uStyle = (flags >> 4) & 0x03;
|
|
468
|
-
if (uStyle === 1) {
|
|
469
|
-
// \x1b[4m
|
|
470
|
-
buf[off] = 0x1b;
|
|
471
|
-
buf[off + 1] = 0x5b;
|
|
472
|
-
buf[off + 2] = 0x34;
|
|
473
|
-
buf[off + 3] = 0x6d;
|
|
474
|
-
off += 4;
|
|
475
|
-
}
|
|
476
|
-
else if (uStyle === 2) {
|
|
477
|
-
// \x1b[4:3m
|
|
478
|
-
buf[off] = 0x1b;
|
|
479
|
-
buf[off + 1] = 0x5b;
|
|
480
|
-
buf[off + 2] = 0x34;
|
|
481
|
-
buf[off + 3] = 0x3a;
|
|
482
|
-
buf[off + 4] = 0x33;
|
|
483
|
-
buf[off + 5] = 0x6d;
|
|
484
|
-
off += 6;
|
|
485
|
-
}
|
|
486
|
-
else if (uStyle === 3) {
|
|
487
|
-
// \x1b[4:4m (dotted) or \x1b[4:5m (dashed)
|
|
488
|
-
buf[off] = 0x1b;
|
|
489
|
-
buf[off + 1] = 0x5b;
|
|
490
|
-
buf[off + 2] = 0x34;
|
|
491
|
-
buf[off + 3] = 0x3a;
|
|
492
|
-
buf[off + 4] = (flags & FLAG_DASHED) ? 0x35 : 0x34;
|
|
493
|
-
buf[off + 5] = 0x6d;
|
|
494
|
-
off += 6;
|
|
495
|
-
}
|
|
496
|
-
return off;
|
|
497
|
-
}
|
|
498
|
-
/**
|
|
499
|
-
* Write one packed cell's character into the output buffer as UTF-8.
|
|
500
|
-
* ASCII and BMP code points are encoded inline; only side-table graphemes
|
|
501
|
-
* (multi-codepoint clusters) require a `TextEncoder.encodeInto` call.
|
|
502
|
-
*/
|
|
503
|
-
function writeCharBytes(buf, off, srcBuf, srcOff, sideTable) {
|
|
504
|
-
const code = byteAt(srcBuf, srcOff) | (byteAt(srcBuf, srcOff + 1) << 8);
|
|
505
|
-
if (code < 0x80) {
|
|
506
|
-
// ASCII fast path
|
|
507
|
-
buf[off] = code;
|
|
508
|
-
return off + 1;
|
|
509
|
-
}
|
|
510
|
-
if (code < SIDE_TABLE_THRESHOLD) {
|
|
511
|
-
// BMP code point: 0x0080..0x07ff → 2 bytes, 0x0800..0xffff → 3 bytes.
|
|
512
|
-
if (code < 0x800) {
|
|
513
|
-
buf[off] = 0xc0 | (code >> 6);
|
|
514
|
-
buf[off + 1] = 0x80 | (code & 0x3f);
|
|
515
|
-
return off + 2;
|
|
516
|
-
}
|
|
517
|
-
buf[off] = 0xe0 | (code >> 12);
|
|
518
|
-
buf[off + 1] = 0x80 | ((code >> 6) & 0x3f);
|
|
519
|
-
buf[off + 2] = 0x80 | (code & 0x3f);
|
|
520
|
-
return off + 3;
|
|
521
|
-
}
|
|
522
|
-
// Side-table index — multi-codepoint grapheme cluster.
|
|
523
|
-
const grapheme = sideTable[code - SIDE_TABLE_THRESHOLD] ?? '';
|
|
524
|
-
const { written } = textEncoder.encodeInto(grapheme, buf.subarray(off));
|
|
525
|
-
return off + written;
|
|
526
|
-
}
|
|
527
|
-
/**
|
|
528
|
-
* Semantic packed-cell equality across two buffers with independent side tables.
|
|
529
|
-
* Raw bytes are compared first; if they match and the char is a side-table
|
|
530
|
-
* index, the actual grapheme strings are verified.
|
|
531
|
-
*/
|
|
532
|
-
function packedCellsSemanticallyEqual(aBuf, aOff, aSide, bBuf, bOff, bSide) {
|
|
533
|
-
if (!packedBytesEqual(aBuf, aOff, bBuf, bOff))
|
|
534
|
-
return false;
|
|
535
|
-
const aChar = byteAt(aBuf, aOff) | (byteAt(aBuf, aOff + 1) << 8);
|
|
536
|
-
if (aChar < SIDE_TABLE_THRESHOLD)
|
|
537
|
-
return true;
|
|
538
|
-
const bChar = byteAt(bBuf, bOff) | (byteAt(bBuf, bOff + 1) << 8);
|
|
539
|
-
return aChar === bChar && decodeChar(aChar, aSide) === decodeChar(bChar, bSide);
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* Fixed byte budget for the cursor move + full SGR prelude + trailing
|
|
543
|
-
* reset that bookend a batch. The variable per-batch cost comes from
|
|
544
|
-
* the char writes, which are bounded by `width * MAX_CHAR_BYTES`.
|
|
545
|
-
* The full batch budget is computed inside `renderDiffPacked` as
|
|
546
|
-
* `BATCH_FIXED_BUDGET + width * MAX_CHAR_BYTES` so it scales with
|
|
547
|
-
* terminal width and never overflows on ultra-wide monitors.
|
|
548
|
-
*/
|
|
549
|
-
const BATCH_FIXED_BUDGET = 128;
|
|
550
|
-
/** Worst-case UTF-8 bytes per cell character (side-table emoji cluster). */
|
|
551
|
-
const MAX_CHAR_BYTES = 32;
|
|
552
|
-
function renderDiffPacked(current, target, io, _style, outBuf) {
|
|
553
|
-
const width = target.width;
|
|
554
|
-
const height = target.height;
|
|
555
|
-
const tBuf = target.buffer;
|
|
556
|
-
const cBuf = current.buffer;
|
|
557
|
-
const cWidth = current.width;
|
|
558
|
-
const cHeight = current.height;
|
|
559
|
-
const tSide = target.sideTable;
|
|
560
|
-
const cSide = current.sideTable;
|
|
561
|
-
// Render-dirty bitmap fast path. Cells that weren't mutated since
|
|
562
|
-
// the last clear() in EITHER surface are guaranteed unchanged on
|
|
563
|
-
// the buffer level, so we can skip them entirely. We walk the union
|
|
564
|
-
// of the two bitmaps because:
|
|
565
|
-
// - Bits in target.renderDirtyWords = cells the user painted this frame
|
|
566
|
-
// - Bits in current.renderDirtyWords = cells the user painted last frame
|
|
567
|
-
// (which may now need to be erased if not painted this frame)
|
|
568
|
-
// The union covers both "new content" and "needs erasure" cases.
|
|
569
|
-
const tDirty = target.renderDirtyWords;
|
|
570
|
-
const cDirty = current.renderDirtyWords;
|
|
571
|
-
const cellCount = width * height;
|
|
572
|
-
const wordCount = (cellCount + 31) >>> 5;
|
|
573
|
-
// Early out: if no cells in EITHER surface are dirty, there is
|
|
574
|
-
// nothing to emit. This is the diff-static / unchanged-frame case
|
|
575
|
-
// and should be near-zero cost.
|
|
576
|
-
let anyDirty = false;
|
|
577
|
-
// Both bitmaps may have different lengths if width/height differ,
|
|
578
|
-
// but in practice they're the same. Walk min(both).
|
|
579
|
-
const tWords = Math.min(wordCount, tDirty.length);
|
|
580
|
-
const cWords = Math.min(wordCount, cDirty.length);
|
|
581
|
-
const minWords = Math.min(tWords, cWords);
|
|
582
|
-
for (let w = 0; w < minWords; w++) {
|
|
583
|
-
if ((wordAt(tDirty, w) | wordAt(cDirty, w)) !== 0) {
|
|
584
|
-
anyDirty = true;
|
|
585
|
-
break;
|
|
586
|
-
}
|
|
587
|
-
}
|
|
588
|
-
if (!anyDirty) {
|
|
589
|
-
// Check tail words from whichever bitmap is longer
|
|
590
|
-
for (let w = minWords; w < tWords && !anyDirty; w++) {
|
|
591
|
-
if (wordAt(tDirty, w) !== 0)
|
|
592
|
-
anyDirty = true;
|
|
593
|
-
}
|
|
594
|
-
for (let w = minWords; w < cWords && !anyDirty; w++) {
|
|
595
|
-
if (wordAt(cDirty, w) !== 0)
|
|
596
|
-
anyDirty = true;
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
if (!anyDirty) {
|
|
600
|
-
return;
|
|
601
|
-
}
|
|
602
|
-
// Acquire the pooled output buffer. The runtime supplies one sized
|
|
603
|
-
// against the current viewport; all other callers land on the
|
|
604
|
-
// module-level scratch buffer (sized against the live surface and
|
|
605
|
-
// reused across calls).
|
|
606
|
-
let buf;
|
|
607
|
-
if (outBuf !== undefined) {
|
|
608
|
-
buf = outBuf;
|
|
609
|
-
}
|
|
610
|
-
else {
|
|
611
|
-
const needed = cellCount * SCRATCH_BYTES_PER_CELL + SCRATCH_SLACK;
|
|
612
|
-
if (scratchOutBuf === null || scratchOutBuf.length < needed) {
|
|
613
|
-
scratchOutBuf = new Uint8Array(needed);
|
|
614
|
-
}
|
|
615
|
-
buf = scratchOutBuf;
|
|
616
|
-
}
|
|
617
|
-
let off = 0;
|
|
618
|
-
// Flush the pending bytes to the IO port and reset the cursor to
|
|
619
|
-
// the start of the pool. Direct `writeBytes` handoff on the Node
|
|
620
|
-
// stdout path; TextDecoder fallback for mock sinks that only carry
|
|
621
|
-
// a string-level `write`.
|
|
622
|
-
const flush = () => {
|
|
623
|
-
if (off === 0)
|
|
624
|
-
return;
|
|
625
|
-
if (io.writeBytes !== undefined) {
|
|
626
|
-
io.writeBytes(buf, off);
|
|
627
|
-
}
|
|
628
|
-
else {
|
|
629
|
-
io.write(textDecoder.decode(buf.subarray(0, off)));
|
|
630
|
-
}
|
|
631
|
-
off = 0;
|
|
632
|
-
};
|
|
633
|
-
let cursorX = -1;
|
|
634
|
-
let cursorY = -1;
|
|
635
|
-
// Fast path: skip expensive side-table string verification when neither
|
|
636
|
-
// surface has any side-table entries (the common case — no emoji/astral).
|
|
637
|
-
const needsSideTableCheck = tSide.length > 0 || cSide.length > 0;
|
|
638
|
-
// Per-batch byte budget computed from the current surface width so
|
|
639
|
-
// the inner char-write loop never needs a per-cell capacity check,
|
|
640
|
-
// even on ultra-wide terminals.
|
|
641
|
-
const batchBudget = BATCH_FIXED_BUDGET + width * MAX_CHAR_BYTES;
|
|
642
|
-
for (let y = 0; y < height; y++) {
|
|
643
|
-
let x = 0;
|
|
644
|
-
while (x < width) {
|
|
645
|
-
const tIdx = y * width + x;
|
|
646
|
-
// Per-cell dirty skip: if neither surface marked this cell as
|
|
647
|
-
// touched, the bytes are guaranteed identical and there is
|
|
648
|
-
// nothing to emit. Skip it without doing the byte compare.
|
|
649
|
-
const wordIdx = tIdx >>> 5;
|
|
650
|
-
const bitMask = 1 << (tIdx & 31);
|
|
651
|
-
const cellDirty = ((wordIdx < tDirty.length ? wordAt(tDirty, wordIdx) : 0) & bitMask) !== 0
|
|
652
|
-
|| ((wordIdx < cDirty.length ? wordAt(cDirty, wordIdx) : 0) & bitMask) !== 0;
|
|
653
|
-
if (!cellDirty) {
|
|
654
|
-
x++;
|
|
655
|
-
continue;
|
|
656
|
-
}
|
|
657
|
-
const tOff = tIdx * CELL_STRIDE;
|
|
658
|
-
const inBounds = y < cHeight && x < cWidth;
|
|
659
|
-
const cOff = inBounds ? (y * cWidth + x) * CELL_STRIDE : -1;
|
|
660
|
-
const same = inBounds
|
|
661
|
-
? (needsSideTableCheck
|
|
662
|
-
? packedCellsSemanticallyEqual(tBuf, tOff, tSide, cBuf, cOff, cSide)
|
|
663
|
-
: packedBytesEqual(tBuf, tOff, cBuf, cOff))
|
|
664
|
-
: packedBytesEqual(tBuf, tOff, EMPTY_PACKED, 0);
|
|
665
|
-
if (same) {
|
|
666
|
-
x++;
|
|
667
|
-
continue;
|
|
668
|
-
}
|
|
669
|
-
// Flush if the batch preamble (cursor + SGR) cannot fit contiguously.
|
|
670
|
-
if (off + batchBudget > buf.length) {
|
|
671
|
-
flush();
|
|
672
|
-
}
|
|
673
|
-
if (x !== cursorX || y !== cursorY) {
|
|
674
|
-
off = writeCursorBytes(buf, off, x, y);
|
|
675
|
-
}
|
|
676
|
-
const hasStyle = packedHasVisibleStyle(tBuf, tOff);
|
|
677
|
-
if (hasStyle) {
|
|
678
|
-
off = writeSgrFromBufBytes(buf, off, tBuf, tOff);
|
|
679
|
-
}
|
|
680
|
-
// Write the first cell of the batch unconditionally: the outer
|
|
681
|
-
// "same?" check above already told us it differs from current,
|
|
682
|
-
// and the batch-leader style check is trivially true at the
|
|
683
|
-
// leader position. This removes a redundant 10-byte compare and
|
|
684
|
-
// a branch from the hot path — in diff-gradient, every batch is
|
|
685
|
-
// one cell, so that's one compare saved per cell per frame.
|
|
686
|
-
off = writeCharBytes(buf, off, tBuf, tOff, tSide);
|
|
687
|
-
let batchX = x + 1;
|
|
688
|
-
// NOTE: The batch continuation loop does not consult the render-
|
|
689
|
-
// dirty bitmap per cell. This is intentional — the cellsMatch
|
|
690
|
-
// byte-compare below catches unchanged cells and breaks the
|
|
691
|
-
// batch. Checking the bitmap here would add a branch to every
|
|
692
|
-
// iteration of the hot inner loop for negligible benefit, since
|
|
693
|
-
// batches are short in practice (style changes break them).
|
|
694
|
-
while (batchX < width) {
|
|
695
|
-
const bIdx = y * width + batchX;
|
|
696
|
-
const bOff = bIdx * CELL_STRIDE;
|
|
697
|
-
// Style check vs batch leader (always — batchX > x here).
|
|
698
|
-
if (!packedStyleBytesEqual(tBuf, tOff, tBuf, bOff)) {
|
|
699
|
-
break;
|
|
700
|
-
}
|
|
701
|
-
// Cell-match break check: stop the batch when we hit a cell
|
|
702
|
-
// that already matches current and has nothing to emit.
|
|
703
|
-
const bInBounds = y < cHeight && batchX < cWidth;
|
|
704
|
-
const bcOff = bInBounds ? (y * cWidth + batchX) * CELL_STRIDE : -1;
|
|
705
|
-
const cellsMatch = bInBounds
|
|
706
|
-
? (needsSideTableCheck
|
|
707
|
-
? packedCellsSemanticallyEqual(tBuf, bOff, tSide, cBuf, bcOff, cSide)
|
|
708
|
-
: packedBytesEqual(tBuf, bOff, cBuf, bcOff))
|
|
709
|
-
: packedBytesEqual(tBuf, bOff, EMPTY_PACKED, 0);
|
|
710
|
-
if (cellsMatch)
|
|
711
|
-
break;
|
|
712
|
-
off = writeCharBytes(buf, off, tBuf, bOff, tSide);
|
|
713
|
-
batchX++;
|
|
714
|
-
}
|
|
715
|
-
// Trailing reset after styled batch — matches legacy emission.
|
|
716
|
-
// 4-byte inline write, same as the leading reset inside writeSgrFromBufBytes.
|
|
717
|
-
if (hasStyle) {
|
|
718
|
-
buf[off] = 0x1b;
|
|
719
|
-
buf[off + 1] = 0x5b;
|
|
720
|
-
buf[off + 2] = 0x30;
|
|
721
|
-
buf[off + 3] = 0x6d;
|
|
722
|
-
off += 4;
|
|
723
|
-
}
|
|
724
|
-
cursorX = batchX;
|
|
725
|
-
cursorY = y;
|
|
726
|
-
x = batchX;
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
flush();
|
|
730
|
-
}
|
|
731
|
-
// ── Legacy cell-based differ (fallback) ─────────────────
|
|
732
|
-
function renderDiffCells(current, target, io, style) {
|
|
733
|
-
const width = target.width;
|
|
734
|
-
const height = target.height;
|
|
735
|
-
const targetCells = target.cells;
|
|
736
|
-
const currentCells = current.cells;
|
|
737
|
-
const currentWidth = current.width;
|
|
738
|
-
const currentHeight = current.height;
|
|
739
|
-
let output = '';
|
|
740
|
-
let cursorX = -1;
|
|
741
|
-
let cursorY = -1;
|
|
742
|
-
for (let y = 0; y < height; y++) {
|
|
743
|
-
const targetRowOffset = y * width;
|
|
744
|
-
const currentRowOffset = y * currentWidth;
|
|
745
|
-
let x = 0;
|
|
746
|
-
while (x < width) {
|
|
747
|
-
const targetCell = cellAtOrEmpty(targetCells, targetRowOffset + x);
|
|
748
|
-
const currentCell = y < currentHeight && x < currentWidth
|
|
749
|
-
? cellAtOrEmpty(currentCells, currentRowOffset + x)
|
|
750
|
-
: EMPTY_CELL;
|
|
751
|
-
const targetMods = targetCell.modifiers ?? EMPTY_MODIFIERS;
|
|
752
|
-
const currentMods = currentCell.modifiers ?? EMPTY_MODIFIERS;
|
|
753
|
-
let sameCell = targetCell === currentCell
|
|
754
|
-
|| (targetCell.char === currentCell.char
|
|
755
|
-
&& targetCell.fg === currentCell.fg
|
|
756
|
-
&& targetCell.bg === currentCell.bg
|
|
757
|
-
&& targetCell.empty === currentCell.empty
|
|
758
|
-
&& targetMods.length === currentMods.length);
|
|
759
|
-
if (sameCell && targetCell !== currentCell && targetMods !== currentMods) {
|
|
760
|
-
for (let i = 0; i < targetMods.length; i++) {
|
|
761
|
-
if (targetMods[i] !== currentMods[i]) {
|
|
762
|
-
sameCell = false;
|
|
763
|
-
break;
|
|
764
|
-
}
|
|
765
|
-
}
|
|
766
|
-
}
|
|
767
|
-
if (sameCell) {
|
|
768
|
-
x++;
|
|
769
|
-
continue;
|
|
770
|
-
}
|
|
771
|
-
if (x !== cursorX || y !== cursorY) {
|
|
772
|
-
output += moveCursor(x, y);
|
|
773
|
-
}
|
|
774
|
-
let batchX = x;
|
|
775
|
-
let batchText = '';
|
|
776
|
-
const batchStyleMods = targetMods;
|
|
777
|
-
while (batchX < width) {
|
|
778
|
-
const c = cellAtOrEmpty(targetCells, targetRowOffset + batchX);
|
|
779
|
-
const curr = y < currentHeight && batchX < currentWidth
|
|
780
|
-
? cellAtOrEmpty(currentCells, currentRowOffset + batchX)
|
|
781
|
-
: EMPTY_CELL;
|
|
782
|
-
if (batchX > x) {
|
|
783
|
-
const cellMods = c.modifiers ?? EMPTY_MODIFIERS;
|
|
784
|
-
let sameStyle = c === targetCell
|
|
785
|
-
|| (c.fg === targetCell.fg
|
|
786
|
-
&& c.bg === targetCell.bg
|
|
787
|
-
&& cellMods.length === batchStyleMods.length);
|
|
788
|
-
if (sameStyle && c !== targetCell && cellMods !== batchStyleMods) {
|
|
789
|
-
for (let i = 0; i < cellMods.length; i++) {
|
|
790
|
-
if (cellMods[i] !== batchStyleMods[i]) {
|
|
791
|
-
sameStyle = false;
|
|
792
|
-
break;
|
|
793
|
-
}
|
|
794
|
-
}
|
|
795
|
-
}
|
|
796
|
-
if (!sameStyle)
|
|
797
|
-
break;
|
|
798
|
-
}
|
|
799
|
-
const cellMods = c.modifiers ?? EMPTY_MODIFIERS;
|
|
800
|
-
const currMods = curr.modifiers ?? EMPTY_MODIFIERS;
|
|
801
|
-
let cellsMatch = c === curr
|
|
802
|
-
|| (c.char === curr.char
|
|
803
|
-
&& c.fg === curr.fg
|
|
804
|
-
&& c.bg === curr.bg
|
|
805
|
-
&& c.empty === curr.empty
|
|
806
|
-
&& cellMods.length === currMods.length);
|
|
807
|
-
if (cellsMatch && c !== curr && cellMods !== currMods) {
|
|
808
|
-
for (let i = 0; i < cellMods.length; i++) {
|
|
809
|
-
if (cellMods[i] !== currMods[i]) {
|
|
810
|
-
cellsMatch = false;
|
|
811
|
-
break;
|
|
812
|
-
}
|
|
813
|
-
}
|
|
814
|
-
}
|
|
815
|
-
if (cellsMatch)
|
|
816
|
-
break;
|
|
817
|
-
batchText += c.char;
|
|
818
|
-
batchX++;
|
|
819
|
-
}
|
|
820
|
-
if (hasVisibleStyle(targetCell)) {
|
|
821
|
-
output += style.styled(cellToken(targetCell), batchText);
|
|
822
|
-
}
|
|
823
|
-
else {
|
|
824
|
-
output += batchText;
|
|
825
|
-
}
|
|
826
|
-
const batchWidth = batchX - x;
|
|
827
|
-
cursorX = x + batchWidth;
|
|
828
|
-
cursorY = y;
|
|
829
|
-
x = batchX;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
832
|
-
if (output.length > 0) {
|
|
833
|
-
io.write(output);
|
|
834
|
-
}
|
|
835
|
-
}
|
|
836
21
|
//# sourceMappingURL=differ.js.map
|