markstream-vue2 0.0.49 → 0.0.50
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/dist/index.cjs +1 -1
- package/dist/index.css +1 -1
- package/dist/index.js +137 -62
- package/dist/index.px.css +1 -1
- package/dist/index.tailwind.css +1 -1
- package/dist/tailwind.ts +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -56,7 +56,7 @@ export * from "stream-markdown-parser";
|
|
|
56
56
|
import { KATEX_COMMANDS, normalizeStandaloneBackslashT, setDefaultMathOptions as setDefaultMathOptions2 } from "stream-markdown-parser";
|
|
57
57
|
import * as VueModule from "vue-demi";
|
|
58
58
|
import { defineComponent, getCurrentInstance, computed, shallowRef, h, inject, ref, watch, readonly, useAttrs, onMounted, nextTick, onUpdated, onBeforeUnmount, provide, getCurrentScope, onScopeDispose, markRaw, reactive, onUnmounted } from "vue-demi";
|
|
59
|
-
import {
|
|
59
|
+
import { normalizeShikiLanguage, createSmoothMarkdownStream, getHighlightRegistrationKey, getRuntimeShikiRegistrationConfig, registerHighlightOnce } from "markstream-core";
|
|
60
60
|
import { autoUpdate, offset, flip, shift, computePosition } from "@floating-ui/dom";
|
|
61
61
|
function getVue2MinorVersion$1(version) {
|
|
62
62
|
const raw = typeof version === "string" ? version : "";
|
|
@@ -616,6 +616,20 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
|
|
|
616
616
|
},
|
|
617
617
|
setup(__props) {
|
|
618
618
|
const props = __props;
|
|
619
|
+
function settleAndMergeSegments(current, segmentId) {
|
|
620
|
+
return current.reduce((result, segment) => {
|
|
621
|
+
const nextSegment = segment.id === segmentId ? __spreadProps(__spreadValues({}, segment), { fading: false }) : segment;
|
|
622
|
+
const previousSegment = result[result.length - 1];
|
|
623
|
+
if (previousSegment && !previousSegment.fading && !nextSegment.fading) {
|
|
624
|
+
result[result.length - 1] = __spreadProps(__spreadValues({}, previousSegment), {
|
|
625
|
+
content: previousSegment.content + nextSegment.content
|
|
626
|
+
});
|
|
627
|
+
} else {
|
|
628
|
+
result.push(nextSegment);
|
|
629
|
+
}
|
|
630
|
+
return result;
|
|
631
|
+
}, []);
|
|
632
|
+
}
|
|
619
633
|
const instance = getCurrentInstance();
|
|
620
634
|
const attrs = computed(() => {
|
|
621
635
|
var _a2, _b;
|
|
@@ -645,39 +659,58 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
|
|
|
645
659
|
return "";
|
|
646
660
|
return String(raw);
|
|
647
661
|
});
|
|
648
|
-
const
|
|
649
|
-
const
|
|
650
|
-
|
|
651
|
-
function getRenderedContent() {
|
|
652
|
-
return settledCode.value + streamedDelta.value;
|
|
653
|
-
}
|
|
662
|
+
const segments = ref(props.node.code ? [{ id: 0, content: props.node.code, fading: false }] : []);
|
|
663
|
+
const renderedCode = ref(props.node.code);
|
|
664
|
+
let nextSegmentId = 1;
|
|
654
665
|
function setFullContent(next) {
|
|
655
|
-
|
|
656
|
-
|
|
666
|
+
var _a2;
|
|
667
|
+
if (segments.value.length === 1 && !((_a2 = segments.value[0]) == null ? void 0 : _a2.fading) && segments.value[0].content === next)
|
|
668
|
+
return;
|
|
669
|
+
segments.value = next ? [{ id: nextSegmentId++, content: next, fading: false }] : [];
|
|
657
670
|
}
|
|
658
|
-
function
|
|
659
|
-
if (!
|
|
671
|
+
function settleSegment(segmentId) {
|
|
672
|
+
if (!segments.value.some((segment) => segment.id === segmentId && segment.fading))
|
|
660
673
|
return;
|
|
661
|
-
|
|
662
|
-
|
|
674
|
+
segments.value = settleAndMergeSegments(segments.value, segmentId);
|
|
675
|
+
}
|
|
676
|
+
function streamedDeltaClass(segment) {
|
|
677
|
+
return segment.id % 2 === 0 ? "inline-code-stream-delta--a" : "inline-code-stream-delta--b";
|
|
663
678
|
}
|
|
664
679
|
watch(
|
|
665
680
|
[() => props.node.code, streamStateKey, fadeEnabled],
|
|
666
681
|
([next]) => {
|
|
667
682
|
const normalized = String(next != null ? next : "");
|
|
668
|
-
const rendered = getRenderedContent();
|
|
669
683
|
const key = streamStateKey.value;
|
|
670
684
|
const previousPersisted = key ? inheritedTextStreamState == null ? void 0 : inheritedTextStreamState.get(key) : void 0;
|
|
671
|
-
const previousContent = previousPersisted != null ? previousPersisted :
|
|
672
|
-
const
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
685
|
+
const previousContent = previousPersisted != null ? previousPersisted : renderedCode.value;
|
|
686
|
+
const resumeFromPersistedContent = previousPersisted !== void 0 && previousPersisted !== renderedCode.value;
|
|
687
|
+
if (!fadeEnabled.value) {
|
|
688
|
+
setFullContent(normalized);
|
|
689
|
+
} else if (normalized !== previousContent) {
|
|
690
|
+
if (previousContent && normalized.startsWith(previousContent)) {
|
|
691
|
+
const appendedContent = normalized.slice(previousContent.length);
|
|
692
|
+
const lastSegment = segments.value[segments.value.length - 1];
|
|
693
|
+
if (resumeFromPersistedContent) {
|
|
694
|
+
segments.value = [
|
|
695
|
+
{ id: nextSegmentId++, content: previousContent, fading: false },
|
|
696
|
+
{ id: nextSegmentId++, content: appendedContent, fading: true }
|
|
697
|
+
];
|
|
698
|
+
} else if (lastSegment == null ? void 0 : lastSegment.fading) {
|
|
699
|
+
segments.value = [
|
|
700
|
+
...segments.value.slice(0, -1),
|
|
701
|
+
__spreadProps(__spreadValues({}, lastSegment), { content: lastSegment.content + appendedContent })
|
|
702
|
+
];
|
|
703
|
+
} else {
|
|
704
|
+
segments.value = [
|
|
705
|
+
...segments.value,
|
|
706
|
+
{ id: nextSegmentId++, content: appendedContent, fading: true }
|
|
707
|
+
];
|
|
708
|
+
}
|
|
709
|
+
} else {
|
|
710
|
+
setFullContent(normalized);
|
|
711
|
+
}
|
|
712
|
+
}
|
|
713
|
+
renderedCode.value = normalized;
|
|
681
714
|
if (key)
|
|
682
715
|
inheritedTextStreamState == null ? void 0 : inheritedTextStreamState.set(key, normalized);
|
|
683
716
|
},
|
|
@@ -688,17 +721,20 @@ const _sfc_main$E = /* @__PURE__ */ defineComponent({
|
|
|
688
721
|
(enabled) => {
|
|
689
722
|
if (enabled)
|
|
690
723
|
return;
|
|
691
|
-
setFullContent(
|
|
724
|
+
setFullContent(renderedCode.value);
|
|
692
725
|
}
|
|
693
726
|
);
|
|
694
|
-
|
|
695
|
-
return { __sfc: true, props, instance, attrs, inheritedFade, inheritedTextStreamState, explicitFade, fadeEnabled, streamStateKey, settledCode, streamedDelta, streamFadeVersion, getRenderedContent, setFullContent, settleStreamedDelta, streamedDeltaClass };
|
|
727
|
+
return { __sfc: true, props, settleAndMergeSegments, instance, attrs, inheritedFade, inheritedTextStreamState, explicitFade, fadeEnabled, streamStateKey, segments, renderedCode, nextSegmentId, setFullContent, settleSegment, streamedDeltaClass };
|
|
696
728
|
}
|
|
697
729
|
});
|
|
698
|
-
const
|
|
730
|
+
const InlineCodeNode_vue_vue_type_style_index_0_scoped_6ea4ef26_lang = "";
|
|
699
731
|
var _sfc_render$E = function render6() {
|
|
700
732
|
var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;
|
|
701
|
-
return _c("code", { staticClass: "inline text-[85%] px-1 py-0.5 rounded font-mono bg-[hsl(var(--secondary))] whitespace-normal break-words max-w-full before:content-[''] after:content-['']" },
|
|
733
|
+
return _c("code", { staticClass: "inline text-[85%] px-1 py-0.5 rounded font-mono bg-[hsl(var(--secondary))] whitespace-normal break-words max-w-full before:content-[''] after:content-['']" }, _vm._l(_setup.segments, function(segment) {
|
|
734
|
+
return _c("span", { key: segment.id, class: segment.fading ? ["inline-code-stream-delta", _setup.streamedDeltaClass(segment)] : void 0, on: { "animationend": function($event) {
|
|
735
|
+
segment.fading && _setup.settleSegment(segment.id);
|
|
736
|
+
} } }, [_vm._v(" " + _vm._s(segment.content) + " ")]);
|
|
737
|
+
}), 0);
|
|
702
738
|
};
|
|
703
739
|
var _sfc_staticRenderFns$E = [];
|
|
704
740
|
var __component__$E = /* @__PURE__ */ normalizeComponent(
|
|
@@ -707,7 +743,7 @@ var __component__$E = /* @__PURE__ */ normalizeComponent(
|
|
|
707
743
|
_sfc_staticRenderFns$E,
|
|
708
744
|
false,
|
|
709
745
|
null,
|
|
710
|
-
"
|
|
746
|
+
"6ea4ef26",
|
|
711
747
|
null,
|
|
712
748
|
null
|
|
713
749
|
);
|
|
@@ -1094,6 +1130,20 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
|
|
|
1094
1130
|
emits: ["copy"],
|
|
1095
1131
|
setup(__props) {
|
|
1096
1132
|
const props = __props;
|
|
1133
|
+
function settleAndMergeSegments(current, segmentId) {
|
|
1134
|
+
return current.reduce((result, segment) => {
|
|
1135
|
+
const nextSegment = segmentId == null || segment.id === segmentId ? __spreadProps(__spreadValues({}, segment), { fading: false }) : segment;
|
|
1136
|
+
const previousSegment = result[result.length - 1];
|
|
1137
|
+
if (previousSegment && !previousSegment.fading && !nextSegment.fading) {
|
|
1138
|
+
result[result.length - 1] = __spreadProps(__spreadValues({}, previousSegment), {
|
|
1139
|
+
content: previousSegment.content + nextSegment.content
|
|
1140
|
+
});
|
|
1141
|
+
} else {
|
|
1142
|
+
result.push(nextSegment);
|
|
1143
|
+
}
|
|
1144
|
+
return result;
|
|
1145
|
+
}, []);
|
|
1146
|
+
}
|
|
1097
1147
|
const katexReady = useKatexReady();
|
|
1098
1148
|
const instance = getCurrentInstance();
|
|
1099
1149
|
const attrs = computed(() => {
|
|
@@ -1125,54 +1175,76 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
|
|
|
1125
1175
|
return "";
|
|
1126
1176
|
return String(raw);
|
|
1127
1177
|
});
|
|
1128
|
-
const
|
|
1129
|
-
const
|
|
1130
|
-
|
|
1131
|
-
function getRenderedContent() {
|
|
1132
|
-
return settledContent.value + streamedDelta.value;
|
|
1133
|
-
}
|
|
1178
|
+
const segments = ref(props.node.content ? [{ id: 0, content: props.node.content, fading: false }] : []);
|
|
1179
|
+
const renderedContent = ref(props.node.content);
|
|
1180
|
+
let nextSegmentId = 1;
|
|
1134
1181
|
function setFullContent(next) {
|
|
1135
|
-
|
|
1136
|
-
|
|
1182
|
+
var _a2;
|
|
1183
|
+
if (segments.value.length === 1 && !((_a2 = segments.value[0]) == null ? void 0 : _a2.fading) && segments.value[0].content === next)
|
|
1184
|
+
return;
|
|
1185
|
+
segments.value = next ? [{ id: nextSegmentId++, content: next, fading: false }] : [];
|
|
1186
|
+
}
|
|
1187
|
+
function settleSegment(segmentId) {
|
|
1188
|
+
if (!segments.value.some((segment) => segment.id === segmentId && segment.fading))
|
|
1189
|
+
return;
|
|
1190
|
+
segments.value = settleAndMergeSegments(segments.value, segmentId);
|
|
1137
1191
|
}
|
|
1138
|
-
function
|
|
1139
|
-
if (!
|
|
1192
|
+
function settleFadingSegments() {
|
|
1193
|
+
if (!segments.value.some((segment) => segment.fading))
|
|
1140
1194
|
return;
|
|
1141
|
-
|
|
1142
|
-
|
|
1195
|
+
segments.value = settleAndMergeSegments(segments.value);
|
|
1196
|
+
}
|
|
1197
|
+
function streamedDeltaClass(segment) {
|
|
1198
|
+
return segment.id % 2 === 0 ? "text-node-stream-delta--a" : "text-node-stream-delta--b";
|
|
1143
1199
|
}
|
|
1144
1200
|
watch(
|
|
1145
1201
|
[() => props.node.content, streamStateKey, fadeEnabled, () => inheritedStreamVersion == null ? void 0 : inheritedStreamVersion.value],
|
|
1146
1202
|
([next]) => {
|
|
1147
1203
|
const normalized = String(next != null ? next : "");
|
|
1148
|
-
const rendered = getRenderedContent();
|
|
1149
1204
|
const key = streamStateKey.value;
|
|
1150
1205
|
const previousPersisted = key ? inheritedTextStreamState == null ? void 0 : inheritedTextStreamState.get(key) : void 0;
|
|
1151
|
-
const previousContent = previousPersisted != null ? previousPersisted :
|
|
1206
|
+
const previousContent = previousPersisted != null ? previousPersisted : renderedContent.value;
|
|
1207
|
+
const resumeFromPersistedContent = previousPersisted !== void 0 && previousPersisted !== renderedContent.value;
|
|
1152
1208
|
if (!fadeEnabled.value) {
|
|
1153
1209
|
setFullContent(normalized);
|
|
1210
|
+
renderedContent.value = normalized;
|
|
1154
1211
|
if (key)
|
|
1155
1212
|
inheritedTextStreamState == null ? void 0 : inheritedTextStreamState.set(key, normalized);
|
|
1156
1213
|
return;
|
|
1157
1214
|
}
|
|
1158
1215
|
if (normalized === previousContent) {
|
|
1159
|
-
if (
|
|
1160
|
-
|
|
1161
|
-
else if (
|
|
1216
|
+
if (segments.value.some((segment) => segment.fading))
|
|
1217
|
+
settleFadingSegments();
|
|
1218
|
+
else if (renderedContent.value !== normalized)
|
|
1162
1219
|
setFullContent(normalized);
|
|
1163
1220
|
if (key)
|
|
1164
1221
|
inheritedTextStreamState == null ? void 0 : inheritedTextStreamState.set(key, normalized);
|
|
1222
|
+
renderedContent.value = normalized;
|
|
1165
1223
|
return;
|
|
1166
1224
|
}
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1225
|
+
if (previousContent && normalized.startsWith(previousContent)) {
|
|
1226
|
+
const appendedContent = normalized.slice(previousContent.length);
|
|
1227
|
+
const lastSegment = segments.value[segments.value.length - 1];
|
|
1228
|
+
if (resumeFromPersistedContent) {
|
|
1229
|
+
segments.value = [
|
|
1230
|
+
{ id: nextSegmentId++, content: previousContent, fading: false },
|
|
1231
|
+
{ id: nextSegmentId++, content: appendedContent, fading: true }
|
|
1232
|
+
];
|
|
1233
|
+
} else if (lastSegment == null ? void 0 : lastSegment.fading) {
|
|
1234
|
+
segments.value = [
|
|
1235
|
+
...segments.value.slice(0, -1),
|
|
1236
|
+
__spreadProps(__spreadValues({}, lastSegment), { content: lastSegment.content + appendedContent })
|
|
1237
|
+
];
|
|
1238
|
+
} else {
|
|
1239
|
+
segments.value = [
|
|
1240
|
+
...segments.value,
|
|
1241
|
+
{ id: nextSegmentId++, content: appendedContent, fading: true }
|
|
1242
|
+
];
|
|
1243
|
+
}
|
|
1244
|
+
} else {
|
|
1245
|
+
setFullContent(normalized);
|
|
1246
|
+
}
|
|
1247
|
+
renderedContent.value = normalized;
|
|
1176
1248
|
if (key)
|
|
1177
1249
|
inheritedTextStreamState == null ? void 0 : inheritedTextStreamState.set(key, normalized);
|
|
1178
1250
|
},
|
|
@@ -1183,17 +1255,20 @@ const _sfc_main$C = /* @__PURE__ */ defineComponent({
|
|
|
1183
1255
|
(enabled) => {
|
|
1184
1256
|
if (enabled)
|
|
1185
1257
|
return;
|
|
1186
|
-
setFullContent(
|
|
1258
|
+
setFullContent(renderedContent.value);
|
|
1187
1259
|
}
|
|
1188
1260
|
);
|
|
1189
|
-
|
|
1190
|
-
return { __sfc: true, props, katexReady, instance, attrs, inheritedFade, inheritedTextStreamState, inheritedStreamVersion, explicitFade, fadeEnabled, streamStateKey, settledContent, streamedDelta, streamFadeVersion, getRenderedContent, setFullContent, settleStreamedDelta, streamedDeltaClass };
|
|
1261
|
+
return { __sfc: true, props, settleAndMergeSegments, katexReady, instance, attrs, inheritedFade, inheritedTextStreamState, inheritedStreamVersion, explicitFade, fadeEnabled, streamStateKey, segments, renderedContent, nextSegmentId, setFullContent, settleSegment, settleFadingSegments, streamedDeltaClass };
|
|
1191
1262
|
}
|
|
1192
1263
|
});
|
|
1193
|
-
const
|
|
1264
|
+
const TextNode_vue_vue_type_style_index_0_scoped_00951658_lang = "";
|
|
1194
1265
|
var _sfc_render$C = function render8() {
|
|
1195
1266
|
var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;
|
|
1196
|
-
return _c("span", { staticClass: "whitespace-pre-wrap break-words text-node", class: [_setup.katexReady && _vm.node.center ? "text-node-center" : ""] },
|
|
1267
|
+
return _c("span", { staticClass: "whitespace-pre-wrap break-words text-node", class: [_setup.katexReady && _vm.node.center ? "text-node-center" : ""] }, _vm._l(_setup.segments, function(segment) {
|
|
1268
|
+
return _c("span", { key: segment.id, class: segment.fading ? ["text-node-stream-delta", _setup.streamedDeltaClass(segment)] : void 0, on: { "animationend": function($event) {
|
|
1269
|
+
segment.fading && _setup.settleSegment(segment.id);
|
|
1270
|
+
} } }, [_vm._v(" " + _vm._s(segment.content) + " ")]);
|
|
1271
|
+
}), 0);
|
|
1197
1272
|
};
|
|
1198
1273
|
var _sfc_staticRenderFns$C = [];
|
|
1199
1274
|
var __component__$C = /* @__PURE__ */ normalizeComponent(
|
|
@@ -1202,7 +1277,7 @@ var __component__$C = /* @__PURE__ */ normalizeComponent(
|
|
|
1202
1277
|
_sfc_staticRenderFns$C,
|
|
1203
1278
|
false,
|
|
1204
1279
|
null,
|
|
1205
|
-
"
|
|
1280
|
+
"00951658",
|
|
1206
1281
|
null,
|
|
1207
1282
|
null
|
|
1208
1283
|
);
|