@linto-ai/transcript-ui-webcomponent 0.9.22 → 0.9.23-unstable.202609181642
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/{highlight-BOTcN5V7.js → highlight-BQUzpb6U.js} +2 -2
- package/dist/{highlight-BOTcN5V7.js.map → highlight-BQUzpb6U.js.map} +1 -1
- package/dist/{index-DhBFBHeE.js → index-j-ZNERBE.js} +1204 -909
- package/dist/index-j-ZNERBE.js.map +1 -0
- package/dist/linto-editor.iife.js +1080 -785
- package/dist/linto-editor.iife.js.map +1 -1
- package/dist/linto-editor.js +1 -1
- package/package.json +10 -10
- package/dist/index-DhBFBHeE.js.map +0 -1
|
@@ -116,10 +116,10 @@ var LintoEditor = (function(exports) {
|
|
|
116
116
|
}
|
|
117
117
|
const listDelimiterRE = /;(?![^(]*\))/g;
|
|
118
118
|
const propertyDelimiterRE = /:([^]+)/;
|
|
119
|
-
const styleCommentRE =
|
|
119
|
+
const styleCommentRE = /"(?:[^"\\]|\\[^])*"|'(?:[^'\\]|\\[^])*'|\\[^]|\/\*[^]*?\*\//g;
|
|
120
120
|
function parseStringStyle(cssText) {
|
|
121
121
|
const ret = {};
|
|
122
|
-
cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
|
|
122
|
+
cssText.replace(styleCommentRE, (match) => match.startsWith("/*") ? "" : match).split(listDelimiterRE).forEach((item) => {
|
|
123
123
|
if (item) {
|
|
124
124
|
const tmp = item.split(propertyDelimiterRE);
|
|
125
125
|
tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
|
|
@@ -163,22 +163,22 @@ var LintoEditor = (function(exports) {
|
|
|
163
163
|
function includeBooleanAttr(value) {
|
|
164
164
|
return !!value || value === "";
|
|
165
165
|
}
|
|
166
|
-
function looseCompareArrays(a2, b2) {
|
|
166
|
+
function looseCompareArrays(a2, b2, seen) {
|
|
167
167
|
if (a2.length !== b2.length) return false;
|
|
168
168
|
let equal = true;
|
|
169
169
|
for (let i2 = 0; equal && i2 < a2.length; i2++) {
|
|
170
|
-
equal = looseEqual(a2[i2], b2[i2]);
|
|
170
|
+
equal = looseEqual(a2[i2], b2[i2], seen);
|
|
171
171
|
}
|
|
172
172
|
return equal;
|
|
173
173
|
}
|
|
174
|
-
function looseCompareCollections(a2, b2) {
|
|
174
|
+
function looseCompareCollections(a2, b2, seen) {
|
|
175
175
|
if (a2.size !== b2.size) return false;
|
|
176
176
|
const candidates = Array.from(b2);
|
|
177
177
|
const matched = new Uint8Array(candidates.length);
|
|
178
178
|
for (const item of a2) {
|
|
179
179
|
let index = -1;
|
|
180
180
|
for (let i2 = 0; i2 < candidates.length; i2++) {
|
|
181
|
-
if (!matched[i2] && looseEqual(item, candidates[i2])) {
|
|
181
|
+
if (!matched[i2] && looseEqual(item, candidates[i2], seen)) {
|
|
182
182
|
index = i2;
|
|
183
183
|
break;
|
|
184
184
|
}
|
|
@@ -188,7 +188,47 @@ var LintoEditor = (function(exports) {
|
|
|
188
188
|
}
|
|
189
189
|
return true;
|
|
190
190
|
}
|
|
191
|
-
function
|
|
191
|
+
function looseCompareObjects(a2, b2, seen) {
|
|
192
|
+
let aValidType = isMap(a2);
|
|
193
|
+
let bValidType = isMap(b2);
|
|
194
|
+
if (aValidType || bValidType) {
|
|
195
|
+
return aValidType && bValidType ? looseCompareCollections(a2, b2, seen) : false;
|
|
196
|
+
}
|
|
197
|
+
aValidType = isSet(a2);
|
|
198
|
+
bValidType = isSet(b2);
|
|
199
|
+
if (aValidType || bValidType) {
|
|
200
|
+
return aValidType && bValidType ? looseCompareCollections(a2, b2, seen) : false;
|
|
201
|
+
}
|
|
202
|
+
const aKeysCount = Object.keys(a2).length;
|
|
203
|
+
const bKeysCount = Object.keys(b2).length;
|
|
204
|
+
if (aKeysCount !== bKeysCount) {
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
for (const key in a2) {
|
|
208
|
+
const aHasKey = a2.hasOwnProperty(key);
|
|
209
|
+
const bHasKey = b2.hasOwnProperty(key);
|
|
210
|
+
if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a2[key], b2[key], seen)) {
|
|
211
|
+
return false;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return String(a2) === String(b2);
|
|
215
|
+
}
|
|
216
|
+
function looseCompareNested(a2, b2, seen, compare) {
|
|
217
|
+
if (!seen) {
|
|
218
|
+
seen = [/* @__PURE__ */ new Map(), /* @__PURE__ */ new Map()];
|
|
219
|
+
}
|
|
220
|
+
const [seenA, seenB] = seen;
|
|
221
|
+
if (seenA.has(a2) || seenB.has(b2)) {
|
|
222
|
+
return seenA.get(a2) === b2 && seenB.get(b2) === a2;
|
|
223
|
+
}
|
|
224
|
+
seenA.set(a2, b2);
|
|
225
|
+
seenB.set(b2, a2);
|
|
226
|
+
const equal = compare(a2, b2, seen);
|
|
227
|
+
seenA.delete(a2);
|
|
228
|
+
seenB.delete(b2);
|
|
229
|
+
return equal;
|
|
230
|
+
}
|
|
231
|
+
function looseEqual(a2, b2, seen) {
|
|
192
232
|
if (a2 === b2) return true;
|
|
193
233
|
let aValidType = isDate(a2);
|
|
194
234
|
let bValidType = isDate(b2);
|
|
@@ -203,7 +243,7 @@ var LintoEditor = (function(exports) {
|
|
|
203
243
|
aValidType = isArray(a2);
|
|
204
244
|
bValidType = isArray(b2);
|
|
205
245
|
if (aValidType || bValidType) {
|
|
206
|
-
return aValidType && bValidType ?
|
|
246
|
+
return aValidType && bValidType ? looseCompareNested(a2, b2, seen, looseCompareArrays) : false;
|
|
207
247
|
}
|
|
208
248
|
aValidType = isObject$1(a2);
|
|
209
249
|
bValidType = isObject$1(b2);
|
|
@@ -211,28 +251,7 @@ var LintoEditor = (function(exports) {
|
|
|
211
251
|
if (!aValidType || !bValidType) {
|
|
212
252
|
return false;
|
|
213
253
|
}
|
|
214
|
-
|
|
215
|
-
bValidType = isMap(b2);
|
|
216
|
-
if (aValidType || bValidType) {
|
|
217
|
-
return aValidType && bValidType ? looseCompareCollections(a2, b2) : false;
|
|
218
|
-
}
|
|
219
|
-
aValidType = isSet(a2);
|
|
220
|
-
bValidType = isSet(b2);
|
|
221
|
-
if (aValidType || bValidType) {
|
|
222
|
-
return aValidType && bValidType ? looseCompareCollections(a2, b2) : false;
|
|
223
|
-
}
|
|
224
|
-
const aKeysCount = Object.keys(a2).length;
|
|
225
|
-
const bKeysCount = Object.keys(b2).length;
|
|
226
|
-
if (aKeysCount !== bKeysCount) {
|
|
227
|
-
return false;
|
|
228
|
-
}
|
|
229
|
-
for (const key in a2) {
|
|
230
|
-
const aHasKey = a2.hasOwnProperty(key);
|
|
231
|
-
const bHasKey = b2.hasOwnProperty(key);
|
|
232
|
-
if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a2[key], b2[key])) {
|
|
233
|
-
return false;
|
|
234
|
-
}
|
|
235
|
-
}
|
|
254
|
+
return looseCompareNested(a2, b2, seen, looseCompareObjects);
|
|
236
255
|
}
|
|
237
256
|
return String(a2) === String(b2);
|
|
238
257
|
}
|
|
@@ -889,7 +908,9 @@ var LintoEditor = (function(exports) {
|
|
|
889
908
|
const raw = /* @__PURE__ */ toRaw(array);
|
|
890
909
|
if (raw === array) return raw;
|
|
891
910
|
track(raw, "iterate", ARRAY_ITERATE_KEY);
|
|
892
|
-
|
|
911
|
+
if (/* @__PURE__ */ isShallow(array)) return raw;
|
|
912
|
+
if (!/* @__PURE__ */ isReadonly(array)) return raw.map(toReactive);
|
|
913
|
+
return /* @__PURE__ */ isReactive(array) ? raw.map((item) => toReadonly(toReactive(item))) : raw.map(toReadonly);
|
|
893
914
|
}
|
|
894
915
|
function shallowReadArray(arr) {
|
|
895
916
|
track(arr = /* @__PURE__ */ toRaw(arr), "iterate", ARRAY_ITERATE_KEY);
|
|
@@ -3523,6 +3544,23 @@ var LintoEditor = (function(exports) {
|
|
|
3523
3544
|
}
|
|
3524
3545
|
return ret;
|
|
3525
3546
|
}
|
|
3547
|
+
function createSlots(slots, dynamicSlots) {
|
|
3548
|
+
for (let i2 = 0; i2 < dynamicSlots.length; i2++) {
|
|
3549
|
+
const slot = dynamicSlots[i2];
|
|
3550
|
+
if (isArray(slot)) {
|
|
3551
|
+
for (let j = 0; j < slot.length; j++) {
|
|
3552
|
+
slots[slot[j].name] = slot[j].fn;
|
|
3553
|
+
}
|
|
3554
|
+
} else if (slot) {
|
|
3555
|
+
slots[slot.name] = slot.key ? (...args) => {
|
|
3556
|
+
const res = slot.fn(...args);
|
|
3557
|
+
if (res) res.key = slot.key;
|
|
3558
|
+
return res;
|
|
3559
|
+
} : slot.fn;
|
|
3560
|
+
}
|
|
3561
|
+
}
|
|
3562
|
+
return slots;
|
|
3563
|
+
}
|
|
3526
3564
|
function renderSlot(slots, name, props, fallback, noSlotted, branchKey) {
|
|
3527
3565
|
if (props == null) props = {};
|
|
3528
3566
|
if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) {
|
|
@@ -4975,6 +5013,12 @@ var LintoEditor = (function(exports) {
|
|
|
4975
5013
|
optimized = false;
|
|
4976
5014
|
n2.dynamicChildren = null;
|
|
4977
5015
|
}
|
|
5016
|
+
if (n2.dynamicChildren && n1 && n1.dynamicChildren && n1.dynamicChildren.hasOnce) {
|
|
5017
|
+
if (n2.dynamicChildren === EMPTY_ARR) {
|
|
5018
|
+
n2.dynamicChildren = [];
|
|
5019
|
+
}
|
|
5020
|
+
n2.dynamicChildren.hasOnce = true;
|
|
5021
|
+
}
|
|
4978
5022
|
const { type, ref: ref3, shapeFlag } = n2;
|
|
4979
5023
|
switch (type) {
|
|
4980
5024
|
case Text:
|
|
@@ -5527,6 +5571,7 @@ var LintoEditor = (function(exports) {
|
|
|
5527
5571
|
const instance = n2.component = n1.component;
|
|
5528
5572
|
if (shouldUpdateComponent(n1, n2, optimized)) {
|
|
5529
5573
|
if (instance.asyncDep && !instance.asyncResolved) {
|
|
5574
|
+
n2.el = n1.el;
|
|
5530
5575
|
updateComponentPreRender(instance, n2, optimized);
|
|
5531
5576
|
return;
|
|
5532
5577
|
} else {
|
|
@@ -5872,7 +5917,7 @@ var LintoEditor = (function(exports) {
|
|
|
5872
5917
|
keyToNewIndexMap.set(nextChild.key, i2);
|
|
5873
5918
|
}
|
|
5874
5919
|
}
|
|
5875
|
-
let
|
|
5920
|
+
let j;
|
|
5876
5921
|
let patched = 0;
|
|
5877
5922
|
const toBePatched = e2 - s2 + 1;
|
|
5878
5923
|
let moved = false;
|
|
@@ -5889,9 +5934,9 @@ var LintoEditor = (function(exports) {
|
|
|
5889
5934
|
if (prevChild.key != null) {
|
|
5890
5935
|
newIndex = keyToNewIndexMap.get(prevChild.key);
|
|
5891
5936
|
} else {
|
|
5892
|
-
for (
|
|
5893
|
-
if (newIndexToOldIndexMap[
|
|
5894
|
-
newIndex =
|
|
5937
|
+
for (j = s2; j <= e2; j++) {
|
|
5938
|
+
if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {
|
|
5939
|
+
newIndex = j;
|
|
5895
5940
|
break;
|
|
5896
5941
|
}
|
|
5897
5942
|
}
|
|
@@ -5920,7 +5965,7 @@ var LintoEditor = (function(exports) {
|
|
|
5920
5965
|
}
|
|
5921
5966
|
}
|
|
5922
5967
|
const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;
|
|
5923
|
-
|
|
5968
|
+
j = increasingNewIndexSequence.length - 1;
|
|
5924
5969
|
for (i2 = toBePatched - 1; i2 >= 0; i2--) {
|
|
5925
5970
|
const nextIndex = s2 + i2;
|
|
5926
5971
|
const nextChild = c2[nextIndex];
|
|
@@ -5942,10 +5987,10 @@ var LintoEditor = (function(exports) {
|
|
|
5942
5987
|
optimized
|
|
5943
5988
|
);
|
|
5944
5989
|
} else if (moved) {
|
|
5945
|
-
if (
|
|
5990
|
+
if (j < 0 || i2 !== increasingNewIndexSequence[j]) {
|
|
5946
5991
|
move(nextChild, container, anchor, 2);
|
|
5947
5992
|
} else {
|
|
5948
|
-
|
|
5993
|
+
j--;
|
|
5949
5994
|
}
|
|
5950
5995
|
}
|
|
5951
5996
|
}
|
|
@@ -6036,7 +6081,7 @@ var LintoEditor = (function(exports) {
|
|
|
6036
6081
|
cacheIndex,
|
|
6037
6082
|
memo
|
|
6038
6083
|
} = vnode;
|
|
6039
|
-
if (patchFlag === -2) {
|
|
6084
|
+
if (patchFlag === -2 || dynamicChildren && dynamicChildren.hasOnce) {
|
|
6040
6085
|
optimized = false;
|
|
6041
6086
|
}
|
|
6042
6087
|
if (ref3 != null) {
|
|
@@ -6044,7 +6089,7 @@ var LintoEditor = (function(exports) {
|
|
|
6044
6089
|
setRef(ref3, null, parentSuspense, vnode, true);
|
|
6045
6090
|
resetTracking();
|
|
6046
6091
|
}
|
|
6047
|
-
if (cacheIndex != null) {
|
|
6092
|
+
if (cacheIndex != null && (!vnode.ctx || vnode.ctx === parentComponent)) {
|
|
6048
6093
|
parentComponent.renderCache[cacheIndex] = void 0;
|
|
6049
6094
|
}
|
|
6050
6095
|
if (shapeFlag & 256) {
|
|
@@ -6117,6 +6162,9 @@ var LintoEditor = (function(exports) {
|
|
|
6117
6162
|
}
|
|
6118
6163
|
if (type === Static) {
|
|
6119
6164
|
removeStaticNode(vnode);
|
|
6165
|
+
if (transition && !transition.persisted && transition.afterLeave) {
|
|
6166
|
+
transition.afterLeave();
|
|
6167
|
+
}
|
|
6120
6168
|
return;
|
|
6121
6169
|
}
|
|
6122
6170
|
const performRemove = () => {
|
|
@@ -6157,6 +6205,9 @@ var LintoEditor = (function(exports) {
|
|
|
6157
6205
|
if (job) {
|
|
6158
6206
|
job.flags |= 8;
|
|
6159
6207
|
unmount(subTree, instance, parentSuspense, doRemove);
|
|
6208
|
+
} else if (instance.vnode.el && subTree) {
|
|
6209
|
+
subTree.transition = instance.vnode.transition;
|
|
6210
|
+
unmount(subTree, instance, parentSuspense, doRemove);
|
|
6160
6211
|
}
|
|
6161
6212
|
if (um) {
|
|
6162
6213
|
queuePostRenderEffect(um, parentSuspense);
|
|
@@ -6272,14 +6323,14 @@ var LintoEditor = (function(exports) {
|
|
|
6272
6323
|
function getSequence(arr) {
|
|
6273
6324
|
const p2 = arr.slice();
|
|
6274
6325
|
const result = [0];
|
|
6275
|
-
let i2,
|
|
6326
|
+
let i2, j, u2, v2, c2;
|
|
6276
6327
|
const len = arr.length;
|
|
6277
6328
|
for (i2 = 0; i2 < len; i2++) {
|
|
6278
6329
|
const arrI = arr[i2];
|
|
6279
6330
|
if (arrI !== 0) {
|
|
6280
|
-
|
|
6281
|
-
if (arr[
|
|
6282
|
-
p2[i2] =
|
|
6331
|
+
j = result[result.length - 1];
|
|
6332
|
+
if (arr[j] < arrI) {
|
|
6333
|
+
p2[i2] = j;
|
|
6283
6334
|
result.push(i2);
|
|
6284
6335
|
continue;
|
|
6285
6336
|
}
|
|
@@ -6570,7 +6621,8 @@ var LintoEditor = (function(exports) {
|
|
|
6570
6621
|
el: vnode.el,
|
|
6571
6622
|
anchor: vnode.anchor,
|
|
6572
6623
|
ctx: vnode.ctx,
|
|
6573
|
-
ce: vnode.ce
|
|
6624
|
+
ce: vnode.ce,
|
|
6625
|
+
cacheIndex: vnode.cacheIndex
|
|
6574
6626
|
};
|
|
6575
6627
|
if (transition && cloneTransition) {
|
|
6576
6628
|
setTransitionHooks(
|
|
@@ -7031,7 +7083,7 @@ var LintoEditor = (function(exports) {
|
|
|
7031
7083
|
}
|
|
7032
7084
|
return true;
|
|
7033
7085
|
}
|
|
7034
|
-
const version = "3.5.
|
|
7086
|
+
const version = "3.5.43";
|
|
7035
7087
|
let policy = void 0;
|
|
7036
7088
|
const tt$1 = typeof window !== "undefined" && window.trustedTypes;
|
|
7037
7089
|
if (tt$1) {
|
|
@@ -8529,7 +8581,7 @@ var LintoEditor = (function(exports) {
|
|
|
8529
8581
|
}
|
|
8530
8582
|
const eventKey = hyphenate(event.key);
|
|
8531
8583
|
if (modifiers.some(
|
|
8532
|
-
(
|
|
8584
|
+
(k) => k === eventKey || keyNames[k] === eventKey
|
|
8533
8585
|
)) {
|
|
8534
8586
|
return fn(event);
|
|
8535
8587
|
}
|
|
@@ -9179,7 +9231,7 @@ var LintoEditor = (function(exports) {
|
|
|
9179
9231
|
const start = Math.floor(i2 * scale);
|
|
9180
9232
|
const end = Math.max(start + 1, Math.floor((i2 + step * 2) * scale));
|
|
9181
9233
|
let sum = 0;
|
|
9182
|
-
for (let
|
|
9234
|
+
for (let j = start; j < end; j++) sum += Math.abs(channel[j] ?? 0);
|
|
9183
9235
|
const value = sum / (end - start);
|
|
9184
9236
|
let x2 = i2;
|
|
9185
9237
|
let y2 = value * (height / 2);
|
|
@@ -9516,8 +9568,8 @@ var LintoEditor = (function(exports) {
|
|
|
9516
9568
|
}
|
|
9517
9569
|
return core;
|
|
9518
9570
|
}
|
|
9519
|
-
const _hoisted_1$
|
|
9520
|
-
const _sfc_main$
|
|
9571
|
+
const _hoisted_1$I = ["aria-label"];
|
|
9572
|
+
const _sfc_main$Q = /* @__PURE__ */ defineComponent({
|
|
9521
9573
|
__name: "Badge",
|
|
9522
9574
|
props: {
|
|
9523
9575
|
ariaLabel: { type: String }
|
|
@@ -9529,11 +9581,11 @@ var LintoEditor = (function(exports) {
|
|
|
9529
9581
|
"aria-label": __props.ariaLabel
|
|
9530
9582
|
}, [
|
|
9531
9583
|
renderSlot(_ctx.$slots, "default", {}, void 0, true)
|
|
9532
|
-
], 8, _hoisted_1$
|
|
9584
|
+
], 8, _hoisted_1$I);
|
|
9533
9585
|
};
|
|
9534
9586
|
}
|
|
9535
9587
|
});
|
|
9536
|
-
const _style_0$
|
|
9588
|
+
const _style_0$H = "\n.editor-badge[data-v-392808cc] {\n display: inline-flex;\n align-items: center;\n padding: 2px var(--spacing-sm);\n font-size: var(--font-size-xs);\n font-weight: 500;\n color: var(--color-text-muted);\n background-color: var(--color-surface);\n border: 1px solid var(--color-border-light);\n border-radius: var(--radius-sm);\n white-space: nowrap;\n}\n";
|
|
9537
9589
|
const _export_sfc = (sfc, props) => {
|
|
9538
9590
|
const target = sfc.__vccOpts || sfc;
|
|
9539
9591
|
for (const [key, val] of props) {
|
|
@@ -9541,7 +9593,7 @@ var LintoEditor = (function(exports) {
|
|
|
9541
9593
|
}
|
|
9542
9594
|
return target;
|
|
9543
9595
|
};
|
|
9544
|
-
const Badge = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
9596
|
+
const Badge = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["styles", [_style_0$H]], ["__scopeId", "data-v-392808cc"]]);
|
|
9545
9597
|
const hasA11yProp = (props) => {
|
|
9546
9598
|
for (const prop in props) {
|
|
9547
9599
|
if (prop.startsWith("aria-") || prop === "role" || prop === "title") {
|
|
@@ -10004,12 +10056,12 @@ var LintoEditor = (function(exports) {
|
|
|
10004
10056
|
md: 20,
|
|
10005
10057
|
lg: 24
|
|
10006
10058
|
};
|
|
10007
|
-
const _hoisted_1$
|
|
10059
|
+
const _hoisted_1$H = {
|
|
10008
10060
|
key: 1,
|
|
10009
10061
|
class: "editor-icon editor-icon--missing",
|
|
10010
10062
|
"aria-hidden": "true"
|
|
10011
10063
|
};
|
|
10012
|
-
const _sfc_main$
|
|
10064
|
+
const _sfc_main$P = /* @__PURE__ */ defineComponent({
|
|
10013
10065
|
__name: "EditorIcon",
|
|
10014
10066
|
props: {
|
|
10015
10067
|
name: { type: String },
|
|
@@ -10028,18 +10080,18 @@ var LintoEditor = (function(exports) {
|
|
|
10028
10080
|
style: normalizeStyle(style.value),
|
|
10029
10081
|
class: normalizeClass(["editor-icon", { "editor-icon--spin": __props.spin }]),
|
|
10030
10082
|
"aria-hidden": "true"
|
|
10031
|
-
}, null, 8, ["style", "class"])) : (openBlock(), createElementBlock("span", _hoisted_1$
|
|
10083
|
+
}, null, 8, ["style", "class"])) : (openBlock(), createElementBlock("span", _hoisted_1$H, "?"));
|
|
10032
10084
|
};
|
|
10033
10085
|
}
|
|
10034
10086
|
});
|
|
10035
|
-
const _style_0$
|
|
10036
|
-
const EditorIcon = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
10037
|
-
const _hoisted_1$
|
|
10038
|
-
const _hoisted_2$
|
|
10087
|
+
const _style_0$G = "\n.editor-icon[data-v-bdd2a2df] {\n flex-shrink: 0;\n}\n.editor-icon--missing[data-v-bdd2a2df] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n opacity: 0.5;\n font-size: 1em;\n line-height: 1;\n}\n.editor-icon--spin[data-v-bdd2a2df] {\n animation: editor-icon-spin-bdd2a2df 1s linear infinite;\n}\n@keyframes editor-icon-spin-bdd2a2df {\nto {\n transform: rotate(360deg);\n}\n}\n@media (prefers-reduced-motion: reduce) {\n.editor-icon--spin[data-v-bdd2a2df] {\n animation: none;\n}\n}\n";
|
|
10088
|
+
const EditorIcon = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["styles", [_style_0$G]], ["__scopeId", "data-v-bdd2a2df"]]);
|
|
10089
|
+
const _hoisted_1$G = ["type", "disabled", "aria-disabled", "aria-label"];
|
|
10090
|
+
const _hoisted_2$w = {
|
|
10039
10091
|
key: 3,
|
|
10040
10092
|
class: "editor-btn__label"
|
|
10041
10093
|
};
|
|
10042
|
-
const _sfc_main$
|
|
10094
|
+
const _sfc_main$O = /* @__PURE__ */ defineComponent({
|
|
10043
10095
|
__name: "Button",
|
|
10044
10096
|
props: {
|
|
10045
10097
|
label: { type: String },
|
|
@@ -10092,7 +10144,7 @@ var LintoEditor = (function(exports) {
|
|
|
10092
10144
|
name: __props.icon,
|
|
10093
10145
|
size: iconSize.value
|
|
10094
10146
|
}, null, 8, ["name", "size"])) : _ctx.$slots.icon ? renderSlot(_ctx.$slots, "icon", {}, void 0, true, 2) : createCommentVNode("", true),
|
|
10095
|
-
hasLabel.value ? (openBlock(), createElementBlock("span", _hoisted_2$
|
|
10147
|
+
hasLabel.value ? (openBlock(), createElementBlock("span", _hoisted_2$w, [
|
|
10096
10148
|
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
10097
10149
|
createTextVNode(toDisplayString(__props.label), 1)
|
|
10098
10150
|
], true)
|
|
@@ -10102,13 +10154,13 @@ var LintoEditor = (function(exports) {
|
|
|
10102
10154
|
name: __props.iconRight,
|
|
10103
10155
|
size: iconSize.value
|
|
10104
10156
|
}, null, 8, ["name", "size"])) : _ctx.$slots["icon-right"] ? renderSlot(_ctx.$slots, "icon-right", {}, void 0, true, 5) : createCommentVNode("", true)
|
|
10105
|
-
], 10, _hoisted_1$
|
|
10157
|
+
], 10, _hoisted_1$G);
|
|
10106
10158
|
};
|
|
10107
10159
|
}
|
|
10108
10160
|
});
|
|
10109
|
-
const _style_0$
|
|
10110
|
-
const Button = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
10111
|
-
const _sfc_main$
|
|
10161
|
+
const _style_0$F = "\n.transcript-ui-root .editor-btn[data-v-050bd95b] {\n /* Default tokens — overridden by variant/intent/size modifiers */\n --btn-bg: transparent;\n --btn-text: var(--color-text-secondary);\n --btn-border-color: var(--color-border);\n --btn-hover-bg: var(--color-surface-hover);\n --btn-hover-text: var(--color-text-primary);\n --btn-padding-y: 0;\n --btn-padding-x: var(--spacing-sm);\n --btn-font-size: var(--font-size-xs);\n --btn-height: 32px;\n --btn-gap: var(--spacing-xs);\n\n /* Same reset as every other custom button in this codebase (see\n EditableText, EditorCheckbox, Tabs, SpeakerPopover, TranscriptionTurn):\n `all: unset` clears the UA button chrome (margin, appearance, inherited\n font mismatches on Safari/Firefox, the Firefox ::-moz-focus-inner\n padding) that the previous per-property overrides below left in place.\n Every property the button actually needs is re-declared after it. */\n all: unset;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n gap: var(--btn-gap);\n height: var(--btn-height);\n padding: var(--btn-padding-y) var(--btn-padding-x);\n font-family: var(--font-family);\n font-size: var(--btn-font-size);\n font-weight: 500;\n line-height: 1;\n color: var(--btn-text);\n background-color: var(--btn-bg);\n border: 1px solid var(--btn-border-color);\n border-radius: var(--radius-sm);\n cursor: pointer;\n white-space: nowrap;\n transition:\n background-color var(--transition-duration),\n color var(--transition-duration),\n border-color var(--transition-duration);\n}\n.transcript-ui-root .editor-btn[data-v-050bd95b]:hover:not(:disabled) {\n background-color: var(--btn-hover-bg);\n color: var(--btn-hover-text);\n}\n.transcript-ui-root .editor-btn[data-v-050bd95b]:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n\n/* Note: this rule is repeated lower in the file (after variants) to win the\n cascade on the variant CSS vars. Keep this lightweight version for the\n cursor and hover suppression. */\n.transcript-ui-root .editor-btn[data-v-050bd95b]:disabled {\n cursor: not-allowed;\n}\n.transcript-ui-root .editor-btn[data-v-050bd95b]:disabled:hover {\n background-color: var(--btn-bg);\n color: var(--btn-text);\n}\n.editor-btn__label[data-v-050bd95b] {\n /* //overflow: hidden;\n text-overflow: ellipsis; */\n text-overflow: ellipsis;\n text-box: cap alphabetic;\n}\n\n/* Sizes.\n .transcript-ui-root prefix here too — not because Nextcloud could ever\n target --btn-* directly, but because these vars are read by the BASE\n .editor-btn rule (also prefixed, so specificity (0,3,0)): if a variant\n rule sets the same custom property at a lower specificity (0,2,0), the\n base rule's default wins over it regardless of source order, silently\n breaking every variant. All rules touching --btn-* must stay at the same\n specificity as the base rule. */\n.transcript-ui-root .editor-btn--sm[data-v-050bd95b] {\n /* defaults */\n}\n.transcript-ui-root .editor-btn--md[data-v-050bd95b] {\n --btn-padding-y: 0;\n --btn-padding-x: var(--spacing-md);\n --btn-font-size: var(--font-size-sm);\n --btn-height: 40px;\n}\n.transcript-ui-root .editor-btn--lg[data-v-050bd95b] {\n --btn-padding-y: 0;\n --btn-padding-x: var(--spacing-md);\n --btn-font-size: var(--font-size-base);\n --btn-height: 44px;\n}\n\n/* Icon-only: square */\n.transcript-ui-root .editor-btn--icon-only[data-v-050bd95b] {\n width: var(--btn-height);\n padding: 0;\n}\n.transcript-ui-root .editor-btn--block[data-v-050bd95b] {\n display: flex;\n width: 100%;\n}\n\n/* Variants — default intent */\n.transcript-ui-root .editor-btn--primary[data-v-050bd95b] {\n --btn-bg: var(--color-primary);\n --btn-text: var(--color-white);\n --btn-border-color: var(--color-primary);\n --btn-hover-bg: var(--color-primary-hover);\n --btn-hover-text: var(--color-white);\n}\n.transcript-ui-root .editor-btn--secondary[data-v-050bd95b] {\n --btn-bg: transparent;\n --btn-text: var(--color-primary);\n --btn-border-color: var(--color-primary);\n --btn-hover-bg: var(--color-primary);\n --btn-hover-text: var(--color-white);\n}\n.transcript-ui-root .editor-btn--tertiary[data-v-050bd95b] {\n --btn-bg: transparent;\n --btn-text: var(--color-text-primary);\n --btn-border-color: var(--color-border);\n --btn-hover-bg: var(--color-surface-hover);\n --btn-hover-text: var(--color-text-primary);\n}\n.transcript-ui-root .editor-btn--transparent[data-v-050bd95b] {\n --btn-bg: transparent;\n --btn-text: var(--color-text-secondary);\n --btn-border-color: transparent;\n --btn-hover-bg: var(--color-surface-hover);\n --btn-hover-text: var(--color-text-primary);\n}\n\n/* Literal theme inversion: background = the theme's text color and\n vice-versa — high contrast in both light and dark themes without\n borrowing the primary color's semantics. */\n.transcript-ui-root .editor-btn--inverse[data-v-050bd95b] {\n --btn-bg: var(--color-text-primary);\n --btn-text: var(--color-background);\n --btn-border-color: transparent;\n --btn-hover-bg: var(--color-text-secondary);\n --btn-hover-text: var(--color-background);\n}\n\n/* Destructive intent overrides */\n.transcript-ui-root .editor-btn--destructive.editor-btn--primary[data-v-050bd95b] {\n --btn-bg: var(--color-danger);\n --btn-text: var(--color-white);\n --btn-border-color: var(--color-danger);\n --btn-hover-bg: var(--color-danger-hover);\n --btn-hover-text: var(--color-white);\n}\n.transcript-ui-root .editor-btn--destructive.editor-btn--secondary[data-v-050bd95b] {\n --btn-bg: transparent;\n --btn-text: var(--color-danger);\n --btn-border-color: var(--color-danger);\n --btn-hover-bg: var(--color-danger);\n --btn-hover-text: var(--color-white);\n}\n.transcript-ui-root .editor-btn--destructive.editor-btn--tertiary[data-v-050bd95b],\n.transcript-ui-root .editor-btn--destructive.editor-btn--transparent[data-v-050bd95b] {\n --btn-text: var(--color-danger);\n --btn-hover-bg: var(--color-danger-soft);\n --btn-hover-text: var(--color-danger);\n}\n\n/* Disabled: gray-out regardless of variant. Placed after the variants so the\n CSS var overrides win the cascade (same specificity, last declaration). */\n.transcript-ui-root .editor-btn[data-v-050bd95b]:disabled {\n --btn-bg: var(--color-surface);\n --btn-text: var(--color-text-muted);\n --btn-border-color: var(--color-border);\n --btn-hover-bg: var(--color-surface);\n --btn-hover-text: var(--color-text-muted);\n}\n\n/* The transparent variant has no chrome when enabled — disabling it must not\n ADD a box; the muted text alone carries the disabled signal. */\n.transcript-ui-root .editor-btn--transparent[data-v-050bd95b]:disabled {\n --btn-bg: transparent;\n --btn-border-color: transparent;\n --btn-hover-bg: transparent;\n}\n\n/* Inverse stays a filled, borderless chip when disabled — dimmed, but the\n silhouette must not change. */\n.transcript-ui-root .editor-btn--inverse[data-v-050bd95b]:disabled {\n --btn-bg: var(--color-surface-hover);\n --btn-border-color: transparent;\n --btn-hover-bg: var(--color-surface-hover);\n}\n";
|
|
10162
|
+
const Button = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["styles", [_style_0$F]], ["__scopeId", "data-v-050bd95b"]]);
|
|
10163
|
+
const _sfc_main$N = /* @__PURE__ */ defineComponent({
|
|
10112
10164
|
__name: "CopyButton",
|
|
10113
10165
|
props: {
|
|
10114
10166
|
icon: { default: "copy", type: String },
|
|
@@ -10176,8 +10228,8 @@ var LintoEditor = (function(exports) {
|
|
|
10176
10228
|
};
|
|
10177
10229
|
}
|
|
10178
10230
|
});
|
|
10179
|
-
const _style_0$
|
|
10180
|
-
const CopyButton = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
10231
|
+
const _style_0$E = "\n.copy-btn--copied[data-v-5b088678] {\n color: var(--color-success, #2e7d32);\n}\n.copy-icon-enter-active[data-v-5b088678],\n.copy-icon-leave-active[data-v-5b088678] {\n transition:\n opacity var(--transition-duration) ease,\n scale var(--transition-duration) ease;\n}\n.copy-icon-enter-from[data-v-5b088678] {\n opacity: 0;\n scale: 0.6;\n}\n.copy-icon-leave-to[data-v-5b088678] {\n opacity: 0;\n scale: 0.6;\n}\n@media (prefers-reduced-motion: reduce) {\n.copy-icon-enter-active[data-v-5b088678],\n .copy-icon-leave-active[data-v-5b088678] {\n transition: none;\n}\n}\n";
|
|
10232
|
+
const CopyButton = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["styles", [_style_0$E]], ["__scopeId", "data-v-5b088678"]]);
|
|
10181
10233
|
const fr = {
|
|
10182
10234
|
"editor.loading": "Chargement…",
|
|
10183
10235
|
"editor.loadError": "Erreur de chargement",
|
|
@@ -10494,10 +10546,10 @@ var LintoEditor = (function(exports) {
|
|
|
10494
10546
|
locale: fallbackLocale
|
|
10495
10547
|
};
|
|
10496
10548
|
}
|
|
10497
|
-
const _hoisted_1$
|
|
10498
|
-
const _hoisted_2$
|
|
10499
|
-
const _hoisted_3$
|
|
10500
|
-
const _sfc_main$
|
|
10549
|
+
const _hoisted_1$F = { class: "code-block" };
|
|
10550
|
+
const _hoisted_2$v = ["innerHTML"];
|
|
10551
|
+
const _hoisted_3$o = { key: 1 };
|
|
10552
|
+
const _sfc_main$M = /* @__PURE__ */ defineComponent({
|
|
10501
10553
|
__name: "CodeBlock",
|
|
10502
10554
|
props: {
|
|
10503
10555
|
code: { type: String },
|
|
@@ -10526,7 +10578,7 @@ var LintoEditor = (function(exports) {
|
|
|
10526
10578
|
{ immediate: true }
|
|
10527
10579
|
);
|
|
10528
10580
|
return (_ctx, _cache) => {
|
|
10529
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
10581
|
+
return openBlock(), createElementBlock("div", _hoisted_1$F, [
|
|
10530
10582
|
!__props.streaming ? (openBlock(), createBlock(CopyButton, {
|
|
10531
10583
|
key: 0,
|
|
10532
10584
|
class: "code-block__copy",
|
|
@@ -10539,13 +10591,13 @@ var LintoEditor = (function(exports) {
|
|
|
10539
10591
|
highlighted.value ? (openBlock(), createElementBlock("code", {
|
|
10540
10592
|
key: 0,
|
|
10541
10593
|
innerHTML: highlighted.value
|
|
10542
|
-
}, null, 8, _hoisted_2$
|
|
10594
|
+
}, null, 8, _hoisted_2$v)) : (openBlock(), createElementBlock("code", _hoisted_3$o, toDisplayString(__props.code), 1))
|
|
10543
10595
|
])
|
|
10544
10596
|
]);
|
|
10545
10597
|
};
|
|
10546
10598
|
}
|
|
10547
10599
|
});
|
|
10548
|
-
const _style_0$
|
|
10600
|
+
const _style_0$D = "\n.code-block[data-v-ad87d1e4] {\n position: relative;\n}\n.code-block__copy[data-v-ad87d1e4] {\n position: absolute;\n top: var(--spacing-xs);\n right: var(--spacing-xs);\n opacity: 0;\n transition: opacity 0.15s ease;\n}\n.code-block:hover .code-block__copy[data-v-ad87d1e4],\n.code-block:focus-within .code-block__copy[data-v-ad87d1e4] {\n opacity: 1;\n}\n.code-block pre[data-v-ad87d1e4] {\n margin: var(--spacing-md) 0;\n padding: var(--spacing-md);\n background-color: var(--color-surface);\n border-radius: var(--radius-md);\n overflow-x: auto;\n border: 1px solid var(--color-border);\n}\n.code-block pre code[data-v-ad87d1e4] {\n padding: 0;\n background: none;\n font-family: var(--font-family-mono);\n font-size: 0.9em;\n}\n@media (prefers-reduced-motion: reduce) {\n.code-block__copy[data-v-ad87d1e4] {\n transition: none;\n}\n}\n";
|
|
10549
10601
|
const _style_1 = `/**
|
|
10550
10602
|
* prism.js default theme for JavaScript, CSS and HTML
|
|
10551
10603
|
* Based on dabblet (http://dabblet.com)
|
|
@@ -10671,20 +10723,20 @@ pre[class*="language-"] {
|
|
|
10671
10723
|
cursor: help;
|
|
10672
10724
|
}
|
|
10673
10725
|
`;
|
|
10674
|
-
const CodeBlock = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
10675
|
-
const _hoisted_1$
|
|
10726
|
+
const CodeBlock = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["styles", [_style_0$D, _style_1]], ["__scopeId", "data-v-ad87d1e4"]]);
|
|
10727
|
+
const _hoisted_1$E = {
|
|
10676
10728
|
key: 0,
|
|
10677
10729
|
class: "form-field__header"
|
|
10678
10730
|
};
|
|
10679
|
-
const _hoisted_2$
|
|
10680
|
-
const _hoisted_3$
|
|
10731
|
+
const _hoisted_2$u = ["for"];
|
|
10732
|
+
const _hoisted_3$n = {
|
|
10681
10733
|
key: 0,
|
|
10682
10734
|
class: "form-field__required",
|
|
10683
10735
|
"aria-hidden": "true"
|
|
10684
10736
|
};
|
|
10685
|
-
const _hoisted_4$
|
|
10686
|
-
const _hoisted_5$
|
|
10687
|
-
const _hoisted_6$
|
|
10737
|
+
const _hoisted_4$e = { class: "form-field__input-wrapper" };
|
|
10738
|
+
const _hoisted_5$d = ["id", "disabled", "required", "aria-required", "aria-invalid", "aria-describedby"];
|
|
10739
|
+
const _hoisted_6$b = ["value"];
|
|
10688
10740
|
const _hoisted_7$5 = ["type", "id", "disabled", "readonly", "placeholder", "autocomplete", "required", "aria-required", "aria-invalid", "aria-describedby"];
|
|
10689
10741
|
const _hoisted_8$3 = {
|
|
10690
10742
|
key: 3,
|
|
@@ -10697,7 +10749,7 @@ pre[class*="language-"] {
|
|
|
10697
10749
|
};
|
|
10698
10750
|
const _hoisted_10$3 = ["id"];
|
|
10699
10751
|
const _hoisted_11$2 = { class: "form-field__error" };
|
|
10700
|
-
const _sfc_main$
|
|
10752
|
+
const _sfc_main$L = /* @__PURE__ */ defineComponent({
|
|
10701
10753
|
__name: "FormInput",
|
|
10702
10754
|
props: {
|
|
10703
10755
|
field: { type: Object },
|
|
@@ -10807,17 +10859,17 @@ pre[class*="language-"] {
|
|
|
10807
10859
|
return openBlock(), createElementBlock("div", {
|
|
10808
10860
|
class: normalizeClass(rootClasses.value)
|
|
10809
10861
|
}, [
|
|
10810
|
-
__props.field.label ? (openBlock(), createElementBlock("div", _hoisted_1$
|
|
10862
|
+
__props.field.label ? (openBlock(), createElementBlock("div", _hoisted_1$E, [
|
|
10811
10863
|
createBaseVNode("label", {
|
|
10812
10864
|
class: "form-field__label",
|
|
10813
10865
|
for: id.value
|
|
10814
10866
|
}, [
|
|
10815
10867
|
createTextVNode(toDisplayString(__props.field.label) + " ", 1),
|
|
10816
|
-
isRequired.value ? (openBlock(), createElementBlock("span", _hoisted_3$
|
|
10817
|
-
], 8, _hoisted_2$
|
|
10868
|
+
isRequired.value ? (openBlock(), createElementBlock("span", _hoisted_3$n, "*")) : createCommentVNode("", true)
|
|
10869
|
+
], 8, _hoisted_2$u),
|
|
10818
10870
|
renderSlot(_ctx.$slots, "content-after-label", {}, void 0, true)
|
|
10819
10871
|
])) : createCommentVNode("", true),
|
|
10820
|
-
createBaseVNode("div", _hoisted_4$
|
|
10872
|
+
createBaseVNode("div", _hoisted_4$e, [
|
|
10821
10873
|
renderSlot(_ctx.$slots, "default", {}, void 0, true),
|
|
10822
10874
|
_ctx.$slots["custom-input"] ? renderSlot(_ctx.$slots, "custom-input", {
|
|
10823
10875
|
id: id.value,
|
|
@@ -10843,9 +10895,9 @@ pre[class*="language-"] {
|
|
|
10843
10895
|
return openBlock(), createElementBlock("option", {
|
|
10844
10896
|
key: opt.value,
|
|
10845
10897
|
value: opt.value
|
|
10846
|
-
}, toDisplayString(opt.label), 9, _hoisted_6$
|
|
10898
|
+
}, toDisplayString(opt.label), 9, _hoisted_6$b);
|
|
10847
10899
|
}), 128))
|
|
10848
|
-
], 16, _hoisted_5$
|
|
10900
|
+
], 16, _hoisted_5$d)), [
|
|
10849
10901
|
[vModelSelect, draft.value]
|
|
10850
10902
|
]) : withDirectives((openBlock(), createElementBlock("input", mergeProps({
|
|
10851
10903
|
key: 2,
|
|
@@ -10904,10 +10956,10 @@ pre[class*="language-"] {
|
|
|
10904
10956
|
};
|
|
10905
10957
|
}
|
|
10906
10958
|
});
|
|
10907
|
-
const _style_0$
|
|
10908
|
-
const FormInput = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
10909
|
-
const _hoisted_1$
|
|
10910
|
-
const _sfc_main$
|
|
10959
|
+
const _style_0$C = "\n/* ── Root ──────────────────────────────────────────────────────────── */\n.form-field[data-v-863d0b18] {\n --field-height: 40px;\n --field-padding-x: var(--spacing-md);\n --field-font-size: var(--font-size-sm);\n\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n width: 100%;\n}\n.form-field--sm[data-v-863d0b18] {\n --field-height: 32px;\n --field-padding-x: var(--spacing-sm);\n --field-font-size: var(--font-size-xs);\n}\n.form-field--lg[data-v-863d0b18] {\n --field-height: 44px;\n --field-padding-x: var(--spacing-md);\n --field-font-size: var(--font-size-base);\n}\n.form-field--disabled[data-v-863d0b18] {\n opacity: 0.7;\n}\n\n/* ── Header (label row) ────────────────────────────────────────────── */\n.form-field__header[data-v-863d0b18] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-sm);\n}\n.form-field__label[data-v-863d0b18] {\n display: block;\n margin: 0;\n font-size: var(--font-size-sm);\n font-weight: 600;\n line-height: 1.2;\n color: var(--color-text-primary);\n}\n.form-field--error .form-field__label[data-v-863d0b18] {\n color: var(--color-danger);\n}\n.form-field__required[data-v-863d0b18] {\n margin-left: 2px;\n color: var(--color-danger);\n}\n\n/* ── Input wrapper ─────────────────────────────────────────────────── */\n.form-field__input-wrapper[data-v-863d0b18] {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-sm);\n width: 100%;\n}\n\n/* ── Input ─────────────────────────────────────────────────────────── */\n.form-field__input[data-v-863d0b18] {\n flex: 1;\n box-sizing: border-box;\n height: var(--field-height);\n padding: 0 var(--field-padding-x);\n font-family: inherit;\n font-size: var(--field-font-size);\n line-height: 1.4;\n color: var(--color-text-primary);\n background-color: var(--color-background);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-sm);\n outline: none;\n transition:\n border-color var(--transition-duration),\n box-shadow var(--transition-duration);\n}\n.form-field__input[data-v-863d0b18]::placeholder {\n color: var(--color-text-muted);\n opacity: 1;\n}\n.form-field__input[data-v-863d0b18]:hover:not(:disabled) {\n border-color: var(--color-text-muted);\n}\n.form-field__input[data-v-863d0b18]:focus-visible {\n border-color: var(--color-primary);\n box-shadow: 0 0 0 3px\n color-mix(in srgb, var(--color-primary) 20%, transparent);\n}\n.form-field__input[data-v-863d0b18]:disabled {\n cursor: not-allowed;\n background-color: var(--color-surface);\n color: var(--color-text-muted);\n}\n.form-field__input--fullwidth[data-v-863d0b18] {\n width: 100%;\n max-width: none;\n}\n.form-field__input--select[data-v-863d0b18] {\n cursor: pointer;\n appearance: auto;\n}\n.form-field__input--error[data-v-863d0b18] {\n border-color: var(--color-danger);\n}\n.form-field__input--error[data-v-863d0b18]:focus-visible {\n border-color: var(--color-danger);\n box-shadow: 0 0 0 3px\n color-mix(in srgb, var(--color-danger) 20%, transparent);\n}\n\n/* ── Confirmation actions ──────────────────────────────────────────── */\n.form-field__actions[data-v-863d0b18] {\n display: flex;\n align-items: flex-start;\n gap: var(--spacing-xs);\n flex-shrink: 0;\n}\n.form-field__actions--placeholder[data-v-863d0b18] {\n /* Reserve space so showing the buttons doesn't shift layout. */\n width: calc(var(--field-height) * 2 + var(--spacing-xs));\n height: var(--field-height);\n pointer-events: none;\n opacity: 0;\n}\n\n/* ── Info / error ──────────────────────────────────────────────────── */\n.form-field__info[data-v-863d0b18] {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n}\n.form-field__error[data-v-863d0b18] {\n margin: 0;\n font-size: var(--font-size-xs);\n line-height: 1.2;\n color: var(--color-danger);\n}\n\n/* ── Inline layout ─────────────────────────────────────────────────── */\n.form-field--inline[data-v-863d0b18] {\n flex-direction: row;\n align-items: center;\n gap: var(--spacing-md);\n}\n.form-field--inline .form-field__header[data-v-863d0b18] {\n flex-shrink: 0;\n min-width: 120px;\n}\n.form-field--inline .form-field__input-wrapper[data-v-863d0b18] {\n flex: 1;\n}\n\n/* ── Reduced motion ────────────────────────────────────────────────── */\n@media (prefers-reduced-motion: reduce) {\n.form-field__input[data-v-863d0b18] {\n transition: none;\n}\n}\n";
|
|
10960
|
+
const FormInput = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["styles", [_style_0$C]], ["__scopeId", "data-v-863d0b18"]]);
|
|
10961
|
+
const _hoisted_1$D = ["disabled", "aria-label"];
|
|
10962
|
+
const _sfc_main$K = /* @__PURE__ */ defineComponent({
|
|
10911
10963
|
__name: "EditableText",
|
|
10912
10964
|
props: {
|
|
10913
10965
|
modelValue: { type: String },
|
|
@@ -10981,12 +11033,12 @@ pre[class*="language-"] {
|
|
|
10981
11033
|
disabled: __props.disabled,
|
|
10982
11034
|
"aria-label": __props.ariaLabel,
|
|
10983
11035
|
onClick: startEdit
|
|
10984
|
-
}, toDisplayString(__props.modelValue || __props.placeholder), 9, _hoisted_1$
|
|
11036
|
+
}, toDisplayString(__props.modelValue || __props.placeholder), 9, _hoisted_1$D));
|
|
10985
11037
|
};
|
|
10986
11038
|
}
|
|
10987
11039
|
});
|
|
10988
|
-
const _style_0$
|
|
10989
|
-
const EditableText = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
11040
|
+
const _style_0$B = "\n.transcript-ui-root .editable-text-display[data-v-ff6456c8] {\n all: unset;\n cursor: text;\n text-align: left;\n font: inherit;\n color: inherit;\n line-height: inherit;\n padding: 0;\n border: 1px solid transparent;\n border-radius: var(--radius-sm);\n min-width: 0;\n}\n.transcript-ui-root .editable-text-display[data-v-ff6456c8]:not(:disabled):hover {\n border-color: var(--color-border);\n}\n.transcript-ui-root .editable-text-display[data-v-ff6456c8]:disabled {\n cursor: default;\n}\n";
|
|
11041
|
+
const EditableText = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["styles", [_style_0$B]], ["__scopeId", "data-v-ff6456c8"]]);
|
|
10990
11042
|
function serialize(input) {
|
|
10991
11043
|
if (typeof input === "string") return `'${input}'`;
|
|
10992
11044
|
return new Serializer().serialize(input);
|
|
@@ -12710,11 +12762,11 @@ pre[class*="language-"] {
|
|
|
12710
12762
|
function isPointInPolygon(point, polygon) {
|
|
12711
12763
|
const { x: x2, y: y2 } = point;
|
|
12712
12764
|
let inside = false;
|
|
12713
|
-
for (let i2 = 0,
|
|
12765
|
+
for (let i2 = 0, j = polygon.length - 1; i2 < polygon.length; j = i2++) {
|
|
12714
12766
|
const xi = polygon[i2].x;
|
|
12715
12767
|
const yi = polygon[i2].y;
|
|
12716
|
-
const xj = polygon[
|
|
12717
|
-
const yj = polygon[
|
|
12768
|
+
const xj = polygon[j].x;
|
|
12769
|
+
const yj = polygon[j].y;
|
|
12718
12770
|
const intersect = yi > y2 !== yj > y2 && x2 < (xj - xi) * (y2 - yi) / (yj - yi) + xi;
|
|
12719
12771
|
if (intersect) inside = !inside;
|
|
12720
12772
|
}
|
|
@@ -15403,7 +15455,7 @@ pre[class*="language-"] {
|
|
|
15403
15455
|
update
|
|
15404
15456
|
};
|
|
15405
15457
|
}
|
|
15406
|
-
const _hoisted_1$
|
|
15458
|
+
const _hoisted_1$C = ["dir"];
|
|
15407
15459
|
const PopperContentPropsDefaultValue = {
|
|
15408
15460
|
side: "bottom",
|
|
15409
15461
|
sideOffset: 0,
|
|
@@ -15696,7 +15748,7 @@ pre[class*="language-"] {
|
|
|
15696
15748
|
"data-align",
|
|
15697
15749
|
"dir",
|
|
15698
15750
|
"style"
|
|
15699
|
-
]))], 12, _hoisted_1$
|
|
15751
|
+
]))], 12, _hoisted_1$C);
|
|
15700
15752
|
};
|
|
15701
15753
|
}
|
|
15702
15754
|
});
|
|
@@ -17514,7 +17566,7 @@ pre[class*="language-"] {
|
|
|
17514
17566
|
}
|
|
17515
17567
|
});
|
|
17516
17568
|
var DropdownMenuTrigger_default = DropdownMenuTrigger_vue_vue_type_script_setup_true_lang_default;
|
|
17517
|
-
const _sfc_main$
|
|
17569
|
+
const _sfc_main$J = /* @__PURE__ */ defineComponent({
|
|
17518
17570
|
__name: "EditorCheckbox",
|
|
17519
17571
|
props: {
|
|
17520
17572
|
modelValue: { type: Boolean },
|
|
@@ -17547,8 +17599,8 @@ pre[class*="language-"] {
|
|
|
17547
17599
|
};
|
|
17548
17600
|
}
|
|
17549
17601
|
});
|
|
17550
|
-
const _style_0$
|
|
17551
|
-
const EditorCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
17602
|
+
const _style_0$A = '\n.transcript-ui-root .checkbox[data-v-ed0978f7] {\n all: unset;\n width: 16px;\n height: 16px;\n flex-shrink: 0;\n border: 1.5px solid var(--color-border);\n border-radius: var(--radius-sm);\n background-color: var(--color-surface);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n transition:\n background-color var(--transition-duration),\n border-color var(--transition-duration);\n}\n.transcript-ui-root .checkbox[data-v-ed0978f7]:hover {\n border-color: var(--color-primary);\n}\n.transcript-ui-root .checkbox[data-v-ed0978f7]:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n.transcript-ui-root .checkbox[data-state="checked"][data-v-ed0978f7] {\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n}\n.checkbox-indicator[data-v-ed0978f7] {\n color: var(--color-white, #fff);\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n';
|
|
17603
|
+
const EditorCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["styles", [_style_0$A]], ["__scopeId", "data-v-ed0978f7"]]);
|
|
17552
17604
|
function extend(destination) {
|
|
17553
17605
|
for (var i2 = 1; i2 < arguments.length; i2++) {
|
|
17554
17606
|
var source = arguments[i2];
|
|
@@ -18317,120 +18369,146 @@ pre[class*="language-"] {
|
|
|
18317
18369
|
return { async: false, breaks: false, extensions: null, gfm: true, hooks: null, pedantic: false, renderer: null, silent: false, tokenizer: null, walkTokens: null };
|
|
18318
18370
|
}
|
|
18319
18371
|
var T = A();
|
|
18320
|
-
function
|
|
18321
|
-
T =
|
|
18372
|
+
function U(l2) {
|
|
18373
|
+
T = l2;
|
|
18322
18374
|
}
|
|
18323
18375
|
var E$1 = { exec: () => null };
|
|
18324
|
-
function I(
|
|
18376
|
+
function I(l2) {
|
|
18325
18377
|
let e2 = [];
|
|
18326
18378
|
return (t2) => {
|
|
18327
|
-
let n2 = Math.max(0, Math.min(3, t2 - 1)),
|
|
18328
|
-
return
|
|
18379
|
+
let n2 = Math.max(0, Math.min(3, t2 - 1)), i2 = e2[n2];
|
|
18380
|
+
return i2 || (i2 = l2(n2), e2[n2] = i2), i2;
|
|
18329
18381
|
};
|
|
18330
18382
|
}
|
|
18331
|
-
function
|
|
18332
|
-
let t2 = typeof
|
|
18383
|
+
function d$2(l2, e2 = "") {
|
|
18384
|
+
let t2 = typeof l2 == "string" ? l2 : l2.source, n2 = { replace: (i2, r2) => {
|
|
18333
18385
|
let o2 = typeof r2 == "string" ? r2 : r2.source;
|
|
18334
|
-
return o2 = o2.replace(m$1.caret, "$1"), t2 = t2.replace(
|
|
18386
|
+
return o2 = o2.replace(m$1.caret, "$1"), t2 = t2.replace(i2, o2), n2;
|
|
18335
18387
|
}, getRegex: () => new RegExp(t2, e2) };
|
|
18336
18388
|
return n2;
|
|
18337
18389
|
}
|
|
18338
|
-
var
|
|
18390
|
+
var we = ((l2 = "") => {
|
|
18339
18391
|
try {
|
|
18340
|
-
return !!new RegExp("(?<=1)(?<!1)" +
|
|
18392
|
+
return !!new RegExp("(?<=1)(?<!1)" + l2);
|
|
18341
18393
|
} catch {
|
|
18342
18394
|
return false;
|
|
18343
18395
|
}
|
|
18344
|
-
})(), m$1 = { codeRemoveIndent: /^(?: {
|
|
18345
|
-
]`).replace("lheading",
|
|
18346
|
-
var
|
|
18347
|
-
function R(
|
|
18396
|
+
})(), m$1 = { codeRemoveIndent: /^(?: {0,3}\t| {1,4})/gm, outputLinkReplace: /\\([\[\]])/g, indentCodeCompensation: /^(\s+)(?:```)/, beginningSpace: /^\s+/, endingHash: /#$/, startingSpaceChar: /^ /, endingSpaceChar: / $/, endingSpaceTabChar: /[ \t]$/, nonSpaceChar: /[^ ]/, newLineCharGlobal: /\n/g, tabCharGlobal: /\t/g, multipleSpaceGlobal: /\s+/g, blankLine: /^[ \t]*$/, doubleBlankLine: /\n[ \t]*\n[ \t]*$/, blockquoteStart: /^ {0,3}>/, blockquoteSetextReplace: /\n {0,3}((?:=+|-+) *)(?=\n|$)/g, blockquoteSetextReplace2: /^ {0,3}>[ \t]?/gm, listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g, listIsTask: /^\[[ xX]\] +\S/, listReplaceTask: /^\[[ xX]\] +/, listTaskCheckbox: /\[[ xX]\]/, anyLine: /\n.*\n/, hrefBrackets: /^<(.*)>$/, tableDelimiter: /[:|]/, tableAlignChars: /^\||\| *$/g, tableRowBlankLine: /\n[ \t]*$/, tableAlignRight: /^ *-+: *$/, tableAlignCenter: /^ *:-+: *$/, tableAlignLeft: /^ *:-+ *$/, startATag: /^<a /i, endATag: /^<\/a>/i, startPreScriptTag: /^<(pre|code|kbd|script)(\s|>)/i, endPreScriptTag: /^<\/(pre|code|kbd|script)(\s|>)/i, startAngleBracket: /^</, endAngleBracket: />$/, pedanticHrefTitle: /^([^'"]*[^\s])\s+(['"])(.*)\2/, unicodeAlphaNumeric: /[\p{L}\p{N}]/u, escapeTest: /[&<>"']/, escapeReplace: /[&<>"']/g, escapeTestNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/, escapeReplaceNoEncode: /[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g, caret: /(^|[^\[])\^/g, percentDecode: /%25/g, findPipe: /\|/g, splitPipe: / \|/, slashPipe: /\\\|/g, carriageReturn: /\r\n|\r/g, spaceLine: /^ +$/gm, notSpaceStart: /^\S*/, endingNewline: /\n$/, listItemRegex: (l2) => new RegExp(`^( {0,3}${l2})((?:[ ][^\\n]*)?(?:\\n|$))`), nextBulletRegex: I((l2) => new RegExp(`^ {0,${l2}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)), hrRegex: I((l2) => new RegExp(`^ {0,${l2}}((?:-[ ]*){3,}|(?:_[ ]*){3,}|(?:\\*[ ]*){3,})(?:\\n+|$)`)), fencesBeginRegex: I((l2) => new RegExp(`^ {0,${l2}}(?:\`\`\`|~~~)`)), headingBeginRegex: I((l2) => new RegExp(`^ {0,${l2}}#`)), htmlBeginRegex: I((l2) => new RegExp(`^ {0,${l2}}(?:</?(?:${H})(?: +|$|/?>)|<(?:script|pre|style|textarea|!--))`, "i")), blockquoteBeginRegex: I((l2) => new RegExp(`^ {0,${l2}}>`)) }, ye = /^(?:[ \t]*(?:\n|$))+/, Pe = /^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/, Se = /^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/, v$1 = /^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/, _e = /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/, K = / {0,3}(?:[*+-]|\d{1,9}[.)])/, le = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/, ue = d$2(le).replace(/bull/g, K).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}(?:\s|$)/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/\|table/g, "").getRegex(), $e = d$2(le).replace(/bull/g, K).replace(/blockCode/g, /(?: {4}| {0,3}\t)/).replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g, / {0,3}>/).replace(/heading/g, / {0,3}#{1,6}(?:\s|$)/).replace(/html/g, / {0,3}<[^\n>]+>\n/).replace(/table/g, / {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(), W = /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/, Le = /^[^\n]+/, X = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/, ze = d$2(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label", X).replace("title", /(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(), Ee = d$2(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g, K).getRegex(), H = "address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul", J = /<!--(?:-?>|[\s\S]*?(?:-->|$))/, Me = d$2("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][a-z0-9-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))", "i").replace("comment", J).replace("tag", H).replace("attribute", / +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(), pe = (l2) => d$2(W).replace("hr", v$1).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("|table", "").replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", l2).replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex(), Ae = pe(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/), Ie = pe(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/), Ce = d$2(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph", Ie).getRegex(), V = { blockquote: Ce, code: Pe, def: ze, fences: Se, heading: _e, hr: v$1, html: Me, lheading: ue, list: Ee, newline: ye, paragraph: Ae, table: E$1, text: Le }, ie = d$2("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr", v$1).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("blockquote", " {0,3}>").replace("code", "(?: {4}| {0,3} )[^\\n]").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex(), Be = { ...V, lheading: $e, table: ie, paragraph: d$2(W).replace("hr", v$1).replace("heading", " {0,3}#{1,6}(?:\\s|$)").replace("|lheading", "").replace("table", ie).replace("blockquote", " {0,3}>").replace("fences", " {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list", " {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html", "</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag", H).getRegex() }, De = { ...V, html: d$2(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment", J).replace(/tag/g, "(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(), def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/, heading: /^(#{1,6})(.*)(?:\n+|$)/, fences: E$1, lheading: /^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/, paragraph: d$2(W).replace("hr", v$1).replace("heading", ` *#{1,6} *[^
|
|
18397
|
+
]`).replace("lheading", ue).replace("|table", "").replace("blockquote", " {0,3}>").replace("|fences", "").replace("|list", "").replace("|html", "").replace("|tag", "").getRegex() }, qe = /^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/, ve = /^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/, ce = /^( {2,}|\\)\n(?!\s*$)[ \t]*/, He = /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/, _ = /[\p{P}\p{S}]/u, C$1 = /[\s\p{P}\p{S}]/u, Z = /[^\s\p{P}\p{S}]/u, Ze = d$2(/^((?![*_])punctSpace)/, "u").replace(/punctSpace/g, C$1).getRegex(), Ge = /[\p{Pi}\p{Ps}"']/u, he = /(?!~)[\p{P}\p{S}]/u, Qe = /(?!~)[\s\p{P}\p{S}]/u, Ne = /(?:[^\s\p{P}\p{S}]|~)/u, je = d$2(/link|precode-code|html/, "g").replace("link", /\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-", we ? "(?<!`)()" : "(^^|[^`])").replace("code", /(?<b>`+)[^`]+\k<b>(?!`)/).replace("html", /<(?! )[^<>]*?>/).getRegex(), de = /^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/, Ue = d$2(de, "u").replace(/punct/g, _).getRegex(), Fe = d$2(de, "u").replace(/punct/g, he).getRegex(), Ke = /^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/, We = d$2(Ke, "u").replace(/openQuote/g, Ge).replace(/punct/g, _).getRegex(), ke = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)", Xe = d$2(ke, "gu").replace(/notPunctSpace/g, Z).replace(/punctSpace/g, C$1).replace(/punct/g, _).getRegex(), Je = d$2(ke, "gu").replace(/notPunctSpace/g, Ne).replace(/punctSpace/g, Qe).replace(/punct/g, he).getRegex(), Ve = "^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)", Ye = d$2(Ve, "gu").replace(/notPunctSpace/g, Z).replace(/punctSpace/g, C$1).replace(/punct/g, _).getRegex(), et = d$2("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)", "gu").replace(/notPunctSpace/g, Z).replace(/punctSpace/g, C$1).replace(/punct/g, _).getRegex(), tt = "^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)", nt = d$2(tt, "gu").replace(/notPunctSpace/g, Z).replace(/punctSpace/g, C$1).replace(/punct/g, _).getRegex(), rt = d$2(/^~~?(?:((?!~)punct)|[^\s~])/, "u").replace(/punct/g, _).getRegex(), st = "^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)", it = d$2(st, "gu").replace(/notPunctSpace/g, Z).replace(/punctSpace/g, C$1).replace(/punct/g, _).getRegex(), ot = d$2(/\\(punct)/, "gu").replace(/punct/g, _).getRegex(), at = d$2(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme", /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email", /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(), lt = d$2(J).replace("(?:-->|$)", "-->").getRegex(), ut = d$2("^comment|^</[a-zA-Z][a-zA-Z0-9-]*\\s*>|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment", lt).replace("attribute", /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(), ge = /\[(?:\\[\s\S]|[^\[\]\\])*\]/, N = d$2(/(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/).replace("brackets", ge).getRegex(), pt = d$2(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label", N).replace("href", /<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title", /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(), ct = d$2(/^!?\[(label)\]\[(ref)\]/).replace("label", N).replace("ref", X).getRegex(), ht = d$2(/^!?\[(ref)\](?:\[\])?/).replace("ref", X).getRegex(), oe = /(?!\s*\])(?:\\[\s\S]|[^\[\]\\]){1,999}/, dt = d$2(/(?:[^\[\]\\`]*(?:\[(?:brackets|\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\]))){0,999}?[^\[\]\\`]*?/).replace("brackets", ge).getRegex(), kt = d$2("reflink|nolink(?!\\()", "g").replace("reflink", d$2(/^!?\[(label)\]\[(ref)\]/).replace("label", dt).replace("ref", oe).getRegex()).replace("nolink", d$2(/^!?\[(ref)\](?:\[\])?/).replace("ref", oe).getRegex()).getRegex(), ae = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/, Y = { _backpedal: E$1, anyPunctuation: ot, autolink: at, blockSkip: je, br: ce, code: ve, del: E$1, delLDelim: E$1, delRDelim: E$1, emStrongLDelim: Ue, emStrongRDelimAst: Xe, emStrongRDelimUnd: et, escape: qe, link: pt, nolink: ht, punctuation: Ze, reflink: ct, reflinkSearch: kt, tag: ut, text: He, url: E$1 }, gt = { ...Y, emStrongLDelim: We, emStrongRDelimAst: Ye, emStrongRDelimUnd: nt, link: d$2(/^!?\[(label)\]\((.*?)\)/).replace("label", N).getRegex(), reflink: d$2(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label", N).getRegex() }, F = { ...Y, emStrongRDelimAst: Je, emStrongLDelim: Fe, delLDelim: rt, delRDelim: it, url: d$2(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol", ae).replace("email", /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\w-])/).getRegex(), _backpedal: /(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/, del: /^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/, text: d$2(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol", ae).getRegex() }, ft = { ...F, br: d$2(ce).replace("{2,}", "*").getRegex(), text: d$2(F.text).replace("\\b_", "\\b_| {2,}\\n").replace(/\{2,\}/g, "*").getRegex() }, G = { normal: V, gfm: Be, pedantic: De }, B = { normal: Y, gfm: F, breaks: ft, pedantic: gt };
|
|
18398
|
+
var mt = { "&": "&", "<": "<", ">": ">", '"': """, "'": "'" }, fe = (l2) => mt[l2];
|
|
18399
|
+
function R(l2, e2) {
|
|
18348
18400
|
if (e2) {
|
|
18349
|
-
if (m$1.escapeTest.test(
|
|
18350
|
-
} else if (m$1.escapeTestNoEncode.test(
|
|
18351
|
-
return
|
|
18401
|
+
if (m$1.escapeTest.test(l2)) return l2.replace(m$1.escapeReplace, fe);
|
|
18402
|
+
} else if (m$1.escapeTestNoEncode.test(l2)) return l2.replace(m$1.escapeReplaceNoEncode, fe);
|
|
18403
|
+
return l2;
|
|
18352
18404
|
}
|
|
18353
|
-
function
|
|
18405
|
+
function ee(l2) {
|
|
18354
18406
|
try {
|
|
18355
|
-
|
|
18407
|
+
l2 = encodeURI(l2).replace(m$1.percentDecode, "%");
|
|
18356
18408
|
} catch {
|
|
18357
18409
|
return null;
|
|
18358
18410
|
}
|
|
18359
|
-
return
|
|
18411
|
+
return l2;
|
|
18360
18412
|
}
|
|
18361
|
-
function
|
|
18362
|
-
let t2 =
|
|
18363
|
-
let
|
|
18364
|
-
for (; --a2 >= 0 &&
|
|
18365
|
-
return
|
|
18366
|
-
}), n2 = t2.split(m$1.splitPipe),
|
|
18413
|
+
function te(l2, e2) {
|
|
18414
|
+
let t2 = l2.replace(m$1.findPipe, (r2, o2, s2) => {
|
|
18415
|
+
let u2 = false, a2 = o2;
|
|
18416
|
+
for (; --a2 >= 0 && s2[a2] === "\\"; ) u2 = !u2;
|
|
18417
|
+
return u2 ? "|" : " |";
|
|
18418
|
+
}), n2 = t2.split(m$1.splitPipe), i2 = 0;
|
|
18367
18419
|
if (n2[0].trim() || n2.shift(), n2.length > 0 && !n2.at(-1)?.trim() && n2.pop(), e2) if (n2.length > e2) n2.splice(e2);
|
|
18368
18420
|
else for (; n2.length < e2; ) n2.push("");
|
|
18369
|
-
for (;
|
|
18421
|
+
for (; i2 < n2.length; i2++) n2[i2] = n2[i2].trim().replace(m$1.slashPipe, "|");
|
|
18370
18422
|
return n2;
|
|
18371
18423
|
}
|
|
18372
|
-
function $(
|
|
18373
|
-
let n2 =
|
|
18424
|
+
function $(l2, e2, t2) {
|
|
18425
|
+
let n2 = l2.length;
|
|
18374
18426
|
if (n2 === 0) return "";
|
|
18375
|
-
let
|
|
18376
|
-
for (;
|
|
18377
|
-
let r2 =
|
|
18378
|
-
if (r2 === e2 && true)
|
|
18427
|
+
let i2 = 0;
|
|
18428
|
+
for (; i2 < n2; ) {
|
|
18429
|
+
let r2 = l2.charAt(n2 - i2 - 1);
|
|
18430
|
+
if (r2 === e2 && true) i2++;
|
|
18379
18431
|
else break;
|
|
18380
18432
|
}
|
|
18381
|
-
return
|
|
18433
|
+
return l2.slice(0, n2 - i2);
|
|
18382
18434
|
}
|
|
18383
|
-
function
|
|
18384
|
-
let e2 =
|
|
18435
|
+
function ne(l2) {
|
|
18436
|
+
let e2 = l2.split(`
|
|
18385
18437
|
`), t2 = e2.length - 1;
|
|
18386
18438
|
for (; t2 >= 0 && m$1.blankLine.test(e2[t2]); ) t2--;
|
|
18387
|
-
return e2.length - t2 <= 2 ?
|
|
18439
|
+
return e2.length - t2 <= 2 ? l2 : e2.slice(0, t2 + 1).join(`
|
|
18388
18440
|
`);
|
|
18389
18441
|
}
|
|
18390
|
-
function
|
|
18391
|
-
|
|
18442
|
+
function D(l2) {
|
|
18443
|
+
return l2.toLowerCase().toUpperCase().toLowerCase();
|
|
18444
|
+
}
|
|
18445
|
+
function me(l2, e2) {
|
|
18446
|
+
if (l2.indexOf(e2[1]) === -1) return -1;
|
|
18392
18447
|
let t2 = 0;
|
|
18393
|
-
for (let n2 = 0; n2 <
|
|
18394
|
-
else if (
|
|
18395
|
-
else if (
|
|
18448
|
+
for (let n2 = 0; n2 < l2.length; n2++) if (l2[n2] === "\\") n2++;
|
|
18449
|
+
else if (l2[n2] === e2[0]) t2++;
|
|
18450
|
+
else if (l2[n2] === e2[1] && (t2--, t2 < 0)) return n2;
|
|
18396
18451
|
return t2 > 0 ? -2 : -1;
|
|
18397
18452
|
}
|
|
18398
|
-
function
|
|
18453
|
+
function xe(l2, e2 = 0) {
|
|
18399
18454
|
let t2 = e2, n2 = "";
|
|
18400
|
-
for (let
|
|
18455
|
+
for (let i2 of l2) if (i2 === " ") {
|
|
18401
18456
|
let r2 = 4 - t2 % 4;
|
|
18402
18457
|
n2 += " ".repeat(r2), t2 += r2;
|
|
18403
|
-
} else n2 +=
|
|
18458
|
+
} else n2 += i2, t2++;
|
|
18404
18459
|
return n2;
|
|
18405
18460
|
}
|
|
18406
|
-
function
|
|
18407
|
-
let r2 = e2.href, o2 = e2.title || null,
|
|
18461
|
+
function be(l2, e2, t2, n2, i2) {
|
|
18462
|
+
let r2 = e2.href, o2 = e2.title || null, s2 = l2[1].replace(i2.other.outputLinkReplace, "$1"), u2 = l2[0].charAt(0) === "!";
|
|
18408
18463
|
n2.state.inLink = true;
|
|
18409
18464
|
let a2 = n2.state.linkEmitted, p2 = n2.state.inRawBlock;
|
|
18410
18465
|
n2.state.linkEmitted = false;
|
|
18411
|
-
let c2 = n2.inlineTokens(
|
|
18412
|
-
if (n2.state.linkEmitted = a2, n2.state.inLink = false, !
|
|
18466
|
+
let c2 = n2.inlineTokens(s2), h2 = n2.state.linkEmitted;
|
|
18467
|
+
if (n2.state.linkEmitted = a2, n2.state.inLink = false, !u2) {
|
|
18413
18468
|
if (h2) {
|
|
18414
18469
|
n2.state.inRawBlock = p2;
|
|
18415
18470
|
return;
|
|
18416
18471
|
}
|
|
18417
18472
|
n2.state.linkEmitted = true;
|
|
18418
18473
|
}
|
|
18419
|
-
return { type:
|
|
18474
|
+
return { type: u2 ? "image" : "link", raw: t2, href: r2, title: o2, text: s2, tokens: c2 };
|
|
18420
18475
|
}
|
|
18421
|
-
function
|
|
18422
|
-
let n2 =
|
|
18476
|
+
function xt(l2, e2, t2) {
|
|
18477
|
+
let n2 = l2.match(t2.other.indentCodeCompensation);
|
|
18423
18478
|
if (n2 === null) return e2;
|
|
18424
|
-
let
|
|
18479
|
+
let i2 = n2[1];
|
|
18425
18480
|
return e2.split(`
|
|
18426
18481
|
`).map((r2) => {
|
|
18427
18482
|
let o2 = r2.match(t2.other.beginningSpace);
|
|
18428
18483
|
if (o2 === null) return r2;
|
|
18429
|
-
let [
|
|
18430
|
-
return r2.slice(Math.min(
|
|
18484
|
+
let [s2] = o2;
|
|
18485
|
+
return r2.slice(Math.min(s2.length, i2.length));
|
|
18431
18486
|
}).join(`
|
|
18432
18487
|
`);
|
|
18433
18488
|
}
|
|
18489
|
+
function Re(l2, e2, t2, n2) {
|
|
18490
|
+
if (!e2.includes("<")) return false;
|
|
18491
|
+
for (let i2 = 0; i2 < e2.length; i2++) {
|
|
18492
|
+
if (e2[i2] === "\\") {
|
|
18493
|
+
i2++;
|
|
18494
|
+
continue;
|
|
18495
|
+
}
|
|
18496
|
+
if (e2[i2] === "`") {
|
|
18497
|
+
let s2 = n2.inline.code.exec(e2.slice(i2));
|
|
18498
|
+
if (s2) {
|
|
18499
|
+
i2 += s2[0].length - 1;
|
|
18500
|
+
continue;
|
|
18501
|
+
}
|
|
18502
|
+
}
|
|
18503
|
+
if (e2[i2] !== "<") continue;
|
|
18504
|
+
let r2 = l2.slice(t2 + i2), o2 = n2.inline.tag.exec(r2) || n2.inline.autolink.exec(r2);
|
|
18505
|
+
if (o2) {
|
|
18506
|
+
if (o2[0].length > e2.length - i2) return true;
|
|
18507
|
+
i2 += o2[0].length - 1;
|
|
18508
|
+
}
|
|
18509
|
+
}
|
|
18510
|
+
return false;
|
|
18511
|
+
}
|
|
18434
18512
|
var y$1 = class y {
|
|
18435
18513
|
options;
|
|
18436
18514
|
rules;
|
|
@@ -18445,15 +18523,15 @@ pre[class*="language-"] {
|
|
|
18445
18523
|
code(e2) {
|
|
18446
18524
|
let t2 = this.rules.block.code.exec(e2);
|
|
18447
18525
|
if (t2) {
|
|
18448
|
-
let n2 = this.options.pedantic ? t2[0] :
|
|
18449
|
-
return { type: "code", raw: n2, codeBlockStyle: "indented", text:
|
|
18526
|
+
let n2 = this.options.pedantic ? t2[0] : ne(t2[0]), i2 = n2.replace(this.rules.other.codeRemoveIndent, "");
|
|
18527
|
+
return { type: "code", raw: n2, codeBlockStyle: "indented", text: i2 };
|
|
18450
18528
|
}
|
|
18451
18529
|
}
|
|
18452
18530
|
fences(e2) {
|
|
18453
18531
|
let t2 = this.rules.block.fences.exec(e2);
|
|
18454
18532
|
if (t2) {
|
|
18455
|
-
let n2 = t2[0],
|
|
18456
|
-
return { type: "code", raw: n2, lang: t2[2] ? t2[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t2[2], text:
|
|
18533
|
+
let n2 = t2[0], i2 = xt(n2, t2[3] || "", this.rules);
|
|
18534
|
+
return { type: "code", raw: n2, lang: t2[2] ? t2[2].trim().replace(this.rules.inline.anyPunctuation, "$1") : t2[2], text: i2 };
|
|
18457
18535
|
}
|
|
18458
18536
|
}
|
|
18459
18537
|
heading(e2) {
|
|
@@ -18461,8 +18539,8 @@ pre[class*="language-"] {
|
|
|
18461
18539
|
if (t2) {
|
|
18462
18540
|
let n2 = t2[2].trim();
|
|
18463
18541
|
if (this.rules.other.endingHash.test(n2)) {
|
|
18464
|
-
let
|
|
18465
|
-
(this.options.pedantic || !
|
|
18542
|
+
let i2 = $(n2, "#");
|
|
18543
|
+
(this.options.pedantic || !i2 || this.rules.other.endingSpaceTabChar.test(i2)) && (n2 = i2.trim());
|
|
18466
18544
|
}
|
|
18467
18545
|
return { type: "heading", raw: $(t2[0], `
|
|
18468
18546
|
`), depth: t2[1].length, text: n2, tokens: this.lexer.inline(n2) };
|
|
@@ -18478,77 +18556,77 @@ pre[class*="language-"] {
|
|
|
18478
18556
|
if (t2) {
|
|
18479
18557
|
let n2 = $(t2[0], `
|
|
18480
18558
|
`).split(`
|
|
18481
|
-
`),
|
|
18559
|
+
`), i2 = "", r2 = "", o2 = [];
|
|
18482
18560
|
for (; n2.length > 0; ) {
|
|
18483
|
-
let
|
|
18484
|
-
for (a2 = 0; a2 < n2.length; a2++) if (this.rules.other.blockquoteStart.test(n2[a2]))
|
|
18485
|
-
else if (!
|
|
18561
|
+
let s2 = false, u2 = [], a2;
|
|
18562
|
+
for (a2 = 0; a2 < n2.length; a2++) if (this.rules.other.blockquoteStart.test(n2[a2])) u2.push(n2[a2]), s2 = true;
|
|
18563
|
+
else if (!s2) u2.push(n2[a2]);
|
|
18486
18564
|
else break;
|
|
18487
18565
|
n2 = n2.slice(a2);
|
|
18488
|
-
let p2 =
|
|
18566
|
+
let p2 = u2.join(`
|
|
18489
18567
|
`), c2 = p2.replace(this.rules.other.blockquoteSetextReplace, `
|
|
18490
18568
|
$1`).replace(this.rules.other.blockquoteSetextReplace2, "");
|
|
18491
|
-
|
|
18569
|
+
i2 = i2 ? `${i2}
|
|
18492
18570
|
${p2}` : p2, r2 = r2 ? `${r2}
|
|
18493
18571
|
${c2}` : c2;
|
|
18494
18572
|
let h2 = this.lexer.state.top;
|
|
18495
18573
|
if (this.lexer.state.top = true, this.lexer.blockTokens(c2, o2, true), this.lexer.state.top = h2, n2.length === 0) break;
|
|
18496
|
-
let
|
|
18497
|
-
if (
|
|
18498
|
-
if (
|
|
18499
|
-
let O =
|
|
18574
|
+
let k = o2.at(-1);
|
|
18575
|
+
if (k?.type === "code") break;
|
|
18576
|
+
if (k?.type === "blockquote") {
|
|
18577
|
+
let O = k, g2 = n2.join(`
|
|
18500
18578
|
`), w2 = O.raw + `
|
|
18501
18579
|
` + g2.replace(this.rules.other.blockquoteSetextReplace2, ""), z = this.blockquote(w2);
|
|
18502
|
-
o2[o2.length - 1] = z,
|
|
18580
|
+
o2[o2.length - 1] = z, i2 = `${i2}
|
|
18503
18581
|
${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
18504
18582
|
break;
|
|
18505
|
-
} else if (
|
|
18506
|
-
let O =
|
|
18583
|
+
} else if (k?.type === "list") {
|
|
18584
|
+
let O = k, g2 = O.raw + `
|
|
18507
18585
|
` + n2.join(`
|
|
18508
18586
|
`), w2 = this.list(g2);
|
|
18509
|
-
o2[o2.length - 1] = w2,
|
|
18587
|
+
o2[o2.length - 1] = w2, i2 = i2.substring(0, i2.length - k.raw.length) + w2.raw, r2 = r2.substring(0, r2.length - O.raw.length) + w2.raw, n2 = g2.substring(o2.at(-1).raw.length).split(`
|
|
18510
18588
|
`);
|
|
18511
18589
|
continue;
|
|
18512
18590
|
}
|
|
18513
18591
|
}
|
|
18514
|
-
return { type: "blockquote", raw:
|
|
18592
|
+
return { type: "blockquote", raw: i2, tokens: o2, text: r2 };
|
|
18515
18593
|
}
|
|
18516
18594
|
}
|
|
18517
18595
|
list(e2) {
|
|
18518
18596
|
let t2 = this.rules.block.list.exec(e2);
|
|
18519
18597
|
if (t2) {
|
|
18520
|
-
let n2 = t2[1].trim(),
|
|
18521
|
-
n2 =
|
|
18522
|
-
let o2 = this.rules.other.listItemRegex(n2),
|
|
18598
|
+
let n2 = t2[1].trim(), i2 = n2.length > 1, r2 = { type: "list", raw: "", ordered: i2, start: i2 ? +n2.slice(0, -1) : "", loose: false, items: [] };
|
|
18599
|
+
n2 = i2 ? `\\d{1,9}\\${n2.slice(-1)}` : `\\${n2}`, this.options.pedantic && (n2 = i2 ? n2 : "[*+-]");
|
|
18600
|
+
let o2 = this.rules.other.listItemRegex(n2), s2 = false;
|
|
18523
18601
|
for (; e2; ) {
|
|
18524
18602
|
let a2 = false, p2 = "", c2 = "";
|
|
18525
18603
|
if (!(t2 = o2.exec(e2)) || this.rules.block.hr.test(e2)) break;
|
|
18526
18604
|
p2 = t2[0], e2 = e2.substring(p2.length);
|
|
18527
|
-
let h2 =
|
|
18528
|
-
`, 1)[0], t2[1].length),
|
|
18605
|
+
let h2 = xe(t2[2].split(`
|
|
18606
|
+
`, 1)[0], t2[1].length), k = e2.split(`
|
|
18529
18607
|
`, 1)[0], O = !h2.trim(), g2 = 0;
|
|
18530
|
-
if (this.options.pedantic ? (g2 = 2, c2 = h2.trimStart()) : O ? g2 = t2[1].length + 1 : (g2 = h2.search(this.rules.other.nonSpaceChar), g2 = g2 > 4 ? 1 : g2, c2 = h2.slice(g2), g2 += t2[1].length), O && this.rules.other.blankLine.test(
|
|
18531
|
-
`, e2 = e2.substring(
|
|
18532
|
-
let w2 = this.rules.other.nextBulletRegex(g2), z = this.rules.other.hrRegex(g2),
|
|
18608
|
+
if (this.options.pedantic ? (g2 = 2, c2 = h2.trimStart()) : O ? g2 = t2[1].length + 1 : (g2 = h2.search(this.rules.other.nonSpaceChar), g2 = g2 > 4 ? 1 : g2, c2 = h2.slice(g2), g2 += t2[1].length), O && this.rules.other.blankLine.test(k) && (p2 += k + `
|
|
18609
|
+
`, e2 = e2.substring(k.length + 1), a2 = true), !a2) {
|
|
18610
|
+
let w2 = this.rules.other.nextBulletRegex(g2), z = this.rules.other.hrRegex(g2), re = this.rules.other.fencesBeginRegex(g2), se = this.rules.other.headingBeginRegex(g2), Te = this.rules.other.htmlBeginRegex(g2), Oe = this.rules.other.blockquoteBeginRegex(g2);
|
|
18533
18611
|
for (; e2; ) {
|
|
18534
|
-
let
|
|
18535
|
-
`, 1)[0],
|
|
18536
|
-
if (
|
|
18537
|
-
if (
|
|
18538
|
-
` +
|
|
18612
|
+
let j = e2.split(`
|
|
18613
|
+
`, 1)[0], q;
|
|
18614
|
+
if (k = j, this.options.pedantic ? (k = k.replace(this.rules.other.listReplaceNesting, " "), q = k) : q = k.replace(this.rules.other.tabCharGlobal, " "), re.test(k) || se.test(k) || Te.test(k) || Oe.test(k) || w2.test(k) || z.test(k)) break;
|
|
18615
|
+
if (q.search(this.rules.other.nonSpaceChar) >= g2 || !k.trim()) c2 += `
|
|
18616
|
+
` + q.slice(g2);
|
|
18539
18617
|
else {
|
|
18540
|
-
if (O || h2.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 ||
|
|
18618
|
+
if (O || h2.replace(this.rules.other.tabCharGlobal, " ").search(this.rules.other.nonSpaceChar) >= 4 || re.test(h2) || se.test(h2) || z.test(h2)) break;
|
|
18541
18619
|
c2 += `
|
|
18542
|
-
` +
|
|
18620
|
+
` + k;
|
|
18543
18621
|
}
|
|
18544
|
-
O = !
|
|
18545
|
-
`, e2 = e2.substring(
|
|
18622
|
+
O = !k.trim(), p2 += j + `
|
|
18623
|
+
`, e2 = e2.substring(j.length + 1), h2 = q.slice(g2);
|
|
18546
18624
|
}
|
|
18547
18625
|
}
|
|
18548
|
-
r2.loose || (
|
|
18626
|
+
r2.loose || (s2 ? r2.loose = true : this.rules.other.doubleBlankLine.test(p2) && (s2 = true)), r2.items.push({ type: "list_item", raw: p2, task: !!this.options.gfm && this.rules.other.listIsTask.test(c2), loose: false, text: c2, tokens: [] }), r2.raw += p2;
|
|
18549
18627
|
}
|
|
18550
|
-
let
|
|
18551
|
-
if (
|
|
18628
|
+
let u2 = r2.items.at(-1);
|
|
18629
|
+
if (u2) u2.raw = u2.raw.trimEnd(), u2.text = u2.text.trimEnd();
|
|
18552
18630
|
else return;
|
|
18553
18631
|
r2.raw = r2.raw.trimEnd();
|
|
18554
18632
|
for (let a2 of r2.items) if (this.lexer.state.top = false, a2.tokens = this.lexer.blockTokens(a2.text, []), !r2.loose) {
|
|
@@ -18580,28 +18658,28 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18580
18658
|
html(e2) {
|
|
18581
18659
|
let t2 = this.rules.block.html.exec(e2);
|
|
18582
18660
|
if (t2) {
|
|
18583
|
-
let n2 =
|
|
18661
|
+
let n2 = ne(t2[0]);
|
|
18584
18662
|
return { type: "html", block: true, raw: n2, pre: t2[1] === "pre" || t2[1] === "script" || t2[1] === "style", text: n2 };
|
|
18585
18663
|
}
|
|
18586
18664
|
}
|
|
18587
18665
|
def(e2) {
|
|
18588
18666
|
let t2 = this.rules.block.def.exec(e2);
|
|
18589
18667
|
if (t2) {
|
|
18590
|
-
let n2 = t2[1]
|
|
18668
|
+
let n2 = D(t2[1]).replace(this.rules.other.multipleSpaceGlobal, " "), i2 = t2[2] ? t2[2].replace(this.rules.other.hrefBrackets, "$1").replace(this.rules.inline.anyPunctuation, "$1") : "", r2 = t2[3] ? t2[3].substring(1, t2[3].length - 1).replace(this.rules.inline.anyPunctuation, "$1") : t2[3];
|
|
18591
18669
|
return { type: "def", tag: n2, raw: $(t2[0], `
|
|
18592
|
-
`), href:
|
|
18670
|
+
`), href: i2, title: r2 };
|
|
18593
18671
|
}
|
|
18594
18672
|
}
|
|
18595
18673
|
table(e2) {
|
|
18596
18674
|
let t2 = this.rules.block.table.exec(e2);
|
|
18597
18675
|
if (!t2 || !this.rules.other.tableDelimiter.test(t2[2])) return;
|
|
18598
|
-
let n2 =
|
|
18676
|
+
let n2 = te(t2[1]), i2 = t2[2].replace(this.rules.other.tableAlignChars, "").split("|"), r2 = t2[3]?.trim() ? t2[3].replace(this.rules.other.tableRowBlankLine, "").split(`
|
|
18599
18677
|
`) : [], o2 = { type: "table", raw: $(t2[0], `
|
|
18600
18678
|
`), header: [], align: [], rows: [] };
|
|
18601
|
-
if (n2.length ===
|
|
18602
|
-
for (let
|
|
18603
|
-
for (let
|
|
18604
|
-
for (let
|
|
18679
|
+
if (n2.length === i2.length) {
|
|
18680
|
+
for (let s2 of i2) this.rules.other.tableAlignRight.test(s2) ? o2.align.push("right") : this.rules.other.tableAlignCenter.test(s2) ? o2.align.push("center") : this.rules.other.tableAlignLeft.test(s2) ? o2.align.push("left") : o2.align.push(null);
|
|
18681
|
+
for (let s2 = 0; s2 < n2.length; s2++) o2.header.push({ text: n2[s2], tokens: this.lexer.inline(n2[s2]), header: true, align: o2.align[s2] });
|
|
18682
|
+
for (let s2 of r2) o2.rows.push(te(s2, o2.header.length).map((u2, a2) => ({ text: u2, tokens: this.lexer.inline(u2), header: false, align: o2.align[a2] })));
|
|
18605
18683
|
return o2;
|
|
18606
18684
|
}
|
|
18607
18685
|
}
|
|
@@ -18636,59 +18714,63 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18636
18714
|
link(e2) {
|
|
18637
18715
|
let t2 = this.rules.inline.link.exec(e2);
|
|
18638
18716
|
if (t2) {
|
|
18639
|
-
let n2 = t2[
|
|
18640
|
-
if (!this.options.pedantic && this.rules
|
|
18641
|
-
|
|
18642
|
-
|
|
18643
|
-
if (
|
|
18717
|
+
let n2 = t2[0].charAt(0) === "!" ? 2 : 1;
|
|
18718
|
+
if (!this.options.pedantic && Re(e2, t2[1], n2, this.rules)) return;
|
|
18719
|
+
let i2 = t2[2].trim();
|
|
18720
|
+
if (!this.options.pedantic && this.rules.other.startAngleBracket.test(i2)) {
|
|
18721
|
+
if (!this.rules.other.endAngleBracket.test(i2)) return;
|
|
18722
|
+
let s2 = $(i2.slice(0, -1), "\\");
|
|
18723
|
+
if ((i2.length - s2.length) % 2 === 0) return;
|
|
18644
18724
|
} else {
|
|
18645
|
-
let
|
|
18646
|
-
if (
|
|
18647
|
-
if (
|
|
18648
|
-
let
|
|
18649
|
-
t2[2] = t2[2].substring(0,
|
|
18725
|
+
let s2 = me(t2[2], "()");
|
|
18726
|
+
if (s2 === -2) return;
|
|
18727
|
+
if (s2 > -1) {
|
|
18728
|
+
let a2 = (t2[0].indexOf("!") === 0 ? 5 : 4) + t2[1].length + s2;
|
|
18729
|
+
t2[2] = t2[2].substring(0, s2), t2[0] = t2[0].substring(0, a2).trim(), t2[3] = "";
|
|
18650
18730
|
}
|
|
18651
18731
|
}
|
|
18652
|
-
let
|
|
18732
|
+
let r2 = t2[2], o2 = "";
|
|
18653
18733
|
if (this.options.pedantic) {
|
|
18654
|
-
let
|
|
18655
|
-
|
|
18656
|
-
} else
|
|
18657
|
-
return
|
|
18734
|
+
let s2 = this.rules.other.pedanticHrefTitle.exec(r2);
|
|
18735
|
+
s2 && (r2 = s2[1], o2 = s2[3]);
|
|
18736
|
+
} else o2 = t2[3] ? t2[3].slice(1, -1) : "";
|
|
18737
|
+
return r2 = r2.trim(), this.rules.other.startAngleBracket.test(r2) && (this.options.pedantic && !this.rules.other.endAngleBracket.test(i2) ? r2 = r2.slice(1) : r2 = r2.slice(1, -1)), be(t2, { href: r2 && r2.replace(this.rules.inline.anyPunctuation, "$1"), title: o2 && o2.replace(this.rules.inline.anyPunctuation, "$1") }, t2[0], this.lexer, this.rules);
|
|
18658
18738
|
}
|
|
18659
18739
|
}
|
|
18660
18740
|
reflink(e2, t2) {
|
|
18661
18741
|
let n2;
|
|
18662
18742
|
if ((n2 = this.rules.inline.reflink.exec(e2)) || (n2 = this.rules.inline.nolink.exec(e2))) {
|
|
18663
|
-
let
|
|
18664
|
-
if (!
|
|
18665
|
-
|
|
18666
|
-
|
|
18743
|
+
let i2 = n2[0].charAt(0) === "!" ? 2 : 1;
|
|
18744
|
+
if (!this.options.pedantic && Re(e2, n2[1], i2, this.rules)) return;
|
|
18745
|
+
let r2 = (n2[2] || n2[1]).replace(this.rules.other.multipleSpaceGlobal, " "), o2 = t2[D(r2)];
|
|
18746
|
+
if (!o2) {
|
|
18747
|
+
let s2 = n2[0].charAt(0);
|
|
18748
|
+
return { type: "text", raw: s2, text: s2 };
|
|
18667
18749
|
}
|
|
18668
|
-
return
|
|
18750
|
+
return be(n2, o2, n2[0], this.lexer, this.rules);
|
|
18669
18751
|
}
|
|
18670
18752
|
}
|
|
18671
18753
|
emStrong(e2, t2, n2 = "") {
|
|
18672
|
-
let
|
|
18673
|
-
if (!
|
|
18674
|
-
if (!(
|
|
18675
|
-
let o2 = [...
|
|
18676
|
-
for (
|
|
18677
|
-
if (
|
|
18678
|
-
if (
|
|
18679
|
-
a2 +=
|
|
18754
|
+
let i2 = this.rules.inline.emStrongLDelim.exec(e2);
|
|
18755
|
+
if (!i2 || !i2[1] && !i2[2] && !i2[3] && !i2[4] || i2[4] && n2.match(this.rules.other.unicodeAlphaNumeric)) return;
|
|
18756
|
+
if (!(i2[1] || i2[3] || "") || !n2 || this.rules.inline.punctuation.exec(n2)) {
|
|
18757
|
+
let o2 = [...i2[0]].length - 1, s2, u2, a2 = o2, p2 = 0, c2 = i2[0][0], h2 = n2 === c2, k = c2 === "*" ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;
|
|
18758
|
+
for (k.lastIndex = 0, t2 = t2.slice(-1 * e2.length + o2); (i2 = k.exec(t2)) !== null; ) {
|
|
18759
|
+
if (s2 = i2[1] || i2[2] || i2[3] || i2[4] || i2[5] || i2[6], !s2) continue;
|
|
18760
|
+
if (u2 = [...s2].length, i2[3] || i2[4]) {
|
|
18761
|
+
a2 += u2;
|
|
18680
18762
|
continue;
|
|
18681
|
-
} else if (
|
|
18682
|
-
if (o2 % 3 && !((o2 +
|
|
18683
|
-
p2 +=
|
|
18763
|
+
} else if (i2[5] || i2[6]) {
|
|
18764
|
+
if (o2 % 3 && !((o2 + u2) % 3)) {
|
|
18765
|
+
p2 += u2;
|
|
18684
18766
|
continue;
|
|
18685
18767
|
}
|
|
18686
18768
|
if (h2) break;
|
|
18687
18769
|
}
|
|
18688
|
-
if (a2 -=
|
|
18689
|
-
|
|
18690
|
-
let O = [...
|
|
18691
|
-
if (Math.min(o2,
|
|
18770
|
+
if (a2 -= u2, a2 > 0) continue;
|
|
18771
|
+
u2 = Math.min(u2, u2 + a2 + p2);
|
|
18772
|
+
let O = [...i2[0]][0].length, g2 = e2.slice(0, o2 + i2.index + O + u2);
|
|
18773
|
+
if (Math.min(o2, u2) % 2) {
|
|
18692
18774
|
let z = g2.slice(1, -1);
|
|
18693
18775
|
return { type: "em", raw: g2, text: z, tokens: this.lexer.inlineTokens(z) };
|
|
18694
18776
|
}
|
|
@@ -18700,8 +18782,8 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18700
18782
|
codespan(e2) {
|
|
18701
18783
|
let t2 = this.rules.inline.code.exec(e2);
|
|
18702
18784
|
if (t2) {
|
|
18703
|
-
let n2 = t2[2].replace(this.rules.other.newLineCharGlobal, " "),
|
|
18704
|
-
return
|
|
18785
|
+
let n2 = t2[2].replace(this.rules.other.newLineCharGlobal, " "), i2 = this.rules.other.nonSpaceChar.test(n2), r2 = this.rules.other.startingSpaceChar.test(n2) && this.rules.other.endingSpaceChar.test(n2);
|
|
18786
|
+
return i2 && r2 && (n2 = n2.substring(1, n2.length - 1)), { type: "codespan", raw: t2[0], text: n2 };
|
|
18705
18787
|
}
|
|
18706
18788
|
}
|
|
18707
18789
|
br(e2) {
|
|
@@ -18709,43 +18791,43 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18709
18791
|
if (t2) return { type: "br", raw: t2[0] };
|
|
18710
18792
|
}
|
|
18711
18793
|
del(e2, t2, n2 = "") {
|
|
18712
|
-
let
|
|
18713
|
-
if (!
|
|
18714
|
-
if (!(
|
|
18715
|
-
let o2 = [...
|
|
18716
|
-
for (p2.lastIndex = 0, t2 = t2.slice(-1 * e2.length + o2); (
|
|
18717
|
-
if (
|
|
18718
|
-
if (
|
|
18719
|
-
a2 +=
|
|
18794
|
+
let i2 = this.rules.inline.delLDelim.exec(e2);
|
|
18795
|
+
if (!i2) return;
|
|
18796
|
+
if (!(i2[1] || "") || !n2 || this.rules.inline.punctuation.exec(n2)) {
|
|
18797
|
+
let o2 = [...i2[0]].length - 1, s2, u2, a2 = o2, p2 = this.rules.inline.delRDelim;
|
|
18798
|
+
for (p2.lastIndex = 0, t2 = t2.slice(-1 * e2.length + o2); (i2 = p2.exec(t2)) !== null; ) {
|
|
18799
|
+
if (s2 = i2[1] || i2[2] || i2[3] || i2[4] || i2[5] || i2[6], !s2 || (u2 = [...s2].length, u2 !== o2)) continue;
|
|
18800
|
+
if (i2[3] || i2[4]) {
|
|
18801
|
+
a2 += u2;
|
|
18720
18802
|
continue;
|
|
18721
18803
|
}
|
|
18722
|
-
if (a2 -=
|
|
18723
|
-
|
|
18724
|
-
let c2 = [...
|
|
18725
|
-
return { type: "del", raw: h2, text:
|
|
18804
|
+
if (a2 -= u2, a2 > 0) continue;
|
|
18805
|
+
u2 = Math.min(u2, u2 + a2);
|
|
18806
|
+
let c2 = [...i2[0]][0].length, h2 = e2.slice(0, o2 + i2.index + c2 + u2), k = h2.slice(o2, -o2);
|
|
18807
|
+
return { type: "del", raw: h2, text: k, tokens: this.lexer.inlineTokens(k) };
|
|
18726
18808
|
}
|
|
18727
18809
|
}
|
|
18728
18810
|
}
|
|
18729
18811
|
autolink(e2) {
|
|
18730
18812
|
let t2 = this.rules.inline.autolink.exec(e2);
|
|
18731
18813
|
if (t2) {
|
|
18732
|
-
let n2,
|
|
18733
|
-
return t2[2] === "@" ? (n2 = t2[1],
|
|
18814
|
+
let n2, i2;
|
|
18815
|
+
return t2[2] === "@" ? (n2 = t2[1], i2 = "mailto:" + n2) : (n2 = t2[1], i2 = n2), { type: "link", raw: t2[0], text: n2, href: i2, autolink: true, tokens: [{ type: "text", raw: n2, text: n2 }] };
|
|
18734
18816
|
}
|
|
18735
18817
|
}
|
|
18736
18818
|
url(e2) {
|
|
18737
18819
|
let t2;
|
|
18738
18820
|
if (t2 = this.rules.inline.url.exec(e2)) {
|
|
18739
|
-
let n2,
|
|
18740
|
-
if (t2[2] === "@") n2 = t2[0],
|
|
18821
|
+
let n2, i2;
|
|
18822
|
+
if (t2[2] === "@") n2 = t2[0], i2 = "mailto:" + n2;
|
|
18741
18823
|
else {
|
|
18742
18824
|
let r2;
|
|
18743
18825
|
do
|
|
18744
18826
|
r2 = t2[0], t2[0] = this.rules.inline._backpedal.exec(t2[0])?.[0] ?? "";
|
|
18745
18827
|
while (r2 !== t2[0]);
|
|
18746
|
-
n2 = t2[0], t2[1] === "www." ?
|
|
18828
|
+
n2 = t2[0], t2[1] === "www." ? i2 = "http://" + t2[0] : i2 = t2[0];
|
|
18747
18829
|
}
|
|
18748
|
-
return { type: "link", raw: t2[0], text: n2, href:
|
|
18830
|
+
return { type: "link", raw: t2[0], text: n2, href: i2, autolink: true, tokens: [{ type: "text", raw: n2, text: n2 }] };
|
|
18749
18831
|
}
|
|
18750
18832
|
}
|
|
18751
18833
|
inlineText(e2) {
|
|
@@ -18756,7 +18838,7 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18756
18838
|
}
|
|
18757
18839
|
}
|
|
18758
18840
|
};
|
|
18759
|
-
var x = class
|
|
18841
|
+
var x = class l2 {
|
|
18760
18842
|
tokens;
|
|
18761
18843
|
options;
|
|
18762
18844
|
state;
|
|
@@ -18764,17 +18846,17 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18764
18846
|
tokenizer;
|
|
18765
18847
|
constructor(e2) {
|
|
18766
18848
|
this.tokens = [], this.tokens.links = /* @__PURE__ */ Object.create(null), this.options = e2 || T, this.options.tokenizer = this.options.tokenizer || new y$1(), this.tokenizer = this.options.tokenizer, this.tokenizer.options = this.options, this.tokenizer.lexer = this, this.inlineQueue = [], this.state = { inLink: false, inRawBlock: false, linkEmitted: false, top: true };
|
|
18767
|
-
let t2 = { other: m$1, block:
|
|
18768
|
-
this.options.pedantic ? (t2.block =
|
|
18849
|
+
let t2 = { other: m$1, block: G.normal, inline: B.normal };
|
|
18850
|
+
this.options.pedantic ? (t2.block = G.pedantic, t2.inline = B.pedantic) : this.options.gfm && (t2.block = G.gfm, this.options.breaks ? t2.inline = B.breaks : t2.inline = B.gfm), this.tokenizer.rules = t2;
|
|
18769
18851
|
}
|
|
18770
18852
|
static get rules() {
|
|
18771
|
-
return { block:
|
|
18853
|
+
return { block: G, inline: B };
|
|
18772
18854
|
}
|
|
18773
18855
|
static lex(e2, t2) {
|
|
18774
|
-
return new
|
|
18856
|
+
return new l2(t2).lex(e2);
|
|
18775
18857
|
}
|
|
18776
18858
|
static lexInline(e2, t2) {
|
|
18777
|
-
return new
|
|
18859
|
+
return new l2(t2).inlineTokens(e2);
|
|
18778
18860
|
}
|
|
18779
18861
|
lex(e2) {
|
|
18780
18862
|
e2 = e2.replace(m$1.carriageReturn, `
|
|
@@ -18787,29 +18869,29 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18787
18869
|
}
|
|
18788
18870
|
blockTokens(e2, t2 = [], n2 = false) {
|
|
18789
18871
|
this.tokenizer.lexer = this, this.options.pedantic && (e2 = e2.replace(m$1.tabCharGlobal, " ").replace(m$1.spaceLine, ""));
|
|
18790
|
-
let
|
|
18872
|
+
let i2 = 1 / 0;
|
|
18791
18873
|
for (; e2; ) {
|
|
18792
|
-
if (e2.length <
|
|
18874
|
+
if (e2.length < i2) i2 = e2.length;
|
|
18793
18875
|
else {
|
|
18794
18876
|
this.infiniteLoopError(e2.charCodeAt(0));
|
|
18795
18877
|
break;
|
|
18796
18878
|
}
|
|
18797
18879
|
let r2;
|
|
18798
|
-
if (this.options.extensions?.block?.some((
|
|
18880
|
+
if (this.options.extensions?.block?.some((s2) => (r2 = s2.call({ lexer: this }, e2, t2)) ? (e2 = e2.substring(r2.raw.length), t2.push(r2), true) : false)) continue;
|
|
18799
18881
|
if (r2 = this.tokenizer.space(e2)) {
|
|
18800
18882
|
e2 = e2.substring(r2.raw.length);
|
|
18801
|
-
let
|
|
18802
|
-
r2.raw.length === 1 &&
|
|
18883
|
+
let s2 = t2.at(-1);
|
|
18884
|
+
r2.raw.length === 1 && s2 !== void 0 ? s2.raw += `
|
|
18803
18885
|
` : t2.push(r2);
|
|
18804
18886
|
continue;
|
|
18805
18887
|
}
|
|
18806
18888
|
if (r2 = this.tokenizer.code(e2)) {
|
|
18807
18889
|
e2 = e2.substring(r2.raw.length);
|
|
18808
|
-
let
|
|
18809
|
-
|
|
18890
|
+
let s2 = t2.at(-1);
|
|
18891
|
+
s2?.type === "paragraph" || s2?.type === "text" ? (s2.raw += (s2.raw.endsWith(`
|
|
18810
18892
|
`) ? "" : `
|
|
18811
|
-
`) + r2.raw,
|
|
18812
|
-
` + r2.text, this.inlineQueue.at(-1).src =
|
|
18893
|
+
`) + r2.raw, s2.text += `
|
|
18894
|
+
` + r2.text, this.inlineQueue.at(-1).src = s2.text) : t2.push(r2);
|
|
18813
18895
|
continue;
|
|
18814
18896
|
}
|
|
18815
18897
|
if (r2 = this.tokenizer.fences(e2)) {
|
|
@@ -18838,11 +18920,11 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18838
18920
|
}
|
|
18839
18921
|
if (r2 = this.tokenizer.def(e2)) {
|
|
18840
18922
|
e2 = e2.substring(r2.raw.length);
|
|
18841
|
-
let
|
|
18842
|
-
|
|
18923
|
+
let s2 = t2.at(-1);
|
|
18924
|
+
s2?.type === "paragraph" || s2?.type === "text" ? (s2.raw += (s2.raw.endsWith(`
|
|
18843
18925
|
`) ? "" : `
|
|
18844
|
-
`) + r2.raw,
|
|
18845
|
-
` + r2.raw, this.inlineQueue.at(-1).src =
|
|
18926
|
+
`) + r2.raw, s2.text += `
|
|
18927
|
+
` + r2.raw, this.inlineQueue.at(-1).src = s2.text) : this.tokens.links[r2.tag] || (this.tokens.links[r2.tag] = { href: r2.href, title: r2.title }, t2.push(r2));
|
|
18846
18928
|
continue;
|
|
18847
18929
|
}
|
|
18848
18930
|
if (r2 = this.tokenizer.table(e2)) {
|
|
@@ -18855,26 +18937,26 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18855
18937
|
}
|
|
18856
18938
|
let o2 = e2;
|
|
18857
18939
|
if (this.options.extensions?.startBlock) {
|
|
18858
|
-
let
|
|
18940
|
+
let s2 = 1 / 0, u2 = e2.slice(1), a2;
|
|
18859
18941
|
this.options.extensions.startBlock.forEach((p2) => {
|
|
18860
|
-
a2 = p2.call({ lexer: this },
|
|
18861
|
-
}),
|
|
18942
|
+
a2 = p2.call({ lexer: this }, u2), typeof a2 == "number" && a2 >= 0 && (s2 = Math.min(s2, a2));
|
|
18943
|
+
}), s2 < 1 / 0 && s2 >= 0 && (o2 = e2.substring(0, s2 + 1));
|
|
18862
18944
|
}
|
|
18863
18945
|
if (this.state.top && (r2 = this.tokenizer.paragraph(o2))) {
|
|
18864
|
-
let
|
|
18865
|
-
n2 &&
|
|
18946
|
+
let s2 = t2.at(-1);
|
|
18947
|
+
n2 && s2?.type === "paragraph" ? (s2.raw += (s2.raw.endsWith(`
|
|
18866
18948
|
`) ? "" : `
|
|
18867
|
-
`) + r2.raw,
|
|
18868
|
-
` + r2.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src =
|
|
18949
|
+
`) + r2.raw, s2.text += `
|
|
18950
|
+
` + r2.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s2.text) : t2.push(r2), n2 = o2.length !== e2.length, e2 = e2.substring(r2.raw.length);
|
|
18869
18951
|
continue;
|
|
18870
18952
|
}
|
|
18871
18953
|
if (r2 = this.tokenizer.text(e2)) {
|
|
18872
18954
|
e2 = e2.substring(r2.raw.length);
|
|
18873
|
-
let
|
|
18874
|
-
|
|
18955
|
+
let s2 = t2.at(-1);
|
|
18956
|
+
s2?.type === "text" ? (s2.raw += (s2.raw.endsWith(`
|
|
18875
18957
|
`) ? "" : `
|
|
18876
|
-
`) + r2.raw,
|
|
18877
|
-
` + r2.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src =
|
|
18958
|
+
`) + r2.raw, s2.text += `
|
|
18959
|
+
` + r2.text, this.inlineQueue.pop(), this.inlineQueue.at(-1).src = s2.text) : t2.push(r2);
|
|
18878
18960
|
continue;
|
|
18879
18961
|
}
|
|
18880
18962
|
if (e2) {
|
|
@@ -18892,8 +18974,8 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18892
18974
|
let t2 = this.tokenizer.rules.inline.link;
|
|
18893
18975
|
for (let n2 of e2.matchAll(this.tokenizer.rules.inline.blockSkip)) if (t2.test(n2[0]) && e2.charAt(n2.index - 1) !== "!") return true;
|
|
18894
18976
|
for (let n2 of e2.matchAll(this.tokenizer.rules.inline.reflinkSearch)) {
|
|
18895
|
-
let
|
|
18896
|
-
if (!(
|
|
18977
|
+
let i2 = n2[0], r2 = i2.lastIndexOf("[");
|
|
18978
|
+
if (!(i2.charAt(0) === "!" || !Object.hasOwn(this.tokens.links, D(i2.slice(r2 + 1, -1)))) && !(r2 > 1 && this.linkInText(i2.slice(1, r2 - 1)))) return true;
|
|
18897
18979
|
}
|
|
18898
18980
|
return false;
|
|
18899
18981
|
}
|
|
@@ -18901,84 +18983,84 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
18901
18983
|
this.tokenizer.lexer = this;
|
|
18902
18984
|
let n2 = e2;
|
|
18903
18985
|
if (this.tokens.links && e2.includes("[")) {
|
|
18904
|
-
let
|
|
18986
|
+
let s2 = this.tokenizer.rules.inline.reflinkSearch, u2 = (a2) => {
|
|
18905
18987
|
let p2 = a2.lastIndexOf("[");
|
|
18906
|
-
if (!Object.hasOwn(this.tokens.links, a2.slice(p2 + 1, -1))) return a2;
|
|
18988
|
+
if (!Object.hasOwn(this.tokens.links, D(a2.slice(p2 + 1, -1)))) return a2;
|
|
18907
18989
|
if (p2 > 1 && a2.charAt(0) !== "!") {
|
|
18908
18990
|
let c2 = a2.slice(1, p2 - 1);
|
|
18909
|
-
if (this.linkInText(c2)) return "[" + c2.replace(
|
|
18991
|
+
if (this.linkInText(c2)) return "[" + c2.replace(s2, u2) + "][" + "a".repeat(a2.length - p2 - 2) + "]";
|
|
18910
18992
|
}
|
|
18911
18993
|
return "[" + "a".repeat(a2.length - 2) + "]";
|
|
18912
18994
|
};
|
|
18913
|
-
n2 = n2.replace(
|
|
18995
|
+
n2 = n2.replace(s2, u2);
|
|
18914
18996
|
}
|
|
18915
|
-
n2 = n2.replace(this.tokenizer.rules.inline.anyPunctuation, (
|
|
18997
|
+
n2 = n2.replace(this.tokenizer.rules.inline.anyPunctuation, (s2) => "+".repeat(s2.length)), n2 = n2.replace(this.tokenizer.rules.inline.blockSkip, (s2, u2, a2) => {
|
|
18916
18998
|
let p2 = a2 ? a2.length : 0;
|
|
18917
|
-
return
|
|
18999
|
+
return s2.slice(0, p2) + "[" + "a".repeat(s2.length - p2 - 2) + "]";
|
|
18918
19000
|
}), n2 = this.options.hooks?.emStrongMask?.call({ lexer: this }, n2) ?? n2;
|
|
18919
|
-
let
|
|
19001
|
+
let i2 = false, r2 = "", o2 = 1 / 0;
|
|
18920
19002
|
for (; e2; ) {
|
|
18921
19003
|
if (e2.length < o2) o2 = e2.length;
|
|
18922
19004
|
else {
|
|
18923
19005
|
this.infiniteLoopError(e2.charCodeAt(0));
|
|
18924
19006
|
break;
|
|
18925
19007
|
}
|
|
18926
|
-
|
|
18927
|
-
let
|
|
18928
|
-
if (this.options.extensions?.inline?.some((a2) => (
|
|
18929
|
-
if (
|
|
18930
|
-
e2 = e2.substring(
|
|
19008
|
+
i2 || (r2 = ""), i2 = false;
|
|
19009
|
+
let s2;
|
|
19010
|
+
if (this.options.extensions?.inline?.some((a2) => (s2 = a2.call({ lexer: this }, e2, t2)) ? (e2 = e2.substring(s2.raw.length), t2.push(s2), true) : false)) continue;
|
|
19011
|
+
if (s2 = this.tokenizer.escape(e2)) {
|
|
19012
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18931
19013
|
continue;
|
|
18932
19014
|
}
|
|
18933
|
-
if (
|
|
18934
|
-
e2 = e2.substring(
|
|
19015
|
+
if (s2 = this.tokenizer.tag(e2)) {
|
|
19016
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18935
19017
|
continue;
|
|
18936
19018
|
}
|
|
18937
|
-
if (
|
|
18938
|
-
e2 = e2.substring(
|
|
19019
|
+
if (s2 = this.tokenizer.link(e2)) {
|
|
19020
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18939
19021
|
continue;
|
|
18940
19022
|
}
|
|
18941
|
-
if (
|
|
18942
|
-
e2 = e2.substring(
|
|
19023
|
+
if (s2 = this.tokenizer.reflink(e2, this.tokens.links)) {
|
|
19024
|
+
e2 = e2.substring(s2.raw.length);
|
|
18943
19025
|
let a2 = t2.at(-1);
|
|
18944
|
-
|
|
19026
|
+
s2.type === "text" && a2?.type === "text" ? (a2.raw += s2.raw, a2.text += s2.text) : t2.push(s2);
|
|
18945
19027
|
continue;
|
|
18946
19028
|
}
|
|
18947
|
-
if (
|
|
18948
|
-
e2 = e2.substring(
|
|
19029
|
+
if (s2 = this.tokenizer.emStrong(e2, n2, r2)) {
|
|
19030
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18949
19031
|
continue;
|
|
18950
19032
|
}
|
|
18951
|
-
if (
|
|
18952
|
-
e2 = e2.substring(
|
|
19033
|
+
if (s2 = this.tokenizer.codespan(e2)) {
|
|
19034
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18953
19035
|
continue;
|
|
18954
19036
|
}
|
|
18955
|
-
if (
|
|
18956
|
-
e2 = e2.substring(
|
|
19037
|
+
if (s2 = this.tokenizer.br(e2)) {
|
|
19038
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18957
19039
|
continue;
|
|
18958
19040
|
}
|
|
18959
|
-
if (
|
|
18960
|
-
e2 = e2.substring(
|
|
19041
|
+
if (s2 = this.tokenizer.del(e2, n2, r2)) {
|
|
19042
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18961
19043
|
continue;
|
|
18962
19044
|
}
|
|
18963
|
-
if (
|
|
18964
|
-
e2 = e2.substring(
|
|
19045
|
+
if (s2 = this.tokenizer.autolink(e2)) {
|
|
19046
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18965
19047
|
continue;
|
|
18966
19048
|
}
|
|
18967
|
-
if (!this.state.inLink && (
|
|
18968
|
-
e2 = e2.substring(
|
|
19049
|
+
if (!this.state.inLink && (s2 = this.tokenizer.url(e2))) {
|
|
19050
|
+
e2 = e2.substring(s2.raw.length), t2.push(s2);
|
|
18969
19051
|
continue;
|
|
18970
19052
|
}
|
|
18971
|
-
let
|
|
19053
|
+
let u2 = e2;
|
|
18972
19054
|
if (this.options.extensions?.startInline) {
|
|
18973
19055
|
let a2 = 1 / 0, p2 = e2.slice(1), c2;
|
|
18974
19056
|
this.options.extensions.startInline.forEach((h2) => {
|
|
18975
19057
|
c2 = h2.call({ lexer: this }, p2), typeof c2 == "number" && c2 >= 0 && (a2 = Math.min(a2, c2));
|
|
18976
|
-
}), a2 < 1 / 0 && a2 >= 0 && (
|
|
19058
|
+
}), a2 < 1 / 0 && a2 >= 0 && (u2 = e2.substring(0, a2 + 1));
|
|
18977
19059
|
}
|
|
18978
|
-
if (
|
|
18979
|
-
e2 = e2.substring(
|
|
19060
|
+
if (s2 = this.tokenizer.inlineText(u2)) {
|
|
19061
|
+
e2 = e2.substring(s2.raw.length), s2.raw.slice(-1) !== "_" && (r2 = s2.raw.slice(-1)), i2 = true;
|
|
18980
19062
|
let a2 = t2.at(-1);
|
|
18981
|
-
a2?.type === "text" ? (a2.raw +=
|
|
19063
|
+
a2?.type === "text" ? (a2.raw += s2.raw, a2.text += s2.text) : t2.push(s2);
|
|
18982
19064
|
continue;
|
|
18983
19065
|
}
|
|
18984
19066
|
if (e2) {
|
|
@@ -19004,9 +19086,9 @@ ${g2}`, r2 = r2.substring(0, r2.length - O.text.length) + z.text;
|
|
|
19004
19086
|
return "";
|
|
19005
19087
|
}
|
|
19006
19088
|
code({ text: e2, lang: t2, escaped: n2 }) {
|
|
19007
|
-
let
|
|
19089
|
+
let i2 = (t2 || "").match(m$1.notSpaceStart)?.[0], r2 = e2 ? e2.replace(m$1.endingNewline, "") + `
|
|
19008
19090
|
` : "";
|
|
19009
|
-
return
|
|
19091
|
+
return i2 ? '<pre><code class="language-' + R(i2) + '">' + (n2 ? r2 : R(r2, true)) + `</code></pre>
|
|
19010
19092
|
` : "<pre><code>" + (n2 ? r2 : R(r2, true)) + `</code></pre>
|
|
19011
19093
|
`;
|
|
19012
19094
|
}
|
|
@@ -19030,14 +19112,14 @@ ${this.parser.parse(e2)}</blockquote>
|
|
|
19030
19112
|
`;
|
|
19031
19113
|
}
|
|
19032
19114
|
list(e2) {
|
|
19033
|
-
let t2 = e2.ordered, n2 = e2.start,
|
|
19034
|
-
for (let
|
|
19035
|
-
let
|
|
19036
|
-
|
|
19115
|
+
let t2 = e2.ordered, n2 = e2.start, i2 = "";
|
|
19116
|
+
for (let s2 = 0; s2 < e2.items.length; s2++) {
|
|
19117
|
+
let u2 = e2.items[s2];
|
|
19118
|
+
i2 += this.listitem(u2);
|
|
19037
19119
|
}
|
|
19038
19120
|
let r2 = t2 ? "ol" : "ul", o2 = t2 && n2 !== 1 ? ' start="' + n2 + '"' : "";
|
|
19039
19121
|
return "<" + r2 + o2 + `>
|
|
19040
|
-
` +
|
|
19122
|
+
` + i2 + "</" + r2 + `>
|
|
19041
19123
|
`;
|
|
19042
19124
|
}
|
|
19043
19125
|
listitem(e2) {
|
|
@@ -19055,17 +19137,17 @@ ${this.parser.parse(e2)}</blockquote>
|
|
|
19055
19137
|
let t2 = "", n2 = "";
|
|
19056
19138
|
for (let r2 = 0; r2 < e2.header.length; r2++) n2 += this.tablecell(e2.header[r2]);
|
|
19057
19139
|
t2 += this.tablerow({ text: n2 });
|
|
19058
|
-
let
|
|
19140
|
+
let i2 = "";
|
|
19059
19141
|
for (let r2 = 0; r2 < e2.rows.length; r2++) {
|
|
19060
19142
|
let o2 = e2.rows[r2];
|
|
19061
19143
|
n2 = "";
|
|
19062
|
-
for (let
|
|
19063
|
-
|
|
19144
|
+
for (let s2 = 0; s2 < o2.length; s2++) n2 += this.tablecell(o2[s2]);
|
|
19145
|
+
i2 += this.tablerow({ text: n2 });
|
|
19064
19146
|
}
|
|
19065
|
-
return
|
|
19147
|
+
return i2 && (i2 = `<tbody>${i2}</tbody>`), `<table>
|
|
19066
19148
|
<thead>
|
|
19067
19149
|
` + t2 + `</thead>
|
|
19068
|
-
` +
|
|
19150
|
+
` + i2 + `</table>
|
|
19069
19151
|
`;
|
|
19070
19152
|
}
|
|
19071
19153
|
tablerow({ text: e2 }) {
|
|
@@ -19093,16 +19175,16 @@ ${e2}</tr>
|
|
|
19093
19175
|
del({ tokens: e2 }) {
|
|
19094
19176
|
return `<del>${this.parser.parseInline(e2)}</del>`;
|
|
19095
19177
|
}
|
|
19096
|
-
link({ href: e2, title: t2, text: n2, tokens:
|
|
19097
|
-
let o2 = r2 ? R(n2, true) : this.parser.parseInline(
|
|
19098
|
-
if (
|
|
19099
|
-
e2 = R(
|
|
19100
|
-
let
|
|
19101
|
-
return t2 && (
|
|
19178
|
+
link({ href: e2, title: t2, text: n2, tokens: i2, autolink: r2 }) {
|
|
19179
|
+
let o2 = r2 ? R(n2, true) : this.parser.parseInline(i2), s2 = ee(e2);
|
|
19180
|
+
if (s2 === null) return o2;
|
|
19181
|
+
e2 = R(s2, r2);
|
|
19182
|
+
let u2 = '<a href="' + e2 + '"';
|
|
19183
|
+
return t2 && (u2 += ' title="' + R(t2) + '"'), u2 += ">" + o2 + "</a>", u2;
|
|
19102
19184
|
}
|
|
19103
|
-
image({ href: e2, title: t2, text: n2, tokens:
|
|
19104
|
-
|
|
19105
|
-
let r2 =
|
|
19185
|
+
image({ href: e2, title: t2, text: n2, tokens: i2 }) {
|
|
19186
|
+
i2 && (n2 = this.parser.parseInline(i2, this.parser.textRenderer));
|
|
19187
|
+
let r2 = ee(e2);
|
|
19106
19188
|
if (r2 === null) return R(n2);
|
|
19107
19189
|
e2 = r2;
|
|
19108
19190
|
let o2 = `<img src="${R(e2)}" alt="${R(n2)}"`;
|
|
@@ -19144,7 +19226,7 @@ ${e2}</tr>
|
|
|
19144
19226
|
return e2;
|
|
19145
19227
|
}
|
|
19146
19228
|
};
|
|
19147
|
-
var b$1 = class
|
|
19229
|
+
var b$1 = class l2 {
|
|
19148
19230
|
options;
|
|
19149
19231
|
renderer;
|
|
19150
19232
|
textRenderer;
|
|
@@ -19152,24 +19234,24 @@ ${e2}</tr>
|
|
|
19152
19234
|
this.options = e2 || T, this.options.renderer = this.options.renderer || new P$1(), this.renderer = this.options.renderer, this.renderer.options = this.options, this.renderer.parser = this, this.textRenderer = new L();
|
|
19153
19235
|
}
|
|
19154
19236
|
static parse(e2, t2) {
|
|
19155
|
-
return new
|
|
19237
|
+
return new l2(t2).parse(e2);
|
|
19156
19238
|
}
|
|
19157
19239
|
static parseInline(e2, t2) {
|
|
19158
|
-
return new
|
|
19240
|
+
return new l2(t2).parseInline(e2);
|
|
19159
19241
|
}
|
|
19160
19242
|
parse(e2) {
|
|
19161
19243
|
this.renderer.parser = this;
|
|
19162
19244
|
let t2 = "";
|
|
19163
19245
|
for (let n2 = 0; n2 < e2.length; n2++) {
|
|
19164
|
-
let
|
|
19165
|
-
if (this.options.extensions?.renderers?.[
|
|
19166
|
-
let o2 =
|
|
19167
|
-
if (
|
|
19168
|
-
t2 +=
|
|
19246
|
+
let i2 = e2[n2];
|
|
19247
|
+
if (this.options.extensions?.renderers?.[i2.type]) {
|
|
19248
|
+
let o2 = i2, s2 = this.options.extensions.renderers[o2.type].call({ parser: this }, o2);
|
|
19249
|
+
if (s2 !== false || !["space", "hr", "heading", "code", "table", "blockquote", "list", "checkbox", "html", "def", "paragraph", "text"].includes(o2.type)) {
|
|
19250
|
+
t2 += s2 || "";
|
|
19169
19251
|
continue;
|
|
19170
19252
|
}
|
|
19171
19253
|
}
|
|
19172
|
-
let r2 =
|
|
19254
|
+
let r2 = i2;
|
|
19173
19255
|
switch (r2.type) {
|
|
19174
19256
|
case "space": {
|
|
19175
19257
|
t2 += this.renderer.space(r2);
|
|
@@ -19231,12 +19313,12 @@ ${e2}</tr>
|
|
|
19231
19313
|
parseInline(e2, t2 = this.renderer) {
|
|
19232
19314
|
this.renderer.parser = this;
|
|
19233
19315
|
let n2 = "";
|
|
19234
|
-
for (let
|
|
19235
|
-
let r2 = e2[
|
|
19316
|
+
for (let i2 = 0; i2 < e2.length; i2++) {
|
|
19317
|
+
let r2 = e2[i2];
|
|
19236
19318
|
if (this.options.extensions?.renderers?.[r2.type]) {
|
|
19237
|
-
let
|
|
19238
|
-
if (
|
|
19239
|
-
n2 +=
|
|
19319
|
+
let s2 = this.options.extensions.renderers[r2.type].call({ parser: this }, r2);
|
|
19320
|
+
if (s2 !== false || !["escape", "html", "link", "image", "checkbox", "strong", "em", "codespan", "br", "del", "text"].includes(r2.type)) {
|
|
19321
|
+
n2 += s2 || "";
|
|
19240
19322
|
continue;
|
|
19241
19323
|
}
|
|
19242
19324
|
}
|
|
@@ -19287,9 +19369,9 @@ ${e2}</tr>
|
|
|
19287
19369
|
break;
|
|
19288
19370
|
}
|
|
19289
19371
|
default: {
|
|
19290
|
-
let
|
|
19291
|
-
if (this.options.silent) return console.error(
|
|
19292
|
-
throw new Error(
|
|
19372
|
+
let s2 = 'Token with "' + o2.type + '" type was not found.';
|
|
19373
|
+
if (this.options.silent) return console.error(s2), "";
|
|
19374
|
+
throw new Error(s2);
|
|
19293
19375
|
}
|
|
19294
19376
|
}
|
|
19295
19377
|
}
|
|
@@ -19323,7 +19405,7 @@ ${e2}</tr>
|
|
|
19323
19405
|
return e2 ? b$1.parse : b$1.parseInline;
|
|
19324
19406
|
}
|
|
19325
19407
|
};
|
|
19326
|
-
var
|
|
19408
|
+
var Q = class {
|
|
19327
19409
|
defaults = A();
|
|
19328
19410
|
options = this.setOptions;
|
|
19329
19411
|
parse = this.parseMarkdown(true);
|
|
@@ -19339,23 +19421,23 @@ ${e2}</tr>
|
|
|
19339
19421
|
}
|
|
19340
19422
|
walkTokens(e2, t2) {
|
|
19341
19423
|
let n2 = [];
|
|
19342
|
-
for (let
|
|
19424
|
+
for (let i2 of e2) switch (n2 = n2.concat(t2.call(this, i2)), i2.type) {
|
|
19343
19425
|
case "table": {
|
|
19344
|
-
let r2 =
|
|
19426
|
+
let r2 = i2;
|
|
19345
19427
|
for (let o2 of r2.header) n2 = n2.concat(this.walkTokens(o2.tokens, t2));
|
|
19346
|
-
for (let o2 of r2.rows) for (let
|
|
19428
|
+
for (let o2 of r2.rows) for (let s2 of o2) n2 = n2.concat(this.walkTokens(s2.tokens, t2));
|
|
19347
19429
|
break;
|
|
19348
19430
|
}
|
|
19349
19431
|
case "list": {
|
|
19350
|
-
let r2 =
|
|
19432
|
+
let r2 = i2;
|
|
19351
19433
|
n2 = n2.concat(this.walkTokens(r2.items, t2));
|
|
19352
19434
|
break;
|
|
19353
19435
|
}
|
|
19354
19436
|
default: {
|
|
19355
|
-
let r2 =
|
|
19437
|
+
let r2 = i2;
|
|
19356
19438
|
this.defaults.extensions?.childTokens?.[r2.type] ? this.defaults.extensions.childTokens[r2.type].forEach((o2) => {
|
|
19357
|
-
let
|
|
19358
|
-
n2 = n2.concat(this.walkTokens(
|
|
19439
|
+
let s2 = r2[o2].flat(1 / 0);
|
|
19440
|
+
n2 = n2.concat(this.walkTokens(s2, t2));
|
|
19359
19441
|
}) : r2.tokens && (n2 = n2.concat(this.walkTokens(r2.tokens, t2)));
|
|
19360
19442
|
}
|
|
19361
19443
|
}
|
|
@@ -19364,14 +19446,14 @@ ${e2}</tr>
|
|
|
19364
19446
|
use(...e2) {
|
|
19365
19447
|
let t2 = this.defaults.extensions || { renderers: {}, childTokens: {} };
|
|
19366
19448
|
return e2.forEach((n2) => {
|
|
19367
|
-
let
|
|
19368
|
-
if (
|
|
19449
|
+
let i2 = { ...n2 };
|
|
19450
|
+
if (i2.async = this.defaults.async || i2.async || false, n2.extensions && (n2.extensions.forEach((r2) => {
|
|
19369
19451
|
if (!r2.name) throw new Error("extension name required");
|
|
19370
19452
|
if ("renderer" in r2) {
|
|
19371
19453
|
let o2 = t2.renderers[r2.name];
|
|
19372
|
-
o2 ? t2.renderers[r2.name] = function(...
|
|
19373
|
-
let
|
|
19374
|
-
return
|
|
19454
|
+
o2 ? t2.renderers[r2.name] = function(...s2) {
|
|
19455
|
+
let u2 = r2.renderer.apply(this, s2);
|
|
19456
|
+
return u2 === false && (u2 = o2.apply(this, s2)), u2;
|
|
19375
19457
|
} : t2.renderers[r2.name] = r2.renderer;
|
|
19376
19458
|
}
|
|
19377
19459
|
if ("tokenizer" in r2) {
|
|
@@ -19380,64 +19462,64 @@ ${e2}</tr>
|
|
|
19380
19462
|
o2 ? o2.unshift(r2.tokenizer) : t2[r2.level] = [r2.tokenizer], r2.start && (r2.level === "block" ? t2.startBlock ? t2.startBlock.push(r2.start) : t2.startBlock = [r2.start] : r2.level === "inline" && (t2.startInline ? t2.startInline.push(r2.start) : t2.startInline = [r2.start]));
|
|
19381
19463
|
}
|
|
19382
19464
|
"childTokens" in r2 && r2.childTokens && (t2.childTokens[r2.name] = r2.childTokens);
|
|
19383
|
-
}),
|
|
19465
|
+
}), i2.extensions = t2), n2.renderer) {
|
|
19384
19466
|
let r2 = this.defaults.renderer || new P$1(this.defaults);
|
|
19385
19467
|
for (let o2 in n2.renderer) {
|
|
19386
19468
|
if (!(o2 in r2)) throw new Error(`renderer '${o2}' does not exist`);
|
|
19387
19469
|
if (["options", "parser"].includes(o2)) continue;
|
|
19388
|
-
let
|
|
19389
|
-
r2[
|
|
19390
|
-
let c2 =
|
|
19470
|
+
let s2 = o2, u2 = n2.renderer[s2], a2 = r2[s2];
|
|
19471
|
+
r2[s2] = (...p2) => {
|
|
19472
|
+
let c2 = u2.apply(r2, p2);
|
|
19391
19473
|
return c2 === false && (c2 = a2.apply(r2, p2)), c2 || "";
|
|
19392
19474
|
};
|
|
19393
19475
|
}
|
|
19394
|
-
|
|
19476
|
+
i2.renderer = r2;
|
|
19395
19477
|
}
|
|
19396
19478
|
if (n2.tokenizer) {
|
|
19397
19479
|
let r2 = this.defaults.tokenizer || new y$1(this.defaults);
|
|
19398
19480
|
for (let o2 in n2.tokenizer) {
|
|
19399
19481
|
if (!(o2 in r2)) throw new Error(`tokenizer '${o2}' does not exist`);
|
|
19400
19482
|
if (["options", "rules", "lexer"].includes(o2)) continue;
|
|
19401
|
-
let
|
|
19402
|
-
r2[
|
|
19403
|
-
let c2 =
|
|
19483
|
+
let s2 = o2, u2 = n2.tokenizer[s2], a2 = r2[s2];
|
|
19484
|
+
r2[s2] = (...p2) => {
|
|
19485
|
+
let c2 = u2.apply(r2, p2);
|
|
19404
19486
|
return c2 === false && (c2 = a2.apply(r2, p2)), c2;
|
|
19405
19487
|
};
|
|
19406
19488
|
}
|
|
19407
|
-
|
|
19489
|
+
i2.tokenizer = r2;
|
|
19408
19490
|
}
|
|
19409
19491
|
if (n2.hooks) {
|
|
19410
19492
|
let r2 = this.defaults.hooks || new S$1();
|
|
19411
19493
|
for (let o2 in n2.hooks) {
|
|
19412
19494
|
if (!(o2 in r2)) throw new Error(`hook '${o2}' does not exist`);
|
|
19413
19495
|
if (["options", "block"].includes(o2)) continue;
|
|
19414
|
-
let
|
|
19415
|
-
S$1.passThroughHooks.has(o2) ? r2[
|
|
19496
|
+
let s2 = o2, u2 = n2.hooks[s2], a2 = r2[s2];
|
|
19497
|
+
S$1.passThroughHooks.has(o2) ? r2[s2] = (p2) => {
|
|
19416
19498
|
if (this.defaults.async && S$1.passThroughHooksRespectAsync.has(o2)) return (async () => {
|
|
19417
|
-
let h2 = await
|
|
19499
|
+
let h2 = await u2.call(r2, p2);
|
|
19418
19500
|
return a2.call(r2, h2);
|
|
19419
19501
|
})();
|
|
19420
|
-
let c2 =
|
|
19502
|
+
let c2 = u2.call(r2, p2);
|
|
19421
19503
|
return a2.call(r2, c2);
|
|
19422
|
-
} : r2[
|
|
19504
|
+
} : r2[s2] = (...p2) => {
|
|
19423
19505
|
if (this.defaults.async) return (async () => {
|
|
19424
|
-
let h2 = await
|
|
19506
|
+
let h2 = await u2.apply(r2, p2);
|
|
19425
19507
|
return h2 === false && (h2 = await a2.apply(r2, p2)), h2;
|
|
19426
19508
|
})();
|
|
19427
|
-
let c2 =
|
|
19509
|
+
let c2 = u2.apply(r2, p2);
|
|
19428
19510
|
return c2 === false && (c2 = a2.apply(r2, p2)), c2;
|
|
19429
19511
|
};
|
|
19430
19512
|
}
|
|
19431
|
-
|
|
19513
|
+
i2.hooks = r2;
|
|
19432
19514
|
}
|
|
19433
19515
|
if (n2.walkTokens) {
|
|
19434
19516
|
let r2 = this.defaults.walkTokens, o2 = n2.walkTokens;
|
|
19435
|
-
|
|
19436
|
-
let
|
|
19437
|
-
return
|
|
19517
|
+
i2.walkTokens = function(s2) {
|
|
19518
|
+
let u2 = [];
|
|
19519
|
+
return u2.push(o2.call(this, s2)), r2 && (u2 = u2.concat(r2.call(this, s2))), u2;
|
|
19438
19520
|
};
|
|
19439
19521
|
}
|
|
19440
|
-
this.defaults = { ...this.defaults, ...
|
|
19522
|
+
this.defaults = { ...this.defaults, ...i2 };
|
|
19441
19523
|
}), this;
|
|
19442
19524
|
}
|
|
19443
19525
|
setOptions(e2) {
|
|
@@ -19450,25 +19532,25 @@ ${e2}</tr>
|
|
|
19450
19532
|
return b$1.parse(e2, t2 ?? this.defaults);
|
|
19451
19533
|
}
|
|
19452
19534
|
parseMarkdown(e2) {
|
|
19453
|
-
return (n2,
|
|
19454
|
-
let r2 = { ...
|
|
19455
|
-
if (this.defaults.async === true && r2.async === false) return
|
|
19456
|
-
if (typeof n2 > "u" || n2 === null) return
|
|
19457
|
-
if (typeof n2 != "string") return
|
|
19535
|
+
return (n2, i2) => {
|
|
19536
|
+
let r2 = { ...i2 }, o2 = { ...this.defaults, ...r2 }, s2 = this.onError(!!o2.silent, !!o2.async);
|
|
19537
|
+
if (this.defaults.async === true && r2.async === false) return s2(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));
|
|
19538
|
+
if (typeof n2 > "u" || n2 === null) return s2(new Error("marked(): input parameter is undefined or null"));
|
|
19539
|
+
if (typeof n2 != "string") return s2(new Error("marked(): input parameter is of type " + Object.prototype.toString.call(n2) + ", string expected"));
|
|
19458
19540
|
if (o2.hooks && (o2.hooks.options = o2, o2.hooks.block = e2), o2.async) return (async () => {
|
|
19459
|
-
let
|
|
19541
|
+
let u2 = o2.hooks ? await o2.hooks.preprocess(n2) : n2, p2 = await (o2.hooks ? await o2.hooks.provideLexer(e2) : e2 ? x.lex : x.lexInline)(u2, o2), c2 = o2.hooks ? await o2.hooks.processAllTokens(p2) : p2;
|
|
19460
19542
|
o2.walkTokens && await Promise.all(this.walkTokens(c2, o2.walkTokens));
|
|
19461
|
-
let
|
|
19462
|
-
return o2.hooks ? await o2.hooks.postprocess(
|
|
19463
|
-
})().catch(
|
|
19543
|
+
let k = await (o2.hooks ? await o2.hooks.provideParser(e2) : e2 ? b$1.parse : b$1.parseInline)(c2, o2);
|
|
19544
|
+
return o2.hooks ? await o2.hooks.postprocess(k) : k;
|
|
19545
|
+
})().catch(s2);
|
|
19464
19546
|
try {
|
|
19465
19547
|
o2.hooks && (n2 = o2.hooks.preprocess(n2));
|
|
19466
19548
|
let a2 = (o2.hooks ? o2.hooks.provideLexer(e2) : e2 ? x.lex : x.lexInline)(n2, o2);
|
|
19467
19549
|
o2.hooks && (a2 = o2.hooks.processAllTokens(a2)), o2.walkTokens && this.walkTokens(a2, o2.walkTokens);
|
|
19468
19550
|
let c2 = (o2.hooks ? o2.hooks.provideParser(e2) : e2 ? b$1.parse : b$1.parseInline)(a2, o2);
|
|
19469
19551
|
return o2.hooks && (c2 = o2.hooks.postprocess(c2)), c2;
|
|
19470
|
-
} catch (
|
|
19471
|
-
return
|
|
19552
|
+
} catch (u2) {
|
|
19553
|
+
return s2(u2);
|
|
19472
19554
|
}
|
|
19473
19555
|
};
|
|
19474
19556
|
}
|
|
@@ -19476,29 +19558,29 @@ ${e2}</tr>
|
|
|
19476
19558
|
return (n2) => {
|
|
19477
19559
|
if (n2.message += `
|
|
19478
19560
|
Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
19479
|
-
let
|
|
19480
|
-
return t2 ? Promise.resolve(
|
|
19561
|
+
let i2 = "<p>An error occurred:</p><pre>" + R(n2.message + "", true) + "</pre>";
|
|
19562
|
+
return t2 ? Promise.resolve(i2) : i2;
|
|
19481
19563
|
}
|
|
19482
19564
|
if (t2) return Promise.reject(n2);
|
|
19483
19565
|
throw n2;
|
|
19484
19566
|
};
|
|
19485
19567
|
}
|
|
19486
19568
|
};
|
|
19487
|
-
var M = new
|
|
19488
|
-
function f$1(
|
|
19489
|
-
return M.parse(
|
|
19569
|
+
var M = new Q();
|
|
19570
|
+
function f$1(l2, e2) {
|
|
19571
|
+
return M.parse(l2, e2);
|
|
19490
19572
|
}
|
|
19491
|
-
f$1.options = f$1.setOptions = function(
|
|
19492
|
-
return M.setOptions(
|
|
19573
|
+
f$1.options = f$1.setOptions = function(l2) {
|
|
19574
|
+
return M.setOptions(l2), f$1.defaults = M.defaults, U(f$1.defaults), f$1;
|
|
19493
19575
|
};
|
|
19494
19576
|
f$1.getDefaults = A;
|
|
19495
19577
|
f$1.defaults = T;
|
|
19496
|
-
function
|
|
19497
|
-
return M.use(...
|
|
19578
|
+
function bt(...l2) {
|
|
19579
|
+
return M.use(...l2), f$1.defaults = M.defaults, U(f$1.defaults), f$1;
|
|
19498
19580
|
}
|
|
19499
|
-
f$1.use =
|
|
19500
|
-
f$1.walkTokens = function(
|
|
19501
|
-
return M.walkTokens(
|
|
19581
|
+
f$1.use = bt;
|
|
19582
|
+
f$1.walkTokens = function(l2, e2) {
|
|
19583
|
+
return M.walkTokens(l2, e2);
|
|
19502
19584
|
};
|
|
19503
19585
|
f$1.parseInline = M.parseInline;
|
|
19504
19586
|
f$1.Parser = b$1;
|
|
@@ -21117,17 +21199,23 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21117
21199
|
const tokens = f$1.lexer(md);
|
|
21118
21200
|
const segments = [];
|
|
21119
21201
|
let buffer = [];
|
|
21120
|
-
|
|
21202
|
+
function renderGroup(group) {
|
|
21203
|
+
const list = group;
|
|
21204
|
+
list.links = tokens.links;
|
|
21205
|
+
return purify.sanitize(f$1.parser(list));
|
|
21206
|
+
}
|
|
21207
|
+
function flush() {
|
|
21121
21208
|
if (buffer.length === 0) return;
|
|
21122
|
-
|
|
21123
|
-
group.links = tokens.links;
|
|
21124
|
-
segments.push({ type: "html", html: purify.sanitize(f$1.parser(group)) });
|
|
21209
|
+
segments.push({ type: "html", html: renderGroup(buffer) });
|
|
21125
21210
|
buffer = [];
|
|
21126
|
-
}
|
|
21211
|
+
}
|
|
21127
21212
|
for (const token of tokens) {
|
|
21128
21213
|
if (token.type === "code") {
|
|
21129
21214
|
flush();
|
|
21130
21215
|
segments.push({ type: "code", code: token.text, lang: token.lang ?? "" });
|
|
21216
|
+
} else if (token.type === "table") {
|
|
21217
|
+
flush();
|
|
21218
|
+
segments.push({ type: "table", html: renderGroup([token]) });
|
|
21131
21219
|
} else {
|
|
21132
21220
|
buffer.push(token);
|
|
21133
21221
|
}
|
|
@@ -21164,10 +21252,10 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21164
21252
|
function getShadowRootSelection(root2) {
|
|
21165
21253
|
return root2.getSelection?.() ?? null;
|
|
21166
21254
|
}
|
|
21167
|
-
const _hoisted_1$
|
|
21168
|
-
const _hoisted_2$
|
|
21169
|
-
const _hoisted_3$
|
|
21170
|
-
const _sfc_main$
|
|
21255
|
+
const _hoisted_1$B = { class: "markdown-editor" };
|
|
21256
|
+
const _hoisted_2$t = ["aria-label"];
|
|
21257
|
+
const _hoisted_3$m = ["contenteditable"];
|
|
21258
|
+
const _sfc_main$I = /* @__PURE__ */ defineComponent({
|
|
21171
21259
|
__name: "MarkdownEditor",
|
|
21172
21260
|
props: {
|
|
21173
21261
|
modelValue: { type: String },
|
|
@@ -21388,7 +21476,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21388
21476
|
}
|
|
21389
21477
|
);
|
|
21390
21478
|
return (_ctx, _cache) => {
|
|
21391
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
21479
|
+
return openBlock(), createElementBlock("div", _hoisted_1$B, [
|
|
21392
21480
|
!__props.disabled ? (openBlock(), createElementBlock("div", {
|
|
21393
21481
|
key: 0,
|
|
21394
21482
|
class: "markdown-editor__toolbar",
|
|
@@ -21499,7 +21587,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21499
21587
|
title: unref(t2)("mdToolbar.redo"),
|
|
21500
21588
|
onClick: _cache[8] || (_cache[8] = ($event) => execCmd("redo"))
|
|
21501
21589
|
}, null, 8, ["aria-label", "title"])
|
|
21502
|
-
], 8, _hoisted_2$
|
|
21590
|
+
], 8, _hoisted_2$t)) : createCommentVNode("", true),
|
|
21503
21591
|
createBaseVNode("div", {
|
|
21504
21592
|
ref: "editorEl",
|
|
21505
21593
|
class: "markdown-editor__content",
|
|
@@ -21509,16 +21597,17 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21509
21597
|
onPaste,
|
|
21510
21598
|
onFocus: startSelectionListener,
|
|
21511
21599
|
onBlur: stopSelectionListener
|
|
21512
|
-
}, null, 40, _hoisted_3$
|
|
21600
|
+
}, null, 40, _hoisted_3$m)
|
|
21513
21601
|
]);
|
|
21514
21602
|
};
|
|
21515
21603
|
}
|
|
21516
21604
|
});
|
|
21517
|
-
const _style_0$
|
|
21518
|
-
const MarkdownEditor = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21519
|
-
const _hoisted_1$
|
|
21520
|
-
const _hoisted_2$
|
|
21521
|
-
const
|
|
21605
|
+
const _style_0$z = "\n.markdown-editor[data-v-a278828c] {\n display: flex;\n flex-direction: column;\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n line-height: var(--line-height);\n color: var(--color-text-primary);\n}\n.markdown-editor__toolbar[data-v-a278828c] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--spacing-xs);\n padding: var(--spacing-xs) var(--spacing-md);\n border-bottom: 1px solid var(--color-border);\n background-color: var(--color-surface);\n position: sticky;\n top: var(--document-toolbar-height, 0px);\n z-index: 1;\n}\n.markdown-editor__separator[data-v-a278828c] {\n width: 1px;\n height: 20px;\n background-color: var(--color-border);\n margin: 0 var(--spacing-xs);\n}\n.markdown-editor__content[data-v-a278828c] {\n padding: 4rem clamp(1.5rem, 6rem, 8%);\n outline: none;\n min-height: 200px;\n}\n.markdown-editor__content[data-v-a278828c] > *:first-child {\n margin-top: 0;\n}\n.markdown-editor__content[data-v-a278828c] h1,\n.markdown-editor__content[data-v-a278828c] h2,\n.markdown-editor__content[data-v-a278828c] h3,\n.markdown-editor__content[data-v-a278828c] h4 {\n margin: var(--spacing-lg) 0 var(--spacing-sm);\n font-weight: 700;\n color: var(--color-text-primary);\n}\n.markdown-editor__content[data-v-a278828c] h1 {\n font-size: var(--font-size-xl);\n}\n.markdown-editor__content[data-v-a278828c] h2 {\n font-size: var(--font-size-lg);\n}\n.markdown-editor__content[data-v-a278828c] h3 {\n font-size: var(--font-size-base);\n}\n.markdown-editor__content[data-v-a278828c] h4 {\n font-size: var(--font-size-sm);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-secondary);\n}\n.markdown-editor__content[data-v-a278828c] p {\n margin: 0 0 var(--spacing-md);\n}\n.markdown-editor__content[data-v-a278828c] ul,\n.markdown-editor__content[data-v-a278828c] ol {\n margin: 0 0 var(--spacing-md);\n padding-left: var(--spacing-lg);\n}\n.markdown-editor__content[data-v-a278828c] li {\n margin: var(--spacing-xs) 0;\n}\n.markdown-editor__content[data-v-a278828c] blockquote {\n margin: var(--spacing-md) 0;\n padding: var(--spacing-sm) var(--spacing-md);\n border-left: 3px solid var(--color-border);\n color: var(--color-text-secondary);\n font-style: italic;\n}\n.markdown-editor__content[data-v-a278828c] code {\n font-family: var(--font-family-mono);\n font-size: 0.9em;\n padding: 1px 4px;\n background-color: var(--color-surface);\n border-radius: var(--radius-sm);\n}\n.markdown-editor__content[data-v-a278828c] pre {\n margin: var(--spacing-md) 0;\n padding: var(--spacing-md);\n background-color: var(--color-surface);\n border-radius: var(--radius-md);\n overflow-x: auto;\n}\n.markdown-editor__content[data-v-a278828c] pre code {\n padding: 0;\n background: none;\n}\n.markdown-editor__content[data-v-a278828c] a {\n color: var(--color-primary);\n text-decoration: underline;\n}\n.markdown-editor__content[data-v-a278828c] hr {\n border: 0;\n border-top: 1px solid var(--color-border);\n margin: var(--spacing-lg) 0;\n}\n.markdown-editor__content[data-v-a278828c] strong {\n font-weight: 700;\n}\n.markdown-editor__content[data-v-a278828c] table {\n border-collapse: collapse;\n margin: var(--spacing-md) 0;\n}\n.markdown-editor__content[data-v-a278828c] th,\n.markdown-editor__content[data-v-a278828c] td {\n border: 1px solid var(--color-border);\n padding: var(--spacing-xs) var(--spacing-sm);\n}\n.markdown-editor__content[data-v-a278828c] th {\n background-color: var(--color-surface);\n font-weight: 600;\n}\n";
|
|
21606
|
+
const MarkdownEditor = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["styles", [_style_0$z]], ["__scopeId", "data-v-a278828c"]]);
|
|
21607
|
+
const _hoisted_1$A = { class: "markdown-view" };
|
|
21608
|
+
const _hoisted_2$s = ["innerHTML"];
|
|
21609
|
+
const _hoisted_3$l = ["innerHTML"];
|
|
21610
|
+
const _sfc_main$H = /* @__PURE__ */ defineComponent({
|
|
21522
21611
|
__name: "MarkdownView",
|
|
21523
21612
|
props: {
|
|
21524
21613
|
source: { type: String },
|
|
@@ -21528,15 +21617,19 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21528
21617
|
const props = __props;
|
|
21529
21618
|
const segments = computed(() => renderMarkdownSegments(props.source));
|
|
21530
21619
|
return (_ctx, _cache) => {
|
|
21531
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
21620
|
+
return openBlock(), createElementBlock("div", _hoisted_1$A, [
|
|
21532
21621
|
(openBlock(true), createElementBlock(Fragment, null, renderList(segments.value, (seg, i2) => {
|
|
21533
21622
|
return openBlock(), createElementBlock(Fragment, { key: i2 }, [
|
|
21534
21623
|
seg.type === "html" ? (openBlock(), createElementBlock("div", {
|
|
21535
21624
|
key: 0,
|
|
21536
21625
|
class: "markdown-view__html",
|
|
21537
21626
|
innerHTML: seg.html
|
|
21538
|
-
}, null, 8, _hoisted_2$
|
|
21627
|
+
}, null, 8, _hoisted_2$s)) : seg.type === "table" ? (openBlock(), createElementBlock("div", {
|
|
21539
21628
|
key: 1,
|
|
21629
|
+
class: "markdown-view__table",
|
|
21630
|
+
innerHTML: seg.html
|
|
21631
|
+
}, null, 8, _hoisted_3$l)) : (openBlock(), createBlock(CodeBlock, {
|
|
21632
|
+
key: 2,
|
|
21540
21633
|
code: seg.code,
|
|
21541
21634
|
lang: seg.lang,
|
|
21542
21635
|
streaming: __props.streaming
|
|
@@ -21547,18 +21640,18 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21547
21640
|
};
|
|
21548
21641
|
}
|
|
21549
21642
|
});
|
|
21550
|
-
const _style_0$
|
|
21551
|
-
const MarkdownView = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21552
|
-
const _hoisted_1$
|
|
21643
|
+
const _style_0$y = "\n.markdown-view[data-v-b6eeece0] {\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n line-height: var(--line-height);\n color: var(--color-text-primary);\n /* Long URLs and identifiers wrap instead of running past a narrow\n column (phones, chat), where the overflow would just be clipped. */\n overflow-wrap: break-word;\n}\n\n/* No box: block children flow as direct children of .markdown-view so margin\n collapsing keeps working across html/code segment boundaries. */\n.markdown-view__html[data-v-b6eeece0] {\n display: contents;\n}\n\n/* Trim the outer margins of the first/last rendered block (reach through the\n display:contents wrapper to the real content element). */\n.markdown-view > .markdown-view__html[data-v-b6eeece0]:first-child > :first-child {\n margin-top: 0;\n}\n.markdown-view > .markdown-view__html[data-v-b6eeece0]:last-child > :last-child {\n margin-bottom: 0;\n}\n.markdown-view > .markdown-view__table[data-v-b6eeece0]:first-child {\n margin-top: 0;\n}\n.markdown-view > .markdown-view__table[data-v-b6eeece0]:last-child {\n margin-bottom: 0;\n}\n.markdown-view[data-v-b6eeece0] h1,\n.markdown-view[data-v-b6eeece0] h2,\n.markdown-view[data-v-b6eeece0] h3,\n.markdown-view[data-v-b6eeece0] h4 {\n margin: var(--spacing-lg) 0 var(--spacing-sm);\n font-weight: 700;\n color: var(--color-text-primary);\n}\n.markdown-view[data-v-b6eeece0] h1 {\n font-size: var(--font-size-xl);\n}\n.markdown-view[data-v-b6eeece0] h2 {\n font-size: var(--font-size-lg);\n}\n.markdown-view[data-v-b6eeece0] h3 {\n font-size: var(--font-size-base);\n}\n.markdown-view[data-v-b6eeece0] h4 {\n font-size: var(--font-size-sm);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-secondary);\n}\n.markdown-view[data-v-b6eeece0] p {\n margin: 0 0 var(--spacing-md);\n}\n.markdown-view[data-v-b6eeece0] ul,\n.markdown-view[data-v-b6eeece0] ol {\n margin: 0 0 var(--spacing-md);\n padding-left: var(--spacing-lg);\n}\n.markdown-view[data-v-b6eeece0] li {\n margin: var(--spacing-xs) 0;\n}\n.markdown-view[data-v-b6eeece0] blockquote {\n margin: var(--spacing-md) 0;\n padding: var(--spacing-sm) var(--spacing-md);\n border-left: 3px solid var(--color-border);\n color: var(--color-text-secondary);\n font-style: italic;\n}\n\n/* Inline code only — fenced blocks render via <CodeBlock>. Scoped to the html\n wrapper so it never reaches into the CodeBlock component. */\n.markdown-view__html[data-v-b6eeece0] code {\n font-family: var(--font-family-mono);\n font-size: 0.9em;\n padding: 1px 4px;\n background-color: var(--color-surface);\n border-radius: var(--radius-sm);\n}\n\n/* Fallback for raw <pre> written as literal HTML (not fenced code). */\n.markdown-view__html[data-v-b6eeece0] pre {\n margin: var(--spacing-md) 0;\n padding: var(--spacing-md);\n background-color: var(--color-surface);\n border-radius: var(--radius-md);\n overflow-x: auto;\n border: 1px solid var(--color-border);\n}\n.markdown-view__html[data-v-b6eeece0] pre code {\n padding: 0;\n background: none;\n}\n.markdown-view[data-v-b6eeece0] a {\n color: var(--color-primary);\n text-decoration: underline;\n}\n.markdown-view[data-v-b6eeece0] hr {\n border: 0;\n border-top: 1px solid var(--color-border);\n margin: var(--spacing-lg) 0;\n}\n.markdown-view[data-v-b6eeece0] strong {\n font-weight: 700;\n}\n.markdown-view[data-v-b6eeece0] img {\n max-width: 100%;\n height: auto;\n}\n\n/* A table wider than the column scrolls on its own, the text around it\n keeps the column width. */\n.markdown-view__table[data-v-b6eeece0] {\n margin: var(--spacing-md) 0;\n overflow-x: auto;\n}\n.markdown-view[data-v-b6eeece0] table {\n border-collapse: collapse;\n}\n.markdown-view[data-v-b6eeece0] th,\n.markdown-view[data-v-b6eeece0] td {\n border: 1px solid var(--color-border);\n padding: var(--spacing-xs) var(--spacing-sm);\n}\n.markdown-view[data-v-b6eeece0] th {\n background-color: var(--color-surface);\n font-weight: 600;\n}\n";
|
|
21644
|
+
const MarkdownView = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["styles", [_style_0$y]], ["__scopeId", "data-v-b6eeece0"]]);
|
|
21645
|
+
const _hoisted_1$z = {
|
|
21553
21646
|
key: 0,
|
|
21554
21647
|
class: "transcript-ui-popover-list__items"
|
|
21555
21648
|
};
|
|
21556
|
-
const _hoisted_2$
|
|
21649
|
+
const _hoisted_2$r = {
|
|
21557
21650
|
key: 0,
|
|
21558
21651
|
class: "transcript-ui-popover-list__divider"
|
|
21559
21652
|
};
|
|
21560
21653
|
const _hoisted_3$k = { class: "transcript-ui-popover-list__footer" };
|
|
21561
|
-
const _sfc_main$
|
|
21654
|
+
const _sfc_main$G = /* @__PURE__ */ defineComponent({
|
|
21562
21655
|
__name: "PopoverList",
|
|
21563
21656
|
props: {
|
|
21564
21657
|
items: { type: Array },
|
|
@@ -21611,7 +21704,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21611
21704
|
"side-offset": __props.sideOffset
|
|
21612
21705
|
}, {
|
|
21613
21706
|
default: withCtx(() => [
|
|
21614
|
-
__props.items.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_1$
|
|
21707
|
+
__props.items.length > 0 ? (openBlock(), createElementBlock("ul", _hoisted_1$z, [
|
|
21615
21708
|
(openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (item, index) => {
|
|
21616
21709
|
return openBlock(), createBlock(unref(DropdownMenuItem_default), {
|
|
21617
21710
|
key: keyFor(item, index),
|
|
@@ -21627,7 +21720,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21627
21720
|
}), 128))
|
|
21628
21721
|
])) : createCommentVNode("", true),
|
|
21629
21722
|
_ctx.$slots.footer ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
21630
|
-
__props.items.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
21723
|
+
__props.items.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_2$r)) : createCommentVNode("", true),
|
|
21631
21724
|
createBaseVNode("div", _hoisted_3$k, [
|
|
21632
21725
|
renderSlot(_ctx.$slots, "footer")
|
|
21633
21726
|
])
|
|
@@ -21644,21 +21737,21 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21644
21737
|
};
|
|
21645
21738
|
}
|
|
21646
21739
|
});
|
|
21647
|
-
const _hoisted_1$
|
|
21648
|
-
const _hoisted_2$
|
|
21740
|
+
const _hoisted_1$y = ["disabled", "aria-current"];
|
|
21741
|
+
const _hoisted_2$q = {
|
|
21649
21742
|
key: 0,
|
|
21650
21743
|
class: "selectable-list-item__leading"
|
|
21651
21744
|
};
|
|
21652
21745
|
const _hoisted_3$j = { class: "selectable-list-item__label" };
|
|
21653
|
-
const _hoisted_4$
|
|
21746
|
+
const _hoisted_4$d = {
|
|
21654
21747
|
key: 1,
|
|
21655
21748
|
class: "selectable-list-item__trailing"
|
|
21656
21749
|
};
|
|
21657
|
-
const _hoisted_5$
|
|
21750
|
+
const _hoisted_5$c = {
|
|
21658
21751
|
key: 0,
|
|
21659
21752
|
class: "selectable-list-item__actions"
|
|
21660
21753
|
};
|
|
21661
|
-
const _sfc_main$
|
|
21754
|
+
const _sfc_main$F = /* @__PURE__ */ defineComponent({
|
|
21662
21755
|
__name: "SelectableListItem",
|
|
21663
21756
|
props: {
|
|
21664
21757
|
current: { type: Boolean },
|
|
@@ -21683,7 +21776,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21683
21776
|
"aria-current": __props.current ? "true" : void 0,
|
|
21684
21777
|
onClick: _cache[0] || (_cache[0] = ($event) => emit2("select"))
|
|
21685
21778
|
}, [
|
|
21686
|
-
_ctx.$slots.leading ? (openBlock(), createElementBlock("span", _hoisted_2$
|
|
21779
|
+
_ctx.$slots.leading ? (openBlock(), createElementBlock("span", _hoisted_2$q, [
|
|
21687
21780
|
renderSlot(_ctx.$slots, "leading", {}, void 0, true)
|
|
21688
21781
|
])) : createCommentVNode("", true),
|
|
21689
21782
|
createBaseVNode("span", _hoisted_3$j, [
|
|
@@ -21691,20 +21784,20 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21691
21784
|
createTextVNode(toDisplayString(__props.label), 1)
|
|
21692
21785
|
], true)
|
|
21693
21786
|
]),
|
|
21694
|
-
_ctx.$slots.trailing ? (openBlock(), createElementBlock("span", _hoisted_4$
|
|
21787
|
+
_ctx.$slots.trailing ? (openBlock(), createElementBlock("span", _hoisted_4$d, [
|
|
21695
21788
|
renderSlot(_ctx.$slots, "trailing", {}, void 0, true)
|
|
21696
21789
|
])) : createCommentVNode("", true)
|
|
21697
|
-
], 8, _hoisted_1$
|
|
21698
|
-
_ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_5$
|
|
21790
|
+
], 8, _hoisted_1$y),
|
|
21791
|
+
_ctx.$slots.actions ? (openBlock(), createElementBlock("div", _hoisted_5$c, [
|
|
21699
21792
|
renderSlot(_ctx.$slots, "actions", {}, void 0, true)
|
|
21700
21793
|
])) : createCommentVNode("", true)
|
|
21701
21794
|
], 2);
|
|
21702
21795
|
};
|
|
21703
21796
|
}
|
|
21704
21797
|
});
|
|
21705
|
-
const _style_0$
|
|
21706
|
-
const SelectableListItem = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21707
|
-
const _sfc_main$
|
|
21798
|
+
const _style_0$x = "\n.selectable-list-item[data-v-46747619] {\n position: relative;\n display: flex;\n border: 1px solid transparent;\n transition:\n background-color var(--transition-duration),\n box-shadow var(--transition-duration);\n}\n.selectable-list-item--md[data-v-46747619] {\n font-size: var(--font-size-sm);\n}\n.selectable-list-item--sm[data-v-46747619] {\n font-size: var(--font-size-xs);\n}\n.selectable-list-item[data-v-46747619]:hover {\n background-color: var(--color-surface-hover);\n}\n.selectable-list-item--current[data-v-46747619],\n.selectable-list-item--current[data-v-46747619]:hover {\n background-color: color-mix(in srgb, var(--color-primary) 12%, transparent);\n box-shadow: inset 2px 0 0 var(--color-primary);\n}\n\n/* ── The selectable button ── */\n.transcript-ui-root .selectable-list-item__main[data-v-46747619] {\n /* Full reset (same convention as Button, EditableText, Tabs…): the\n previous partial reset (background/border/font only) left margin,\n padding, and appearance to whatever the host page's UA/global styles\n happened to set. */\n all: unset;\n box-sizing: border-box;\n flex: 1;\n min-width: 0;\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n font: inherit;\n color: var(--color-text-primary);\n text-align: left;\n cursor: pointer;\n}\n.transcript-ui-root .selectable-list-item--md .selectable-list-item__main[data-v-46747619] {\n padding: var(--spacing-sm);\n}\n.transcript-ui-root .selectable-list-item--sm .selectable-list-item__main[data-v-46747619] {\n padding: var(--spacing-xs) var(--spacing-sm);\n color: var(--color-text-secondary);\n}\n.transcript-ui-root .selectable-list-item__main[data-v-46747619]:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n}\n.transcript-ui-root .selectable-list-item__main[data-v-46747619]:disabled {\n cursor: not-allowed;\n}\n.transcript-ui-root .selectable-list-item--current .selectable-list-item__main[data-v-46747619] {\n color: var(--color-primary);\n font-weight: 600;\n}\n.selectable-list-item__label[data-v-46747619] {\n flex: 1;\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n font-variant-numeric: tabular-nums;\n}\n.selectable-list-item__leading[data-v-46747619],\n.selectable-list-item__trailing[data-v-46747619] {\n display: inline-flex;\n align-items: center;\n flex-shrink: 0;\n}\n\n/* Trailing content (hints, dates) stays muted even on the active row. */\n.selectable-list-item__trailing[data-v-46747619] {\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n\n/* ── Trailing actions (hover / focus reveal, overlaying the row) ── */\n.selectable-list-item__actions[data-v-46747619] {\n position: absolute;\n inset-block: 0;\n inset-inline-end: 0;\n display: flex;\n align-items: center;\n gap: 2px;\n padding-inline: var(--spacing-md) var(--spacing-xs);\n /* Fade the label out behind the actions, matching the row surface. */\n background: linear-gradient(\n to right,\n transparent,\n var(--color-surface-hover) var(--spacing-md)\n );\n opacity: 0;\n pointer-events: none;\n transition: opacity var(--transition-duration);\n}\n.selectable-list-item:hover .selectable-list-item__actions[data-v-46747619],\n.selectable-list-item:focus-within .selectable-list-item__actions[data-v-46747619] {\n opacity: 1;\n pointer-events: auto;\n}\n\n/* Match the fade to the selected surface on the active row. */\n.selectable-list-item--current .selectable-list-item__actions[data-v-46747619] {\n background: linear-gradient(\n to right,\n transparent,\n color-mix(in srgb, var(--color-primary) 12%, var(--color-surface-hover))\n var(--spacing-md)\n );\n}\n@media (prefers-reduced-motion: reduce) {\n.selectable-list-item[data-v-46747619],\n .selectable-list-item__actions[data-v-46747619] {\n transition: none;\n}\n}\n";
|
|
21799
|
+
const SelectableListItem = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["styles", [_style_0$x]], ["__scopeId", "data-v-46747619"]]);
|
|
21800
|
+
const _sfc_main$E = /* @__PURE__ */ defineComponent({
|
|
21708
21801
|
__name: "SpeakerIndicator",
|
|
21709
21802
|
props: {
|
|
21710
21803
|
color: { type: String }
|
|
@@ -21719,12 +21812,12 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21719
21812
|
};
|
|
21720
21813
|
}
|
|
21721
21814
|
});
|
|
21722
|
-
const _style_0$
|
|
21723
|
-
const SpeakerIndicator = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21724
|
-
const _hoisted_1$
|
|
21725
|
-
const _hoisted_2$
|
|
21815
|
+
const _style_0$w = "\n.speaker-indicator[data-v-324978c0] {\n display: inline-block;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n flex-shrink: 0;\n}\n";
|
|
21816
|
+
const SpeakerIndicator = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["styles", [_style_0$w]], ["__scopeId", "data-v-324978c0"]]);
|
|
21817
|
+
const _hoisted_1$x = { class: "switch" };
|
|
21818
|
+
const _hoisted_2$p = ["id", "checked", "disabled"];
|
|
21726
21819
|
const _hoisted_3$i = ["for"];
|
|
21727
|
-
const _sfc_main$
|
|
21820
|
+
const _sfc_main$D = /* @__PURE__ */ defineComponent({
|
|
21728
21821
|
__name: "SwitchToggle",
|
|
21729
21822
|
props: {
|
|
21730
21823
|
modelValue: { type: Boolean },
|
|
@@ -21737,14 +21830,14 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21737
21830
|
const emit2 = __emit;
|
|
21738
21831
|
const inputId = props.id ?? useId$1();
|
|
21739
21832
|
return (_ctx, _cache) => {
|
|
21740
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
21833
|
+
return openBlock(), createElementBlock("div", _hoisted_1$x, [
|
|
21741
21834
|
createBaseVNode("input", {
|
|
21742
21835
|
type: "checkbox",
|
|
21743
21836
|
id: unref(inputId),
|
|
21744
21837
|
checked: __props.modelValue,
|
|
21745
21838
|
disabled: __props.disabled,
|
|
21746
21839
|
onChange: _cache[0] || (_cache[0] = ($event) => emit2("update:modelValue", $event.target.checked))
|
|
21747
|
-
}, null, 40, _hoisted_2$
|
|
21840
|
+
}, null, 40, _hoisted_2$p),
|
|
21748
21841
|
createBaseVNode("label", { for: unref(inputId) }, [..._cache[1] || (_cache[1] = [
|
|
21749
21842
|
createBaseVNode("div", { class: "switch-slider" }, null, -1)
|
|
21750
21843
|
])], 8, _hoisted_3$i)
|
|
@@ -21752,15 +21845,15 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21752
21845
|
};
|
|
21753
21846
|
}
|
|
21754
21847
|
});
|
|
21755
|
-
const _style_0$
|
|
21756
|
-
const SwitchToggle = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21848
|
+
const _style_0$v = "\n.switch[data-v-44d0160b] {\n display: inline-block;\n flex-shrink: 0;\n}\n.switch input[data-v-44d0160b] {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip-path: inset(50%);\n white-space: nowrap;\n border: 0;\n}\n.switch label[data-v-44d0160b] {\n height: 20px;\n width: 40px;\n display: block;\n border: 1px solid var(--color-border);\n border-radius: 20px;\n cursor: pointer;\n background-color: var(--color-border);\n transition: background-color var(--transition-duration);\n}\n.switch .switch-slider[data-v-44d0160b] {\n height: 22px;\n width: 22px;\n border: 1px solid var(--color-border);\n border-radius: 50%;\n position: relative;\n top: -2px;\n left: -2px;\n background-color: var(--color-white);\n transition: left var(--transition-duration);\n}\n.switch input:checked + label[data-v-44d0160b] {\n background-color: var(--color-primary);\n border-color: var(--color-primary);\n}\n.switch input:checked + label .switch-slider[data-v-44d0160b] {\n left: 20px;\n border-color: var(--color-primary);\n}\n.switch input:disabled + label[data-v-44d0160b] {\n cursor: not-allowed;\n opacity: 0.5;\n}\n";
|
|
21849
|
+
const SwitchToggle = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["styles", [_style_0$v]], ["__scopeId", "data-v-44d0160b"]]);
|
|
21757
21850
|
function computeInitials(name) {
|
|
21758
21851
|
const words = name.trim().split(/\s+/).filter(Boolean);
|
|
21759
21852
|
if (words.length === 0) return "?";
|
|
21760
21853
|
return words.slice(0, 2).map((w2) => w2[0].toUpperCase()).join("");
|
|
21761
21854
|
}
|
|
21762
|
-
const _hoisted_1$
|
|
21763
|
-
const _sfc_main$
|
|
21855
|
+
const _hoisted_1$w = ["title", "aria-label"];
|
|
21856
|
+
const _sfc_main$C = /* @__PURE__ */ defineComponent({
|
|
21764
21857
|
__name: "UserAvatar",
|
|
21765
21858
|
props: {
|
|
21766
21859
|
name: { type: String },
|
|
@@ -21776,22 +21869,22 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21776
21869
|
role: "img",
|
|
21777
21870
|
title: title.value,
|
|
21778
21871
|
"aria-label": title.value
|
|
21779
|
-
}, toDisplayString(initials.value), 9, _hoisted_1$
|
|
21872
|
+
}, toDisplayString(initials.value), 9, _hoisted_1$w);
|
|
21780
21873
|
};
|
|
21781
21874
|
}
|
|
21782
21875
|
});
|
|
21783
|
-
const _style_0$
|
|
21784
|
-
const UserAvatar = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21785
|
-
const _hoisted_1$
|
|
21786
|
-
const _hoisted_2$
|
|
21876
|
+
const _style_0$u = "\n.user-avatar[data-v-977a8d17] {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 24px;\n height: 24px;\n border-radius: 50%;\n background-color: var(--color-primary);\n color: var(--color-white);\n font-size: var(--font-size-xs);\n font-weight: 600;\n user-select: none;\n cursor: default;\n}\n";
|
|
21877
|
+
const UserAvatar = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["styles", [_style_0$u]], ["__scopeId", "data-v-977a8d17"]]);
|
|
21878
|
+
const _hoisted_1$v = ["data-status"];
|
|
21879
|
+
const _hoisted_2$o = {
|
|
21787
21880
|
key: 0,
|
|
21788
21881
|
class: "document-article__toolbar",
|
|
21789
21882
|
role: "toolbar"
|
|
21790
21883
|
};
|
|
21791
21884
|
const _hoisted_3$h = { class: "document-article__toolbar-left" };
|
|
21792
|
-
const _hoisted_4$
|
|
21793
|
-
const _hoisted_5$
|
|
21794
|
-
const _hoisted_6$
|
|
21885
|
+
const _hoisted_4$c = { class: "document-article__toolbar-center" };
|
|
21886
|
+
const _hoisted_5$b = { class: "document-article__toolbar-right" };
|
|
21887
|
+
const _hoisted_6$a = { class: "document-article__body" };
|
|
21795
21888
|
const _hoisted_7$4 = {
|
|
21796
21889
|
key: 0,
|
|
21797
21890
|
class: "document-article__center document-article__center--processing",
|
|
@@ -21809,7 +21902,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21809
21902
|
role: "alert"
|
|
21810
21903
|
};
|
|
21811
21904
|
const _hoisted_11$1 = { class: "document-article__error-text" };
|
|
21812
|
-
const _sfc_main$
|
|
21905
|
+
const _sfc_main$B = /* @__PURE__ */ defineComponent({
|
|
21813
21906
|
__name: "DocumentArticle",
|
|
21814
21907
|
props: {
|
|
21815
21908
|
status: { default: "done", type: String },
|
|
@@ -21834,18 +21927,18 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21834
21927
|
class: "document-article",
|
|
21835
21928
|
"data-status": props.status
|
|
21836
21929
|
}, [
|
|
21837
|
-
_ctx.$slots["toolbar-left"] || _ctx.$slots["toolbar-center"] || _ctx.$slots["toolbar-right"] ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
21930
|
+
_ctx.$slots["toolbar-left"] || _ctx.$slots["toolbar-center"] || _ctx.$slots["toolbar-right"] ? (openBlock(), createElementBlock("div", _hoisted_2$o, [
|
|
21838
21931
|
createBaseVNode("div", _hoisted_3$h, [
|
|
21839
21932
|
renderSlot(_ctx.$slots, "toolbar-left", {}, void 0, true)
|
|
21840
21933
|
]),
|
|
21841
|
-
createBaseVNode("div", _hoisted_4$
|
|
21934
|
+
createBaseVNode("div", _hoisted_4$c, [
|
|
21842
21935
|
renderSlot(_ctx.$slots, "toolbar-center", {}, void 0, true)
|
|
21843
21936
|
]),
|
|
21844
|
-
createBaseVNode("div", _hoisted_5$
|
|
21937
|
+
createBaseVNode("div", _hoisted_5$b, [
|
|
21845
21938
|
renderSlot(_ctx.$slots, "toolbar-right", {}, void 0, true)
|
|
21846
21939
|
])
|
|
21847
21940
|
])) : createCommentVNode("", true),
|
|
21848
|
-
createBaseVNode("div", _hoisted_6$
|
|
21941
|
+
createBaseVNode("div", _hoisted_6$a, [
|
|
21849
21942
|
props.status === "processing" ? (openBlock(), createElementBlock("div", _hoisted_7$4, [
|
|
21850
21943
|
createVNode(EditorIcon, {
|
|
21851
21944
|
name: "spinner",
|
|
@@ -21872,13 +21965,13 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21872
21965
|
})
|
|
21873
21966
|
])) : renderSlot(_ctx.$slots, "default", {}, void 0, true, 2)
|
|
21874
21967
|
])
|
|
21875
|
-
], 8, _hoisted_1$
|
|
21968
|
+
], 8, _hoisted_1$v);
|
|
21876
21969
|
};
|
|
21877
21970
|
}
|
|
21878
21971
|
});
|
|
21879
|
-
const _style_0$
|
|
21880
|
-
const DocumentArticle = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
21881
|
-
const _sfc_main$
|
|
21972
|
+
const _style_0$t = "\n.document-article[data-v-dda12eb4] {\n /* One row of buttons plus padding and border. Declared rather than\n measured: slot content must stay on one line (truncate, don't wrap), and\n content stuck right under the toolbar (the markdown editor's toolbar)\n reads this value as its offset. */\n --document-toolbar-height: 49px;\n\n width: min(1088px, calc(100% - 16px));\n max-width: 1088px;\n margin: var(--spacing-lg) auto;\n background-color: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n display: flex;\n flex-direction: column;\n}\n.document-article__toolbar[data-v-dda12eb4] {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n height: var(--document-toolbar-height);\n padding: 0 var(--spacing-md);\n border-bottom: 1px solid var(--color-border);\n position: sticky;\n top: 0;\n background-color: var(--color-surface);\n border-radius: var(--radius-md) var(--radius-md) 0 0;\n z-index: 1;\n}\n.document-article__toolbar-left[data-v-dda12eb4],\n.document-article__toolbar-right[data-v-dda12eb4] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n flex-shrink: 0;\n}\n.document-article__toolbar-center[data-v-dda12eb4] {\n flex: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 0;\n}\n.document-article__body[data-v-dda12eb4] {\n flex: 1;\n min-height: 0;\n}\n.document-article__center[data-v-dda12eb4] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-sm);\n padding: var(--spacing-xl) var(--spacing-md);\n text-align: center;\n}\n.document-article__center--processing[data-v-dda12eb4] {\n color: var(--color-primary);\n}\n.document-article__center--error[data-v-dda12eb4] {\n color: var(--color-danger, #d33);\n}\n.document-article__progress[data-v-dda12eb4] {\n width: min(280px, 100%);\n height: 6px;\n}\n.document-article__progress-value[data-v-dda12eb4] {\n font-size: var(--font-size-xs);\n font-variant-numeric: tabular-nums;\n color: var(--color-text-muted);\n}\n@media (max-width: 767px) {\n.document-article[data-v-dda12eb4] {\n margin: var(--spacing-sm) auto;\n}\n}\n.document-article__error-text[data-v-dda12eb4] {\n margin: 0;\n max-width: 480px;\n font-size: var(--font-size-sm);\n line-height: var(--line-height);\n color: var(--color-text-secondary);\n}\n";
|
|
21973
|
+
const DocumentArticle = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["styles", [_style_0$t]], ["__scopeId", "data-v-dda12eb4"]]);
|
|
21974
|
+
const _sfc_main$A = /* @__PURE__ */ defineComponent({
|
|
21882
21975
|
__name: "DownloadMenu",
|
|
21883
21976
|
props: {
|
|
21884
21977
|
formats: { type: Array },
|
|
@@ -21894,7 +21987,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21894
21987
|
emit2("select", item.format);
|
|
21895
21988
|
}
|
|
21896
21989
|
return (_ctx, _cache) => {
|
|
21897
|
-
return openBlock(), createBlock(_sfc_main$
|
|
21990
|
+
return openBlock(), createBlock(_sfc_main$G, {
|
|
21898
21991
|
items: props.formats,
|
|
21899
21992
|
"item-key": (f2) => f2.format,
|
|
21900
21993
|
align: "end",
|
|
@@ -21922,7 +22015,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21922
22015
|
};
|
|
21923
22016
|
}
|
|
21924
22017
|
});
|
|
21925
|
-
const _sfc_main$
|
|
22018
|
+
const _sfc_main$z = /* @__PURE__ */ defineComponent({
|
|
21926
22019
|
__name: "SpeakerMenu",
|
|
21927
22020
|
emits: ["merge"],
|
|
21928
22021
|
setup(__props, { emit: __emit }) {
|
|
@@ -21935,7 +22028,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21935
22028
|
if (action.id === "merge") emit2("merge");
|
|
21936
22029
|
}
|
|
21937
22030
|
return (_ctx, _cache) => {
|
|
21938
|
-
return openBlock(), createBlock(_sfc_main$
|
|
22031
|
+
return openBlock(), createBlock(_sfc_main$G, {
|
|
21939
22032
|
items: items.value,
|
|
21940
22033
|
"item-key": (a2) => a2.id,
|
|
21941
22034
|
align: "end",
|
|
@@ -21956,20 +22049,34 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21956
22049
|
};
|
|
21957
22050
|
}
|
|
21958
22051
|
});
|
|
21959
|
-
const _hoisted_1$
|
|
21960
|
-
const _hoisted_2$
|
|
22052
|
+
const _hoisted_1$u = ["aria-label"];
|
|
22053
|
+
const _hoisted_2$n = ["aria-selected", "aria-disabled", "disabled", "onClick"];
|
|
21961
22054
|
const _hoisted_3$g = { class: "tab__label" };
|
|
21962
|
-
const
|
|
22055
|
+
const _hoisted_4$b = ["aria-selected", "aria-label"];
|
|
22056
|
+
const _hoisted_5$a = { class: "tab__label" };
|
|
22057
|
+
const _hoisted_6$9 = { class: "tab__menu-item" };
|
|
22058
|
+
const _sfc_main$y = /* @__PURE__ */ defineComponent({
|
|
21963
22059
|
__name: "Tabs",
|
|
21964
22060
|
props: {
|
|
21965
22061
|
tabs: { type: Array },
|
|
21966
22062
|
modelValue: { type: null },
|
|
21967
|
-
ariaLabel: { type: String }
|
|
22063
|
+
ariaLabel: { type: String },
|
|
22064
|
+
collapseFrom: { type: Number }
|
|
21968
22065
|
},
|
|
21969
22066
|
emits: ["update:modelValue"],
|
|
21970
22067
|
setup(__props, { emit: __emit }) {
|
|
21971
22068
|
const props = __props;
|
|
21972
22069
|
const emit2 = __emit;
|
|
22070
|
+
const { t: t2 } = useI18n();
|
|
22071
|
+
const inlineTabs = computed(
|
|
22072
|
+
() => props.collapseFrom === void 0 ? props.tabs : props.tabs.slice(0, props.collapseFrom)
|
|
22073
|
+
);
|
|
22074
|
+
const collapsedTabs = computed(
|
|
22075
|
+
() => props.collapseFrom === void 0 ? [] : props.tabs.slice(props.collapseFrom)
|
|
22076
|
+
);
|
|
22077
|
+
const activeCollapsedTab = computed(
|
|
22078
|
+
() => collapsedTabs.value.find((tab) => tab.value === props.modelValue) ?? null
|
|
22079
|
+
);
|
|
21973
22080
|
function onSelect(tab) {
|
|
21974
22081
|
if (tab.disabled) return;
|
|
21975
22082
|
if (tab.value === props.modelValue) return;
|
|
@@ -21981,7 +22088,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
21981
22088
|
role: "tablist",
|
|
21982
22089
|
"aria-label": __props.ariaLabel
|
|
21983
22090
|
}, [
|
|
21984
|
-
(openBlock(true), createElementBlock(Fragment, null, renderList(
|
|
22091
|
+
(openBlock(true), createElementBlock(Fragment, null, renderList(inlineTabs.value, (tab) => {
|
|
21985
22092
|
return openBlock(), createElementBlock("button", {
|
|
21986
22093
|
key: tab.value,
|
|
21987
22094
|
type: "button",
|
|
@@ -22008,14 +22115,65 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22008
22115
|
]),
|
|
22009
22116
|
_: 2
|
|
22010
22117
|
}, 1024)) : createCommentVNode("", true)
|
|
22011
|
-
], 10, _hoisted_2$
|
|
22012
|
-
}), 128))
|
|
22013
|
-
|
|
22118
|
+
], 10, _hoisted_2$n);
|
|
22119
|
+
}), 128)),
|
|
22120
|
+
collapsedTabs.value.length > 0 ? (openBlock(), createBlock(_sfc_main$G, {
|
|
22121
|
+
key: 0,
|
|
22122
|
+
items: collapsedTabs.value,
|
|
22123
|
+
"item-key": (tab) => tab.value,
|
|
22124
|
+
"is-current": (tab) => tab.value === __props.modelValue,
|
|
22125
|
+
align: "end",
|
|
22126
|
+
onSelect
|
|
22127
|
+
}, {
|
|
22128
|
+
trigger: withCtx(() => [
|
|
22129
|
+
createBaseVNode("button", {
|
|
22130
|
+
type: "button",
|
|
22131
|
+
role: "tab",
|
|
22132
|
+
class: normalizeClass(["tab tab--more", { "tab--active": activeCollapsedTab.value !== null }]),
|
|
22133
|
+
"aria-selected": activeCollapsedTab.value !== null,
|
|
22134
|
+
"aria-label": unref(t2)("tabs.moreLabel")
|
|
22135
|
+
}, [
|
|
22136
|
+
createBaseVNode("span", _hoisted_5$a, toDisplayString(activeCollapsedTab.value ? activeCollapsedTab.value.label : unref(t2)("tabs.moreLabel")), 1),
|
|
22137
|
+
activeCollapsedTab.value?.badge ? (openBlock(), createBlock(Badge, {
|
|
22138
|
+
key: 0,
|
|
22139
|
+
class: "tab__badge"
|
|
22140
|
+
}, {
|
|
22141
|
+
default: withCtx(() => [
|
|
22142
|
+
createTextVNode(toDisplayString(activeCollapsedTab.value.badge), 1)
|
|
22143
|
+
]),
|
|
22144
|
+
_: 1
|
|
22145
|
+
})) : createCommentVNode("", true),
|
|
22146
|
+
createVNode(EditorIcon, {
|
|
22147
|
+
name: "chevron-down",
|
|
22148
|
+
size: 14,
|
|
22149
|
+
class: "tab__chevron"
|
|
22150
|
+
})
|
|
22151
|
+
], 10, _hoisted_4$b)
|
|
22152
|
+
]),
|
|
22153
|
+
item: withCtx(({ item }) => [
|
|
22154
|
+
createBaseVNode("span", _hoisted_6$9, [
|
|
22155
|
+
unref(resolveIcon)(item.icon) ? (openBlock(), createBlock(EditorIcon, {
|
|
22156
|
+
key: 0,
|
|
22157
|
+
name: item.icon,
|
|
22158
|
+
size: 16
|
|
22159
|
+
}, null, 8, ["name"])) : createCommentVNode("", true),
|
|
22160
|
+
createBaseVNode("span", null, toDisplayString(item.label), 1),
|
|
22161
|
+
item.badge ? (openBlock(), createBlock(Badge, { key: 1 }, {
|
|
22162
|
+
default: withCtx(() => [
|
|
22163
|
+
createTextVNode(toDisplayString(item.badge), 1)
|
|
22164
|
+
]),
|
|
22165
|
+
_: 2
|
|
22166
|
+
}, 1024)) : createCommentVNode("", true)
|
|
22167
|
+
])
|
|
22168
|
+
]),
|
|
22169
|
+
_: 1
|
|
22170
|
+
}, 8, ["items", "item-key", "is-current"])) : createCommentVNode("", true)
|
|
22171
|
+
], 8, _hoisted_1$u);
|
|
22014
22172
|
};
|
|
22015
22173
|
}
|
|
22016
22174
|
});
|
|
22017
|
-
const _style_0$
|
|
22018
|
-
const Tabs = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
22175
|
+
const _style_0$s = '\n.tabs[data-v-30747b8d] {\n display: flex;\n align-items: stretch;\n gap: var(--spacing-xs);\n padding: 0 var(--spacing-lg);\n border-bottom: 1px solid var(--color-border);\n background-color: var(--color-surface);\n overflow-x: auto;\n scrollbar-width: thin;\n}\n.transcript-ui-root .tab[data-v-30747b8d] {\n all: unset;\n box-sizing: border-box;\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-xs);\n height: 44px;\n padding: 0 var(--spacing-sm);\n font-family: var(--font-family);\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-secondary);\n cursor: pointer;\n white-space: nowrap;\n border-bottom: 2px solid transparent;\n transition:\n color var(--transition-duration),\n border-color var(--transition-duration);\n}\n.transcript-ui-root .tab[data-v-30747b8d]:hover:not([disabled]) {\n color: var(--color-text-primary);\n}\n.transcript-ui-root .tab[data-v-30747b8d]:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: -2px;\n border-radius: var(--radius-sm);\n}\n.transcript-ui-root .tab--active[data-v-30747b8d] {\n color: var(--color-text-primary);\n border-bottom-color: var(--color-primary);\n}\n.transcript-ui-root .tab[disabled][data-v-30747b8d] {\n opacity: 0.4;\n cursor: not-allowed;\n}\n.tab__icon[data-v-30747b8d] {\n flex-shrink: 0;\n color: currentColor;\n}\n.tab__label[data-v-30747b8d] {\n text-box: cap alphabetic;\n}\n.tab__badge[data-v-30747b8d] {\n margin-left: var(--spacing-xs);\n}\n.tab__chevron[data-v-30747b8d] {\n flex-shrink: 0;\n color: currentColor;\n}\n.tab__menu-item[data-v-30747b8d] {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-xs);\n}\n\n/* Phone: the inline tabs share the width, labels shrink with an ellipsis,\n icons go, nothing scrolls sideways (the rest lives in the "More" menu). */\n@media (max-width: 767px) {\n.tabs[data-v-30747b8d] {\n padding: 0 var(--spacing-sm);\n overflow-x: hidden;\n}\n.transcript-ui-root .tab[data-v-30747b8d] {\n flex: 1;\n min-width: 0;\n justify-content: center;\n padding: 0 var(--spacing-xs);\n font-size: var(--font-size-xs);\n}\n.tab__icon[data-v-30747b8d] {\n display: none;\n}\n.tab__label[data-v-30747b8d] {\n overflow: hidden;\n text-overflow: ellipsis;\n}\n}\n';
|
|
22176
|
+
const Tabs = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["styles", [_style_0$s]], ["__scopeId", "data-v-30747b8d"]]);
|
|
22019
22177
|
const TEXT_NODE$1 = 3;
|
|
22020
22178
|
function placeCaretAt(element, offset2) {
|
|
22021
22179
|
element.focus({ preventScroll: true });
|
|
@@ -22072,8 +22230,8 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22072
22230
|
if (!focus2 || !container.contains(focus2.node)) return null;
|
|
22073
22231
|
return computeTextOffsetInContainer(container, focus2.node, focus2.offset);
|
|
22074
22232
|
}
|
|
22075
|
-
const _hoisted_1$
|
|
22076
|
-
const _sfc_main$
|
|
22233
|
+
const _hoisted_1$t = ["aria-label", "textContent"];
|
|
22234
|
+
const _sfc_main$x = /* @__PURE__ */ defineComponent({
|
|
22077
22235
|
__name: "TurnTextEditor",
|
|
22078
22236
|
props: {
|
|
22079
22237
|
text: { type: String },
|
|
@@ -22127,22 +22285,22 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22127
22285
|
onKeydown,
|
|
22128
22286
|
onBlur,
|
|
22129
22287
|
textContent: toDisplayString(__props.text)
|
|
22130
|
-
}, null, 40, _hoisted_1$
|
|
22288
|
+
}, null, 40, _hoisted_1$t);
|
|
22131
22289
|
};
|
|
22132
22290
|
}
|
|
22133
22291
|
});
|
|
22134
|
-
const _style_0$
|
|
22135
|
-
const TurnTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
22136
|
-
const _hoisted_1$
|
|
22137
|
-
const _hoisted_2$
|
|
22292
|
+
const _style_0$r = "\n.turn-text-editor[data-v-597e2575] {\n margin: 0;\n white-space: pre-wrap;\n overflow-wrap: anywhere;\n cursor: text;\n outline: 2px solid var(--color-primary);\n border-radius: var(--radius-sm);\n background-color: var(--color-surface);\n padding: 0;\n}\n";
|
|
22293
|
+
const TurnTextEditor = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["styles", [_style_0$r]], ["__scopeId", "data-v-597e2575"]]);
|
|
22294
|
+
const _hoisted_1$s = { class: "editor-header" };
|
|
22295
|
+
const _hoisted_2$m = { class: "header-main" };
|
|
22138
22296
|
const _hoisted_3$f = { class: "document-title" };
|
|
22139
|
-
const _hoisted_4$
|
|
22297
|
+
const _hoisted_4$a = {
|
|
22140
22298
|
key: 0,
|
|
22141
22299
|
class: "document-meta"
|
|
22142
22300
|
};
|
|
22143
|
-
const _hoisted_5$
|
|
22301
|
+
const _hoisted_5$9 = { class: "header-right" };
|
|
22144
22302
|
const _hoisted_6$8 = { key: 0 };
|
|
22145
|
-
const _sfc_main$
|
|
22303
|
+
const _sfc_main$w = /* @__PURE__ */ defineComponent({
|
|
22146
22304
|
__name: "Header",
|
|
22147
22305
|
props: {
|
|
22148
22306
|
title: { type: String },
|
|
@@ -22176,10 +22334,10 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22176
22334
|
].filter(Boolean)
|
|
22177
22335
|
);
|
|
22178
22336
|
return (_ctx, _cache) => {
|
|
22179
|
-
return openBlock(), createElementBlock("header", _hoisted_1$
|
|
22180
|
-
createBaseVNode("div", _hoisted_2$
|
|
22337
|
+
return openBlock(), createElementBlock("header", _hoisted_1$s, [
|
|
22338
|
+
createBaseVNode("div", _hoisted_2$m, [
|
|
22181
22339
|
createBaseVNode("h1", _hoisted_3$f, toDisplayString(formattedTitle.value), 1),
|
|
22182
|
-
metaParts.value.length ? (openBlock(), createElementBlock("div", _hoisted_4$
|
|
22340
|
+
metaParts.value.length ? (openBlock(), createElementBlock("div", _hoisted_4$a, [
|
|
22183
22341
|
(openBlock(true), createElementBlock(Fragment, null, renderList(metaParts.value, (part, i2) => {
|
|
22184
22342
|
return openBlock(), createElementBlock("span", {
|
|
22185
22343
|
key: i2,
|
|
@@ -22188,7 +22346,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22188
22346
|
}), 128))
|
|
22189
22347
|
])) : createCommentVNode("", true)
|
|
22190
22348
|
]),
|
|
22191
|
-
createBaseVNode("div", _hoisted_5$
|
|
22349
|
+
createBaseVNode("div", _hoisted_5$9, [
|
|
22192
22350
|
__props.isMobile ? (openBlock(), createBlock(unref(Button), {
|
|
22193
22351
|
key: 0,
|
|
22194
22352
|
variant: "transparent",
|
|
@@ -22255,11 +22413,28 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22255
22413
|
};
|
|
22256
22414
|
}
|
|
22257
22415
|
});
|
|
22258
|
-
const _style_0$
|
|
22259
|
-
const Header = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
22416
|
+
const _style_0$q = '\n.editor-header[data-v-491cf8ab] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-md);\n padding: var(--spacing-sm) var(--spacing-lg);\n min-height: var(--header-height);\n border-bottom: 1px solid var(--color-border);\n background-color: var(--color-surface);\n flex-shrink: 0;\n}\n.header-main[data-v-491cf8ab] {\n display: flex;\n flex-direction: column;\n gap: 2px;\n min-width: 0;\n flex: 1;\n}\n.document-title[data-v-491cf8ab] {\n font-size: var(--font-size-lg);\n font-weight: 600;\n color: var(--color-text-primary);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n margin: 0;\n}\n.document-meta[data-v-491cf8ab] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--spacing-xs);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n.document-meta__part[data-v-491cf8ab] {\n text-box: cap alphabetic;\n}\n.document-meta__part + .document-meta__part[data-v-491cf8ab]::before {\n content: "·";\n margin-right: var(--spacing-xs);\n}\n.header-right[data-v-491cf8ab] {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n flex-shrink: 0;\n}\n@media (max-width: 767px) {\n.editor-header[data-v-491cf8ab] {\n padding: var(--spacing-xs) var(--spacing-md);\n}\n.document-title[data-v-491cf8ab] {\n font-size: var(--font-size-base);\n}\n}\n';
|
|
22417
|
+
const Header = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["styles", [_style_0$q]], ["__scopeId", "data-v-491cf8ab"]]);
|
|
22260
22418
|
const TRANSCRIPTION_TAB = "__transcription__";
|
|
22261
22419
|
const VERBATIM_TAB = "__verbatim__";
|
|
22262
|
-
const
|
|
22420
|
+
const MOBILE_BREAKPOINT = "(max-width: 767px)";
|
|
22421
|
+
function useIsMobile() {
|
|
22422
|
+
const isMobile = /* @__PURE__ */ ref(window.matchMedia(MOBILE_BREAKPOINT).matches);
|
|
22423
|
+
let mql = null;
|
|
22424
|
+
function onChange(e2) {
|
|
22425
|
+
isMobile.value = e2.matches;
|
|
22426
|
+
}
|
|
22427
|
+
onMounted(() => {
|
|
22428
|
+
mql = window.matchMedia(MOBILE_BREAKPOINT);
|
|
22429
|
+
isMobile.value = mql.matches;
|
|
22430
|
+
mql.addEventListener("change", onChange);
|
|
22431
|
+
});
|
|
22432
|
+
onBeforeUnmount(() => {
|
|
22433
|
+
mql?.removeEventListener("change", onChange);
|
|
22434
|
+
});
|
|
22435
|
+
return { isMobile };
|
|
22436
|
+
}
|
|
22437
|
+
const _sfc_main$v = /* @__PURE__ */ defineComponent({
|
|
22263
22438
|
__name: "TabBar",
|
|
22264
22439
|
props: {
|
|
22265
22440
|
modelValue: { type: String },
|
|
@@ -22271,6 +22446,11 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22271
22446
|
const emit2 = __emit;
|
|
22272
22447
|
const core = useCore();
|
|
22273
22448
|
const { t: t2 } = useI18n();
|
|
22449
|
+
const { isMobile } = useIsMobile();
|
|
22450
|
+
const collapseFrom = computed(() => {
|
|
22451
|
+
if (!isMobile.value) return void 0;
|
|
22452
|
+
return props.showVerbatim ? 2 : 1;
|
|
22453
|
+
});
|
|
22274
22454
|
const tabs = computed(() => {
|
|
22275
22455
|
const services = core.llmServices?.list.value ?? [];
|
|
22276
22456
|
return [
|
|
@@ -22302,8 +22482,9 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22302
22482
|
key: 0,
|
|
22303
22483
|
tabs: tabs.value,
|
|
22304
22484
|
"model-value": __props.modelValue,
|
|
22485
|
+
"collapse-from": collapseFrom.value,
|
|
22305
22486
|
"onUpdate:modelValue": onSelect
|
|
22306
|
-
}, null, 8, ["tabs", "model-value"])) : createCommentVNode("", true);
|
|
22487
|
+
}, null, 8, ["tabs", "model-value", "collapse-from"])) : createCommentVNode("", true);
|
|
22307
22488
|
};
|
|
22308
22489
|
}
|
|
22309
22490
|
});
|
|
@@ -22673,7 +22854,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22673
22854
|
};
|
|
22674
22855
|
}
|
|
22675
22856
|
var StickToBottomKey = /* @__PURE__ */ Symbol("StickToBottom");
|
|
22676
|
-
var _hoisted_1$
|
|
22857
|
+
var _hoisted_1$r = { style: {
|
|
22677
22858
|
"position": "relative",
|
|
22678
22859
|
"height": "100%",
|
|
22679
22860
|
"width": "100%",
|
|
@@ -22739,7 +22920,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22739
22920
|
stopScroll
|
|
22740
22921
|
}));
|
|
22741
22922
|
return (_ctx, _cache) => {
|
|
22742
|
-
return openBlock(), createElementBlock("div", null, [createBaseVNode("div", _hoisted_1$
|
|
22923
|
+
return openBlock(), createElementBlock("div", null, [createBaseVNode("div", _hoisted_1$r, [createBaseVNode("div", {
|
|
22743
22924
|
ref_key: "scrollRef",
|
|
22744
22925
|
ref: scrollRef,
|
|
22745
22926
|
style: normalizeStyle({
|
|
@@ -22756,12 +22937,12 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22756
22937
|
};
|
|
22757
22938
|
}
|
|
22758
22939
|
});
|
|
22759
|
-
const _hoisted_1$
|
|
22760
|
-
const _hoisted_2$
|
|
22940
|
+
const _hoisted_1$q = ["datetime"];
|
|
22941
|
+
const _hoisted_2$l = {
|
|
22761
22942
|
key: 2,
|
|
22762
22943
|
class: "lang"
|
|
22763
22944
|
};
|
|
22764
|
-
const _sfc_main$
|
|
22945
|
+
const _sfc_main$u = /* @__PURE__ */ defineComponent({
|
|
22765
22946
|
__name: "SpeakerLabel",
|
|
22766
22947
|
props: {
|
|
22767
22948
|
speaker: { type: Object },
|
|
@@ -22813,19 +22994,19 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22813
22994
|
key: 1,
|
|
22814
22995
|
class: "timestamp",
|
|
22815
22996
|
datetime: timestamp.value.datetime
|
|
22816
|
-
}, toDisplayString(timestamp.value.text), 9, _hoisted_1$
|
|
22817
|
-
languageName.value ? (openBlock(), createElementBlock("span", _hoisted_2$
|
|
22997
|
+
}, toDisplayString(timestamp.value.text), 9, _hoisted_1$q)) : createCommentVNode("", true),
|
|
22998
|
+
languageName.value ? (openBlock(), createElementBlock("span", _hoisted_2$l, toDisplayString(languageName.value), 1)) : createCommentVNode("", true)
|
|
22818
22999
|
], 2);
|
|
22819
23000
|
};
|
|
22820
23001
|
}
|
|
22821
23002
|
});
|
|
22822
|
-
const _style_0$
|
|
22823
|
-
const SpeakerLabel = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
22824
|
-
const _hoisted_1$
|
|
23003
|
+
const _style_0$p = "\n.speaker-label[data-v-76cb4ed6] {\n display: flex;\n border-bottom: 2px solid transparent;\n align-items: center;\n gap: var(--spacing-sm);\n}\n.speaker-name[data-v-76cb4ed6] {\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.speaker-name--unknown[data-v-76cb4ed6] {\n font-weight: 400;\n font-style: italic;\n color: var(--color-text-muted);\n}\n.speaker-label--interactive:hover .speaker-name[data-v-76cb4ed6] {\n text-decoration: underline;\n}\n.timestamp[data-v-76cb4ed6] {\n font-size: var(--font-size-xs);\n font-family: var(--font-family-mono);\n color: var(--color-text-muted);\n /* not supported on firefox yet */\n text-box: trim-both cap alphabetic;\n}\n.lang[data-v-76cb4ed6] {\n font-size: var(--font-size-xs);\n font-weight: 400;\n /* not supported on firefox yet */\n text-box: trim-both cap alphabetic;\n}\n";
|
|
23004
|
+
const SpeakerLabel = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["styles", [_style_0$p]], ["__scopeId", "data-v-76cb4ed6"]]);
|
|
23005
|
+
const _hoisted_1$p = {
|
|
22825
23006
|
key: 0,
|
|
22826
23007
|
class: "merge-turns"
|
|
22827
23008
|
};
|
|
22828
|
-
const _sfc_main$
|
|
23009
|
+
const _sfc_main$t = /* @__PURE__ */ defineComponent({
|
|
22829
23010
|
__name: "MergeTurnsButton",
|
|
22830
23011
|
props: {
|
|
22831
23012
|
firstTurnId: { type: String },
|
|
@@ -22845,7 +23026,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22845
23026
|
core.transcriptionEditor.mergeTurns(props.firstTurnId, props.secondTurnId);
|
|
22846
23027
|
}
|
|
22847
23028
|
return (_ctx, _cache) => {
|
|
22848
|
-
return canShow.value ? (openBlock(), createElementBlock("div", _hoisted_1$
|
|
23029
|
+
return canShow.value ? (openBlock(), createElementBlock("div", _hoisted_1$p, [
|
|
22849
23030
|
createVNode(unref(Button), {
|
|
22850
23031
|
size: "sm",
|
|
22851
23032
|
variant: "inverse",
|
|
@@ -22858,8 +23039,8 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22858
23039
|
};
|
|
22859
23040
|
}
|
|
22860
23041
|
});
|
|
22861
|
-
const _style_0$
|
|
22862
|
-
const MergeTurnsButton = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23042
|
+
const _style_0$o = "\n.merge-turns[data-v-8d977feb] {\n display: flex;\n justify-content: center;\n}\n\n/* Compact: the control sits in the gap between turns without inflating it. */\n.merge-turns[data-v-8d977feb] .editor-btn {\n --btn-height: 22px;\n}\n";
|
|
23043
|
+
const MergeTurnsButton = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["styles", [_style_0$o]], ["__scopeId", "data-v-8d977feb"]]);
|
|
22863
23044
|
function renameSpeaker$1(core, speakerId, newName) {
|
|
22864
23045
|
const trimmed = newName.trim();
|
|
22865
23046
|
const existing = core.speakers.all.get(speakerId);
|
|
@@ -22922,12 +23103,12 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22922
23103
|
switchTurnSpeaker: switchTurnSpeaker$1,
|
|
22923
23104
|
updateTurnWords
|
|
22924
23105
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
22925
|
-
const _hoisted_1$
|
|
23106
|
+
const _hoisted_1$o = {
|
|
22926
23107
|
type: "button",
|
|
22927
23108
|
class: "speaker-popover-trigger"
|
|
22928
23109
|
};
|
|
22929
|
-
const _hoisted_2$
|
|
22930
|
-
const _sfc_main$
|
|
23110
|
+
const _hoisted_2$k = { class: "speaker-popover-name" };
|
|
23111
|
+
const _sfc_main$s = /* @__PURE__ */ defineComponent({
|
|
22931
23112
|
__name: "SpeakerPopover",
|
|
22932
23113
|
props: {
|
|
22933
23114
|
turnId: { type: String },
|
|
@@ -22993,7 +23174,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
22993
23174
|
isCreatingNew.value = false;
|
|
22994
23175
|
}
|
|
22995
23176
|
return (_ctx, _cache) => {
|
|
22996
|
-
return openBlock(), createBlock(unref(_sfc_main$
|
|
23177
|
+
return openBlock(), createBlock(unref(_sfc_main$G), {
|
|
22997
23178
|
open: isOpen.value,
|
|
22998
23179
|
"onUpdate:open": _cache[1] || (_cache[1] = ($event) => isOpen.value = $event),
|
|
22999
23180
|
items: speakers.value,
|
|
@@ -23002,7 +23183,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
23002
23183
|
onSelect: onPickExisting
|
|
23003
23184
|
}, {
|
|
23004
23185
|
trigger: withCtx(() => [
|
|
23005
|
-
createBaseVNode("button", _hoisted_1$
|
|
23186
|
+
createBaseVNode("button", _hoisted_1$o, [
|
|
23006
23187
|
renderSlot(_ctx.$slots, "default", {}, void 0, true)
|
|
23007
23188
|
])
|
|
23008
23189
|
]),
|
|
@@ -23010,7 +23191,7 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
23010
23191
|
createVNode(unref(SpeakerIndicator), {
|
|
23011
23192
|
color: item.color
|
|
23012
23193
|
}, null, 8, ["color"]),
|
|
23013
|
-
createBaseVNode("span", _hoisted_2$
|
|
23194
|
+
createBaseVNode("span", _hoisted_2$k, toDisplayString(item.name), 1)
|
|
23014
23195
|
]),
|
|
23015
23196
|
footer: withCtx(() => [
|
|
23016
23197
|
!isCreatingNew.value ? (openBlock(), createBlock(unref(Button), {
|
|
@@ -23043,8 +23224,8 @@ Please report this to https://github.com/markedjs/marked.`, e2) {
|
|
|
23043
23224
|
};
|
|
23044
23225
|
}
|
|
23045
23226
|
});
|
|
23046
|
-
const _style_0$
|
|
23047
|
-
const SpeakerPopover = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23227
|
+
const _style_0$n = "\n.transcript-ui-root .speaker-popover-trigger[data-v-0679fde9] {\n all: unset;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n border-radius: var(--radius-sm);\n}\n.transcript-ui-root .speaker-popover-trigger[data-v-0679fde9]:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n.speaker-popover-name[data-v-0679fde9] {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n";
|
|
23228
|
+
const SpeakerPopover = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["styles", [_style_0$n]], ["__scopeId", "data-v-0679fde9"]]);
|
|
23048
23229
|
const turnSelectionKey = /* @__PURE__ */ Symbol("turnSelection");
|
|
23049
23230
|
function getTurnText(turn) {
|
|
23050
23231
|
if (turn.words.length > 0) {
|
|
@@ -23190,14 +23371,14 @@ ${text2}` : text2;
|
|
|
23190
23371
|
(w2) => w2.charStart != null && w2.charEnd != null && w2.charStart <= offset2 && offset2 < w2.charEnd
|
|
23191
23372
|
);
|
|
23192
23373
|
}
|
|
23193
|
-
const _hoisted_1$
|
|
23194
|
-
const _hoisted_2$
|
|
23374
|
+
const _hoisted_1$n = ["data-turn-active", "aria-selected"];
|
|
23375
|
+
const _hoisted_2$j = {
|
|
23195
23376
|
key: 4,
|
|
23196
23377
|
class: "turn-edit-actions"
|
|
23197
23378
|
};
|
|
23198
23379
|
const _hoisted_3$e = ["role", "tabindex", "aria-label", "aria-disabled"];
|
|
23199
|
-
const _hoisted_4$
|
|
23200
|
-
const _sfc_main$
|
|
23380
|
+
const _hoisted_4$9 = ["data-word-active"];
|
|
23381
|
+
const _sfc_main$r = /* @__PURE__ */ defineComponent({
|
|
23201
23382
|
__name: "TranscriptionTurn",
|
|
23202
23383
|
props: {
|
|
23203
23384
|
turn: { type: Object },
|
|
@@ -23378,7 +23559,7 @@ ${text2}` : text2;
|
|
|
23378
23559
|
"start-date": __props.turn.startDate,
|
|
23379
23560
|
language: __props.turn.language
|
|
23380
23561
|
}, null, 8, ["speaker", "start-time", "start-date", "language"])),
|
|
23381
|
-
isEditing.value || turnLock.value ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
23562
|
+
isEditing.value || turnLock.value ? (openBlock(), createElementBlock("div", _hoisted_2$j, [
|
|
23382
23563
|
isEditing.value ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
|
|
23383
23564
|
createVNode(unref(Button), {
|
|
23384
23565
|
size: "sm",
|
|
@@ -23433,50 +23614,50 @@ ${text2}` : text2;
|
|
|
23433
23614
|
createBaseVNode("span", {
|
|
23434
23615
|
class: normalizeClass({ "word--active": word.id === activeWordId.value }),
|
|
23435
23616
|
"data-word-active": word.id === activeWordId.value || void 0
|
|
23436
|
-
}, toDisplayString(word.text), 11, _hoisted_4$
|
|
23617
|
+
}, toDisplayString(word.text), 11, _hoisted_4$9),
|
|
23437
23618
|
createTextVNode(toDisplayString(i2 < __props.turn.words.length - 1 ? " " : ""), 1)
|
|
23438
23619
|
], 64);
|
|
23439
23620
|
}), 128)) : __props.turn.text ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
|
|
23440
23621
|
createTextVNode(toDisplayString(__props.turn.text), 1)
|
|
23441
23622
|
], 64)) : createCommentVNode("", true)
|
|
23442
23623
|
], 42, _hoisted_3$e))
|
|
23443
|
-
], 14, _hoisted_1$
|
|
23624
|
+
], 14, _hoisted_1$n);
|
|
23444
23625
|
};
|
|
23445
23626
|
}
|
|
23446
23627
|
});
|
|
23447
|
-
const _style_0$
|
|
23448
|
-
const TranscriptionTurn = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23449
|
-
const _sfc_main$
|
|
23450
|
-
const _hoisted_1$
|
|
23628
|
+
const _style_0$m = "\n.turn[data-v-5a13b85e] {\n padding: var(--spacing-sm) var(--spacing-lg);\n}\n.turn-header[data-v-5a13b85e] {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n cursor: pointer;\n user-select: none;\n border-radius: var(--radius-sm);\n padding: var(--spacing-xxs) 0;\n /* Reserve the edit-actions height (Button sm) so entering/leaving edit\n mode never shifts the layout. */\n min-height: 36px;\n}\n.turn-edit-actions[data-v-5a13b85e] {\n margin-left: auto;\n display: flex;\n gap: var(--spacing-xs);\n}\n\n/* Same reset as the popover's own trigger: the label IS the button. */\n.transcript-ui-root .speaker-trigger[data-v-5a13b85e] {\n all: unset;\n cursor: pointer;\n display: inline-flex;\n align-items: center;\n border-radius: var(--radius-sm);\n}\n.transcript-ui-root .speaker-trigger[data-v-5a13b85e]:focus-visible {\n outline: 2px solid var(--color-primary);\n outline-offset: 2px;\n}\n.turn[data-v-5a13b85e]:has(.turn-header:hover) {\n background-color: var(--color-surface-hover);\n}\n.turn-text[data-v-5a13b85e] {\n margin-top: var(--spacing-xs);\n font-size: var(--font-size-base);\n line-height: var(--line-height);\n color: var(--color-text-primary);\n}\n.turn-text--editable[data-v-5a13b85e] {\n cursor: text;\n}\n.turn-text--editable[data-v-5a13b85e]:focus-visible {\n outline: 2px solid var(--color-primary);\n border-radius: var(--radius-sm);\n}\n.turn--selected[data-v-5a13b85e] {\n background-color: color-mix(in srgb, var(--color-primary) 8%, transparent);\n border-left: 3px solid var(--color-primary);\n padding-left: calc(var(--spacing-lg) - 3px);\n}\n.turn--active[data-v-5a13b85e]:not(.turn--selected) {\n border-left: 3px solid var(--speaker-color);\n background-color: color-mix(in srgb, var(--speaker-color) 8%, transparent);\n padding-left: calc(var(--spacing-lg) - 3px);\n}\n.word--active[data-v-5a13b85e] {\n text-decoration: underline;\n text-decoration-color: var(--color-primary);\n text-decoration-thickness: 2px;\n text-underline-offset: 3px;\n color: var(--color-primary);\n}\n.turn--partial .turn-text[data-v-5a13b85e] {\n font-style: italic;\n color: var(--color-text-muted);\n animation: partial-fade-in-5a13b85e 200ms ease;\n}\n@keyframes partial-fade-in-5a13b85e {\nfrom {\n opacity: 0;\n}\nto {\n opacity: 1;\n}\n}\n@media (prefers-reduced-motion: reduce) {\n.turn--partial .turn-text[data-v-5a13b85e] {\n animation: none;\n}\n}\n@media (max-width: 767px) {\n.turn[data-v-5a13b85e] {\n padding: var(--spacing-sm) var(--spacing-md);\n}\n.turn--selected[data-v-5a13b85e],\n .turn--active[data-v-5a13b85e]:not(.turn--selected) {\n padding-left: calc(var(--spacing-md) - 3px);\n}\n}\n";
|
|
23629
|
+
const TranscriptionTurn = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["styles", [_style_0$m]], ["__scopeId", "data-v-5a13b85e"]]);
|
|
23630
|
+
const _sfc_main$q = {};
|
|
23631
|
+
const _hoisted_1$m = {
|
|
23451
23632
|
viewBox: "0 0 938 604",
|
|
23452
23633
|
fill: "none",
|
|
23453
23634
|
xmlns: "http://www.w3.org/2000/svg"
|
|
23454
23635
|
};
|
|
23455
23636
|
function _sfc_render(_ctx, _cache) {
|
|
23456
|
-
return openBlock(), createElementBlock("svg", _hoisted_1$
|
|
23637
|
+
return openBlock(), createElementBlock("svg", _hoisted_1$m, [..._cache[0] || (_cache[0] = [
|
|
23457
23638
|
createStaticVNode('<polygon points="331.5,533.5 331.5,520.5 702.5,428.5 705.5,443.5" fill="#3f3d56" transform="matrix(1.8176168,0,0,1.8176168,-452.14416,-495.30213)"></polygon><polygon points="564.5,469.5 555.5,452.5 544.5,455.5 542.5,472.5" fill="#3f3d56" transform="matrix(1.8176168,0,0,1.8176168,-452.14416,-495.30213)"></polygon><path d="m 317.61655,19.99224 c 0,0 79.97514,-5.452851 101.78654,56.34612 21.81141,61.79897 72.70468,172.67359 92.69846,189.03214 19.99379,16.35855 41.80519,59.98136 38.16995,74.52229" stroke="#3f3d56" stroke-miterlimit="10" stroke-width="9.08808"></path><path d="m 329.43106,19.083431 c 0,8.532657 -9.0733,15.449743 -23.62902,15.449743 -14.55571,0 -21.8114,-6.917086 -21.8114,-15.449743 0,-8.532657 7.25569,-15.4497427 21.8114,-15.4497427 14.55572,0 23.62902,6.9170857 23.62902,15.4497427 z" fill="currentColor" style="fill:#999999;"></path><polygon points="691.5,439.5 364.5,521.5 377.5,602.5 666.5,602.5" fill="#3f3d56" transform="matrix(1.8176168,0,0,1.8176168,-456.32371,-492.51252)"></polygon>', 5)
|
|
23458
23639
|
])]);
|
|
23459
23640
|
}
|
|
23460
|
-
const MicrophoneIllustration = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23461
|
-
const _hoisted_1$
|
|
23462
|
-
const _hoisted_2$
|
|
23463
|
-
const _sfc_main$
|
|
23641
|
+
const MicrophoneIllustration = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["render", _sfc_render]]);
|
|
23642
|
+
const _hoisted_1$l = { class: "transcription-empty" };
|
|
23643
|
+
const _hoisted_2$i = { class: "message" };
|
|
23644
|
+
const _sfc_main$p = /* @__PURE__ */ defineComponent({
|
|
23464
23645
|
__name: "TranscriptionEmpty",
|
|
23465
23646
|
setup(__props) {
|
|
23466
23647
|
const { t: t2 } = useI18n();
|
|
23467
23648
|
return (_ctx, _cache) => {
|
|
23468
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
23649
|
+
return openBlock(), createElementBlock("div", _hoisted_1$l, [
|
|
23469
23650
|
createVNode(MicrophoneIllustration, {
|
|
23470
23651
|
class: "illustration",
|
|
23471
23652
|
"aria-hidden": "true"
|
|
23472
23653
|
}),
|
|
23473
|
-
createBaseVNode("p", _hoisted_2$
|
|
23654
|
+
createBaseVNode("p", _hoisted_2$i, toDisplayString(unref(t2)("transcription.empty")), 1)
|
|
23474
23655
|
]);
|
|
23475
23656
|
};
|
|
23476
23657
|
}
|
|
23477
23658
|
});
|
|
23478
|
-
const _style_0$
|
|
23479
|
-
const TranscriptionEmpty = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23659
|
+
const _style_0$l = "\n.transcription-empty[data-v-585c4f2b] {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-lg);\n padding: var(--spacing-xl);\n}\n.illustration[data-v-585c4f2b] {\n width: 180px;\n height: auto;\n color: var(--color-text-muted);\n opacity: 0.5;\n}\n.message[data-v-585c4f2b] {\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n text-align: center;\n margin: 0;\n}\n";
|
|
23660
|
+
const TranscriptionEmpty = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["styles", [_style_0$l]], ["__scopeId", "data-v-585c4f2b"]]);
|
|
23480
23661
|
function activeWordRange(root2, core, wordId2) {
|
|
23481
23662
|
const parsed = parseWordId(wordId2);
|
|
23482
23663
|
if (!parsed) return null;
|
|
@@ -23611,18 +23792,18 @@ ${text2}` : text2;
|
|
|
23611
23792
|
}
|
|
23612
23793
|
return { isFollowing, resumeFollow };
|
|
23613
23794
|
}
|
|
23614
|
-
const _hoisted_1$
|
|
23615
|
-
const _hoisted_2$
|
|
23795
|
+
const _hoisted_1$k = { class: "transcription-panel" };
|
|
23796
|
+
const _hoisted_2$h = {
|
|
23616
23797
|
ref: "scrollContainer",
|
|
23617
23798
|
class: "scroll-container"
|
|
23618
23799
|
};
|
|
23619
23800
|
const _hoisted_3$d = { class: "turns-container" };
|
|
23620
|
-
const _hoisted_4$
|
|
23801
|
+
const _hoisted_4$8 = {
|
|
23621
23802
|
key: 0,
|
|
23622
23803
|
class: "history-loading",
|
|
23623
23804
|
role: "status"
|
|
23624
23805
|
};
|
|
23625
|
-
const _hoisted_5$
|
|
23806
|
+
const _hoisted_5$8 = {
|
|
23626
23807
|
key: 1,
|
|
23627
23808
|
class: "history-start"
|
|
23628
23809
|
};
|
|
@@ -23630,7 +23811,7 @@ ${text2}` : text2;
|
|
|
23630
23811
|
key: 0,
|
|
23631
23812
|
class: "resume-scroll-anchor"
|
|
23632
23813
|
};
|
|
23633
|
-
const _sfc_main$
|
|
23814
|
+
const _sfc_main$o = /* @__PURE__ */ defineComponent({
|
|
23634
23815
|
__name: "TranscriptionPanel",
|
|
23635
23816
|
props: {
|
|
23636
23817
|
turns: { type: Array },
|
|
@@ -23727,13 +23908,13 @@ ${text2}` : text2;
|
|
|
23727
23908
|
scrollContainerRef.value?.removeEventListener("scroll", onScrollTop);
|
|
23728
23909
|
});
|
|
23729
23910
|
return (_ctx, _cache) => {
|
|
23730
|
-
return openBlock(), createElementBlock("article", _hoisted_1$
|
|
23731
|
-
createBaseVNode("div", _hoisted_2$
|
|
23911
|
+
return openBlock(), createElementBlock("article", _hoisted_1$k, [
|
|
23912
|
+
createBaseVNode("div", _hoisted_2$h, [
|
|
23732
23913
|
createBaseVNode("div", _hoisted_3$d, [
|
|
23733
|
-
isLoadingHistory.value ? (openBlock(), createElementBlock("div", _hoisted_4$
|
|
23914
|
+
isLoadingHistory.value ? (openBlock(), createElementBlock("div", _hoisted_4$8, [..._cache[2] || (_cache[2] = [
|
|
23734
23915
|
createBaseVNode("progress", null, null, -1)
|
|
23735
23916
|
])])) : createCommentVNode("", true),
|
|
23736
|
-
!hasMoreHistory.value && __props.turns.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5$
|
|
23917
|
+
!hasMoreHistory.value && __props.turns.length > 0 ? (openBlock(), createElementBlock("div", _hoisted_5$8, toDisplayString(unref(t2)("transcription.historyStart")), 1)) : createCommentVNode("", true),
|
|
23737
23918
|
__props.turns.length === 0 && !isLoadingHistory.value && !partialTurn.value ? (openBlock(), createBlock(TranscriptionEmpty, {
|
|
23738
23919
|
key: 2,
|
|
23739
23920
|
class: "transcription-empty"
|
|
@@ -23787,13 +23968,13 @@ ${text2}` : text2;
|
|
|
23787
23968
|
};
|
|
23788
23969
|
}
|
|
23789
23970
|
});
|
|
23790
|
-
const _style_0$
|
|
23791
|
-
const TranscriptionPanel = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23792
|
-
const _hoisted_1$
|
|
23793
|
-
const _hoisted_2$
|
|
23971
|
+
const _style_0$k = "\n.transcription-panel[data-v-66b767d7] {\n min-height: 0;\n overflow: hidden;\n background-color: var(--color-surface);\n}\n.scroll-container[data-v-66b767d7] {\n height: 100%;\n overflow: auto;\n position: relative;\n}\n.turns-container[data-v-66b767d7] {\n max-width: 80ch;\n margin-inline: auto;\n padding: var(--spacing-lg);\n}\n.turns-container[data-v-66b767d7]:has(.transcription-empty) {\n display: flex;\n flex-direction: column;\n min-height: 100%;\n}\n.history-loading[data-v-66b767d7] {\n text-align: center;\n padding: var(--spacing-md);\n}\n.history-loading progress[data-v-66b767d7] {\n width: 120px;\n}\n.history-start[data-v-66b767d7] {\n text-align: center;\n padding: var(--spacing-md);\n color: var(--color-text-muted);\n font-size: var(--font-size-sm);\n}\n\n/* Resume scroll button — placement lives on this wrapper, never on the\n button itself: Button.vue's `.editor-btn` base rule resets `position` via\n `all: unset` (and, in the webcomponent build, gets re-injected a second\n time after everything else to reach teleported popovers/dialogs — see\n packages/webcomponent/src/index.ts), so any positioning put directly on\n the button is one rebuild away from being silently overridden again. */\n.resume-scroll-anchor[data-v-66b767d7] {\n position: sticky;\n bottom: var(--spacing-lg);\n z-index: var(--z-sticky);\n display: flex;\n flex-direction: column;\n align-items: center;\n}\n.resume-scroll-btn[data-v-66b767d7] {\n /* No backdrop-filter: this button is sticky inside the tall scroll\n container, where a backdrop-filter makes WebRender allocate a render\n target spanning the whole scroll height — multi-GB on a long transcript. */\n background: white !important;\n border: 1px solid var(--color-border);\n box-shadow: var(--shadow-sm);\n}\n\n/* Transition */\n.fade-slide-enter-active[data-v-66b767d7],\n.fade-slide-leave-active[data-v-66b767d7] {\n transition:\n opacity 200ms ease,\n translate 200ms ease;\n}\n.fade-slide-enter-from[data-v-66b767d7],\n.fade-slide-leave-to[data-v-66b767d7] {\n opacity: 0;\n translate: 0 8px;\n}\n@media (prefers-reduced-motion: reduce) {\n.fade-slide-enter-active[data-v-66b767d7],\n .fade-slide-leave-active[data-v-66b767d7] {\n transition: none;\n}\n}\n@media (max-width: 767px) {\n.turns-container[data-v-66b767d7] {\n padding: var(--spacing-md);\n}\n}\n";
|
|
23972
|
+
const TranscriptionPanel = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["styles", [_style_0$k]], ["__scopeId", "data-v-66b767d7"]]);
|
|
23973
|
+
const _hoisted_1$j = { class: "verbatim-panel" };
|
|
23974
|
+
const _hoisted_2$g = { class: "verbatim-panel__content" };
|
|
23794
23975
|
const _hoisted_3$c = { class: "verbatim-panel__header" };
|
|
23795
|
-
const _hoisted_4$
|
|
23796
|
-
const _hoisted_5$
|
|
23976
|
+
const _hoisted_4$7 = { class: "verbatim-panel__doc-title" };
|
|
23977
|
+
const _hoisted_5$7 = { class: "verbatim-panel__turns" };
|
|
23797
23978
|
const _hoisted_6$6 = { class: "verbatim-panel__turn-header" };
|
|
23798
23979
|
const _hoisted_7$3 = { class: "verbatim-panel__speaker-name" };
|
|
23799
23980
|
const _hoisted_8$1 = {
|
|
@@ -23805,7 +23986,7 @@ ${text2}` : text2;
|
|
|
23805
23986
|
class: "verbatim-panel__meta"
|
|
23806
23987
|
};
|
|
23807
23988
|
const _hoisted_10$1 = { class: "verbatim-panel__text" };
|
|
23808
|
-
const _sfc_main$
|
|
23989
|
+
const _sfc_main$n = /* @__PURE__ */ defineComponent({
|
|
23809
23990
|
__name: "VerbatimPanel",
|
|
23810
23991
|
setup(__props) {
|
|
23811
23992
|
const core = useCore();
|
|
@@ -23851,20 +24032,20 @@ ${text2}` : text2;
|
|
|
23851
24032
|
core.emit("verbatim:export", { format: format2 });
|
|
23852
24033
|
}
|
|
23853
24034
|
return (_ctx, _cache) => {
|
|
23854
|
-
return openBlock(), createElementBlock("section", _hoisted_1$
|
|
24035
|
+
return openBlock(), createElementBlock("section", _hoisted_1$j, [
|
|
23855
24036
|
createVNode(unref(DocumentArticle), null, {
|
|
23856
24037
|
"toolbar-right": withCtx(() => [
|
|
23857
|
-
createVNode(unref(_sfc_main$
|
|
24038
|
+
createVNode(unref(_sfc_main$A), {
|
|
23858
24039
|
formats: unref(core).verbatimFormats.value,
|
|
23859
24040
|
onSelect: onExport
|
|
23860
24041
|
}, null, 8, ["formats"])
|
|
23861
24042
|
]),
|
|
23862
24043
|
default: withCtx(() => [
|
|
23863
|
-
createBaseVNode("article", _hoisted_2$
|
|
24044
|
+
createBaseVNode("article", _hoisted_2$g, [
|
|
23864
24045
|
createBaseVNode("header", _hoisted_3$c, [
|
|
23865
|
-
createBaseVNode("h1", _hoisted_4$
|
|
24046
|
+
createBaseVNode("h1", _hoisted_4$7, toDisplayString(title.value), 1)
|
|
23866
24047
|
]),
|
|
23867
|
-
createBaseVNode("ul", _hoisted_5$
|
|
24048
|
+
createBaseVNode("ul", _hoisted_5$7, [
|
|
23868
24049
|
(openBlock(true), createElementBlock(Fragment, null, renderList(turns.value, (turn) => {
|
|
23869
24050
|
return openBlock(), createElementBlock("li", {
|
|
23870
24051
|
key: turn.id,
|
|
@@ -23899,9 +24080,9 @@ ${text2}` : text2;
|
|
|
23899
24080
|
};
|
|
23900
24081
|
}
|
|
23901
24082
|
});
|
|
23902
|
-
const _style_0$
|
|
23903
|
-
const VerbatimPanel = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
23904
|
-
const _sfc_main$
|
|
24083
|
+
const _style_0$j = "\n.verbatim-panel[data-v-7a077f5a] {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.verbatim-panel__content[data-v-7a077f5a] {\n padding: 4rem clamp(1.5rem, 6rem, 8%);\n}\n.verbatim-panel__header[data-v-7a077f5a] {\n margin-bottom: var(--spacing-lg);\n padding-bottom: var(--spacing-md);\n border-bottom: 1px solid var(--color-border);\n}\n.verbatim-panel__doc-title[data-v-7a077f5a] {\n font-size: var(--font-size-xl);\n font-weight: 700;\n margin: 0;\n color: var(--color-text-primary);\n}\n.verbatim-panel__turns[data-v-7a077f5a] {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-lg);\n}\n.verbatim-panel__turn[data-v-7a077f5a] {\n display: block;\n}\n.verbatim-panel__turn-header[data-v-7a077f5a] {\n margin: 0 0 var(--spacing-xs);\n font-size: var(--font-size-base);\n line-height: 1.4;\n}\n.verbatim-panel__speaker-name[data-v-7a077f5a] {\n font-weight: 700;\n color: var(--color-text-primary);\n}\n.verbatim-panel__meta[data-v-7a077f5a] {\n color: var(--color-text-muted);\n font-weight: 400;\n}\n.verbatim-panel__sep[data-v-7a077f5a] {\n margin: 0 0.35em;\n}\n.verbatim-panel__text[data-v-7a077f5a] {\n margin: 0;\n font-size: var(--font-size-base);\n line-height: 1.6;\n color: var(--color-text-primary);\n}\n\n";
|
|
24084
|
+
const VerbatimPanel = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["styles", [_style_0$j]], ["__scopeId", "data-v-7a077f5a"]]);
|
|
24085
|
+
const _sfc_main$m = /* @__PURE__ */ defineComponent({
|
|
23905
24086
|
__name: "ChannelSelector",
|
|
23906
24087
|
props: {
|
|
23907
24088
|
channels: { type: Array },
|
|
@@ -23927,7 +24108,7 @@ ${text2}` : text2;
|
|
|
23927
24108
|
};
|
|
23928
24109
|
}
|
|
23929
24110
|
});
|
|
23930
|
-
const _sfc_main$
|
|
24111
|
+
const _sfc_main$l = /* @__PURE__ */ defineComponent({
|
|
23931
24112
|
__name: "TranslationSelector",
|
|
23932
24113
|
props: {
|
|
23933
24114
|
translations: { type: Array },
|
|
@@ -23959,10 +24140,10 @@ ${text2}` : text2;
|
|
|
23959
24140
|
};
|
|
23960
24141
|
}
|
|
23961
24142
|
});
|
|
23962
|
-
const _hoisted_1$
|
|
23963
|
-
const _hoisted_2$
|
|
24143
|
+
const _hoisted_1$i = { class: "merge-dialog-title" };
|
|
24144
|
+
const _hoisted_2$f = { class: "merge-dialog-description" };
|
|
23964
24145
|
const _hoisted_3$b = { class: "merge-dialog-actions" };
|
|
23965
|
-
const _sfc_main$
|
|
24146
|
+
const _sfc_main$k = /* @__PURE__ */ defineComponent({
|
|
23966
24147
|
__name: "MergeDialog",
|
|
23967
24148
|
props: {
|
|
23968
24149
|
open: { type: Boolean },
|
|
@@ -24030,8 +24211,8 @@ ${text2}` : text2;
|
|
|
24030
24211
|
class: "merge-dialog-form",
|
|
24031
24212
|
onSubmit: withModifiers(onConfirm, ["prevent"])
|
|
24032
24213
|
}, [
|
|
24033
|
-
createBaseVNode("h2", _hoisted_1$
|
|
24034
|
-
createBaseVNode("p", _hoisted_2$
|
|
24214
|
+
createBaseVNode("h2", _hoisted_1$i, toDisplayString(unref(t2)("mergeDialog.title")), 1),
|
|
24215
|
+
createBaseVNode("p", _hoisted_2$f, [
|
|
24035
24216
|
createBaseVNode("strong", null, toDisplayString(fromSpeaker.value.name), 1),
|
|
24036
24217
|
createTextVNode(" · " + toDisplayString(affectedCount.value) + " " + toDisplayString(unref(t2)("mergeDialog.turnsAffected")), 1)
|
|
24037
24218
|
]),
|
|
@@ -24069,19 +24250,19 @@ ${text2}` : text2;
|
|
|
24069
24250
|
};
|
|
24070
24251
|
}
|
|
24071
24252
|
});
|
|
24072
|
-
const _style_0$
|
|
24073
|
-
const MergeDialog = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
24074
|
-
const _hoisted_1$
|
|
24075
|
-
const _hoisted_2$
|
|
24253
|
+
const _style_0$i = "\n.merge-dialog[data-v-e658bcd0] {\n margin: auto;\n max-width: 420px;\n width: 90vw;\n padding: var(--spacing-lg);\n background-color: var(--color-surface);\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n color: var(--color-text-primary);\n box-shadow: 0 16px 48px color-mix(in srgb, var(--color-text-primary) 20%, transparent);\n}\n.merge-dialog[data-v-e658bcd0]::backdrop {\n /* No backdrop-filter: a full-viewport backdrop blur is a large WebRender\n render target; the dim background alone is enough. */\n background-color: color-mix(in srgb, var(--color-text-primary) 35%, transparent);\n}\n.merge-dialog-form[data-v-e658bcd0] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-md);\n}\n.merge-dialog-title[data-v-e658bcd0] {\n margin: 0;\n font-size: var(--font-size-lg);\n font-weight: 600;\n}\n.merge-dialog-description[data-v-e658bcd0] {\n margin: 0;\n font-size: var(--font-size-sm);\n color: var(--color-text-secondary);\n}\n.merge-dialog-actions[data-v-e658bcd0] {\n display: flex;\n justify-content: flex-end;\n gap: var(--spacing-sm);\n}\n";
|
|
24254
|
+
const MergeDialog = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["styles", [_style_0$i]], ["__scopeId", "data-v-e658bcd0"]]);
|
|
24255
|
+
const _hoisted_1$h = { class: "speaker-sidebar" };
|
|
24256
|
+
const _hoisted_2$e = {
|
|
24076
24257
|
key: 0,
|
|
24077
24258
|
class: "sidebar-section sidebar-section--selector"
|
|
24078
24259
|
};
|
|
24079
24260
|
const _hoisted_3$a = { class: "sidebar-title" };
|
|
24080
|
-
const _hoisted_4$
|
|
24261
|
+
const _hoisted_4$6 = {
|
|
24081
24262
|
key: 1,
|
|
24082
24263
|
class: "sidebar-section sidebar-section--selector"
|
|
24083
24264
|
};
|
|
24084
|
-
const _hoisted_5$
|
|
24265
|
+
const _hoisted_5$6 = { class: "sidebar-title" };
|
|
24085
24266
|
const _hoisted_6$5 = {
|
|
24086
24267
|
key: 2,
|
|
24087
24268
|
class: "sidebar-section"
|
|
@@ -24124,7 +24305,7 @@ ${text2}` : text2;
|
|
|
24124
24305
|
};
|
|
24125
24306
|
const _hoisted_28 = { class: "sidebar-title" };
|
|
24126
24307
|
const _hoisted_29 = { class: "speaker-list" };
|
|
24127
|
-
const _sfc_main$
|
|
24308
|
+
const _sfc_main$j = /* @__PURE__ */ defineComponent({
|
|
24128
24309
|
__name: "SpeakerSidebar",
|
|
24129
24310
|
props: {
|
|
24130
24311
|
speakers: { type: Array },
|
|
@@ -24209,18 +24390,18 @@ ${text2}` : text2;
|
|
|
24209
24390
|
core.emit("llmService:selectVersion", { id: service.id, versionNumber });
|
|
24210
24391
|
}
|
|
24211
24392
|
return (_ctx, _cache) => {
|
|
24212
|
-
return openBlock(), createElementBlock("aside", _hoisted_1$
|
|
24213
|
-
__props.channels.length > 1 ? (openBlock(), createElementBlock("section", _hoisted_2$
|
|
24393
|
+
return openBlock(), createElementBlock("aside", _hoisted_1$h, [
|
|
24394
|
+
__props.channels.length > 1 ? (openBlock(), createElementBlock("section", _hoisted_2$e, [
|
|
24214
24395
|
createBaseVNode("h2", _hoisted_3$a, toDisplayString(unref(t2)("sidebar.channel")), 1),
|
|
24215
|
-
createVNode(_sfc_main$
|
|
24396
|
+
createVNode(_sfc_main$m, {
|
|
24216
24397
|
channels: __props.channels,
|
|
24217
24398
|
"selected-channel-id": __props.selectedChannelId,
|
|
24218
24399
|
"onUpdate:selectedChannelId": _cache[0] || (_cache[0] = ($event) => _ctx.$emit("update:selectedChannelId", $event))
|
|
24219
24400
|
}, null, 8, ["channels", "selected-channel-id"])
|
|
24220
24401
|
])) : createCommentVNode("", true),
|
|
24221
|
-
__props.translations.length > 1 ? (openBlock(), createElementBlock("section", _hoisted_4$
|
|
24222
|
-
createBaseVNode("h2", _hoisted_5$
|
|
24223
|
-
createVNode(_sfc_main$
|
|
24402
|
+
__props.translations.length > 1 ? (openBlock(), createElementBlock("section", _hoisted_4$6, [
|
|
24403
|
+
createBaseVNode("h2", _hoisted_5$6, toDisplayString(unref(t2)("sidebar.translation")), 1),
|
|
24404
|
+
createVNode(_sfc_main$l, {
|
|
24224
24405
|
translations: __props.translations,
|
|
24225
24406
|
"selected-translation-id": __props.selectedTranslationId,
|
|
24226
24407
|
"onUpdate:selectedTranslationId": _cache[1] || (_cache[1] = ($event) => _ctx.$emit("update:selectedTranslationId", $event))
|
|
@@ -24365,7 +24546,7 @@ ${text2}` : text2;
|
|
|
24365
24546
|
"aria-label": unref(t2)("sidebar.renameSpeaker"),
|
|
24366
24547
|
onCommit: ($event) => onRename(speaker.id, $event)
|
|
24367
24548
|
}, null, 8, ["model-value", "disabled", "aria-label", "onCommit"]),
|
|
24368
|
-
canEditSpeakers.value && __props.speakers.length > 1 ? (openBlock(), createBlock(unref(_sfc_main$
|
|
24549
|
+
canEditSpeakers.value && __props.speakers.length > 1 ? (openBlock(), createBlock(unref(_sfc_main$z), {
|
|
24369
24550
|
key: 0,
|
|
24370
24551
|
"speaker-name": speaker.name,
|
|
24371
24552
|
onMerge: ($event) => onOpenMerge(speaker.id)
|
|
@@ -24384,9 +24565,9 @@ ${text2}` : text2;
|
|
|
24384
24565
|
};
|
|
24385
24566
|
}
|
|
24386
24567
|
});
|
|
24387
|
-
const _style_0$
|
|
24388
|
-
const SpeakerSidebar = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
24389
|
-
const _sfc_main$
|
|
24568
|
+
const _style_0$h = '\n.speaker-sidebar[data-v-3b1e278f] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-lg);\n padding: var(--spacing-lg);\n border-left: 1px solid var(--color-border);\n background-color: var(--color-surface);\n overflow-y: auto;\n}\n.sidebar-section[data-v-3b1e278f] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-sm);\n}\n.sidebar-title[data-v-3b1e278f] {\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-text-muted);\n text-transform: uppercase;\n letter-spacing: 0.05em;\n}\n.speaker-list[data-v-3b1e278f] {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n}\n.speaker-item[data-v-3b1e278f] {\n display: flex;\n align-items: center;\n gap: var(--spacing-sm);\n padding: var(--spacing-sm);\n border-radius: var(--radius-md);\n transition: background-color var(--transition-duration);\n}\n.speaker-item[data-v-3b1e278f]:hover {\n background-color: var(--color-surface-hover);\n}\n.speaker-name[data-v-3b1e278f] {\n flex: 1;\n font-size: var(--font-size-sm);\n font-weight: 500;\n color: var(--color-text-primary);\n}\n.subtitle-toggle[data-v-3b1e278f] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--spacing-sm);\n border-radius: var(--radius-md);\n}\n.subtitle-toggle-label[data-v-3b1e278f] {\n font-size: var(--font-size-sm);\n color: var(--color-text-primary);\n}\n.voice-playback-hint[data-v-3b1e278f] {\n padding: 0 var(--spacing-sm);\n font-size: var(--font-size-xs);\n color: var(--color-text-muted);\n}\n.voice-playback-hint--warning[data-v-3b1e278f] {\n color: var(--color-danger);\n}\n.subtitle-slider[data-v-3b1e278f] {\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n padding: var(--spacing-sm);\n}\n.subtitle-slider-label[data-v-3b1e278f] {\n display: flex;\n justify-content: space-between;\n font-size: var(--font-size-sm);\n color: var(--color-text-primary);\n}\n.subtitle-slider-value[data-v-3b1e278f] {\n color: var(--color-text-muted);\n font-variant-numeric: tabular-nums;\n}\n.subtitle-slider input[type="range"][data-v-3b1e278f] {\n width: 100%;\n accent-color: var(--color-primary);\n}\n.subtitle-slider input[type="range"][data-v-3b1e278f]:disabled {\n opacity: 0.4;\n cursor: not-allowed;\n}\n\n/* ── History (LLM generations + versions) ──────────────────────────── */\n.sidebar-section--busy[data-v-3b1e278f] {\n opacity: 0.6;\n pointer-events: none;\n}\n.history-list[data-v-3b1e278f] {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: var(--spacing-xs);\n margin: 0;\n padding: 0;\n}\n.history-generation[data-v-3b1e278f] {\n display: flex;\n flex-direction: column;\n}\n.history-generation__status--completed[data-v-3b1e278f] {\n color: var(--color-success, #2e7d32);\n}\n.history-generation__status--error[data-v-3b1e278f] {\n color: var(--color-danger, #d33);\n}\n.history-generation__status--processing[data-v-3b1e278f],\n.history-generation__status--queued[data-v-3b1e278f] {\n color: var(--color-primary);\n}\n.history-version-list[data-v-3b1e278f] {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 2px;\n margin: var(--spacing-xs) 0 0 var(--spacing-md);\n padding: 0;\n border-left: 1px solid var(--color-border);\n}\n\n/* Nudge nested version rows off the connecting border line. */\n.history-version-list[data-v-3b1e278f] .selectable-list-item {\n margin-left: var(--spacing-xs);\n}\n@media (max-width: 767px) {\n.speaker-sidebar[data-v-3b1e278f] {\n border-left: none;\n}\n.sidebar-section--selector[data-v-3b1e278f] {\n display: none;\n}\n}\n';
|
|
24569
|
+
const SpeakerSidebar = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["styles", [_style_0$h]], ["__scopeId", "data-v-3b1e278f"]]);
|
|
24570
|
+
const _sfc_main$i = /* @__PURE__ */ defineComponent({
|
|
24390
24571
|
__name: "SidebarDrawer",
|
|
24391
24572
|
props: {
|
|
24392
24573
|
"open": { type: Boolean, ...{ required: true } },
|
|
@@ -24435,10 +24616,10 @@ ${text2}` : text2;
|
|
|
24435
24616
|
};
|
|
24436
24617
|
}
|
|
24437
24618
|
});
|
|
24438
|
-
const _hoisted_1$
|
|
24439
|
-
const _hoisted_2$
|
|
24619
|
+
const _hoisted_1$g = ["aria-label"];
|
|
24620
|
+
const _hoisted_2$d = { class: "selection-count" };
|
|
24440
24621
|
const _hoisted_3$9 = { class: "selection-actions" };
|
|
24441
|
-
const _sfc_main$
|
|
24622
|
+
const _sfc_main$h = /* @__PURE__ */ defineComponent({
|
|
24442
24623
|
__name: "SelectionActionBar",
|
|
24443
24624
|
setup(__props) {
|
|
24444
24625
|
const selection = useTurnSelection();
|
|
@@ -24450,7 +24631,7 @@ ${text2}` : text2;
|
|
|
24450
24631
|
role: "toolbar",
|
|
24451
24632
|
"aria-label": unref(t2)("selection.count")
|
|
24452
24633
|
}, [
|
|
24453
|
-
createBaseVNode("span", _hoisted_2$
|
|
24634
|
+
createBaseVNode("span", _hoisted_2$d, toDisplayString(unref(selection).count.value) + " " + toDisplayString(unref(t2)("selection.count")), 1),
|
|
24454
24635
|
createBaseVNode("div", _hoisted_3$9, [
|
|
24455
24636
|
createVNode(unref(CopyButton), {
|
|
24456
24637
|
icon: "clipboard-type",
|
|
@@ -24482,35 +24663,18 @@ ${text2}` : text2;
|
|
|
24482
24663
|
_: 1
|
|
24483
24664
|
})
|
|
24484
24665
|
])
|
|
24485
|
-
], 8, _hoisted_1$
|
|
24666
|
+
], 8, _hoisted_1$g)) : createCommentVNode("", true);
|
|
24486
24667
|
};
|
|
24487
24668
|
}
|
|
24488
24669
|
});
|
|
24489
|
-
const _style_0$
|
|
24490
|
-
const SelectionActionBar = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
24491
|
-
const
|
|
24492
|
-
|
|
24493
|
-
const isMobile = /* @__PURE__ */ ref(false);
|
|
24494
|
-
let mql = null;
|
|
24495
|
-
function onChange(e2) {
|
|
24496
|
-
isMobile.value = e2.matches;
|
|
24497
|
-
}
|
|
24498
|
-
onMounted(() => {
|
|
24499
|
-
mql = window.matchMedia(MOBILE_BREAKPOINT);
|
|
24500
|
-
isMobile.value = mql.matches;
|
|
24501
|
-
mql.addEventListener("change", onChange);
|
|
24502
|
-
});
|
|
24503
|
-
onBeforeUnmount(() => {
|
|
24504
|
-
mql?.removeEventListener("change", onChange);
|
|
24505
|
-
});
|
|
24506
|
-
return { isMobile };
|
|
24507
|
-
}
|
|
24508
|
-
const _hoisted_1$e = { class: "editor-layout" };
|
|
24509
|
-
const _hoisted_2$b = {
|
|
24670
|
+
const _style_0$g = "\n.selection-bar[data-v-9bad1410] {\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--spacing-xs) var(--spacing-lg);\n /* No backdrop-filter: it forces a WebRender backdrop render target sized to\n the content behind, a heavy GPU-memory cost on long transcripts. The\n semi-opaque glass background stays legible without the blur. */\n background: var(--glass-background);\n border-bottom: 1px solid var(--color-border);\n animation: bar-slide-down-9bad1410 var(--transition-duration) ease;\n}\n.selection-count[data-v-9bad1410] {\n font-size: var(--font-size-sm);\n font-weight: 600;\n color: var(--color-primary);\n}\n.selection-actions[data-v-9bad1410] {\n display: flex;\n gap: var(--spacing-xs);\n}\n@keyframes bar-slide-down-9bad1410 {\nfrom {\n opacity: 0;\n translate: 0 -4px;\n}\nto {\n opacity: 1;\n translate: 0 0;\n}\n}\n@media (prefers-reduced-motion: reduce) {\n.selection-bar[data-v-9bad1410] {\n animation: none;\n}\n}\n@media (max-width: 767px) {\n.selection-bar[data-v-9bad1410] {\n padding: var(--spacing-xs) var(--spacing-md);\n flex-wrap: wrap;\n gap: var(--spacing-xs);\n}\n}\n";
|
|
24671
|
+
const SelectionActionBar = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["styles", [_style_0$g]], ["__scopeId", "data-v-9bad1410"]]);
|
|
24672
|
+
const _hoisted_1$f = { class: "editor-layout" };
|
|
24673
|
+
const _hoisted_2$c = {
|
|
24510
24674
|
key: 6,
|
|
24511
24675
|
class: "mobile-selectors"
|
|
24512
24676
|
};
|
|
24513
|
-
const _sfc_main$
|
|
24677
|
+
const _sfc_main$g = /* @__PURE__ */ defineComponent({
|
|
24514
24678
|
__name: "Layout",
|
|
24515
24679
|
props: {
|
|
24516
24680
|
showHeader: { type: Boolean, default: true },
|
|
@@ -24552,6 +24716,9 @@ ${text2}` : text2;
|
|
|
24552
24716
|
);
|
|
24553
24717
|
const speakerList = computed(() => Array.from(speakers.values()));
|
|
24554
24718
|
const showTranscription = computed(() => activeTab.value === TRANSCRIPTION_TAB);
|
|
24719
|
+
watch(isMobile, (mobile) => {
|
|
24720
|
+
if (mobile && isSplit.value) isSplit.value = false;
|
|
24721
|
+
});
|
|
24555
24722
|
watch(activeTab, (id) => {
|
|
24556
24723
|
if (!core.llmServices) return;
|
|
24557
24724
|
if (id === TRANSCRIPTION_TAB || id === VERBATIM_TAB) {
|
|
@@ -24572,7 +24739,9 @@ ${text2}` : text2;
|
|
|
24572
24739
|
() => props.showVerbatim,
|
|
24573
24740
|
(canShow) => {
|
|
24574
24741
|
if (canShow) return;
|
|
24575
|
-
const withoutVerbatim = shownPanels.value.filter(
|
|
24742
|
+
const withoutVerbatim = shownPanels.value.filter(
|
|
24743
|
+
(id) => id !== VERBATIM_TAB
|
|
24744
|
+
);
|
|
24576
24745
|
shownPanels.value = withoutVerbatim.length > 0 ? withoutVerbatim : [TRANSCRIPTION_TAB];
|
|
24577
24746
|
}
|
|
24578
24747
|
);
|
|
@@ -24597,7 +24766,7 @@ ${text2}` : text2;
|
|
|
24597
24766
|
core.activeChannel.value?.setActiveTranslation(translationId);
|
|
24598
24767
|
}
|
|
24599
24768
|
return (_ctx, _cache) => {
|
|
24600
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
24769
|
+
return openBlock(), createElementBlock("div", _hoisted_1$f, [
|
|
24601
24770
|
props.showHeader ? (openBlock(), createBlock(Header, {
|
|
24602
24771
|
key: 0,
|
|
24603
24772
|
title: unref(core).title.value,
|
|
@@ -24613,7 +24782,7 @@ ${text2}` : text2;
|
|
|
24613
24782
|
onUndo: _cache[2] || (_cache[2] = ($event) => unref(core).transcriptionEditor?.undo()),
|
|
24614
24783
|
onRedo: _cache[3] || (_cache[3] = ($event) => unref(core).transcriptionEditor?.redo())
|
|
24615
24784
|
}, null, 8, ["title", "date", "duration", "speaker-count", "is-mobile", "can-ask", "can-undo", "can-redo"])) : createCommentVNode("", true),
|
|
24616
|
-
createVNode(_sfc_main$
|
|
24785
|
+
createVNode(_sfc_main$v, {
|
|
24617
24786
|
"model-value": activeTab.value,
|
|
24618
24787
|
"show-verbatim": props.showVerbatim,
|
|
24619
24788
|
"onUpdate:modelValue": _cache[4] || (_cache[4] = (tab) => shownPanels.value = [tab])
|
|
@@ -24653,7 +24822,7 @@ ${text2}` : text2;
|
|
|
24653
24822
|
"onUpdate:selectedChannelId": onChannelChange,
|
|
24654
24823
|
"onUpdate:selectedTranslationId": onTranslationChange
|
|
24655
24824
|
}, null, 8, ["speakers", "channels", "selected-channel-id", "translations", "selected-translation-id", "show-speakers"])) : createCommentVNode("", true),
|
|
24656
|
-
unref(isMobile) && panels.value.length === 1 ? (openBlock(), createBlock(_sfc_main$
|
|
24825
|
+
unref(isMobile) && panels.value.length === 1 ? (openBlock(), createBlock(_sfc_main$i, {
|
|
24657
24826
|
key: 1,
|
|
24658
24827
|
open: isSidebarOpen.value,
|
|
24659
24828
|
"onUpdate:open": _cache[6] || (_cache[6] = ($event) => isSidebarOpen.value = $event)
|
|
@@ -24682,14 +24851,14 @@ ${text2}` : text2;
|
|
|
24682
24851
|
unref(core).subtitle?.isVisible.value && !unref(isMobile) && !unref(core).subtitle.isFullscreen.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(core).components.subtitleBanner), { key: 3 })) : createCommentVNode("", true),
|
|
24683
24852
|
unref(core).subtitle?.isFullscreen.value ? (openBlock(), createBlock(resolveDynamicComponent(unref(core).components.subtitleFullscreen), { key: 4 })) : createCommentVNode("", true),
|
|
24684
24853
|
unref(core).chat ? (openBlock(), createBlock(resolveDynamicComponent(unref(core).components.chatDrawer), { key: 5 })) : createCommentVNode("", true),
|
|
24685
|
-
unref(isMobile) && (channels.value.length > 1 || translations.value.length > 1) ? (openBlock(), createElementBlock("div", _hoisted_2$
|
|
24686
|
-
channels.value.length > 1 ? (openBlock(), createBlock(_sfc_main$
|
|
24854
|
+
unref(isMobile) && (channels.value.length > 1 || translations.value.length > 1) ? (openBlock(), createElementBlock("div", _hoisted_2$c, [
|
|
24855
|
+
channels.value.length > 1 ? (openBlock(), createBlock(_sfc_main$m, {
|
|
24687
24856
|
key: 0,
|
|
24688
24857
|
channels: channels.value,
|
|
24689
24858
|
"selected-channel-id": unref(core).activeChannelId.value,
|
|
24690
24859
|
"onUpdate:selectedChannelId": onChannelChange
|
|
24691
24860
|
}, null, 8, ["channels", "selected-channel-id"])) : createCommentVNode("", true),
|
|
24692
|
-
translations.value.length > 1 ? (openBlock(), createBlock(_sfc_main$
|
|
24861
|
+
translations.value.length > 1 ? (openBlock(), createBlock(_sfc_main$l, {
|
|
24693
24862
|
key: 1,
|
|
24694
24863
|
translations: translations.value,
|
|
24695
24864
|
"selected-translation-id": activeTranslationId.value,
|
|
@@ -24700,41 +24869,41 @@ ${text2}` : text2;
|
|
|
24700
24869
|
};
|
|
24701
24870
|
}
|
|
24702
24871
|
});
|
|
24703
|
-
const _style_0$
|
|
24704
|
-
const Layout = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
24705
|
-
const _hoisted_1$
|
|
24872
|
+
const _style_0$f = "\n.editor-layout[data-v-c7029599] {\n display: flex;\n flex-direction: column;\n height: 100%;\n overflow: hidden;\n background-color: var(--color-background);\n}\n.editor-body[data-v-c7029599] {\n display: grid;\n grid-template-columns: 1fr var(--sidebar-width);\n flex: 1;\n min-height: 0;\n}\n\n/* Split mode: two panels already share the body between them, no room (or\n need) for the speaker sidebar too — see Layout's panels/isSplit state. */\n.editor-body--no-sidebar[data-v-c7029599] {\n grid-template-columns: 1fr;\n}\n.editor-body__panels[data-v-c7029599] {\n display: flex;\n min-width: 0;\n min-height: 0;\n}\n.editor-body__panels[data-v-c7029599] > * {\n flex: 1;\n min-width: 0;\n}\n.editor-body__panels--split[data-v-c7029599] > * + * {\n border-left: 1px solid var(--color-border);\n}\n.mobile-selectors[data-v-c7029599] {\n display: flex;\n gap: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n border-top: 1px solid var(--color-border);\n background-color: var(--color-surface);\n flex-shrink: 0;\n box-shadow: var(--shadow-md);\n align-items: end;\n}\n.mobile-selectors[data-v-c7029599] > * {\n flex: 1;\n min-width: 0;\n}\n@media (max-width: 767px) {\n.editor-body[data-v-c7029599] {\n grid-template-columns: 1fr;\n}\n}\n";
|
|
24873
|
+
const Layout = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["styles", [_style_0$f]], ["__scopeId", "data-v-c7029599"]]);
|
|
24874
|
+
const _hoisted_1$e = {
|
|
24706
24875
|
class: "editor-loading",
|
|
24707
24876
|
role: "status",
|
|
24708
24877
|
"aria-live": "polite"
|
|
24709
24878
|
};
|
|
24710
|
-
const _hoisted_2$
|
|
24711
|
-
const _sfc_main$
|
|
24879
|
+
const _hoisted_2$b = { class: "editor-loading__label" };
|
|
24880
|
+
const _sfc_main$f = /* @__PURE__ */ defineComponent({
|
|
24712
24881
|
__name: "EditorLoadingOverlay",
|
|
24713
24882
|
setup(__props) {
|
|
24714
24883
|
const { t: t2 } = useI18n();
|
|
24715
24884
|
return (_ctx, _cache) => {
|
|
24716
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
24885
|
+
return openBlock(), createElementBlock("div", _hoisted_1$e, [
|
|
24717
24886
|
_cache[0] || (_cache[0] = createBaseVNode("span", {
|
|
24718
24887
|
class: "editor-loading__spinner",
|
|
24719
24888
|
"aria-hidden": "true"
|
|
24720
24889
|
}, null, -1)),
|
|
24721
|
-
createBaseVNode("span", _hoisted_2$
|
|
24890
|
+
createBaseVNode("span", _hoisted_2$b, toDisplayString(unref(t2)("editor.loading")), 1)
|
|
24722
24891
|
]);
|
|
24723
24892
|
};
|
|
24724
24893
|
}
|
|
24725
24894
|
});
|
|
24726
|
-
const _style_0$
|
|
24727
|
-
const EditorLoadingOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
24728
|
-
const _hoisted_1$
|
|
24895
|
+
const _style_0$e = "\n.editor-loading[data-v-f56c39db] {\n position: absolute;\n inset: 0;\n z-index: 20;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-md);\n /* Opaque so the half-built layout never flashes behind while collab syncs.\n No backdrop-filter: it is banned in this package (WebRender GTT freeze). */\n background-color: var(--color-background);\n color: var(--color-text-secondary);\n font-family: var(--font-family);\n font-size: var(--font-size-sm);\n}\n.editor-loading__spinner[data-v-f56c39db] {\n width: 32px;\n height: 32px;\n border: 3px solid var(--color-border);\n border-top-color: var(--color-primary);\n border-radius: 50%;\n animation: editor-loading-spin-f56c39db 0.8s linear infinite;\n}\n@keyframes editor-loading-spin-f56c39db {\nto {\n transform: rotate(360deg);\n}\n}\n@media (prefers-reduced-motion: reduce) {\n.editor-loading__spinner[data-v-f56c39db] {\n animation: none;\n}\n}\n";
|
|
24896
|
+
const EditorLoadingOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["styles", [_style_0$e]], ["__scopeId", "data-v-f56c39db"]]);
|
|
24897
|
+
const _hoisted_1$d = {
|
|
24729
24898
|
class: "editor-error",
|
|
24730
24899
|
role: "alert"
|
|
24731
24900
|
};
|
|
24732
|
-
const _hoisted_2$
|
|
24901
|
+
const _hoisted_2$a = { class: "editor-error__title" };
|
|
24733
24902
|
const _hoisted_3$8 = {
|
|
24734
24903
|
key: 0,
|
|
24735
24904
|
class: "editor-error__detail"
|
|
24736
24905
|
};
|
|
24737
|
-
const _sfc_main$
|
|
24906
|
+
const _sfc_main$e = /* @__PURE__ */ defineComponent({
|
|
24738
24907
|
__name: "EditorErrorOverlay",
|
|
24739
24908
|
props: {
|
|
24740
24909
|
message: { type: [String, null] }
|
|
@@ -24742,20 +24911,20 @@ ${text2}` : text2;
|
|
|
24742
24911
|
setup(__props) {
|
|
24743
24912
|
const { t: t2 } = useI18n();
|
|
24744
24913
|
return (_ctx, _cache) => {
|
|
24745
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
24914
|
+
return openBlock(), createElementBlock("div", _hoisted_1$d, [
|
|
24746
24915
|
createVNode(unref(EditorIcon), {
|
|
24747
24916
|
name: "warning",
|
|
24748
24917
|
size: 40,
|
|
24749
24918
|
class: "editor-error__icon"
|
|
24750
24919
|
}),
|
|
24751
|
-
createBaseVNode("p", _hoisted_2$
|
|
24920
|
+
createBaseVNode("p", _hoisted_2$a, toDisplayString(unref(t2)("editor.loadError")), 1),
|
|
24752
24921
|
__props.message ? (openBlock(), createElementBlock("p", _hoisted_3$8, toDisplayString(__props.message), 1)) : createCommentVNode("", true)
|
|
24753
24922
|
]);
|
|
24754
24923
|
};
|
|
24755
24924
|
}
|
|
24756
24925
|
});
|
|
24757
|
-
const _style_0$
|
|
24758
|
-
const EditorErrorOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
24926
|
+
const _style_0$d = "\n.editor-error[data-v-eefc2d23] {\n position: absolute;\n inset: 0;\n z-index: 20;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-sm);\n padding: var(--spacing-xl);\n text-align: center;\n /* Opaque so the half-built layout never shows behind. No backdrop-filter:\n it is banned in this package (WebRender GTT freeze). */\n background-color: var(--color-background);\n font-family: var(--font-family);\n}\n.editor-error__icon[data-v-eefc2d23] {\n color: var(--color-danger);\n}\n.editor-error__title[data-v-eefc2d23] {\n margin: 0;\n font-size: var(--font-size-lg);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.editor-error__detail[data-v-eefc2d23] {\n margin: 0;\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n}\n";
|
|
24927
|
+
const EditorErrorOverlay = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["styles", [_style_0$d]], ["__scopeId", "data-v-eefc2d23"]]);
|
|
24759
24928
|
const READY_TIMEOUT_MS = 2e4;
|
|
24760
24929
|
function useEditorReady(core) {
|
|
24761
24930
|
const isLoading = /* @__PURE__ */ ref(true);
|
|
@@ -24789,8 +24958,8 @@ ${text2}` : text2;
|
|
|
24789
24958
|
});
|
|
24790
24959
|
return { isLoading, error };
|
|
24791
24960
|
}
|
|
24792
|
-
const _hoisted_1$
|
|
24793
|
-
const _sfc_main$
|
|
24961
|
+
const _hoisted_1$c = { class: "transcript-ui-root" };
|
|
24962
|
+
const _sfc_main$d = /* @__PURE__ */ defineComponent({
|
|
24794
24963
|
__name: "TranscriptUI",
|
|
24795
24964
|
props: {
|
|
24796
24965
|
locale: { default: "fr", type: String },
|
|
@@ -24813,7 +24982,7 @@ ${text2}` : text2;
|
|
|
24813
24982
|
onBeforeUnmount(() => core.destroy());
|
|
24814
24983
|
__expose({ core });
|
|
24815
24984
|
return (_ctx, _cache) => {
|
|
24816
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
24985
|
+
return openBlock(), createElementBlock("div", _hoisted_1$c, [
|
|
24817
24986
|
unref(core).channels.size ? (openBlock(), createBlock(Layout, {
|
|
24818
24987
|
key: 0,
|
|
24819
24988
|
"show-header": !props.noHeader,
|
|
@@ -24827,7 +24996,7 @@ ${text2}` : text2;
|
|
|
24827
24996
|
};
|
|
24828
24997
|
}
|
|
24829
24998
|
});
|
|
24830
|
-
const _style_0$
|
|
24999
|
+
const _style_0$c = `
|
|
24831
25000
|
/* NOT fonts.css: a @font-face declared inside a shadow root isn't reliably
|
|
24832
25001
|
* applied by browsers (document.fonts never registers it) — dead weight in
|
|
24833
25002
|
* the webcomponent bundle specifically, which always runs shadow-DOM'd. The
|
|
@@ -25154,7 +25323,7 @@ section.turn:has([data-state="open"]) {
|
|
|
25154
25323
|
height: 100%;
|
|
25155
25324
|
}
|
|
25156
25325
|
`;
|
|
25157
|
-
const TranscriptUI = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
25326
|
+
const TranscriptUI = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["styles", [_style_0$c]]]);
|
|
25158
25327
|
function mapApiTurns(apiTurns) {
|
|
25159
25328
|
return apiTurns.map((t2) => {
|
|
25160
25329
|
const words = wordsFromApi$2(t2.turn_id, t2.words);
|
|
@@ -25521,14 +25690,14 @@ section.turn:has([data-state="open"]) {
|
|
|
25521
25690
|
}
|
|
25522
25691
|
};
|
|
25523
25692
|
}
|
|
25524
|
-
const _hoisted_1$
|
|
25525
|
-
const _hoisted_2$
|
|
25693
|
+
const _hoisted_1$b = { class: "player-controls" };
|
|
25694
|
+
const _hoisted_2$9 = { class: "controls-left" };
|
|
25526
25695
|
const _hoisted_3$7 = { class: "controls-time" };
|
|
25527
|
-
const _hoisted_4$
|
|
25528
|
-
const _hoisted_5$
|
|
25696
|
+
const _hoisted_4$5 = { class: "time-display" };
|
|
25697
|
+
const _hoisted_5$5 = { class: "time-display" };
|
|
25529
25698
|
const _hoisted_6$4 = { class: "controls-right" };
|
|
25530
25699
|
const _hoisted_7$1 = ["value", "aria-label", "disabled"];
|
|
25531
|
-
const _sfc_main$
|
|
25700
|
+
const _sfc_main$c = /* @__PURE__ */ defineComponent({
|
|
25532
25701
|
__name: "AudioPlayerControls",
|
|
25533
25702
|
props: {
|
|
25534
25703
|
isPlaying: { type: Boolean },
|
|
@@ -25549,8 +25718,8 @@ section.turn:has([data-state="open"]) {
|
|
|
25549
25718
|
emit2("update:volume", parseFloat(target.value));
|
|
25550
25719
|
}
|
|
25551
25720
|
return (_ctx, _cache) => {
|
|
25552
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
25553
|
-
createBaseVNode("div", _hoisted_2$
|
|
25721
|
+
return openBlock(), createElementBlock("div", _hoisted_1$b, [
|
|
25722
|
+
createBaseVNode("div", _hoisted_2$9, [
|
|
25554
25723
|
createVNode(unref(Button), {
|
|
25555
25724
|
variant: "transparent",
|
|
25556
25725
|
size: "md",
|
|
@@ -25598,9 +25767,9 @@ section.turn:has([data-state="open"]) {
|
|
|
25598
25767
|
}, 8, ["aria-label", "disabled"])
|
|
25599
25768
|
]),
|
|
25600
25769
|
createBaseVNode("div", _hoisted_3$7, [
|
|
25601
|
-
createBaseVNode("time", _hoisted_4$
|
|
25770
|
+
createBaseVNode("time", _hoisted_4$5, toDisplayString(__props.currentTime), 1),
|
|
25602
25771
|
_cache[7] || (_cache[7] = createBaseVNode("span", { class: "time-separator" }, "/", -1)),
|
|
25603
|
-
createBaseVNode("time", _hoisted_5$
|
|
25772
|
+
createBaseVNode("time", _hoisted_5$5, toDisplayString(__props.duration), 1)
|
|
25604
25773
|
]),
|
|
25605
25774
|
createBaseVNode("div", _hoisted_6$4, [
|
|
25606
25775
|
createBaseVNode("div", {
|
|
@@ -25658,8 +25827,8 @@ section.turn:has([data-state="open"]) {
|
|
|
25658
25827
|
};
|
|
25659
25828
|
}
|
|
25660
25829
|
});
|
|
25661
|
-
const _style_0$
|
|
25662
|
-
const AudioPlayerControls = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
25830
|
+
const _style_0$b = "\n.player-controls[data-v-fb293305] {\n display: flex;\n align-items: center;\n gap: var(--spacing-md);\n padding: var(--spacing-xs) var(--spacing-lg);\n height: 44px;\n}\n.controls-left[data-v-fb293305] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n}\n.controls-time[data-v-fb293305] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xxs);\n font-family: var(--font-family-mono);\n font-size: var(--font-size-sm);\n color: var(--color-text-muted);\n user-select: none;\n}\n.time-separator[data-v-fb293305] {\n color: var(--color-text-muted);\n opacity: 0.5;\n}\n.controls-right[data-v-fb293305] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n margin-left: auto;\n}\n.volume-group[data-v-fb293305] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n}\n.volume-slider[data-v-fb293305] {\n width: 80px;\n height: 4px;\n accent-color: var(--color-primary);\n cursor: pointer;\n}\n.volume-slider[data-v-fb293305]:disabled {\n opacity: 0.5;\n cursor: default;\n}\n.play-button[data-v-fb293305] {\n width: 40px;\n height: 40px;\n}\n.speed-button[data-v-fb293305] {\n font-size: var(--font-size-sm);\n font-family: var(--font-family-mono);\n}\n@media (max-width: 767px) {\n.skip-button[data-v-fb293305] {\n display: none;\n}\n.volume-slider[data-v-fb293305] {\n display: none;\n}\n.player-controls[data-v-fb293305] {\n padding: var(--spacing-xs) var(--spacing-md);\n gap: var(--spacing-sm);\n}\n}\n";
|
|
25831
|
+
const AudioPlayerControls = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["styles", [_style_0$b]], ["__scopeId", "data-v-fb293305"]]);
|
|
25663
25832
|
function t$1(t2, e2, i2, n2) {
|
|
25664
25833
|
return new (i2 || (i2 = Promise))((function(s2, r2) {
|
|
25665
25834
|
function o2(t3) {
|
|
@@ -27591,8 +27760,8 @@ section.turn:has([data-state="open"]) {
|
|
|
27591
27760
|
toggleMute
|
|
27592
27761
|
};
|
|
27593
27762
|
}
|
|
27594
|
-
const _hoisted_1$
|
|
27595
|
-
const _sfc_main$
|
|
27763
|
+
const _hoisted_1$a = { class: "audio-player" };
|
|
27764
|
+
const _sfc_main$b = /* @__PURE__ */ defineComponent({
|
|
27596
27765
|
__name: "AudioPlayer",
|
|
27597
27766
|
props: {
|
|
27598
27767
|
audioSrc: { type: String }
|
|
@@ -27622,7 +27791,7 @@ section.turn:has([data-state="open"]) {
|
|
|
27622
27791
|
});
|
|
27623
27792
|
__expose({ seekTo, pause });
|
|
27624
27793
|
return (_ctx, _cache) => {
|
|
27625
|
-
return openBlock(), createElementBlock("footer", _hoisted_1$
|
|
27794
|
+
return openBlock(), createElementBlock("footer", _hoisted_1$a, [
|
|
27626
27795
|
createBaseVNode("div", {
|
|
27627
27796
|
ref_key: "waveformRef",
|
|
27628
27797
|
ref: waveformRef,
|
|
@@ -27647,8 +27816,8 @@ section.turn:has([data-state="open"]) {
|
|
|
27647
27816
|
};
|
|
27648
27817
|
}
|
|
27649
27818
|
});
|
|
27650
|
-
const _style_0$
|
|
27651
|
-
const AudioPlayer = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
27819
|
+
const _style_0$a = "\n.audio-player[data-v-580c393d] {\n border-top: 1px solid var(--color-border);\n background-color: var(--color-surface);\n flex-shrink: 0;\n}\n.transcript-ui-waveform-container[data-v-580c393d] {\n min-height: 32px;\n}\n.transcript-ui-waveform-container--loading[data-v-580c393d] {\n background: linear-gradient(\n 90deg,\n var(--color-border-light, var(--color-border)) 25%,\n var(--color-border) 50%,\n var(--color-border-light, var(--color-border)) 75%\n );\n background-size: 200% 100%;\n animation: shimmer-580c393d 1.5s ease-in-out infinite;\n border-radius: var(--radius-sm);\n}\n@keyframes shimmer-580c393d {\n0% {\n background-position: 200% 0;\n}\n100% {\n background-position: -200% 0;\n}\n}\n@media (prefers-reduced-motion: reduce) {\n.transcript-ui-waveform-container--loading[data-v-580c393d] {\n animation: none;\n}\n}\n";
|
|
27820
|
+
const AudioPlayer = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["styles", [_style_0$a]], ["__scopeId", "data-v-580c393d"]]);
|
|
27652
27821
|
const { findActiveWord, firstWordStart, lastWordEnd } = utils;
|
|
27653
27822
|
const WORD_TRACK_INTERVAL = 0.05;
|
|
27654
27823
|
function createAudioPlugin(options = {}) {
|
|
@@ -28366,14 +28535,14 @@ section.turn:has([data-state="open"]) {
|
|
|
28366
28535
|
}
|
|
28367
28536
|
return parts;
|
|
28368
28537
|
}
|
|
28369
|
-
const _hoisted_1$
|
|
28538
|
+
const _hoisted_1$9 = {
|
|
28370
28539
|
key: 0,
|
|
28371
28540
|
class: "watermark",
|
|
28372
28541
|
"aria-hidden": "true"
|
|
28373
28542
|
};
|
|
28374
|
-
const _hoisted_2$
|
|
28543
|
+
const _hoisted_2$8 = ["src", "alt"];
|
|
28375
28544
|
const _hoisted_3$6 = { key: 1 };
|
|
28376
|
-
const _sfc_main$
|
|
28545
|
+
const _sfc_main$a = /* @__PURE__ */ defineComponent({
|
|
28377
28546
|
__name: "SubtitleWatermark",
|
|
28378
28547
|
props: {
|
|
28379
28548
|
visible: { type: Boolean }
|
|
@@ -28388,7 +28557,7 @@ section.turn:has([data-state="open"]) {
|
|
|
28388
28557
|
return (_ctx, _cache) => {
|
|
28389
28558
|
return openBlock(), createBlock(Transition, { name: "watermark" }, {
|
|
28390
28559
|
default: withCtx(() => [
|
|
28391
|
-
__props.visible && unref(watermark) ? (openBlock(), createElementBlock("div", _hoisted_1$
|
|
28560
|
+
__props.visible && unref(watermark) ? (openBlock(), createElementBlock("div", _hoisted_1$9, [
|
|
28392
28561
|
(openBlock(true), createElementBlock(Fragment, null, renderList(parts.value, (part, i2) => {
|
|
28393
28562
|
return openBlock(), createElementBlock(Fragment, { key: i2 }, [
|
|
28394
28563
|
part.type === "token" ? (openBlock(), createElementBlock("img", {
|
|
@@ -28396,7 +28565,7 @@ section.turn:has([data-state="open"]) {
|
|
|
28396
28565
|
src: part.src,
|
|
28397
28566
|
alt: part.alt,
|
|
28398
28567
|
class: "watermark__img"
|
|
28399
|
-
}, null, 8, _hoisted_2$
|
|
28568
|
+
}, null, 8, _hoisted_2$8)) : (openBlock(), createElementBlock("span", _hoisted_3$6, toDisplayString(part.value), 1))
|
|
28400
28569
|
], 64);
|
|
28401
28570
|
}), 128))
|
|
28402
28571
|
])) : createCommentVNode("", true)
|
|
@@ -28406,10 +28575,10 @@ section.turn:has([data-state="open"]) {
|
|
|
28406
28575
|
};
|
|
28407
28576
|
}
|
|
28408
28577
|
});
|
|
28409
|
-
const _style_0$
|
|
28410
|
-
const SubtitleWatermark = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
28411
|
-
const _hoisted_1$
|
|
28412
|
-
const _sfc_main$
|
|
28578
|
+
const _style_0$9 = "\n.watermark[data-v-eb604a8e] {\n position: absolute;\n right: var(--spacing-md, 16px);\n bottom: 4px;\n display: inline-flex;\n align-items: center;\n gap: 0.25em;\n font-size: 1.2rem;\n color: var(--color-white, #fff);\n pointer-events: none;\n line-height: 1;\n}\n.watermark__img[data-v-eb604a8e] {\n height: 1em;\n vertical-align: middle;\n}\n.watermark-enter-active[data-v-eb604a8e],\n.watermark-leave-active[data-v-eb604a8e] {\n transition:\n opacity 0.4s ease,\n transform 0.4s ease;\n}\n.watermark-enter-from[data-v-eb604a8e],\n.watermark-leave-to[data-v-eb604a8e] {\n opacity: 0;\n transform: translate(6px, 6px);\n}\n@media (prefers-reduced-motion: reduce) {\n.watermark-enter-active[data-v-eb604a8e],\n .watermark-leave-active[data-v-eb604a8e] {\n transition: opacity 0.01s;\n transform: none;\n}\n}\n";
|
|
28579
|
+
const SubtitleWatermark = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["styles", [_style_0$9]], ["__scopeId", "data-v-eb604a8e"]]);
|
|
28580
|
+
const _hoisted_1$8 = ["height"];
|
|
28581
|
+
const _sfc_main$9 = /* @__PURE__ */ defineComponent({
|
|
28413
28582
|
__name: "SubtitleBanner",
|
|
28414
28583
|
setup(__props) {
|
|
28415
28584
|
const core = useCore();
|
|
@@ -28443,20 +28612,20 @@ section.turn:has([data-state="open"]) {
|
|
|
28443
28612
|
ref: "canvas",
|
|
28444
28613
|
class: normalizeClass(["subtitle-canvas", { "subtitle-canvas--shrunk": unref(watermarkVisible) }]),
|
|
28445
28614
|
height: canvasHeight.value
|
|
28446
|
-
}, null, 10, _hoisted_1$
|
|
28615
|
+
}, null, 10, _hoisted_1$8),
|
|
28447
28616
|
createVNode(SubtitleWatermark, { visible: unref(watermarkVisible) }, null, 8, ["visible"])
|
|
28448
28617
|
], 4);
|
|
28449
28618
|
};
|
|
28450
28619
|
}
|
|
28451
28620
|
});
|
|
28452
|
-
const _style_0$
|
|
28453
|
-
const SubtitleBanner = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
28454
|
-
const _hoisted_1$
|
|
28621
|
+
const _style_0$8 = "\n.subtitle-banner[data-v-6b9b2fb2] {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n flex-shrink: 0;\n background-color: var(--color-black);\n overflow: hidden;\n z-index: 1001;\n}\n.subtitle-canvas[data-v-6b9b2fb2] {\n display: block;\n width: 100%;\n height: 100%;\n transition: transform 0.4s ease;\n transform-origin: top center;\n}\n.subtitle-canvas--shrunk[data-v-6b9b2fb2] {\n transform: scale(0.8) translateY(-8%);\n}\n@media (prefers-reduced-motion: reduce) {\n.subtitle-canvas[data-v-6b9b2fb2] {\n transition: none;\n}\n}\n";
|
|
28622
|
+
const SubtitleBanner = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["styles", [_style_0$8]], ["__scopeId", "data-v-6b9b2fb2"]]);
|
|
28623
|
+
const _hoisted_1$7 = {
|
|
28455
28624
|
ref: "container",
|
|
28456
28625
|
class: "subtitle-fullscreen"
|
|
28457
28626
|
};
|
|
28458
|
-
const _hoisted_2$
|
|
28459
|
-
const _sfc_main$
|
|
28627
|
+
const _hoisted_2$7 = ["aria-label"];
|
|
28628
|
+
const _sfc_main$8 = /* @__PURE__ */ defineComponent({
|
|
28460
28629
|
__name: "SubtitleFullscreen",
|
|
28461
28630
|
setup(__props) {
|
|
28462
28631
|
const core = useCore();
|
|
@@ -28514,14 +28683,14 @@ section.turn:has([data-state="open"]) {
|
|
|
28514
28683
|
}
|
|
28515
28684
|
});
|
|
28516
28685
|
return (_ctx, _cache) => {
|
|
28517
|
-
return openBlock(), createElementBlock("div", _hoisted_1$
|
|
28686
|
+
return openBlock(), createElementBlock("div", _hoisted_1$7, [
|
|
28518
28687
|
createBaseVNode("button", {
|
|
28519
28688
|
class: "subtitle-fullscreen__close",
|
|
28520
28689
|
"aria-label": unref(t2)("subtitle.exitFullscreen"),
|
|
28521
28690
|
onClick: close
|
|
28522
28691
|
}, [
|
|
28523
28692
|
createVNode(unref(X$1), { size: 24 })
|
|
28524
|
-
], 8, _hoisted_2$
|
|
28693
|
+
], 8, _hoisted_2$7),
|
|
28525
28694
|
createBaseVNode("canvas", {
|
|
28526
28695
|
ref: "canvas",
|
|
28527
28696
|
class: normalizeClass(["subtitle-fullscreen__canvas", { "subtitle-fullscreen__canvas--shrunk": unref(watermarkVisible) }])
|
|
@@ -28531,8 +28700,8 @@ section.turn:has([data-state="open"]) {
|
|
|
28531
28700
|
};
|
|
28532
28701
|
}
|
|
28533
28702
|
});
|
|
28534
|
-
const _style_0$
|
|
28535
|
-
const SubtitleFullscreen = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
28703
|
+
const _style_0$7 = "\n.subtitle-fullscreen[data-v-4dac7247] {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n background-color: var(--color-black);\n}\n.transcript-ui-root .subtitle-fullscreen__close[data-v-4dac7247] {\n /* Full reset (same convention as Button, EditableText, Tabs…): the\n previous partial reset (border/background only) left margin, padding,\n and appearance to whatever the host page's UA/global styles set. */\n all: unset;\n box-sizing: border-box;\n position: absolute;\n top: var(--spacing-md, 16px);\n right: var(--spacing-md, 16px);\n z-index: 1;\n display: inline-flex;\n align-items: center;\n justify-content: center;\n width: 40px;\n height: 40px;\n background: rgba(255, 255, 255, 0.1);\n color: var(--color-white);\n border-radius: var(--radius-md, 8px);\n cursor: pointer;\n transition: background-color var(--transition-duration) ease;\n}\n.transcript-ui-root .subtitle-fullscreen__close[data-v-4dac7247]:hover,\n.transcript-ui-root .subtitle-fullscreen__close[data-v-4dac7247]:focus-visible {\n background: rgba(255, 255, 255, 0.25);\n outline: 2px solid rgba(255, 255, 255, 0.5);\n outline-offset: 2px;\n}\n.subtitle-fullscreen__canvas[data-v-4dac7247] {\n display: block;\n width: 100%;\n height: 100%;\n transition: transform 0.4s ease;\n transform-origin: center;\n}\n.subtitle-fullscreen__canvas--shrunk[data-v-4dac7247] {\n transform: scale(0.85) translateY(-4%);\n}\n@media (prefers-reduced-motion: reduce) {\n.subtitle-fullscreen__close[data-v-4dac7247],\n .subtitle-fullscreen__canvas[data-v-4dac7247] {\n transition: none;\n}\n}\n";
|
|
28704
|
+
const SubtitleFullscreen = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["styles", [_style_0$7]], ["__scopeId", "data-v-4dac7247"]]);
|
|
28536
28705
|
function createSubtitlePlugin(options = {}) {
|
|
28537
28706
|
return {
|
|
28538
28707
|
name: "subtitle",
|
|
@@ -29334,6 +29503,38 @@ section.turn:has([data-state="open"]) {
|
|
|
29334
29503
|
}
|
|
29335
29504
|
};
|
|
29336
29505
|
}
|
|
29506
|
+
const _hoisted_1$6 = ["title"];
|
|
29507
|
+
const _hoisted_2$6 = { class: "llm-service-status__label" };
|
|
29508
|
+
const _sfc_main$7 = /* @__PURE__ */ defineComponent({
|
|
29509
|
+
__name: "LLMServiceStatus",
|
|
29510
|
+
props: {
|
|
29511
|
+
isUpdated: { type: Boolean }
|
|
29512
|
+
},
|
|
29513
|
+
setup(__props) {
|
|
29514
|
+
const props = __props;
|
|
29515
|
+
const { t: t2 } = useI18n();
|
|
29516
|
+
const label = computed(
|
|
29517
|
+
() => props.isUpdated ? t2("llmService.statusUpdated") : t2("llmService.statusOutdated")
|
|
29518
|
+
);
|
|
29519
|
+
return (_ctx, _cache) => {
|
|
29520
|
+
return openBlock(), createElementBlock("span", {
|
|
29521
|
+
class: normalizeClass([
|
|
29522
|
+
"llm-service-status",
|
|
29523
|
+
__props.isUpdated ? "llm-service-status--ok" : "llm-service-status--warn"
|
|
29524
|
+
]),
|
|
29525
|
+
title: label.value
|
|
29526
|
+
}, [
|
|
29527
|
+
createVNode(unref(EditorIcon), {
|
|
29528
|
+
name: __props.isUpdated ? "check" : "warning",
|
|
29529
|
+
size: 14
|
|
29530
|
+
}, null, 8, ["name"]),
|
|
29531
|
+
createBaseVNode("span", _hoisted_2$6, toDisplayString(label.value), 1)
|
|
29532
|
+
], 10, _hoisted_1$6);
|
|
29533
|
+
};
|
|
29534
|
+
}
|
|
29535
|
+
});
|
|
29536
|
+
const _style_0$6 = "\n.llm-service-status[data-v-f6c4d61b] {\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-xs);\n min-width: 0;\n font-size: var(--font-size-xs);\n font-weight: 500;\n}\n.llm-service-status--ok[data-v-f6c4d61b] {\n color: var(--color-success, #2e7d32);\n}\n.llm-service-status--warn[data-v-f6c4d61b] {\n color: var(--color-warning, #ed6c02);\n}\n.llm-service-status[data-v-f6c4d61b] .editor-icon {\n flex-shrink: 0;\n}\n.llm-service-status__label[data-v-f6c4d61b] {\n min-width: 0;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n";
|
|
29537
|
+
const LLMServiceStatus = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["styles", [_style_0$6]], ["__scopeId", "data-v-f6c4d61b"]]);
|
|
29337
29538
|
const _hoisted_1$5 = { class: "llm-service-panel" };
|
|
29338
29539
|
const _hoisted_2$5 = {
|
|
29339
29540
|
key: 0,
|
|
@@ -29341,7 +29542,9 @@ section.turn:has([data-state="open"]) {
|
|
|
29341
29542
|
role: "status"
|
|
29342
29543
|
};
|
|
29343
29544
|
const _hoisted_3$5 = { class: "llm-service-panel__empty-text" };
|
|
29344
|
-
const
|
|
29545
|
+
const _hoisted_4$4 = { class: "llm-service-panel__reading-status" };
|
|
29546
|
+
const _hoisted_5$4 = { class: "llm-service-panel__reading-actions" };
|
|
29547
|
+
const _sfc_main$6 = /* @__PURE__ */ defineComponent({
|
|
29345
29548
|
__name: "LLMServicePanel",
|
|
29346
29549
|
props: {
|
|
29347
29550
|
service: { type: Object },
|
|
@@ -29353,6 +29556,8 @@ section.turn:has([data-state="open"]) {
|
|
|
29353
29556
|
const emit2 = __emit;
|
|
29354
29557
|
const core = useCore();
|
|
29355
29558
|
const { t: t2 } = useI18n();
|
|
29559
|
+
const { isMobile } = useIsMobile();
|
|
29560
|
+
const isReadOnly = computed(() => isMobile.value);
|
|
29356
29561
|
function toggleSplit() {
|
|
29357
29562
|
emit2("update:split", !props.split);
|
|
29358
29563
|
}
|
|
@@ -29419,62 +29624,7 @@ section.turn:has([data-state="open"]) {
|
|
|
29419
29624
|
status: articleStatus.value,
|
|
29420
29625
|
progress: progress.value,
|
|
29421
29626
|
onRetry: onRegenerate
|
|
29422
|
-
}, {
|
|
29423
|
-
"toolbar-left": withCtx(() => [
|
|
29424
|
-
createVNode(unref(Button), {
|
|
29425
|
-
variant: "primary",
|
|
29426
|
-
icon: "save",
|
|
29427
|
-
disabled: !dirty.value || busy.value,
|
|
29428
|
-
"aria-label": unref(t2)("llmService.save"),
|
|
29429
|
-
title: unref(t2)("llmService.save"),
|
|
29430
|
-
onClick: onSave
|
|
29431
|
-
}, null, 8, ["disabled", "aria-label", "title"]),
|
|
29432
|
-
createVNode(unref(Button), {
|
|
29433
|
-
variant: "secondary",
|
|
29434
|
-
icon: "refresh-cw",
|
|
29435
|
-
loading: articleStatus.value === "processing",
|
|
29436
|
-
disabled: isUpdated.value || busy.value || articleStatus.value === "processing",
|
|
29437
|
-
"aria-label": unref(t2)("llmService.regenerate"),
|
|
29438
|
-
title: unref(t2)("llmService.regenerate"),
|
|
29439
|
-
onClick: onRegenerate
|
|
29440
|
-
}, null, 8, ["loading", "disabled", "aria-label", "title"])
|
|
29441
|
-
]),
|
|
29442
|
-
"toolbar-center": withCtx(() => [
|
|
29443
|
-
createBaseVNode("span", {
|
|
29444
|
-
class: normalizeClass(["llm-service-panel__status", [
|
|
29445
|
-
isUpdated.value ? "llm-service-panel__status--ok" : "llm-service-panel__status--warn"
|
|
29446
|
-
]])
|
|
29447
|
-
}, [
|
|
29448
|
-
createVNode(unref(EditorIcon), {
|
|
29449
|
-
name: isUpdated.value ? "check" : "warning",
|
|
29450
|
-
size: 14
|
|
29451
|
-
}, null, 8, ["name"]),
|
|
29452
|
-
createBaseVNode("span", null, toDisplayString(isUpdated.value ? unref(t2)("llmService.statusUpdated") : unref(t2)("llmService.statusOutdated")), 1)
|
|
29453
|
-
], 2)
|
|
29454
|
-
]),
|
|
29455
|
-
"toolbar-right": withCtx(() => [
|
|
29456
|
-
createVNode(unref(Button), {
|
|
29457
|
-
variant: "primary",
|
|
29458
|
-
icon: "download",
|
|
29459
|
-
disabled: articleStatus.value === "processing" || !hasContent.value,
|
|
29460
|
-
"aria-label": unref(t2)("llmService.download"),
|
|
29461
|
-
title: unref(t2)("llmService.download"),
|
|
29462
|
-
onClick: onExport
|
|
29463
|
-
}, {
|
|
29464
|
-
default: withCtx(() => [
|
|
29465
|
-
createTextVNode(toDisplayString(unref(t2)("llmService.download")), 1)
|
|
29466
|
-
]),
|
|
29467
|
-
_: 1
|
|
29468
|
-
}, 8, ["disabled", "aria-label", "title"]),
|
|
29469
|
-
createVNode(unref(Button), {
|
|
29470
|
-
variant: __props.split ? "primary" : "secondary",
|
|
29471
|
-
icon: "panel-right",
|
|
29472
|
-
"aria-pressed": !!__props.split,
|
|
29473
|
-
"aria-label": unref(t2)("llmService.split"),
|
|
29474
|
-
title: unref(t2)("llmService.split"),
|
|
29475
|
-
onClick: toggleSplit
|
|
29476
|
-
}, null, 8, ["variant", "aria-pressed", "aria-label", "title"])
|
|
29477
|
-
]),
|
|
29627
|
+
}, createSlots({
|
|
29478
29628
|
default: withCtx(() => [
|
|
29479
29629
|
isEmpty.value ? (openBlock(), createElementBlock("div", _hoisted_2$5, [
|
|
29480
29630
|
createBaseVNode("p", _hoisted_3$5, toDisplayString(unref(t2)("llmService.empty")), 1),
|
|
@@ -29489,21 +29639,108 @@ section.turn:has([data-state="open"]) {
|
|
|
29489
29639
|
]),
|
|
29490
29640
|
_: 1
|
|
29491
29641
|
}, 8, ["disabled"])
|
|
29492
|
-
])) : (openBlock(), createBlock(unref(MarkdownEditor), {
|
|
29642
|
+
])) : !isReadOnly.value ? (openBlock(), createBlock(unref(MarkdownEditor), {
|
|
29493
29643
|
key: 1,
|
|
29494
29644
|
modelValue: draft.value,
|
|
29495
29645
|
"onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => draft.value = $event),
|
|
29496
29646
|
disabled: busy.value
|
|
29497
|
-
}, null, 8, ["modelValue", "disabled"]))
|
|
29647
|
+
}, null, 8, ["modelValue", "disabled"])) : (openBlock(), createElementBlock(Fragment, { key: 2 }, [
|
|
29648
|
+
createBaseVNode("div", _hoisted_4$4, [
|
|
29649
|
+
createVNode(LLMServiceStatus, { "is-updated": isUpdated.value }, null, 8, ["is-updated"]),
|
|
29650
|
+
createBaseVNode("div", _hoisted_5$4, [
|
|
29651
|
+
!isUpdated.value ? (openBlock(), createBlock(unref(Button), {
|
|
29652
|
+
key: 0,
|
|
29653
|
+
variant: "secondary",
|
|
29654
|
+
icon: "refresh-cw",
|
|
29655
|
+
disabled: busy.value,
|
|
29656
|
+
onClick: onRegenerate
|
|
29657
|
+
}, {
|
|
29658
|
+
default: withCtx(() => [
|
|
29659
|
+
createTextVNode(toDisplayString(unref(t2)("llmService.regenerate")), 1)
|
|
29660
|
+
]),
|
|
29661
|
+
_: 1
|
|
29662
|
+
}, 8, ["disabled"])) : createCommentVNode("", true),
|
|
29663
|
+
createVNode(unref(Button), {
|
|
29664
|
+
variant: "primary",
|
|
29665
|
+
icon: "download",
|
|
29666
|
+
"aria-label": unref(t2)("llmService.download"),
|
|
29667
|
+
title: unref(t2)("llmService.download"),
|
|
29668
|
+
onClick: onExport
|
|
29669
|
+
}, null, 8, ["aria-label", "title"])
|
|
29670
|
+
])
|
|
29671
|
+
]),
|
|
29672
|
+
createVNode(unref(MarkdownView), {
|
|
29673
|
+
class: "llm-service-panel__reading",
|
|
29674
|
+
source: draft.value
|
|
29675
|
+
}, null, 8, ["source"])
|
|
29676
|
+
], 64))
|
|
29498
29677
|
]),
|
|
29499
|
-
_:
|
|
29500
|
-
},
|
|
29678
|
+
_: 2
|
|
29679
|
+
}, [
|
|
29680
|
+
!isReadOnly.value ? {
|
|
29681
|
+
name: "toolbar-left",
|
|
29682
|
+
fn: withCtx(() => [
|
|
29683
|
+
createVNode(unref(Button), {
|
|
29684
|
+
variant: "primary",
|
|
29685
|
+
icon: "save",
|
|
29686
|
+
disabled: !dirty.value || busy.value,
|
|
29687
|
+
"aria-label": unref(t2)("llmService.save"),
|
|
29688
|
+
title: unref(t2)("llmService.save"),
|
|
29689
|
+
onClick: onSave
|
|
29690
|
+
}, null, 8, ["disabled", "aria-label", "title"]),
|
|
29691
|
+
createVNode(unref(Button), {
|
|
29692
|
+
variant: "secondary",
|
|
29693
|
+
icon: "refresh-cw",
|
|
29694
|
+
loading: articleStatus.value === "processing",
|
|
29695
|
+
disabled: isUpdated.value || busy.value || articleStatus.value === "processing",
|
|
29696
|
+
"aria-label": unref(t2)("llmService.regenerate"),
|
|
29697
|
+
title: unref(t2)("llmService.regenerate"),
|
|
29698
|
+
onClick: onRegenerate
|
|
29699
|
+
}, null, 8, ["loading", "disabled", "aria-label", "title"])
|
|
29700
|
+
]),
|
|
29701
|
+
key: "0"
|
|
29702
|
+
} : void 0,
|
|
29703
|
+
!isReadOnly.value ? {
|
|
29704
|
+
name: "toolbar-center",
|
|
29705
|
+
fn: withCtx(() => [
|
|
29706
|
+
createVNode(LLMServiceStatus, { "is-updated": isUpdated.value }, null, 8, ["is-updated"])
|
|
29707
|
+
]),
|
|
29708
|
+
key: "1"
|
|
29709
|
+
} : void 0,
|
|
29710
|
+
!isReadOnly.value ? {
|
|
29711
|
+
name: "toolbar-right",
|
|
29712
|
+
fn: withCtx(() => [
|
|
29713
|
+
createVNode(unref(Button), {
|
|
29714
|
+
variant: "primary",
|
|
29715
|
+
icon: "download",
|
|
29716
|
+
disabled: articleStatus.value === "processing" || !hasContent.value,
|
|
29717
|
+
"aria-label": unref(t2)("llmService.download"),
|
|
29718
|
+
title: unref(t2)("llmService.download"),
|
|
29719
|
+
onClick: onExport
|
|
29720
|
+
}, {
|
|
29721
|
+
default: withCtx(() => [
|
|
29722
|
+
createTextVNode(toDisplayString(unref(t2)("llmService.download")), 1)
|
|
29723
|
+
]),
|
|
29724
|
+
_: 1
|
|
29725
|
+
}, 8, ["disabled", "aria-label", "title"]),
|
|
29726
|
+
createVNode(unref(Button), {
|
|
29727
|
+
variant: __props.split ? "primary" : "secondary",
|
|
29728
|
+
icon: "panel-right",
|
|
29729
|
+
"aria-pressed": !!__props.split,
|
|
29730
|
+
"aria-label": unref(t2)("llmService.split"),
|
|
29731
|
+
title: unref(t2)("llmService.split"),
|
|
29732
|
+
onClick: toggleSplit
|
|
29733
|
+
}, null, 8, ["variant", "aria-pressed", "aria-label", "title"])
|
|
29734
|
+
]),
|
|
29735
|
+
key: "2"
|
|
29736
|
+
} : void 0
|
|
29737
|
+
]), 1032, ["status", "progress"])
|
|
29501
29738
|
]);
|
|
29502
29739
|
};
|
|
29503
29740
|
}
|
|
29504
29741
|
});
|
|
29505
|
-
const _style_0$5 = "\n.llm-service-panel[data-v-
|
|
29506
|
-
const LLMServicePanel = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
29742
|
+
const _style_0$5 = "\n.llm-service-panel[data-v-2d38dcc6] {\n display: flex;\n flex-direction: column;\n min-width: 0;\n min-height: 0;\n overflow-y: auto;\n overflow-x: hidden;\n}\n.llm-service-panel__reading-status[data-v-2d38dcc6] {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n border-bottom: 1px solid var(--color-border);\n}\n.llm-service-panel__reading-actions[data-v-2d38dcc6] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n margin-left: auto;\n}\n.llm-service-panel__reading[data-v-2d38dcc6] {\n padding: var(--spacing-xl) var(--spacing-lg);\n}\n.llm-service-panel__empty[data-v-2d38dcc6] {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: var(--spacing-md);\n padding: var(--spacing-xl) var(--spacing-md);\n text-align: center;\n}\n.llm-service-panel__empty-text[data-v-2d38dcc6] {\n margin: 0;\n max-width: 400px;\n font-size: var(--font-size-sm);\n color: var(--color-text-secondary);\n}\n";
|
|
29743
|
+
const LLMServicePanel = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["styles", [_style_0$5]], ["__scopeId", "data-v-2d38dcc6"]]);
|
|
29507
29744
|
function createService(init) {
|
|
29508
29745
|
return {
|
|
29509
29746
|
id: init.id,
|
|
@@ -29704,7 +29941,7 @@ section.turn:has([data-state="open"]) {
|
|
|
29704
29941
|
class: "chat-session-confirm"
|
|
29705
29942
|
};
|
|
29706
29943
|
const _hoisted_6$3 = { class: "chat-session-confirm__text" };
|
|
29707
|
-
const _sfc_main$
|
|
29944
|
+
const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
29708
29945
|
__name: "ChatSessionList",
|
|
29709
29946
|
props: {
|
|
29710
29947
|
sessions: { type: Array },
|
|
@@ -29836,7 +30073,48 @@ section.turn:has([data-state="open"]) {
|
|
|
29836
30073
|
}
|
|
29837
30074
|
});
|
|
29838
30075
|
const _style_0$4 = "\n.chat-session-list[data-v-c13478f0] {\n width: var(--chat-session-list-width, 200px);\n flex-shrink: 0;\n display: flex;\n flex-direction: column;\n border-right: 1px solid var(--color-border);\n background-color: var(--color-surface-hover);\n transition: width 0.2s ease;\n}\n@media (prefers-reduced-motion: reduce) {\n.chat-session-list[data-v-c13478f0] {\n transition: none;\n}\n}\n.chat-session-list__header[data-v-c13478f0] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: var(--spacing-sm) var(--spacing-md);\n}\n.chat-session-list__title[data-v-c13478f0] {\n margin: 0;\n font-size: var(--font-size-xs);\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.05em;\n color: var(--color-text-muted);\n}\n.chat-session-list__items[data-v-c13478f0] {\n flex: 1;\n margin: 0;\n padding: 0;\n list-style: none;\n overflow-y: auto;\n}\n\n/* Delete confirmation row */\n.chat-session-confirm[data-v-c13478f0] {\n display: flex;\n align-items: center;\n gap: 2px;\n padding: var(--spacing-xs) var(--spacing-sm);\n}\n.chat-session-confirm__text[data-v-c13478f0] {\n flex: 1;\n min-width: 0;\n font-size: var(--font-size-xs);\n color: var(--color-danger);\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n}\n";
|
|
29839
|
-
const ChatSessionList = /* @__PURE__ */ _export_sfc(_sfc_main$
|
|
30076
|
+
const ChatSessionList = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["styles", [_style_0$4]], ["__scopeId", "data-v-c13478f0"]]);
|
|
30077
|
+
function computeSessionOptions(sessions, activeSessionId, newSessionLabel) {
|
|
30078
|
+
const options = sessions.map((session) => ({
|
|
30079
|
+
value: session.id,
|
|
30080
|
+
label: session.title || newSessionLabel
|
|
30081
|
+
}));
|
|
30082
|
+
const isActiveListed = sessions.some((s2) => s2.id === activeSessionId);
|
|
30083
|
+
if (isActiveListed) return options;
|
|
30084
|
+
return [{ value: activeSessionId ?? "", label: newSessionLabel }, ...options];
|
|
30085
|
+
}
|
|
30086
|
+
const _sfc_main$4 = /* @__PURE__ */ defineComponent({
|
|
30087
|
+
__name: "ChatSessionSelect",
|
|
30088
|
+
props: {
|
|
30089
|
+
sessions: { type: Array },
|
|
30090
|
+
activeSessionId: { type: [String, null] }
|
|
30091
|
+
},
|
|
30092
|
+
emits: ["select"],
|
|
30093
|
+
setup(__props, { emit: __emit }) {
|
|
30094
|
+
const props = __props;
|
|
30095
|
+
const emit2 = __emit;
|
|
30096
|
+
const { t: t2 } = useI18n();
|
|
30097
|
+
const options = computed(
|
|
30098
|
+
() => computeSessionOptions(props.sessions, props.activeSessionId, t2("chat.newChat"))
|
|
30099
|
+
);
|
|
30100
|
+
const field = computed(() => ({
|
|
30101
|
+
customParams: { "aria-label": t2("chat.history") }
|
|
30102
|
+
}));
|
|
30103
|
+
function onChange(sessionId) {
|
|
30104
|
+
if (sessionId && sessionId !== props.activeSessionId) emit2("select", sessionId);
|
|
30105
|
+
}
|
|
30106
|
+
return (_ctx, _cache) => {
|
|
30107
|
+
return openBlock(), createBlock(unref(FormInput), {
|
|
30108
|
+
select: "",
|
|
30109
|
+
"full-width": "",
|
|
30110
|
+
field: field.value,
|
|
30111
|
+
options: options.value,
|
|
30112
|
+
"model-value": __props.activeSessionId ?? "",
|
|
30113
|
+
"onUpdate:modelValue": onChange
|
|
30114
|
+
}, null, 8, ["field", "options", "model-value"]);
|
|
30115
|
+
};
|
|
30116
|
+
}
|
|
30117
|
+
});
|
|
29840
30118
|
const _hoisted_1$3 = {
|
|
29841
30119
|
key: 0,
|
|
29842
30120
|
class: "chat-message chat-message--user"
|
|
@@ -30019,6 +30297,7 @@ section.turn:has([data-state="open"]) {
|
|
|
30019
30297
|
class: "chat-composer__textarea",
|
|
30020
30298
|
placeholder: unref(t2)("chat.placeholder"),
|
|
30021
30299
|
disabled: __props.disabled,
|
|
30300
|
+
enterkeyhint: "send",
|
|
30022
30301
|
rows: "2",
|
|
30023
30302
|
ref: "chat-composer__textarea",
|
|
30024
30303
|
onKeydown
|
|
@@ -30037,8 +30316,8 @@ section.turn:has([data-state="open"]) {
|
|
|
30037
30316
|
};
|
|
30038
30317
|
}
|
|
30039
30318
|
});
|
|
30040
|
-
const _style_0$1 = "\n.chat-composer[data-v-
|
|
30041
|
-
const ChatComposer = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["styles", [_style_0$1]], ["__scopeId", "data-v-
|
|
30319
|
+
const _style_0$1 = "\n.chat-composer[data-v-037fb976] {\n display: flex;\n align-items: flex-end;\n gap: var(--spacing-sm);\n padding: var(--spacing-md);\n border-top: 1px solid var(--color-border);\n flex-shrink: 0;\n /* Match the message column width when the panel is expanded. */\n width: 100%;\n max-width: var(--chat-content-max-width, 760px);\n margin-inline: auto;\n}\n.chat-composer__textarea[data-v-037fb976] {\n flex: 1;\n resize: none;\n border: 1px solid var(--color-border);\n border-radius: var(--radius-md);\n padding: var(--spacing-sm) var(--spacing-md);\n font-family: inherit;\n font-size: var(--font-size-sm);\n line-height: var(--line-height);\n color: var(--color-text-primary);\n background-color: var(--color-surface);\n outline: none;\n}\n.chat-composer__textarea[data-v-037fb976]:focus {\n border-color: var(--color-primary);\n}\n.chat-composer__textarea[data-v-037fb976]:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n";
|
|
30320
|
+
const ChatComposer = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["styles", [_style_0$1]], ["__scopeId", "data-v-037fb976"]]);
|
|
30042
30321
|
const _hoisted_1 = ["aria-labelledby"];
|
|
30043
30322
|
const _hoisted_2 = { class: "chat-drawer__header" };
|
|
30044
30323
|
const _hoisted_3 = ["id"];
|
|
@@ -30050,6 +30329,7 @@ section.turn:has([data-state="open"]) {
|
|
|
30050
30329
|
setup(__props) {
|
|
30051
30330
|
const core = useCore();
|
|
30052
30331
|
const { t: t2 } = useI18n();
|
|
30332
|
+
const { isMobile } = useIsMobile();
|
|
30053
30333
|
const chat = core.chat;
|
|
30054
30334
|
const titleId = useId$1();
|
|
30055
30335
|
const expanded = /* @__PURE__ */ ref(false);
|
|
@@ -30099,7 +30379,7 @@ section.turn:has([data-state="open"]) {
|
|
|
30099
30379
|
onClick: withModifiers(close, ["self"])
|
|
30100
30380
|
}, [
|
|
30101
30381
|
createBaseVNode("aside", {
|
|
30102
|
-
class: normalizeClass(["chat-drawer", { "chat-drawer--expanded": expanded.value }]),
|
|
30382
|
+
class: normalizeClass(["chat-drawer", { "chat-drawer--expanded": expanded.value && !unref(isMobile) }]),
|
|
30103
30383
|
role: "dialog",
|
|
30104
30384
|
"aria-modal": "true",
|
|
30105
30385
|
"aria-labelledby": unref(titleId)
|
|
@@ -30107,23 +30387,37 @@ section.turn:has([data-state="open"]) {
|
|
|
30107
30387
|
createBaseVNode("header", _hoisted_2, [
|
|
30108
30388
|
createBaseVNode("h2", {
|
|
30109
30389
|
id: unref(titleId),
|
|
30110
|
-
class: "chat-drawer__title"
|
|
30390
|
+
class: normalizeClass(["chat-drawer__title", { "transcript-ui-sr-only": unref(isMobile) }])
|
|
30111
30391
|
}, [
|
|
30112
30392
|
createVNode(unref(EditorIcon), {
|
|
30113
30393
|
name: "sparkles",
|
|
30114
30394
|
size: 18
|
|
30115
30395
|
}),
|
|
30116
30396
|
createTextVNode(" " + toDisplayString(unref(t2)("chat.title")), 1)
|
|
30117
|
-
],
|
|
30397
|
+
], 10, _hoisted_3),
|
|
30398
|
+
unref(isMobile) ? (openBlock(), createBlock(_sfc_main$4, {
|
|
30399
|
+
key: 0,
|
|
30400
|
+
class: "chat-drawer__session-select",
|
|
30401
|
+
sessions: unref(chat).sessions.value,
|
|
30402
|
+
"active-session-id": unref(chat).activeSessionId.value,
|
|
30403
|
+
onSelect
|
|
30404
|
+
}, null, 8, ["sessions", "active-session-id"])) : createCommentVNode("", true),
|
|
30118
30405
|
createBaseVNode("div", _hoisted_4, [
|
|
30119
|
-
|
|
30120
|
-
|
|
30406
|
+
unref(isMobile) ? (openBlock(), createBlock(unref(Button), {
|
|
30407
|
+
key: 0,
|
|
30408
|
+
icon: "plus",
|
|
30409
|
+
variant: "tertiary",
|
|
30410
|
+
size: "sm",
|
|
30411
|
+
"aria-label": unref(t2)("chat.newChat"),
|
|
30412
|
+
onClick: onCreate
|
|
30413
|
+
}, null, 8, ["aria-label"])) : (openBlock(), createBlock(unref(Button), {
|
|
30414
|
+
key: 1,
|
|
30121
30415
|
icon: expanded.value ? "minimize" : "maximize",
|
|
30122
30416
|
variant: "tertiary",
|
|
30123
30417
|
size: "sm",
|
|
30124
30418
|
"aria-label": expanded.value ? unref(t2)("chat.collapse") : unref(t2)("chat.expand"),
|
|
30125
30419
|
onClick: toggleExpanded
|
|
30126
|
-
}, null, 8, ["icon", "aria-label"]),
|
|
30420
|
+
}, null, 8, ["icon", "aria-label"])),
|
|
30127
30421
|
createVNode(unref(Button), {
|
|
30128
30422
|
icon: "x",
|
|
30129
30423
|
variant: "tertiary",
|
|
@@ -30134,14 +30428,15 @@ section.turn:has([data-state="open"]) {
|
|
|
30134
30428
|
])
|
|
30135
30429
|
]),
|
|
30136
30430
|
createBaseVNode("div", _hoisted_5, [
|
|
30137
|
-
|
|
30431
|
+
!unref(isMobile) ? (openBlock(), createBlock(ChatSessionList, {
|
|
30432
|
+
key: 0,
|
|
30138
30433
|
sessions: unref(chat).sessions.value,
|
|
30139
30434
|
"active-session-id": unref(chat).activeSessionId.value,
|
|
30140
30435
|
onSelect,
|
|
30141
30436
|
onCreate,
|
|
30142
30437
|
onRename,
|
|
30143
30438
|
onDelete
|
|
30144
|
-
}, null, 8, ["sessions", "active-session-id"]),
|
|
30439
|
+
}, null, 8, ["sessions", "active-session-id"])) : createCommentVNode("", true),
|
|
30145
30440
|
createBaseVNode("div", _hoisted_6, [
|
|
30146
30441
|
createVNode(ChatMessageList, {
|
|
30147
30442
|
messages: unref(chat).allMessages.value,
|
|
@@ -30162,8 +30457,8 @@ section.turn:has([data-state="open"]) {
|
|
|
30162
30457
|
};
|
|
30163
30458
|
}
|
|
30164
30459
|
});
|
|
30165
|
-
const _style_0 = "\n.chat-overlay[data-v-
|
|
30166
|
-
const ChatDrawer = /* @__PURE__ */ _export_sfc(_sfc_main, [["styles", [_style_0]], ["__scopeId", "data-v-
|
|
30460
|
+
const _style_0 = "\n.chat-overlay[data-v-25f4e0cf] {\n position: fixed;\n inset: 0;\n z-index: var(--z-drawer);\n background-color: rgba(0, 0, 0, 0.4);\n display: flex;\n justify-content: flex-end;\n}\n.chat-drawer[data-v-25f4e0cf] {\n /* Centered reading column for messages + composer; cascades to the child\n components through the DOM regardless of scoped styles. */\n --chat-content-max-width: 760px;\n --chat-session-list-width: 200px;\n width: min(620px, 100vw);\n height: 100%;\n display: flex;\n flex-direction: column;\n background-color: var(--color-surface);\n box-shadow: var(--shadow-md);\n transition: width 0.2s ease;\n}\n\n/* Near-full-width: keeps a backdrop strip on the left so click-outside still\n closes the panel. */\n.chat-drawer--expanded[data-v-25f4e0cf] {\n width: min(1400px, 96vw);\n --chat-session-list-width: 300px;\n}\n.chat-drawer__header[data-v-25f4e0cf] {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: var(--spacing-sm);\n padding: var(--spacing-sm) var(--spacing-md);\n min-height: var(--header-height);\n border-bottom: 1px solid var(--color-border);\n flex-shrink: 0;\n}\n.chat-drawer__title[data-v-25f4e0cf] {\n margin: 0;\n display: inline-flex;\n align-items: center;\n gap: var(--spacing-sm);\n font-size: var(--font-size-base);\n font-weight: 600;\n color: var(--color-text-primary);\n}\n.chat-drawer__title[data-v-25f4e0cf] .editor-icon {\n color: var(--color-primary);\n}\n.chat-drawer__session-select[data-v-25f4e0cf] {\n flex: 1;\n min-width: 0;\n}\n.chat-drawer__actions[data-v-25f4e0cf] {\n display: flex;\n align-items: center;\n gap: var(--spacing-xs);\n}\n.chat-drawer__body[data-v-25f4e0cf] {\n flex: 1;\n min-height: 0;\n display: flex;\n}\n.chat-drawer__main[data-v-25f4e0cf] {\n flex: 1;\n min-width: 0;\n display: flex;\n flex-direction: column;\n}\n\n/* ── Slide + fade transition ── */\n.chat-drawer-enter-active[data-v-25f4e0cf],\n.chat-drawer-leave-active[data-v-25f4e0cf] {\n transition: opacity 0.2s ease;\n}\n.chat-drawer-enter-active .chat-drawer[data-v-25f4e0cf],\n.chat-drawer-leave-active .chat-drawer[data-v-25f4e0cf] {\n transition: transform 0.25s ease;\n}\n.chat-drawer-enter-from[data-v-25f4e0cf],\n.chat-drawer-leave-to[data-v-25f4e0cf] {\n opacity: 0;\n}\n.chat-drawer-enter-from .chat-drawer[data-v-25f4e0cf],\n.chat-drawer-leave-to .chat-drawer[data-v-25f4e0cf] {\n transform: translateX(100%);\n}\n@media (prefers-reduced-motion: reduce) {\n.chat-drawer[data-v-25f4e0cf],\n .chat-drawer-enter-active[data-v-25f4e0cf],\n .chat-drawer-leave-active[data-v-25f4e0cf],\n .chat-drawer-enter-active .chat-drawer[data-v-25f4e0cf],\n .chat-drawer-leave-active .chat-drawer[data-v-25f4e0cf] {\n transition: none;\n}\n}\n";
|
|
30461
|
+
const ChatDrawer = /* @__PURE__ */ _export_sfc(_sfc_main, [["styles", [_style_0]], ["__scopeId", "data-v-25f4e0cf"]]);
|
|
30167
30462
|
const STREAMING_MESSAGE_ID = "__streaming__";
|
|
30168
30463
|
function createChatPlugin() {
|
|
30169
30464
|
return {
|
|
@@ -31006,11 +31301,11 @@ section.turn:has([data-state="open"]) {
|
|
|
31006
31301
|
}
|
|
31007
31302
|
var patterns = grammar[token];
|
|
31008
31303
|
patterns = Array.isArray(patterns) ? patterns : [patterns];
|
|
31009
|
-
for (var
|
|
31010
|
-
if (rematch && rematch.cause == token + "," +
|
|
31304
|
+
for (var j = 0; j < patterns.length; ++j) {
|
|
31305
|
+
if (rematch && rematch.cause == token + "," + j) {
|
|
31011
31306
|
return;
|
|
31012
31307
|
}
|
|
31013
|
-
var patternObj = patterns[
|
|
31308
|
+
var patternObj = patterns[j];
|
|
31014
31309
|
var inside = patternObj.inside;
|
|
31015
31310
|
var lookbehind = !!patternObj.lookbehind;
|
|
31016
31311
|
var greedy = !!patternObj.greedy;
|
|
@@ -31051,9 +31346,9 @@ section.turn:has([data-state="open"]) {
|
|
|
31051
31346
|
if (currentNode.value instanceof Token) {
|
|
31052
31347
|
continue;
|
|
31053
31348
|
}
|
|
31054
|
-
for (var
|
|
31349
|
+
for (var k = currentNode; k !== tokenList.tail && (p2 < to || typeof k.value === "string"); k = k.next) {
|
|
31055
31350
|
removeCount++;
|
|
31056
|
-
p2 +=
|
|
31351
|
+
p2 += k.value.length;
|
|
31057
31352
|
}
|
|
31058
31353
|
removeCount--;
|
|
31059
31354
|
str = text2.slice(pos, p2);
|
|
@@ -31085,7 +31380,7 @@ section.turn:has([data-state="open"]) {
|
|
|
31085
31380
|
}
|
|
31086
31381
|
if (removeCount > 1) {
|
|
31087
31382
|
var nestedRematch = {
|
|
31088
|
-
cause: token + "," +
|
|
31383
|
+
cause: token + "," + j,
|
|
31089
31384
|
reach
|
|
31090
31385
|
};
|
|
31091
31386
|
matchGrammar(text2, tokenList, grammar, currentNode.prev, pos, nestedRematch);
|