@opentui/core 0.3.0 → 0.3.2
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/ansi.d.ts +4 -0
- package/{index-081xws23.js → index-218h9p3f.js} +198 -3
- package/{index-081xws23.js.map → index-218h9p3f.js.map} +7 -7
- package/{index-sq86yyfz.js → index-3mx8q5t1.js} +237 -106
- package/index-3mx8q5t1.js.map +35 -0
- package/{index-qwem5zxy.js → index-m0bc6bw1.js} +3 -3
- package/{index-dhbwkghw.js → index-vdnak5x1.js} +2 -2
- package/index.js +5 -3
- package/index.js.map +1 -1
- package/package.json +9 -7
- package/renderables/Code.d.ts +12 -1
- package/renderables/Diff.d.ts +5 -0
- package/renderables/Markdown.d.ts +11 -1
- package/renderables/ScrollBox.d.ts +1 -0
- package/renderer.d.ts +4 -0
- package/runtime-plugin-support-configure.js +4 -4
- package/runtime-plugin-support.js +4 -4
- package/runtime-plugin.js +3 -3
- package/testing.js +1 -1
- package/index-sq86yyfz.js.map +0 -35
- /package/{index-qwem5zxy.js.map → index-m0bc6bw1.js.map} +0 -0
- /package/{index-dhbwkghw.js.map → index-vdnak5x1.js.map} +0 -0
|
@@ -182,7 +182,7 @@ import {
|
|
|
182
182
|
white,
|
|
183
183
|
wrapWithDelegates,
|
|
184
184
|
yellow
|
|
185
|
-
} from "./index-
|
|
185
|
+
} from "./index-218h9p3f.js";
|
|
186
186
|
|
|
187
187
|
// src/index.ts
|
|
188
188
|
var exports_src2 = {};
|
|
@@ -278,6 +278,7 @@ __export(exports_src2, {
|
|
|
278
278
|
createTextAttributes: () => createTextAttributes,
|
|
279
279
|
createTerminalPalette: () => createTerminalPalette,
|
|
280
280
|
createSlotRegistry: () => createSlotRegistry,
|
|
281
|
+
createMarkdownCodeBlockRenderer: () => createMarkdownCodeBlockRenderer,
|
|
281
282
|
createExtmarksController: () => createExtmarksController,
|
|
282
283
|
createCoreSlotRegistry: () => createCoreSlotRegistry,
|
|
283
284
|
createCliRenderer: () => createCliRenderer,
|
|
@@ -4248,6 +4249,8 @@ class DiffRenderable extends Renderable {
|
|
|
4248
4249
|
_view;
|
|
4249
4250
|
_parsedDiff = null;
|
|
4250
4251
|
_parseError = null;
|
|
4252
|
+
_hunkStartLines = [];
|
|
4253
|
+
_hunkRowOffsets = null;
|
|
4251
4254
|
_fg;
|
|
4252
4255
|
_filetype;
|
|
4253
4256
|
_syntaxStyle;
|
|
@@ -4336,6 +4339,8 @@ class DiffRenderable extends Renderable {
|
|
|
4336
4339
|
}
|
|
4337
4340
|
}
|
|
4338
4341
|
buildView() {
|
|
4342
|
+
this._hunkStartLines = [];
|
|
4343
|
+
this.invalidateHunkRowOffsets();
|
|
4339
4344
|
if (this._parseError) {
|
|
4340
4345
|
this.buildErrorView();
|
|
4341
4346
|
return;
|
|
@@ -4396,6 +4401,9 @@ class DiffRenderable extends Renderable {
|
|
|
4396
4401
|
}
|
|
4397
4402
|
});
|
|
4398
4403
|
}
|
|
4404
|
+
invalidateHunkRowOffsets() {
|
|
4405
|
+
this._hunkRowOffsets = null;
|
|
4406
|
+
}
|
|
4399
4407
|
rebuildView() {
|
|
4400
4408
|
if (this._view === "split") {
|
|
4401
4409
|
this.requestRebuild();
|
|
@@ -4404,6 +4412,7 @@ class DiffRenderable extends Renderable {
|
|
|
4404
4412
|
}
|
|
4405
4413
|
}
|
|
4406
4414
|
handleLineInfoChange = () => {
|
|
4415
|
+
this.invalidateHunkRowOffsets();
|
|
4407
4416
|
if (!this._waitingForHighlight)
|
|
4408
4417
|
return;
|
|
4409
4418
|
if (!this.leftCodeRenderable || !this.rightCodeRenderable)
|
|
@@ -4416,13 +4425,17 @@ class DiffRenderable extends Renderable {
|
|
|
4416
4425
|
}
|
|
4417
4426
|
};
|
|
4418
4427
|
attachLineInfoListeners() {
|
|
4419
|
-
if (this.
|
|
4420
|
-
return;
|
|
4421
|
-
if (!this.leftCodeRenderable || !this.rightCodeRenderable)
|
|
4428
|
+
if (!this.leftCodeRenderable && !this.rightCodeRenderable)
|
|
4422
4429
|
return;
|
|
4423
|
-
this._lineInfoChangeHandler
|
|
4424
|
-
this.leftCodeRenderable
|
|
4425
|
-
|
|
4430
|
+
this._lineInfoChangeHandler ??= this.handleLineInfoChange;
|
|
4431
|
+
if (this.leftCodeRenderable) {
|
|
4432
|
+
this.leftCodeRenderable.off("line-info-change", this._lineInfoChangeHandler);
|
|
4433
|
+
this.leftCodeRenderable.on("line-info-change", this._lineInfoChangeHandler);
|
|
4434
|
+
}
|
|
4435
|
+
if (this.rightCodeRenderable) {
|
|
4436
|
+
this.rightCodeRenderable.off("line-info-change", this._lineInfoChangeHandler);
|
|
4437
|
+
this.rightCodeRenderable.on("line-info-change", this._lineInfoChangeHandler);
|
|
4438
|
+
}
|
|
4426
4439
|
}
|
|
4427
4440
|
detachLineInfoListeners() {
|
|
4428
4441
|
if (!this._lineInfoChangeHandler)
|
|
@@ -4612,6 +4625,7 @@ class DiffRenderable extends Renderable {
|
|
|
4612
4625
|
const lineNumbers = new Map;
|
|
4613
4626
|
let lineIndex = 0;
|
|
4614
4627
|
for (const hunk of this._parsedDiff.hunks) {
|
|
4628
|
+
this._hunkStartLines.push(lineIndex);
|
|
4615
4629
|
let oldLineNum = hunk.oldStart;
|
|
4616
4630
|
let newLineNum = hunk.newStart;
|
|
4617
4631
|
for (const line of hunk.lines) {
|
|
@@ -4674,6 +4688,7 @@ class DiffRenderable extends Renderable {
|
|
|
4674
4688
|
const content = contentLines.join(`
|
|
4675
4689
|
`);
|
|
4676
4690
|
const codeRenderable = this.createOrUpdateCodeRenderable("left", content, this._wrapMode);
|
|
4691
|
+
this.attachLineInfoListeners();
|
|
4677
4692
|
this.createOrUpdateSide("left", codeRenderable, lineColors, lineSigns, lineNumbers, new Set, "100%");
|
|
4678
4693
|
if (this.rightSide && this.rightSideAdded) {
|
|
4679
4694
|
super.remove(this.rightSide.id);
|
|
@@ -4698,7 +4713,9 @@ class DiffRenderable extends Renderable {
|
|
|
4698
4713
|
}
|
|
4699
4714
|
const leftLogicalLines = [];
|
|
4700
4715
|
const rightLogicalLines = [];
|
|
4716
|
+
const hunkFirstLeftLine = [];
|
|
4701
4717
|
for (const hunk of this._parsedDiff.hunks) {
|
|
4718
|
+
hunkFirstLeftLine.push(leftLogicalLines.length);
|
|
4702
4719
|
let oldLineNum = hunk.oldStart;
|
|
4703
4720
|
let newLineNum = hunk.newStart;
|
|
4704
4721
|
let i = 0;
|
|
@@ -4785,6 +4802,11 @@ class DiffRenderable extends Renderable {
|
|
|
4785
4802
|
}
|
|
4786
4803
|
}
|
|
4787
4804
|
}
|
|
4805
|
+
for (const startIndex of hunkFirstLeftLine) {
|
|
4806
|
+
const firstLine = leftLogicalLines[startIndex];
|
|
4807
|
+
if (firstLine)
|
|
4808
|
+
firstLine.hunkStart = true;
|
|
4809
|
+
}
|
|
4788
4810
|
const canDoWrapAlignment = this.width > 0 && (this._wrapMode === "word" || this._wrapMode === "char");
|
|
4789
4811
|
const preLeftContent = leftLogicalLines.map((l) => l.content).join(`
|
|
4790
4812
|
`);
|
|
@@ -4794,6 +4816,7 @@ class DiffRenderable extends Renderable {
|
|
|
4794
4816
|
const drawUnstyledText = !needsConsistentConcealing;
|
|
4795
4817
|
const leftCodeRenderable = this.createOrUpdateCodeRenderable("left", preLeftContent, this._wrapMode, drawUnstyledText);
|
|
4796
4818
|
const rightCodeRenderable = this.createOrUpdateCodeRenderable("right", preRightContent, this._wrapMode, drawUnstyledText);
|
|
4819
|
+
this.attachLineInfoListeners();
|
|
4797
4820
|
let finalLeftLines;
|
|
4798
4821
|
let finalRightLines;
|
|
4799
4822
|
const leftIsHighlighting = leftCodeRenderable.isHighlighting;
|
|
@@ -4824,8 +4847,8 @@ class DiffRenderable extends Renderable {
|
|
|
4824
4847
|
for (let i = 0;i < leftLogicalLines.length; i++) {
|
|
4825
4848
|
const leftLine = leftLogicalLines[i];
|
|
4826
4849
|
const rightLine = rightLogicalLines[i];
|
|
4827
|
-
const leftVisualCount = leftVisualCounts.get(i)
|
|
4828
|
-
const rightVisualCount = rightVisualCounts.get(i)
|
|
4850
|
+
const leftVisualCount = leftVisualCounts.get(i) ?? 0;
|
|
4851
|
+
const rightVisualCount = rightVisualCounts.get(i) ?? 0;
|
|
4829
4852
|
if (leftVisualPos < rightVisualPos) {
|
|
4830
4853
|
const pad = rightVisualPos - leftVisualPos;
|
|
4831
4854
|
for (let p = 0;p < pad; p++) {
|
|
@@ -4868,6 +4891,9 @@ class DiffRenderable extends Renderable {
|
|
|
4868
4891
|
const leftLineNumbers = new Map;
|
|
4869
4892
|
const rightLineNumbers = new Map;
|
|
4870
4893
|
finalLeftLines.forEach((line, index) => {
|
|
4894
|
+
if (line.hunkStart) {
|
|
4895
|
+
this._hunkStartLines.push(index);
|
|
4896
|
+
}
|
|
4871
4897
|
if (line.lineNum !== undefined) {
|
|
4872
4898
|
leftLineNumbers.set(index, line.lineNum);
|
|
4873
4899
|
}
|
|
@@ -4957,9 +4983,6 @@ class DiffRenderable extends Renderable {
|
|
|
4957
4983
|
set syncScroll(value) {
|
|
4958
4984
|
if (this._syncScroll !== value) {
|
|
4959
4985
|
this._syncScroll = value;
|
|
4960
|
-
if (!value) {
|
|
4961
|
-
this.detachLineInfoListeners();
|
|
4962
|
-
}
|
|
4963
4986
|
}
|
|
4964
4987
|
}
|
|
4965
4988
|
get view() {
|
|
@@ -4996,6 +5019,7 @@ class DiffRenderable extends Renderable {
|
|
|
4996
5019
|
set wrapMode(value) {
|
|
4997
5020
|
if (this._wrapMode !== value) {
|
|
4998
5021
|
this._wrapMode = value;
|
|
5022
|
+
this.invalidateHunkRowOffsets();
|
|
4999
5023
|
if (this._view === "unified" && this.leftCodeRenderable) {
|
|
5000
5024
|
this.leftCodeRenderable.wrapMode = value ?? "none";
|
|
5001
5025
|
} else if (this._view === "split") {
|
|
@@ -5215,6 +5239,28 @@ class DiffRenderable extends Renderable {
|
|
|
5215
5239
|
this.leftSide?.clearHighlightLines(startLine, endLine);
|
|
5216
5240
|
this.rightSide?.clearHighlightLines(startLine, endLine);
|
|
5217
5241
|
}
|
|
5242
|
+
getHunkRowOffsets() {
|
|
5243
|
+
if (this._hunkRowOffsets)
|
|
5244
|
+
return [...this._hunkRowOffsets];
|
|
5245
|
+
this._hunkRowOffsets = this.computeHunkRowOffsets();
|
|
5246
|
+
return [...this._hunkRowOffsets];
|
|
5247
|
+
}
|
|
5248
|
+
computeHunkRowOffsets() {
|
|
5249
|
+
if (this._hunkStartLines.length === 0)
|
|
5250
|
+
return [];
|
|
5251
|
+
const sources = this.leftCodeRenderable?.lineInfo.lineSources;
|
|
5252
|
+
if (!sources || sources.length === 0)
|
|
5253
|
+
return [...this._hunkStartLines];
|
|
5254
|
+
const offsets = [];
|
|
5255
|
+
let visualRow = 0;
|
|
5256
|
+
for (const hunkStartLine of this._hunkStartLines) {
|
|
5257
|
+
while (visualRow < sources.length && sources[visualRow] < hunkStartLine) {
|
|
5258
|
+
visualRow++;
|
|
5259
|
+
}
|
|
5260
|
+
offsets.push(visualRow < sources.length ? visualRow : hunkStartLine);
|
|
5261
|
+
}
|
|
5262
|
+
return offsets;
|
|
5263
|
+
}
|
|
5218
5264
|
}
|
|
5219
5265
|
// src/renderables/Textarea.ts
|
|
5220
5266
|
var defaultTextareaKeyBindings = [
|
|
@@ -8101,6 +8147,35 @@ function parseMarkdownIncremental(newContent, prevState, trailingUnstable = 2) {
|
|
|
8101
8147
|
}
|
|
8102
8148
|
|
|
8103
8149
|
// src/renderables/Markdown.ts
|
|
8150
|
+
function normalizeMarkdownCodeBlockRenderers(renderers) {
|
|
8151
|
+
const rendererMap = new Map;
|
|
8152
|
+
const maybeMap = renderers;
|
|
8153
|
+
if (typeof maybeMap.forEach === "function") {
|
|
8154
|
+
maybeMap.forEach((renderer, language) => {
|
|
8155
|
+
rendererMap.set(language, renderer);
|
|
8156
|
+
});
|
|
8157
|
+
return rendererMap;
|
|
8158
|
+
}
|
|
8159
|
+
const rendererRecord = renderers;
|
|
8160
|
+
for (const [language, renderer] of Object.entries(rendererRecord)) {
|
|
8161
|
+
rendererMap.set(language, renderer);
|
|
8162
|
+
}
|
|
8163
|
+
return rendererMap;
|
|
8164
|
+
}
|
|
8165
|
+
function createMarkdownCodeBlockRenderer(renderers) {
|
|
8166
|
+
const rendererMap = normalizeMarkdownCodeBlockRenderers(renderers);
|
|
8167
|
+
const renderNode = (token, context) => {
|
|
8168
|
+
if (token.type !== "code") {
|
|
8169
|
+
return;
|
|
8170
|
+
}
|
|
8171
|
+
const language = infoStringToFiletype(token.lang ?? "");
|
|
8172
|
+
if (!language)
|
|
8173
|
+
return;
|
|
8174
|
+
return rendererMap.get(language)?.(token, context);
|
|
8175
|
+
};
|
|
8176
|
+
renderNode.codeBlockOnly = true;
|
|
8177
|
+
return renderNode;
|
|
8178
|
+
}
|
|
8104
8179
|
var TRAILING_MARKDOWN_BLOCK_BREAKS_RE = /(?:\r?\n){2,}$/;
|
|
8105
8180
|
var TRAILING_MARKDOWN_BLOCK_NEWLINES_RE = /(?:\r?\n)+$/;
|
|
8106
8181
|
function colorsEqual(left, right) {
|
|
@@ -8739,8 +8814,11 @@ class MarkdownRenderable extends Renderable {
|
|
|
8739
8814
|
normalizeScrollbackMarkdownBlockRaw(raw) {
|
|
8740
8815
|
return raw.replace(TRAILING_MARKDOWN_BLOCK_NEWLINES_RE, "");
|
|
8741
8816
|
}
|
|
8817
|
+
isCodeBlockOnlyRenderer() {
|
|
8818
|
+
return this._renderNode?.codeBlockOnly === true;
|
|
8819
|
+
}
|
|
8742
8820
|
buildRenderableTokens(tokens) {
|
|
8743
|
-
if (this._renderNode) {
|
|
8821
|
+
if (this._renderNode && !this.isCodeBlockOnlyRenderer()) {
|
|
8744
8822
|
return tokens.filter((token) => token.type !== "space");
|
|
8745
8823
|
}
|
|
8746
8824
|
const renderTokens = [];
|
|
@@ -9057,58 +9135,50 @@ class MarkdownRenderable extends Renderable {
|
|
|
9057
9135
|
if (token.type === "code") {
|
|
9058
9136
|
const renderable2 = this.createCodeRenderable(token, id);
|
|
9059
9137
|
renderable2.marginTop = marginTop;
|
|
9060
|
-
return { renderable: renderable2 };
|
|
9138
|
+
return { renderable: renderable2, canUpdateInPlace: true };
|
|
9061
9139
|
}
|
|
9062
9140
|
if (token.type === "table") {
|
|
9063
9141
|
const next = this.createTableBlock(token, id);
|
|
9064
9142
|
next.renderable.marginTop = marginTop;
|
|
9065
|
-
return next;
|
|
9143
|
+
return { ...next, canUpdateInPlace: true };
|
|
9066
9144
|
}
|
|
9067
9145
|
if (token.type === "blockquote") {
|
|
9068
9146
|
const renderable2 = this.createBlockquoteRenderable(token, id);
|
|
9069
9147
|
renderable2.marginTop = marginTop;
|
|
9070
|
-
return { renderable: renderable2 };
|
|
9148
|
+
return { renderable: renderable2, canUpdateInPlace: true };
|
|
9071
9149
|
}
|
|
9072
9150
|
if (token.type === "list") {
|
|
9073
9151
|
const renderable2 = this.createListRenderable(token, id);
|
|
9074
9152
|
renderable2.marginTop = marginTop;
|
|
9075
|
-
return { renderable: renderable2 };
|
|
9153
|
+
return { renderable: renderable2, canUpdateInPlace: true };
|
|
9076
9154
|
}
|
|
9077
9155
|
if (token.type === "hr") {
|
|
9078
9156
|
const renderable2 = this.createHorizontalRuleRenderable(id);
|
|
9079
9157
|
renderable2.marginTop = marginTop;
|
|
9080
|
-
return { renderable: renderable2 };
|
|
9158
|
+
return { renderable: renderable2, canUpdateInPlace: true };
|
|
9081
9159
|
}
|
|
9082
9160
|
const markdownRaw = this.getTopLevelBlockRaw(token);
|
|
9083
9161
|
if (!markdownRaw) {
|
|
9084
|
-
return { renderable: undefined };
|
|
9162
|
+
return { renderable: undefined, canUpdateInPlace: true };
|
|
9085
9163
|
}
|
|
9086
9164
|
const renderable = this.createMarkdownCodeRenderable(markdownRaw, id);
|
|
9087
9165
|
renderable.marginTop = marginTop;
|
|
9088
|
-
return { renderable };
|
|
9166
|
+
return { renderable, canUpdateInPlace: true };
|
|
9089
9167
|
}
|
|
9090
9168
|
createTopLevelRenderable(block, index) {
|
|
9091
9169
|
if (!this._renderNode) {
|
|
9092
9170
|
return this.createTopLevelDefaultRenderable(block, index);
|
|
9093
9171
|
}
|
|
9094
|
-
|
|
9095
|
-
|
|
9096
|
-
|
|
9097
|
-
|
|
9098
|
-
|
|
9099
|
-
|
|
9100
|
-
|
|
9101
|
-
|
|
9102
|
-
|
|
9103
|
-
}
|
|
9172
|
+
const custom = this.createTopLevelCustomRenderable(block, index);
|
|
9173
|
+
if (!custom.renderable)
|
|
9174
|
+
return this.createTopLevelDefaultRenderable(block, index);
|
|
9175
|
+
const marginTop = typeof custom.renderable.marginTop === "number" ? Math.max(custom.renderable.marginTop, block.marginTop) : block.marginTop;
|
|
9176
|
+
this.applyMargins(custom.renderable, marginTop, 0);
|
|
9177
|
+
return {
|
|
9178
|
+
renderable: custom.renderable,
|
|
9179
|
+
tableContentCache: custom.tableContentCache,
|
|
9180
|
+
canUpdateInPlace: custom.canUpdateInPlace
|
|
9104
9181
|
};
|
|
9105
|
-
const custom = this._renderNode(block.token, context);
|
|
9106
|
-
if (custom) {
|
|
9107
|
-
const marginTop = typeof custom.marginTop === "number" ? Math.max(custom.marginTop, block.marginTop) : block.marginTop;
|
|
9108
|
-
this.applyMargins(custom, marginTop, 0);
|
|
9109
|
-
return { renderable: custom };
|
|
9110
|
-
}
|
|
9111
|
-
return next ?? this.createTopLevelDefaultRenderable(block, index);
|
|
9112
9182
|
}
|
|
9113
9183
|
createDefaultRenderable(token, index, nextToken) {
|
|
9114
9184
|
const id = `${this.id}-block-${index}`;
|
|
@@ -9136,6 +9206,57 @@ class MarkdownRenderable extends Renderable {
|
|
|
9136
9206
|
}
|
|
9137
9207
|
return this.createMarkdownCodeRenderable(token.raw, id, marginBottom);
|
|
9138
9208
|
}
|
|
9209
|
+
createCustomRenderable(token, index, nextToken) {
|
|
9210
|
+
const custom = this.renderCustomNode(token, () => {
|
|
9211
|
+
return { renderable: this.createDefaultRenderable(token, index, nextToken) };
|
|
9212
|
+
});
|
|
9213
|
+
if (!custom.renderable) {
|
|
9214
|
+
return { tracksInterBlockMargin: true, canUpdateInPlace: true };
|
|
9215
|
+
}
|
|
9216
|
+
const canUpdateInPlace = custom.renderable === custom.defaultResult?.renderable;
|
|
9217
|
+
return {
|
|
9218
|
+
renderable: custom.renderable,
|
|
9219
|
+
tracksInterBlockMargin: canUpdateInPlace,
|
|
9220
|
+
canUpdateInPlace
|
|
9221
|
+
};
|
|
9222
|
+
}
|
|
9223
|
+
createTopLevelCustomRenderable(block, index) {
|
|
9224
|
+
const custom = this.renderCustomNode(block.token, () => {
|
|
9225
|
+
return this.createTopLevelDefaultRenderable(block, index);
|
|
9226
|
+
});
|
|
9227
|
+
if (!custom.renderable) {
|
|
9228
|
+
return { tracksInterBlockMargin: true, canUpdateInPlace: true };
|
|
9229
|
+
}
|
|
9230
|
+
const canUpdateInPlace = custom.renderable === custom.defaultResult?.renderable;
|
|
9231
|
+
return {
|
|
9232
|
+
renderable: custom.renderable,
|
|
9233
|
+
tableContentCache: canUpdateInPlace ? custom.defaultResult?.tableContentCache : undefined,
|
|
9234
|
+
tracksInterBlockMargin: canUpdateInPlace,
|
|
9235
|
+
canUpdateInPlace
|
|
9236
|
+
};
|
|
9237
|
+
}
|
|
9238
|
+
renderCustomNode(token, createDefault) {
|
|
9239
|
+
if (!this._renderNode)
|
|
9240
|
+
return {};
|
|
9241
|
+
let defaultResult;
|
|
9242
|
+
const custom = this._renderNode(token, {
|
|
9243
|
+
syntaxStyle: this._syntaxStyle,
|
|
9244
|
+
conceal: this._conceal,
|
|
9245
|
+
concealCode: this._concealCode,
|
|
9246
|
+
treeSitterClient: this._treeSitterClient,
|
|
9247
|
+
defaultRender: () => {
|
|
9248
|
+
defaultResult = createDefault();
|
|
9249
|
+
return defaultResult.renderable ?? null;
|
|
9250
|
+
}
|
|
9251
|
+
});
|
|
9252
|
+
this.destroyUnusedDefaultRenderable(defaultResult?.renderable, custom ?? undefined);
|
|
9253
|
+
return custom ? { renderable: custom, defaultResult } : {};
|
|
9254
|
+
}
|
|
9255
|
+
destroyUnusedDefaultRenderable(renderable, usedRenderable) {
|
|
9256
|
+
if (!renderable || renderable === usedRenderable || renderable.parent)
|
|
9257
|
+
return;
|
|
9258
|
+
renderable.destroyRecursively();
|
|
9259
|
+
}
|
|
9139
9260
|
updateBlockRenderable(state, token, index, nextToken, forceListRefresh = false) {
|
|
9140
9261
|
const marginBottom = this.getInterBlockMargin(token, nextToken);
|
|
9141
9262
|
if (token.type === "code") {
|
|
@@ -9222,7 +9343,29 @@ class MarkdownRenderable extends Renderable {
|
|
|
9222
9343
|
blockIndex++;
|
|
9223
9344
|
continue;
|
|
9224
9345
|
}
|
|
9225
|
-
if (existing && !forceTableRefresh &&
|
|
9346
|
+
if (existing && !forceTableRefresh && existing.canUpdateInPlace && existing.token.type === block.token.type && this.canUpdateBlockRenderable(existing.renderable, block.token)) {
|
|
9347
|
+
if (this._renderNode) {
|
|
9348
|
+
const custom = this.createTopLevelCustomRenderable(block, blockIndex);
|
|
9349
|
+
if (custom.renderable && !custom.canUpdateInPlace) {
|
|
9350
|
+
const marginTop = typeof custom.renderable.marginTop === "number" ? Math.max(custom.renderable.marginTop, block.marginTop) : block.marginTop;
|
|
9351
|
+
this.applyMargins(custom.renderable, marginTop, 0);
|
|
9352
|
+
if (custom.renderable !== existing.renderable) {
|
|
9353
|
+
existing.renderable.destroyRecursively();
|
|
9354
|
+
this.add(custom.renderable, blockIndex);
|
|
9355
|
+
}
|
|
9356
|
+
this._blockStates[blockIndex] = {
|
|
9357
|
+
token: block.token,
|
|
9358
|
+
tokenRaw: block.token.raw,
|
|
9359
|
+
marginTop: block.marginTop,
|
|
9360
|
+
renderable: custom.renderable,
|
|
9361
|
+
tableContentCache: custom.tableContentCache,
|
|
9362
|
+
canUpdateInPlace: custom.canUpdateInPlace
|
|
9363
|
+
};
|
|
9364
|
+
blockIndex++;
|
|
9365
|
+
continue;
|
|
9366
|
+
}
|
|
9367
|
+
this.destroyUnusedDefaultRenderable(custom.renderable);
|
|
9368
|
+
}
|
|
9226
9369
|
this.updateBlockRenderable(existing, block.token, blockIndex, blocks[i + 1]?.token);
|
|
9227
9370
|
existing.renderable.marginBottom = 0;
|
|
9228
9371
|
if (existing.marginTop !== block.marginTop) {
|
|
@@ -9243,7 +9386,8 @@ class MarkdownRenderable extends Renderable {
|
|
|
9243
9386
|
tokenRaw: block.token.raw,
|
|
9244
9387
|
marginTop: block.marginTop,
|
|
9245
9388
|
renderable: next.renderable,
|
|
9246
|
-
tableContentCache: next.tableContentCache
|
|
9389
|
+
tableContentCache: next.tableContentCache,
|
|
9390
|
+
canUpdateInPlace: next.canUpdateInPlace
|
|
9247
9391
|
};
|
|
9248
9392
|
}
|
|
9249
9393
|
blockIndex++;
|
|
@@ -9289,7 +9433,8 @@ class MarkdownRenderable extends Renderable {
|
|
|
9289
9433
|
tokenRaw: this._content,
|
|
9290
9434
|
marginTop: 0,
|
|
9291
9435
|
renderable: fallback,
|
|
9292
|
-
tracksInterBlockMargin: true
|
|
9436
|
+
tracksInterBlockMargin: true,
|
|
9437
|
+
canUpdateInPlace: true
|
|
9293
9438
|
}
|
|
9294
9439
|
];
|
|
9295
9440
|
return;
|
|
@@ -9327,7 +9472,24 @@ class MarkdownRenderable extends Renderable {
|
|
|
9327
9472
|
blockIndex++;
|
|
9328
9473
|
continue;
|
|
9329
9474
|
}
|
|
9330
|
-
if (existing && existing.token.type === token.type) {
|
|
9475
|
+
if (existing && existing.canUpdateInPlace && existing.token.type === token.type) {
|
|
9476
|
+
const custom2 = this.createCustomRenderable(token, blockIndex, nextToken);
|
|
9477
|
+
if (custom2.renderable && !custom2.canUpdateInPlace) {
|
|
9478
|
+
if (custom2.renderable !== existing.renderable) {
|
|
9479
|
+
existing.renderable.destroyRecursively();
|
|
9480
|
+
this.add(custom2.renderable, blockIndex);
|
|
9481
|
+
}
|
|
9482
|
+
this._blockStates[blockIndex] = {
|
|
9483
|
+
token,
|
|
9484
|
+
tokenRaw: token.raw,
|
|
9485
|
+
renderable: custom2.renderable,
|
|
9486
|
+
tracksInterBlockMargin: custom2.tracksInterBlockMargin,
|
|
9487
|
+
canUpdateInPlace: custom2.canUpdateInPlace
|
|
9488
|
+
};
|
|
9489
|
+
blockIndex++;
|
|
9490
|
+
continue;
|
|
9491
|
+
}
|
|
9492
|
+
this.destroyUnusedDefaultRenderable(custom2.renderable);
|
|
9331
9493
|
this.updateBlockRenderable(existing, token, blockIndex, nextToken);
|
|
9332
9494
|
existing.token = token;
|
|
9333
9495
|
existing.tokenRaw = token.raw;
|
|
@@ -9341,23 +9503,12 @@ class MarkdownRenderable extends Renderable {
|
|
|
9341
9503
|
let renderable;
|
|
9342
9504
|
let tableContentCache;
|
|
9343
9505
|
let tracksInterBlockMargin = true;
|
|
9344
|
-
|
|
9345
|
-
|
|
9346
|
-
|
|
9347
|
-
|
|
9348
|
-
|
|
9349
|
-
|
|
9350
|
-
treeSitterClient: this._treeSitterClient,
|
|
9351
|
-
defaultRender: () => {
|
|
9352
|
-
defaultRenderable = this.createDefaultRenderable(token, blockIndex, nextToken);
|
|
9353
|
-
return defaultRenderable;
|
|
9354
|
-
}
|
|
9355
|
-
};
|
|
9356
|
-
const custom = this._renderNode(token, context);
|
|
9357
|
-
if (custom) {
|
|
9358
|
-
renderable = custom;
|
|
9359
|
-
tracksInterBlockMargin = custom === defaultRenderable;
|
|
9360
|
-
}
|
|
9506
|
+
let canUpdateInPlace = true;
|
|
9507
|
+
const custom = this.createCustomRenderable(token, blockIndex, nextToken);
|
|
9508
|
+
if (custom.renderable) {
|
|
9509
|
+
renderable = custom.renderable;
|
|
9510
|
+
tracksInterBlockMargin = custom.tracksInterBlockMargin;
|
|
9511
|
+
canUpdateInPlace = custom.canUpdateInPlace;
|
|
9361
9512
|
}
|
|
9362
9513
|
if (!renderable) {
|
|
9363
9514
|
if (token.type === "table") {
|
|
@@ -9379,7 +9530,8 @@ class MarkdownRenderable extends Renderable {
|
|
|
9379
9530
|
tokenRaw: token.raw,
|
|
9380
9531
|
renderable,
|
|
9381
9532
|
tableContentCache,
|
|
9382
|
-
tracksInterBlockMargin
|
|
9533
|
+
tracksInterBlockMargin,
|
|
9534
|
+
canUpdateInPlace
|
|
9383
9535
|
};
|
|
9384
9536
|
}
|
|
9385
9537
|
blockIndex++;
|
|
@@ -10169,12 +10321,6 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10169
10321
|
}
|
|
10170
10322
|
set scrollTop(value) {
|
|
10171
10323
|
this.verticalScrollBar.scrollPosition = value;
|
|
10172
|
-
if (!this._isApplyingStickyScroll) {
|
|
10173
|
-
const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height);
|
|
10174
|
-
if (!this.isAtStickyPosition() && maxScrollTop > 1) {
|
|
10175
|
-
this._hasManualScroll = true;
|
|
10176
|
-
}
|
|
10177
|
-
}
|
|
10178
10324
|
this.updateStickyState();
|
|
10179
10325
|
}
|
|
10180
10326
|
get scrollLeft() {
|
|
@@ -10182,12 +10328,6 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10182
10328
|
}
|
|
10183
10329
|
set scrollLeft(value) {
|
|
10184
10330
|
this.horizontalScrollBar.scrollPosition = value;
|
|
10185
|
-
if (!this._isApplyingStickyScroll) {
|
|
10186
|
-
const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width);
|
|
10187
|
-
if (!this.isAtStickyPosition() && maxScrollLeft > 1) {
|
|
10188
|
-
this._hasManualScroll = true;
|
|
10189
|
-
}
|
|
10190
|
-
}
|
|
10191
10331
|
this.updateStickyState();
|
|
10192
10332
|
}
|
|
10193
10333
|
get scrollWidth() {
|
|
@@ -10197,22 +10337,18 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10197
10337
|
return this.verticalScrollBar.scrollSize;
|
|
10198
10338
|
}
|
|
10199
10339
|
updateStickyState() {
|
|
10200
|
-
if (!this._stickyScroll)
|
|
10340
|
+
if (!this._stickyScroll) {
|
|
10341
|
+
this.syncManualScrollState();
|
|
10201
10342
|
return;
|
|
10343
|
+
}
|
|
10202
10344
|
const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height);
|
|
10203
10345
|
const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width);
|
|
10204
10346
|
if (this.scrollTop <= 0) {
|
|
10205
10347
|
this._stickyScrollTop = true;
|
|
10206
10348
|
this._stickyScrollBottom = false;
|
|
10207
|
-
if (!this._isApplyingStickyScroll && (this._stickyStart === "top" || this._stickyStart === "bottom" && maxScrollTop === 0)) {
|
|
10208
|
-
this._hasManualScroll = false;
|
|
10209
|
-
}
|
|
10210
10349
|
} else if (this.scrollTop >= maxScrollTop) {
|
|
10211
10350
|
this._stickyScrollTop = false;
|
|
10212
10351
|
this._stickyScrollBottom = true;
|
|
10213
|
-
if (!this._isApplyingStickyScroll && this._stickyStart === "bottom") {
|
|
10214
|
-
this._hasManualScroll = false;
|
|
10215
|
-
}
|
|
10216
10352
|
} else {
|
|
10217
10353
|
this._stickyScrollTop = false;
|
|
10218
10354
|
this._stickyScrollBottom = false;
|
|
@@ -10220,19 +10356,30 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10220
10356
|
if (this.scrollLeft <= 0) {
|
|
10221
10357
|
this._stickyScrollLeft = true;
|
|
10222
10358
|
this._stickyScrollRight = false;
|
|
10223
|
-
if (!this._isApplyingStickyScroll && (this._stickyStart === "left" || this._stickyStart === "right" && maxScrollLeft === 0)) {
|
|
10224
|
-
this._hasManualScroll = false;
|
|
10225
|
-
}
|
|
10226
10359
|
} else if (this.scrollLeft >= maxScrollLeft) {
|
|
10227
10360
|
this._stickyScrollLeft = false;
|
|
10228
10361
|
this._stickyScrollRight = true;
|
|
10229
|
-
if (!this._isApplyingStickyScroll && this._stickyStart === "right") {
|
|
10230
|
-
this._hasManualScroll = false;
|
|
10231
|
-
}
|
|
10232
10362
|
} else {
|
|
10233
10363
|
this._stickyScrollLeft = false;
|
|
10234
10364
|
this._stickyScrollRight = false;
|
|
10235
10365
|
}
|
|
10366
|
+
this.syncManualScrollState();
|
|
10367
|
+
}
|
|
10368
|
+
syncManualScrollState() {
|
|
10369
|
+
if (!this._stickyScroll) {
|
|
10370
|
+
this._hasManualScroll = false;
|
|
10371
|
+
return;
|
|
10372
|
+
}
|
|
10373
|
+
const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height);
|
|
10374
|
+
const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width);
|
|
10375
|
+
const hasScrollableContent = maxScrollTop > 1 || maxScrollLeft > 1;
|
|
10376
|
+
if (this._isApplyingStickyScroll) {
|
|
10377
|
+
if (this._hasManualScroll && hasScrollableContent && this.isAtStickyPosition()) {
|
|
10378
|
+
this._hasManualScroll = false;
|
|
10379
|
+
}
|
|
10380
|
+
return;
|
|
10381
|
+
}
|
|
10382
|
+
this._hasManualScroll = hasScrollableContent && !this.isAtStickyPosition();
|
|
10236
10383
|
}
|
|
10237
10384
|
applyStickyStart(stickyStart) {
|
|
10238
10385
|
const wasApplyingStickyScroll = this._isApplyingStickyScroll;
|
|
@@ -10342,12 +10489,6 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10342
10489
|
orientation: "vertical",
|
|
10343
10490
|
onChange: (position) => {
|
|
10344
10491
|
this.content.translateY = -position;
|
|
10345
|
-
if (!this._isApplyingStickyScroll) {
|
|
10346
|
-
const maxScrollTop = Math.max(0, this.scrollHeight - this.viewport.height);
|
|
10347
|
-
if (!this.isAtStickyPosition() && maxScrollTop > 1) {
|
|
10348
|
-
this._hasManualScroll = true;
|
|
10349
|
-
}
|
|
10350
|
-
}
|
|
10351
10492
|
this.updateStickyState();
|
|
10352
10493
|
}
|
|
10353
10494
|
});
|
|
@@ -10363,12 +10504,6 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10363
10504
|
orientation: "horizontal",
|
|
10364
10505
|
onChange: (position) => {
|
|
10365
10506
|
this.content.translateX = -position;
|
|
10366
|
-
if (!this._isApplyingStickyScroll) {
|
|
10367
|
-
const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width);
|
|
10368
|
-
if (!this.isAtStickyPosition() && maxScrollLeft > 1) {
|
|
10369
|
-
this._hasManualScroll = true;
|
|
10370
|
-
}
|
|
10371
|
-
}
|
|
10372
10507
|
this.updateStickyState();
|
|
10373
10508
|
}
|
|
10374
10509
|
});
|
|
@@ -10519,11 +10654,7 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10519
10654
|
this.scrollAccumulatorX -= integerScroll;
|
|
10520
10655
|
}
|
|
10521
10656
|
}
|
|
10522
|
-
|
|
10523
|
-
const maxScrollLeft = Math.max(0, this.scrollWidth - this.viewport.width);
|
|
10524
|
-
if (maxScrollTop > 1 || maxScrollLeft > 1) {
|
|
10525
|
-
this._hasManualScroll = true;
|
|
10526
|
-
}
|
|
10657
|
+
this.syncManualScrollState();
|
|
10527
10658
|
}
|
|
10528
10659
|
if (event.type === "drag" && event.isDragging) {
|
|
10529
10660
|
this.updateAutoScroll(event.x, event.y);
|
|
@@ -10533,15 +10664,15 @@ class ScrollBoxRenderable extends BoxRenderable {
|
|
|
10533
10664
|
}
|
|
10534
10665
|
handleKeyPress(key) {
|
|
10535
10666
|
if (this.verticalScrollBar.handleKeyPress(key)) {
|
|
10536
|
-
this._hasManualScroll = true;
|
|
10537
10667
|
this.scrollAccel.reset();
|
|
10538
10668
|
this.resetScrollAccumulators();
|
|
10669
|
+
this.syncManualScrollState();
|
|
10539
10670
|
return true;
|
|
10540
10671
|
}
|
|
10541
10672
|
if (this.horizontalScrollBar.handleKeyPress(key)) {
|
|
10542
|
-
this._hasManualScroll = true;
|
|
10543
10673
|
this.scrollAccel.reset();
|
|
10544
10674
|
this.resetScrollAccumulators();
|
|
10675
|
+
this.syncManualScrollState();
|
|
10545
10676
|
return true;
|
|
10546
10677
|
}
|
|
10547
10678
|
return false;
|
|
@@ -11533,7 +11664,7 @@ class TimeToFirstDrawRenderable extends Renderable {
|
|
|
11533
11664
|
return Math.max(0, Math.floor(value));
|
|
11534
11665
|
}
|
|
11535
11666
|
}
|
|
11536
|
-
export { DistortionEffect, VignetteEffect, CloudsEffect, FlamesEffect, CRTRollingBarEffect, RainbowTextEffect, applyScanlines, applyInvert, applyNoise, applyChromaticAberration, applyAsciiArt, applyBrightness, applyGain, applySaturation, BloomEffect, SEPIA_MATRIX, PROTANOPIA_SIM_MATRIX, DEUTERANOPIA_SIM_MATRIX, TRITANOPIA_SIM_MATRIX, ACHROMATOPSIA_MATRIX, PROTANOPIA_COMP_MATRIX, DEUTERANOPIA_COMP_MATRIX, TRITANOPIA_COMP_MATRIX, TECHNICOLOR_MATRIX, SOLARIZATION_MATRIX, SYNTHWAVE_MATRIX, GREENSCALE_MATRIX, GRAYSCALE_MATRIX, INVERT_MATRIX, Timeline, engine, createTimeline, SlotRegistry, createSlotRegistry, createCoreSlotRegistry, registerCorePlugin, resolveCoreSlot, SlotRenderable, Audio, setupAudio, FrameBufferRenderable, ASCIIFontRenderable, Generic, Box, Text, ASCIIFont, Input, Select, TabSelect, FrameBuffer, Code, ScrollBox, vstyles, VRenderable, LineNumberRenderable, DiffRenderable, defaultTextareaKeyBindings, TextareaRenderable, InputRenderableEvents, InputRenderable, TextTableRenderable, MarkdownRenderable, SliderRenderable, ScrollBarRenderable, ArrowRenderable, ScrollBoxRenderable, SelectRenderableEvents, SelectRenderable, TabSelectRenderableEvents, TabSelectRenderable, TimeToFirstDrawRenderable, exports_src2 as exports_src };
|
|
11667
|
+
export { DistortionEffect, VignetteEffect, CloudsEffect, FlamesEffect, CRTRollingBarEffect, RainbowTextEffect, applyScanlines, applyInvert, applyNoise, applyChromaticAberration, applyAsciiArt, applyBrightness, applyGain, applySaturation, BloomEffect, SEPIA_MATRIX, PROTANOPIA_SIM_MATRIX, DEUTERANOPIA_SIM_MATRIX, TRITANOPIA_SIM_MATRIX, ACHROMATOPSIA_MATRIX, PROTANOPIA_COMP_MATRIX, DEUTERANOPIA_COMP_MATRIX, TRITANOPIA_COMP_MATRIX, TECHNICOLOR_MATRIX, SOLARIZATION_MATRIX, SYNTHWAVE_MATRIX, GREENSCALE_MATRIX, GRAYSCALE_MATRIX, INVERT_MATRIX, Timeline, engine, createTimeline, SlotRegistry, createSlotRegistry, createCoreSlotRegistry, registerCorePlugin, resolveCoreSlot, SlotRenderable, Audio, setupAudio, FrameBufferRenderable, ASCIIFontRenderable, Generic, Box, Text, ASCIIFont, Input, Select, TabSelect, FrameBuffer, Code, ScrollBox, vstyles, VRenderable, LineNumberRenderable, DiffRenderable, defaultTextareaKeyBindings, TextareaRenderable, InputRenderableEvents, InputRenderable, TextTableRenderable, createMarkdownCodeBlockRenderer, MarkdownRenderable, SliderRenderable, ScrollBarRenderable, ArrowRenderable, ScrollBoxRenderable, SelectRenderableEvents, SelectRenderable, TabSelectRenderableEvents, TabSelectRenderable, TimeToFirstDrawRenderable, exports_src2 as exports_src };
|
|
11537
11668
|
|
|
11538
|
-
//# debugId=
|
|
11539
|
-
//# sourceMappingURL=index-
|
|
11669
|
+
//# debugId=99C613C726810CD764756E2164756E21
|
|
11670
|
+
//# sourceMappingURL=index-3mx8q5t1.js.map
|