@i14ks/ccv 0.17.0 → 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundle/ccv.mjs +242 -1
- package/package.json +1 -1
- package/web/assets/{codemirror-DcwBBoHv.js → codemirror-lu8HamKP.js} +1 -1
- package/web/assets/{index-CLScHnZN.js → index-3sshvreD.js} +1 -1
- package/web/assets/{index-B9bs4QFR.js → index-B7ozEwgu.js} +1 -1
- package/web/assets/{index-CQ0-WYgR.js → index-BJqZWIPR.js} +1 -1
- package/web/assets/{index-DB25Lbd8.js → index-BUWJHuYf.js} +1 -1
- package/web/assets/{index-D9qvIR3L.js → index-BfxQTveJ.js} +1 -1
- package/web/assets/{index-Bee9erGK.js → index-BuyfXyo4.js} +1 -1
- package/web/assets/{index-Cu4PsUGS.js → index-C13Jucn1.js} +1 -1
- package/web/assets/{index-RifJd-I8.js → index-C4wYlk_J.js} +30 -30
- package/web/assets/{index-TIzoSl17.js → index-Cc7JijiI.js} +1 -1
- package/web/assets/{index-CjxzVwrV.js → index-CcKtEXQw.js} +1 -1
- package/web/assets/{index-VZG_Pg4O.js → index-CqZsTMCh.js} +1 -1
- package/web/assets/{index-B0Ss0xRi.js → index-D37eFo7a.js} +1 -1
- package/web/assets/{index-BpL4NCNb.js → index-D5k_lqHb.js} +1 -1
- package/web/assets/{index-DzgVil07.js → index-D9R4w6Zg.js} +1 -1
- package/web/assets/{index--smhGK8Y.js → index-DIGg_HG2.js} +1 -1
- package/web/assets/{index-CO3xirid.js → index-DNoT5Ala.js} +1 -1
- package/web/assets/{index-BrAmkvn2.js → index-Dj1v9Gkj.js} +1 -1
- package/web/assets/{index-D51RIwGp.js → index-DmaRIPd6.js} +1 -1
- package/web/assets/{index-CnCCNUTy.js → index-Drc8TpEz.js} +1 -1
- package/web/assets/{index-DwamecDE.js → index-Dvlp7Iqq.js} +1 -1
- package/web/index.html +1 -1
package/bundle/ccv.mjs
CHANGED
|
@@ -158,7 +158,68 @@ function isClientFrame(value) {
|
|
|
158
158
|
return typeof value === "object" && value !== null && typeof value.type === "string";
|
|
159
159
|
}
|
|
160
160
|
function workspaceIdFromPath(absolutePath) {
|
|
161
|
-
|
|
161
|
+
const slug = absolutePath.replace(/[^\p{L}\p{N}\p{M}]/gu, "-").replace(/-+/g, "-").toLowerCase().replace(/^-|-$/g, "");
|
|
162
|
+
return `${slug || "project"}-${pathHash(absolutePath)}`;
|
|
163
|
+
}
|
|
164
|
+
function formerWorkspaceIdsFromPath(absolutePath) {
|
|
165
|
+
const plain = absolutePath.replace(/[^a-zA-Z0-9]/g, "-").replace(/-+/g, "-").toLowerCase();
|
|
166
|
+
const hashed = `${plain.replace(/^-+|-+$/g, "") || "project"}-${pathHash(absolutePath)}`;
|
|
167
|
+
const current = workspaceIdFromPath(absolutePath);
|
|
168
|
+
return [plain, hashed].filter((id) => id !== current);
|
|
169
|
+
}
|
|
170
|
+
function pathHash(absolutePath) {
|
|
171
|
+
const windows = /^[a-zA-Z]:[\\/]|^\\\\/.test(absolutePath);
|
|
172
|
+
return hashText(windows ? absolutePath.toLowerCase() : absolutePath);
|
|
173
|
+
}
|
|
174
|
+
function hashText(text) {
|
|
175
|
+
let h1 = 3735928559;
|
|
176
|
+
let h2 = 1103547991;
|
|
177
|
+
for (let i = 0; i < text.length; i++) {
|
|
178
|
+
const code = text.charCodeAt(i);
|
|
179
|
+
h1 = Math.imul(h1 ^ code, 2654435761);
|
|
180
|
+
h2 = Math.imul(h2 ^ code, 1597334677);
|
|
181
|
+
}
|
|
182
|
+
h1 = Math.imul(h1 ^ h1 >>> 16, 2246822507) ^ Math.imul(h2 ^ h2 >>> 13, 3266489909);
|
|
183
|
+
h2 = Math.imul(h2 ^ h2 >>> 16, 2246822507) ^ Math.imul(h1 ^ h1 >>> 13, 3266489909);
|
|
184
|
+
return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
// ../host/dist/workspace-ids.js
|
|
188
|
+
function workspaceIdRemap(paths, sessionsOf) {
|
|
189
|
+
const byLegacy = /* @__PURE__ */ new Map();
|
|
190
|
+
for (const path25 of paths) {
|
|
191
|
+
const id = workspaceIdFromPath(path25);
|
|
192
|
+
for (const legacy of formerWorkspaceIdsFromPath(path25)) {
|
|
193
|
+
const group = byLegacy.get(legacy) ?? [];
|
|
194
|
+
if (!group.some((target) => target.id === id))
|
|
195
|
+
group.push({ id, path: path25 });
|
|
196
|
+
byLegacy.set(legacy, group);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
const owners = /* @__PURE__ */ new Map();
|
|
200
|
+
return {
|
|
201
|
+
targets: (id) => (byLegacy.get(id) ?? []).map((target) => target.id),
|
|
202
|
+
owner: async (id, sessionId) => {
|
|
203
|
+
const group = byLegacy.get(id);
|
|
204
|
+
if (!group)
|
|
205
|
+
return void 0;
|
|
206
|
+
if (group.length === 1)
|
|
207
|
+
return group[0].id;
|
|
208
|
+
let lookup = owners.get(id);
|
|
209
|
+
if (!lookup) {
|
|
210
|
+
lookup = (async () => {
|
|
211
|
+
const found = /* @__PURE__ */ new Map();
|
|
212
|
+
for (const target of group) {
|
|
213
|
+
for (const session of await sessionsOf(target.path))
|
|
214
|
+
found.set(session, target.id);
|
|
215
|
+
}
|
|
216
|
+
return found;
|
|
217
|
+
})();
|
|
218
|
+
owners.set(id, lookup);
|
|
219
|
+
}
|
|
220
|
+
return (await lookup).get(sessionId);
|
|
221
|
+
}
|
|
222
|
+
};
|
|
162
223
|
}
|
|
163
224
|
|
|
164
225
|
// ../host/dist/session.js
|
|
@@ -3831,6 +3892,27 @@ var AntigravityStore = class {
|
|
|
3831
3892
|
await this.#load();
|
|
3832
3893
|
return [...this.#records.values()].filter((r) => r.workspaceId === workspaceId);
|
|
3833
3894
|
}
|
|
3895
|
+
/**
|
|
3896
|
+
* Перенести записи с id проекта прежнего формата на нынешний (см.
|
|
3897
|
+
* [`workspace-ids.ts`](./workspace-ids.ts)). Какому из проектов, деливших
|
|
3898
|
+
* прежний id, принадлежит сессия, здесь видно без поиска — по её `cwd`.
|
|
3899
|
+
*/
|
|
3900
|
+
async remapWorkspaceIds(remap) {
|
|
3901
|
+
await this.#load();
|
|
3902
|
+
let changed = false;
|
|
3903
|
+
for (const record of this.#records.values()) {
|
|
3904
|
+
const targets = remap.targets(record.workspaceId);
|
|
3905
|
+
const own = workspaceIdFromPath(record.cwd);
|
|
3906
|
+
const next = targets.find((target) => target === own) ?? targets[0];
|
|
3907
|
+
if (!next || next === record.workspaceId)
|
|
3908
|
+
continue;
|
|
3909
|
+
record.workspaceId = next;
|
|
3910
|
+
changed = true;
|
|
3911
|
+
}
|
|
3912
|
+
if (changed)
|
|
3913
|
+
await this.#persist();
|
|
3914
|
+
return changed;
|
|
3915
|
+
}
|
|
3834
3916
|
async save(record) {
|
|
3835
3917
|
await this.#load();
|
|
3836
3918
|
this.#records.set(record.id, { ...record });
|
|
@@ -5060,6 +5142,10 @@ var WorkspaceRegistry = class {
|
|
|
5060
5142
|
listArchived() {
|
|
5061
5143
|
return this.#entries.filter((e) => e.archivedAt).map((e) => toInfo(e));
|
|
5062
5144
|
}
|
|
5145
|
+
/** Каталоги всех проектов реестра, открытых и закрытых. */
|
|
5146
|
+
paths() {
|
|
5147
|
+
return this.#entries.map((e) => e.path);
|
|
5148
|
+
}
|
|
5063
5149
|
find(id) {
|
|
5064
5150
|
const entry = this.#entries.find((e) => workspaceIdFromPath(e.path) === id);
|
|
5065
5151
|
return entry ? toInfo(entry) : void 0;
|
|
@@ -5251,6 +5337,25 @@ var SessionArchive = class {
|
|
|
5251
5337
|
this.#restored = /* @__PURE__ */ new Map();
|
|
5252
5338
|
}
|
|
5253
5339
|
}
|
|
5340
|
+
/**
|
|
5341
|
+
* Перенести записи с id проекта прежнего формата на нынешний (см.
|
|
5342
|
+
* [`workspace-ids.ts`](./workspace-ids.ts)). Запись о сессии, которой нет ни
|
|
5343
|
+
* в одном из проектов, деливших прежний id, уходит первому из них — там её
|
|
5344
|
+
* уберёт обычное подметание.
|
|
5345
|
+
*/
|
|
5346
|
+
async remapWorkspaceIds(remap) {
|
|
5347
|
+
let changed = false;
|
|
5348
|
+
for (const [id, record] of this.#archived) {
|
|
5349
|
+
const next = await remap.owner(record.workspaceId, id) ?? remap.targets(record.workspaceId)[0];
|
|
5350
|
+
if (!next || next === record.workspaceId)
|
|
5351
|
+
continue;
|
|
5352
|
+
this.#archived.set(id, { ...record, workspaceId: next });
|
|
5353
|
+
changed = true;
|
|
5354
|
+
}
|
|
5355
|
+
if (changed)
|
|
5356
|
+
await this.#persist();
|
|
5357
|
+
return changed;
|
|
5358
|
+
}
|
|
5254
5359
|
find(sessionId) {
|
|
5255
5360
|
return this.#archived.get(sessionId);
|
|
5256
5361
|
}
|
|
@@ -5369,6 +5474,24 @@ var SessionPins = class {
|
|
|
5369
5474
|
this.#moved = /* @__PURE__ */ new Map();
|
|
5370
5475
|
}
|
|
5371
5476
|
}
|
|
5477
|
+
/**
|
|
5478
|
+
* Перенести записи с id проекта прежнего формата на нынешний — то же, что
|
|
5479
|
+
* `SessionArchive.remapWorkspaceIds`, и с той же оговоркой про сессию,
|
|
5480
|
+
* которой нет ни в одном из проектов.
|
|
5481
|
+
*/
|
|
5482
|
+
async remapWorkspaceIds(remap) {
|
|
5483
|
+
let changed = false;
|
|
5484
|
+
for (const [id, record] of this.#pinned) {
|
|
5485
|
+
const next = await remap.owner(record.workspaceId, id) ?? remap.targets(record.workspaceId)[0];
|
|
5486
|
+
if (!next || next === record.workspaceId)
|
|
5487
|
+
continue;
|
|
5488
|
+
this.#pinned.set(id, { ...record, workspaceId: next });
|
|
5489
|
+
changed = true;
|
|
5490
|
+
}
|
|
5491
|
+
if (changed)
|
|
5492
|
+
await this.#persist();
|
|
5493
|
+
return changed;
|
|
5494
|
+
}
|
|
5372
5495
|
find(sessionId) {
|
|
5373
5496
|
return this.#pinned.get(sessionId);
|
|
5374
5497
|
}
|
|
@@ -5544,6 +5667,48 @@ var ListOrderStore = class {
|
|
|
5544
5667
|
} else {
|
|
5545
5668
|
this.#order[scope] = clean ?? [];
|
|
5546
5669
|
}
|
|
5670
|
+
await this.#persist();
|
|
5671
|
+
}
|
|
5672
|
+
/**
|
|
5673
|
+
* Перенести порядок с id проектов прежнего формата на нынешние (см.
|
|
5674
|
+
* [`workspace-ids.ts`](./workspace-ids.ts)).
|
|
5675
|
+
*
|
|
5676
|
+
* Порядок сессий, записанный под id, который делили несколько проектов,
|
|
5677
|
+
* раскладывается по владельцам сессий: общий список у каждого из них
|
|
5678
|
+
* переставлял бы чужие строки, которых в его списке нет.
|
|
5679
|
+
*/
|
|
5680
|
+
async remapWorkspaceIds(remap) {
|
|
5681
|
+
let changed = false;
|
|
5682
|
+
const workspaces = dedupe(this.#order.workspaces.flatMap((id) => {
|
|
5683
|
+
const targets = remap.targets(id);
|
|
5684
|
+
return targets.length > 0 ? targets : [id];
|
|
5685
|
+
}));
|
|
5686
|
+
if (workspaces.join("\n") !== this.#order.workspaces.join("\n")) {
|
|
5687
|
+
this.#order.workspaces = workspaces;
|
|
5688
|
+
changed = true;
|
|
5689
|
+
}
|
|
5690
|
+
for (const [workspaceId, ids] of Object.entries(this.#order.sessions)) {
|
|
5691
|
+
const targets = remap.targets(workspaceId);
|
|
5692
|
+
if (targets.length === 0)
|
|
5693
|
+
continue;
|
|
5694
|
+
const split = /* @__PURE__ */ new Map();
|
|
5695
|
+
for (const id of ids) {
|
|
5696
|
+
const owner = await remap.owner(workspaceId, id);
|
|
5697
|
+
if (!owner)
|
|
5698
|
+
continue;
|
|
5699
|
+
split.set(owner, [...split.get(owner) ?? [], id]);
|
|
5700
|
+
}
|
|
5701
|
+
delete this.#order.sessions[workspaceId];
|
|
5702
|
+
for (const [owner, own] of split) {
|
|
5703
|
+
this.#order.sessions[owner] ??= own;
|
|
5704
|
+
}
|
|
5705
|
+
changed = true;
|
|
5706
|
+
}
|
|
5707
|
+
if (changed)
|
|
5708
|
+
await this.#persist();
|
|
5709
|
+
return changed;
|
|
5710
|
+
}
|
|
5711
|
+
async #persist() {
|
|
5547
5712
|
await mkdir8(path15.dirname(this.#storePath), { recursive: true });
|
|
5548
5713
|
await writeFile9(this.#storePath, JSON.stringify(this.#order, null, 2), "utf8");
|
|
5549
5714
|
}
|
|
@@ -5608,6 +5773,60 @@ var Folders = class {
|
|
|
5608
5773
|
this.#pinnedAssignments = /* @__PURE__ */ new Map();
|
|
5609
5774
|
}
|
|
5610
5775
|
}
|
|
5776
|
+
/**
|
|
5777
|
+
* Перенести папки с id проектов прежнего формата на нынешние (см.
|
|
5778
|
+
* [`workspace-ids.ts`](./workspace-ids.ts)).
|
|
5779
|
+
*
|
|
5780
|
+
* Проект в папке проектов, чей id делили несколько проектов, — это все они:
|
|
5781
|
+
* в списке они и стояли в ней вместе. Папка сессий так не делится, она
|
|
5782
|
+
* принадлежит одному проекту — тому, чьих сессий в ней больше; сессии
|
|
5783
|
+
* остальных из неё вынимаются, иначе они указывали бы на папку, которой в
|
|
5784
|
+
* их списке нет.
|
|
5785
|
+
*/
|
|
5786
|
+
async remapWorkspaceIds(remap) {
|
|
5787
|
+
let changed = false;
|
|
5788
|
+
for (const [workspaceId, folderId] of [...this.#workspaceAssignments]) {
|
|
5789
|
+
const targets = remap.targets(workspaceId);
|
|
5790
|
+
if (targets.length === 0)
|
|
5791
|
+
continue;
|
|
5792
|
+
this.#workspaceAssignments.delete(workspaceId);
|
|
5793
|
+
for (const target of targets) {
|
|
5794
|
+
if (!this.#workspaceAssignments.has(target))
|
|
5795
|
+
this.#workspaceAssignments.set(target, folderId);
|
|
5796
|
+
}
|
|
5797
|
+
changed = true;
|
|
5798
|
+
}
|
|
5799
|
+
for (const [folderId, record] of [...this.#sessionFolders]) {
|
|
5800
|
+
const targets = remap.targets(record.workspaceId);
|
|
5801
|
+
if (targets.length === 0)
|
|
5802
|
+
continue;
|
|
5803
|
+
const owners = /* @__PURE__ */ new Map();
|
|
5804
|
+
const votes = /* @__PURE__ */ new Map();
|
|
5805
|
+
for (const [sessionId, assigned] of this.#sessionAssignments) {
|
|
5806
|
+
if (assigned !== folderId)
|
|
5807
|
+
continue;
|
|
5808
|
+
const owner = await remap.owner(record.workspaceId, sessionId);
|
|
5809
|
+
if (!owner)
|
|
5810
|
+
continue;
|
|
5811
|
+
owners.set(sessionId, owner);
|
|
5812
|
+
votes.set(owner, (votes.get(owner) ?? 0) + 1);
|
|
5813
|
+
}
|
|
5814
|
+
let winner = targets[0];
|
|
5815
|
+
for (const [owner, count2] of votes) {
|
|
5816
|
+
if (count2 > (votes.get(winner) ?? 0))
|
|
5817
|
+
winner = owner;
|
|
5818
|
+
}
|
|
5819
|
+
for (const [sessionId, owner] of owners) {
|
|
5820
|
+
if (owner !== winner)
|
|
5821
|
+
this.#sessionAssignments.delete(sessionId);
|
|
5822
|
+
}
|
|
5823
|
+
this.#sessionFolders.set(folderId, { ...record, workspaceId: winner });
|
|
5824
|
+
changed = true;
|
|
5825
|
+
}
|
|
5826
|
+
if (changed)
|
|
5827
|
+
await this.#persist();
|
|
5828
|
+
return changed;
|
|
5829
|
+
}
|
|
5611
5830
|
/** Все папки — для кадра `folder.list`. */
|
|
5612
5831
|
list() {
|
|
5613
5832
|
return {
|
|
@@ -7311,12 +7530,33 @@ var HostServer = class {
|
|
|
7311
7530
|
void this.#sendAuthStatus();
|
|
7312
7531
|
});
|
|
7313
7532
|
}
|
|
7533
|
+
/**
|
|
7534
|
+
* Перенести всё, что записано под id проектов прежнего формата, на нынешние.
|
|
7535
|
+
*
|
|
7536
|
+
* До первого кадра клиенту: списки собираются по id, и запись под прежним
|
|
7537
|
+
* не нашлась бы — закрепления выглядели бы пропавшими, а подметание стёрло
|
|
7538
|
+
* бы их уже по-настоящему. Повторный запуск ничего не находит и не пишет.
|
|
7539
|
+
*/
|
|
7540
|
+
async #carryOverWorkspaceIds() {
|
|
7541
|
+
const remap = workspaceIdRemap(this.#workspaces.paths(), async (dir) => {
|
|
7542
|
+
const id = workspaceIdFromPath(dir);
|
|
7543
|
+
const onDisk = await this.#workspaces.sessionsOnDisk(id);
|
|
7544
|
+
const antigravity = await this.#antigravity.list(id);
|
|
7545
|
+
return [...onDisk.map((s) => s.sessionId), ...antigravity.map((r) => r.id)];
|
|
7546
|
+
});
|
|
7547
|
+
await this.#antigravity.remapWorkspaceIds(remap);
|
|
7548
|
+
await this.#archive.remapWorkspaceIds(remap);
|
|
7549
|
+
await this.#pins.remapWorkspaceIds(remap);
|
|
7550
|
+
await this.#order.remapWorkspaceIds(remap);
|
|
7551
|
+
await this.#folders.remapWorkspaceIds(remap);
|
|
7552
|
+
}
|
|
7314
7553
|
async start() {
|
|
7315
7554
|
await this.#workspaces.load();
|
|
7316
7555
|
await this.#archive.load();
|
|
7317
7556
|
await this.#pins.load();
|
|
7318
7557
|
await this.#order.load();
|
|
7319
7558
|
await this.#folders.load();
|
|
7559
|
+
await this.#carryOverWorkspaceIds();
|
|
7320
7560
|
await this.#settings.load();
|
|
7321
7561
|
await this.#limitStop.load();
|
|
7322
7562
|
await this.#github.load();
|
|
@@ -7523,6 +7763,7 @@ var HostServer = class {
|
|
|
7523
7763
|
return;
|
|
7524
7764
|
case "workspace.open":
|
|
7525
7765
|
await this.#workspaces.open(frame.path);
|
|
7766
|
+
await this.#carryOverWorkspaceIds();
|
|
7526
7767
|
this.#broadcastWorkspaces();
|
|
7527
7768
|
await this.#closeFinder();
|
|
7528
7769
|
return;
|
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as r,H as a}from"./index-
|
|
1
|
+
import{s as r,H as a}from"./index-Cc7JijiI.js";import{E as e}from"./index-891wE-Rj.js";import{t as o}from"./index-C4wYlk_J.js";import"./index-BHot-lnj.js";const m=e.theme({"&":{height:"100%",color:"var(--text)",backgroundColor:"var(--bg)",fontSize:"13px"},".cm-scroller":{fontFamily:"var(--mono)",lineHeight:"1.6"},".cm-content":{caretColor:"var(--accent)"},".cm-cursor, .cm-dropCursor":{borderLeftColor:"var(--accent)"},"&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:"var(--cm-selection)"},".cm-gutters":{backgroundColor:"var(--bg)",color:"var(--muted)",borderRight:"1px solid var(--border-soft)"},".cm-activeLineGutter":{backgroundColor:"var(--surface-2)",color:"var(--text-2)"},".cm-activeLine":{backgroundColor:"var(--cm-active)"},".cm-selectionMatch":{backgroundColor:"var(--cm-match)"},"&.cm-focused .cm-matchingBracket":{backgroundColor:"var(--cm-match)",outline:"1px solid var(--accent-line)"},".cm-foldPlaceholder":{backgroundColor:"var(--surface-2)",border:"1px solid var(--border)",color:"var(--muted)"},".cm-panels":{backgroundColor:"var(--surface)",color:"var(--text)",border:"1px solid var(--border)"},".cm-panels input, .cm-panels button, .cm-panels select":{fontFamily:"var(--sans)",fontSize:"12px",background:"var(--surface-2)",color:"var(--text)",border:"1px solid var(--border)",borderRadius:"6px",padding:"3px 6px"},".cm-searchMatch":{backgroundColor:"var(--cm-match)"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"var(--accent-soft)"},".cm-tooltip":{background:"var(--surface)",border:"1px solid var(--border)",borderRadius:"8px",boxShadow:"var(--shadow-md)",color:"var(--text)"},".cm-tooltip-autocomplete ul li[aria-selected]":{background:"var(--surface-2)",color:"var(--text)"}}),i=r(a.define([{tag:[o.keyword,o.modifier,o.controlKeyword,o.moduleKeyword],color:"var(--cm-key)"},{tag:[o.name,o.deleted,o.character,o.macroName],color:"var(--text)"},{tag:[o.propertyName],color:"var(--cm-prop)"},{tag:[o.function(o.variableName),o.labelName],color:"var(--cm-fn)"},{tag:[o.color,o.constant(o.name),o.standard(o.name),o.bool],color:"var(--cm-const)"},{tag:[o.definition(o.name),o.separator],color:"var(--text)"},{tag:[o.typeName,o.className,o.changed,o.annotation,o.self,o.namespace],color:"var(--cm-type)"},{tag:[o.number,o.integer,o.float],color:"var(--cm-num)"},{tag:[o.string,o.special(o.string),o.regexp],color:"var(--cm-str)"},{tag:[o.operator,o.operatorKeyword,o.escape],color:"var(--cm-op)"},{tag:[o.meta,o.comment],color:"var(--cm-comment)",fontStyle:"italic"},{tag:o.strong,fontWeight:"650"},{tag:o.emphasis,fontStyle:"italic"},{tag:o.strikethrough,textDecoration:"line-through"},{tag:o.link,color:"var(--cm-str)",textDecoration:"underline"},{tag:o.heading,fontWeight:"650",color:"var(--cm-key)"},{tag:o.invalid,color:"var(--danger)"}]));export{i as editorHighlight,m as editorTheme};
|