@cnc_cbz/usefultools-plugin-official 1.0.9 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, computed, openBlock, createElementBlock, createCommentVNode, createElementVNode, createTextVNode, toDisplayString, normalizeClass, withDirectives, vModelText, Fragment, renderList } from "vue";
1
+ import { defineComponent, ref, computed, openBlock, createElementBlock, createCommentVNode, createElementVNode, normalizeClass, createTextVNode, toDisplayString, Fragment, withDirectives, vModelText, renderList } from "vue";
2
2
  class Diff {
3
3
  diff(oldStr, newStr, options = {}) {
4
4
  let callback;
@@ -247,37 +247,43 @@ function tokenize(value, options) {
247
247
  }
248
248
  const _hoisted_1 = { class: "flex flex-col h-full gap-3" };
249
249
  const _hoisted_2 = { class: "flex flex-wrap items-center gap-3" };
250
- const _hoisted_3 = { class: "ml-auto flex items-center gap-3" };
251
- const _hoisted_4 = {
250
+ const _hoisted_3 = { class: "flex border-2 border-white/20 rounded overflow-hidden" };
251
+ const _hoisted_4 = { class: "ml-auto flex items-center gap-3" };
252
+ const _hoisted_5 = {
252
253
  key: 0,
253
254
  class: "flex items-center gap-3 text-sm font-bold"
254
255
  };
255
- const _hoisted_5 = { class: "text-neon-green" };
256
- const _hoisted_6 = { class: "text-coral-red" };
257
- const _hoisted_7 = {
256
+ const _hoisted_6 = { class: "text-neon-green" };
257
+ const _hoisted_7 = { class: "text-coral-red" };
258
+ const _hoisted_8 = {
258
259
  key: 1,
259
260
  class: "flex border-2 border-white/20 rounded overflow-hidden"
260
261
  };
261
- const _hoisted_8 = {
262
+ const _hoisted_9 = { class: "flex-1 grid grid-cols-2 gap-3 min-h-0" };
263
+ const _hoisted_10 = { class: "flex flex-col min-h-0" };
264
+ const _hoisted_11 = { class: "flex items-center gap-2 mb-1.5" };
265
+ const _hoisted_12 = { class: "text-sm font-bold text-gray-400 tracking-wider" };
266
+ const _hoisted_13 = ["placeholder"];
267
+ const _hoisted_14 = { class: "flex flex-col min-h-0" };
268
+ const _hoisted_15 = { class: "flex items-center gap-2 mb-1.5" };
269
+ const _hoisted_16 = { class: "text-sm font-bold text-gray-400 tracking-wider" };
270
+ const _hoisted_17 = ["placeholder"];
271
+ const _hoisted_18 = {
262
272
  key: 0,
263
- class: "flex-1 grid grid-cols-2 gap-3 min-h-0"
273
+ class: "px-4 py-3 bg-deep-charcoal border-4 border-black rounded-xl shadow-hard text-sm text-gray-400 leading-6"
264
274
  };
265
- const _hoisted_9 = { class: "flex flex-col min-h-0" };
266
- const _hoisted_10 = { class: "flex items-center gap-2 mb-1.5" };
267
- const _hoisted_11 = { class: "flex flex-col min-h-0" };
268
- const _hoisted_12 = { class: "flex items-center gap-2 mb-1.5" };
269
- const _hoisted_13 = {
275
+ const _hoisted_19 = {
270
276
  key: 1,
271
277
  class: "flex-1 flex flex-col min-h-0"
272
278
  };
273
- const _hoisted_14 = { class: "flex-1 bg-deep-charcoal border-4 border-black rounded-xl overflow-auto shadow-hard" };
274
- const _hoisted_15 = { class: "w-full font-mono text-sm border-collapse" };
275
- const _hoisted_16 = {
279
+ const _hoisted_20 = { class: "flex-1 bg-deep-charcoal border-4 border-black rounded-xl overflow-auto shadow-hard" };
280
+ const _hoisted_21 = { class: "w-full font-mono text-sm border-collapse" };
281
+ const _hoisted_22 = {
276
282
  key: 2,
277
283
  class: "flex-1 grid grid-cols-2 gap-3 min-h-0"
278
284
  };
279
- const _hoisted_17 = { class: "w-full font-mono text-sm border-collapse" };
280
- const _hoisted_18 = { class: "w-full font-mono text-sm border-collapse" };
285
+ const _hoisted_23 = { class: "w-full font-mono text-sm border-collapse" };
286
+ const _hoisted_24 = { class: "w-full font-mono text-sm border-collapse" };
281
287
  const _sfc_main = /* @__PURE__ */ defineComponent({
282
288
  __name: "index",
283
289
  setup(__props) {
@@ -285,6 +291,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
285
291
  const newText = ref("");
286
292
  const hasCompared = ref(false);
287
293
  const viewMode = ref("unified");
294
+ const compareMode = ref("text");
288
295
  const unifiedLines = ref([]);
289
296
  const leftLines = ref([]);
290
297
  const rightLines = ref([]);
@@ -296,6 +303,43 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
296
303
  if (lines[lines.length - 1] === "") lines.pop();
297
304
  return lines;
298
305
  }
306
+ function tryDecode(value) {
307
+ try {
308
+ return decodeURIComponent(value);
309
+ } catch {
310
+ return value;
311
+ }
312
+ }
313
+ function stringifyUrlForDiff(raw) {
314
+ const input = raw.trim();
315
+ if (!input) return "";
316
+ try {
317
+ const url = new URL(input);
318
+ const lines = [
319
+ `protocol: ${url.protocol.replace(/:$/, "")}`,
320
+ `host: ${url.host}`,
321
+ `pathname: ${url.pathname || "/"}`
322
+ ];
323
+ if (url.hash) {
324
+ lines.push(`hash: ${tryDecode(url.hash.slice(1))}`);
325
+ }
326
+ const entries = Array.from(url.searchParams.entries()).sort(([keyA], [keyB]) => keyA.localeCompare(keyB));
327
+ if (entries.length === 0) {
328
+ lines.push("query: <empty>");
329
+ } else {
330
+ lines.push("query:");
331
+ for (const [key, value] of entries) {
332
+ lines.push(` ${key} = ${tryDecode(value)}`);
333
+ }
334
+ }
335
+ return lines.join("\n");
336
+ } catch {
337
+ return input;
338
+ }
339
+ }
340
+ function getComparableText(raw) {
341
+ return compareMode.value === "url" ? stringifyUrlForDiff(raw) : raw;
342
+ }
299
343
  function alignChunk(oldArr, newArr) {
300
344
  const m = oldArr.length, n = newArr.length;
301
345
  const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
@@ -325,7 +369,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
325
369
  }
326
370
  function handleCompare() {
327
371
  var _a;
328
- const changes = diffLines(oldText.value, newText.value);
372
+ const changes = diffLines(getComparableText(oldText.value), getComparableText(newText.value));
329
373
  const unified = [];
330
374
  const left = [];
331
375
  const right = [];
@@ -419,7 +463,11 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
419
463
  });
420
464
  }
421
465
  function loadSample() {
422
- oldText.value = `html,
466
+ if (compareMode.value === "url") {
467
+ oldText.value = "http://localhost:8102/usersys/FormSetPage?Name=WholeInventoryPage&FormName=Observed&RequestViewName=TalentReviewListForManagement&AppConfigID=2&FormApplicationID=428&FormID=4226&MenuName=UserWholeInventory&AskForm_Where=ReviewStage%3D4&checkStart=true";
468
+ newText.value = "http://localhost:8102/usersys/FormSetPage?Name=WholeInventoryPageForPosition&RequestViewName=TalentReviewListForPosition&FormName=Observed&MenuStep=undefined&AskForm_Where=undefined&MeetingEntryID=undefined&AppConfigID=2&FormApplicationID=428&FormID=4226&MenuName=UserWholeInventoryForPosition";
469
+ } else {
470
+ oldText.value = `html,
423
471
  body {
424
472
  width: 100%;
425
473
  height: 100%;
@@ -443,7 +491,7 @@ body {
443
491
  background-color: #000000;
444
492
  opacity: 1;
445
493
  }`;
446
- newText.value = `html,
494
+ newText.value = `html,
447
495
  body {
448
496
  width: 100%;
449
497
  height: 100%;
@@ -467,6 +515,7 @@ body {
467
515
  background-color: #031607;
468
516
  opacity: 1;
469
517
  }`;
518
+ }
470
519
  handleCompare();
471
520
  }
472
521
  const stats = computed(() => {
@@ -494,11 +543,65 @@ body {
494
543
  return openBlock(), createElementBlock("div", _hoisted_1, [
495
544
  createCommentVNode(" Toolbar "),
496
545
  createElementVNode("div", _hoisted_2, [
546
+ createElementVNode("div", _hoisted_3, [
547
+ createElementVNode(
548
+ "button",
549
+ {
550
+ class: normalizeClass(["h-9 px-3 text-sm font-bold flex items-center gap-1.5 transition-all", compareMode.value === "text" ? "bg-primary text-black" : "bg-deep-charcoal text-gray-400 hover:text-white"]),
551
+ onClick: _cache[0] || (_cache[0] = ($event) => {
552
+ compareMode.value = "text";
553
+ handleEdit();
554
+ })
555
+ },
556
+ [..._cache[10] || (_cache[10] = [
557
+ createElementVNode(
558
+ "span",
559
+ { class: "material-icons text-lg" },
560
+ "article",
561
+ -1
562
+ /* CACHED */
563
+ ),
564
+ createTextVNode(
565
+ "文本对比 ",
566
+ -1
567
+ /* CACHED */
568
+ )
569
+ ])],
570
+ 2
571
+ /* CLASS */
572
+ ),
573
+ createElementVNode(
574
+ "button",
575
+ {
576
+ class: normalizeClass(["h-9 px-3 text-sm font-bold flex items-center gap-1.5 transition-all border-l border-white/20", compareMode.value === "url" ? "bg-primary text-black" : "bg-deep-charcoal text-gray-400 hover:text-white"]),
577
+ onClick: _cache[1] || (_cache[1] = ($event) => {
578
+ compareMode.value = "url";
579
+ handleEdit();
580
+ })
581
+ },
582
+ [..._cache[11] || (_cache[11] = [
583
+ createElementVNode(
584
+ "span",
585
+ { class: "material-icons text-lg" },
586
+ "link",
587
+ -1
588
+ /* CACHED */
589
+ ),
590
+ createTextVNode(
591
+ "URL 对比 ",
592
+ -1
593
+ /* CACHED */
594
+ )
595
+ ])],
596
+ 2
597
+ /* CLASS */
598
+ )
599
+ ]),
497
600
  !hasCompared.value ? (openBlock(), createElementBlock("button", {
498
601
  key: 0,
499
602
  class: "h-9 px-4 bg-primary text-black font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all flex items-center gap-1.5 text-sm",
500
603
  onClick: handleCompare
501
- }, [..._cache[8] || (_cache[8] = [
604
+ }, [..._cache[12] || (_cache[12] = [
502
605
  createElementVNode(
503
606
  "span",
504
607
  { class: "material-icons text-lg" },
@@ -516,7 +619,7 @@ body {
516
619
  key: 1,
517
620
  class: "h-9 px-4 bg-primary text-black font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all flex items-center gap-1.5 text-sm",
518
621
  onClick: handleEdit
519
- }, [..._cache[9] || (_cache[9] = [
622
+ }, [..._cache[13] || (_cache[13] = [
520
623
  createElementVNode(
521
624
  "span",
522
625
  { class: "material-icons text-lg" },
@@ -533,7 +636,7 @@ body {
533
636
  createElementVNode("button", {
534
637
  class: "h-9 px-4 bg-white text-black font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all flex items-center gap-1.5 text-sm",
535
638
  onClick: handleSwap
536
- }, [..._cache[10] || (_cache[10] = [
639
+ }, [..._cache[14] || (_cache[14] = [
537
640
  createElementVNode(
538
641
  "span",
539
642
  { class: "material-icons text-lg" },
@@ -550,7 +653,7 @@ body {
550
653
  createElementVNode("button", {
551
654
  class: "h-9 px-4 bg-coral-red text-white font-bold border-2 border-black rounded shadow-hard-sm hover:shadow-none hover:translate-x-0.5 hover:translate-y-0.5 transition-all flex items-center gap-1.5 text-sm",
552
655
  onClick: handleClear
553
- }, [..._cache[11] || (_cache[11] = [
656
+ }, [..._cache[15] || (_cache[15] = [
554
657
  createElementVNode(
555
658
  "span",
556
659
  { class: "material-icons text-lg" },
@@ -564,32 +667,32 @@ body {
564
667
  /* CACHED */
565
668
  )
566
669
  ])]),
567
- createElementVNode("div", _hoisted_3, [
568
- hasCompared.value ? (openBlock(), createElementBlock("div", _hoisted_4, [
670
+ createElementVNode("div", _hoisted_4, [
671
+ hasCompared.value ? (openBlock(), createElementBlock("div", _hoisted_5, [
569
672
  createElementVNode(
570
673
  "span",
571
- _hoisted_5,
674
+ _hoisted_6,
572
675
  "+" + toDisplayString(stats.value.added),
573
676
  1
574
677
  /* TEXT */
575
678
  ),
576
679
  createElementVNode(
577
680
  "span",
578
- _hoisted_6,
681
+ _hoisted_7,
579
682
  "-" + toDisplayString(stats.value.removed),
580
683
  1
581
684
  /* TEXT */
582
685
  )
583
686
  ])) : createCommentVNode("v-if", true),
584
687
  createCommentVNode(" 视图切换 "),
585
- hasCompared.value ? (openBlock(), createElementBlock("div", _hoisted_7, [
688
+ hasCompared.value ? (openBlock(), createElementBlock("div", _hoisted_8, [
586
689
  createElementVNode(
587
690
  "button",
588
691
  {
589
692
  class: normalizeClass(["h-7 px-2.5 text-xs font-bold flex items-center gap-1 transition-all", viewMode.value === "unified" ? "bg-primary text-black" : "bg-deep-charcoal text-gray-400 hover:text-white"]),
590
- onClick: _cache[0] || (_cache[0] = ($event) => viewMode.value = "unified")
693
+ onClick: _cache[2] || (_cache[2] = ($event) => viewMode.value = "unified")
591
694
  },
592
- [..._cache[12] || (_cache[12] = [
695
+ [..._cache[16] || (_cache[16] = [
593
696
  createElementVNode(
594
697
  "span",
595
698
  { class: "material-icons text-sm" },
@@ -610,9 +713,9 @@ body {
610
713
  "button",
611
714
  {
612
715
  class: normalizeClass(["h-7 px-2.5 text-xs font-bold flex items-center gap-1 transition-all border-l border-white/20", viewMode.value === "split" ? "bg-primary text-black" : "bg-deep-charcoal text-gray-400 hover:text-white"]),
613
- onClick: _cache[1] || (_cache[1] = ($event) => viewMode.value = "split")
716
+ onClick: _cache[3] || (_cache[3] = ($event) => viewMode.value = "split")
614
717
  },
615
- [..._cache[13] || (_cache[13] = [
718
+ [..._cache[17] || (_cache[17] = [
616
719
  createElementVNode(
617
720
  "span",
618
721
  { class: "material-icons text-sm" },
@@ -633,7 +736,7 @@ body {
633
736
  createElementVNode("button", {
634
737
  class: "h-9 px-3 bg-deep-charcoal text-gray-300 font-bold border-2 border-white/20 rounded hover:border-primary hover:text-primary transition-all text-sm flex items-center gap-1.5",
635
738
  onClick: loadSample
636
- }, [..._cache[14] || (_cache[14] = [
739
+ }, [..._cache[18] || (_cache[18] = [
637
740
  createElementVNode(
638
741
  "span",
639
742
  { class: "material-icons text-lg" },
@@ -650,96 +753,93 @@ body {
650
753
  ])
651
754
  ]),
652
755
  createCommentVNode(" 编辑模式:并排输入 "),
653
- !hasCompared.value ? (openBlock(), createElementBlock("div", _hoisted_8, [
654
- createElementVNode("div", _hoisted_9, [
655
- createElementVNode("div", _hoisted_10, [
656
- _cache[16] || (_cache[16] = createElementVNode(
657
- "span",
658
- { class: "text-sm font-bold text-gray-400 tracking-wider" },
659
- "A 原始文本",
660
- -1
661
- /* CACHED */
662
- )),
663
- createElementVNode("button", {
664
- class: "ml-auto text-xs text-gray-500 hover:text-primary transition-colors flex items-center gap-1",
665
- onClick: _cache[2] || (_cache[2] = ($event) => handlePaste("old"))
666
- }, [..._cache[15] || (_cache[15] = [
667
- createElementVNode(
668
- "span",
669
- { class: "material-icons text-sm" },
670
- "content_paste",
671
- -1
672
- /* CACHED */
673
- ),
674
- createTextVNode(
675
- "粘贴 ",
676
- -1
677
- /* CACHED */
678
- )
679
- ])])
680
- ]),
681
- withDirectives(createElementVNode(
682
- "textarea",
683
- {
684
- "onUpdate:modelValue": _cache[3] || (_cache[3] = ($event) => oldText.value = $event),
685
- placeholder: "在此输入原始文本...",
686
- spellcheck: "false",
687
- class: "flex-1 w-full bg-deep-charcoal text-gray-100 border-4 border-black rounded-xl p-4 font-mono text-sm leading-relaxed resize-none shadow-hard focus:border-primary focus:shadow-none focus:translate-x-1 focus:translate-y-1 transition-all outline-none placeholder-gray-600"
688
- },
689
- null,
690
- 512
691
- /* NEED_PATCH */
692
- ), [
693
- [vModelText, oldText.value]
694
- ])
695
- ]),
696
- createElementVNode("div", _hoisted_11, [
697
- createElementVNode("div", _hoisted_12, [
698
- _cache[18] || (_cache[18] = createElementVNode(
699
- "span",
700
- { class: "text-sm font-bold text-gray-400 tracking-wider" },
701
- "B 新文本",
702
- -1
703
- /* CACHED */
704
- )),
705
- createElementVNode("button", {
706
- class: "ml-auto text-xs text-gray-500 hover:text-primary transition-colors flex items-center gap-1",
707
- onClick: _cache[4] || (_cache[4] = ($event) => handlePaste("new"))
708
- }, [..._cache[17] || (_cache[17] = [
709
- createElementVNode(
710
- "span",
711
- { class: "material-icons text-sm" },
712
- "content_paste",
713
- -1
714
- /* CACHED */
715
- ),
716
- createTextVNode(
717
- "粘贴 ",
718
- -1
719
- /* CACHED */
720
- )
721
- ])])
756
+ !hasCompared.value ? (openBlock(), createElementBlock(
757
+ Fragment,
758
+ { key: 0 },
759
+ [
760
+ createElementVNode("div", _hoisted_9, [
761
+ createElementVNode("div", _hoisted_10, [
762
+ createElementVNode("div", _hoisted_11, [
763
+ createElementVNode(
764
+ "span",
765
+ _hoisted_12,
766
+ "A " + toDisplayString(compareMode.value === "url" ? "原始 URL" : "原始文本"),
767
+ 1
768
+ /* TEXT */
769
+ ),
770
+ createElementVNode("button", {
771
+ class: "ml-auto text-xs text-gray-500 hover:text-primary transition-colors flex items-center gap-1",
772
+ onClick: _cache[4] || (_cache[4] = ($event) => handlePaste("old"))
773
+ }, [..._cache[19] || (_cache[19] = [
774
+ createElementVNode(
775
+ "span",
776
+ { class: "material-icons text-sm" },
777
+ "content_paste",
778
+ -1
779
+ /* CACHED */
780
+ ),
781
+ createTextVNode(
782
+ "粘贴 ",
783
+ -1
784
+ /* CACHED */
785
+ )
786
+ ])])
787
+ ]),
788
+ withDirectives(createElementVNode("textarea", {
789
+ "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => oldText.value = $event),
790
+ placeholder: compareMode.value === "url" ? "在此输入原始 URL..." : "在此输入原始文本...",
791
+ spellcheck: "false",
792
+ class: "flex-1 w-full bg-deep-charcoal text-gray-100 border-4 border-black rounded-xl p-4 font-mono text-sm leading-relaxed resize-none shadow-hard focus:border-primary focus:shadow-none focus:translate-x-1 focus:translate-y-1 transition-all outline-none placeholder-gray-600"
793
+ }, null, 8, _hoisted_13), [
794
+ [vModelText, oldText.value]
795
+ ])
796
+ ]),
797
+ createElementVNode("div", _hoisted_14, [
798
+ createElementVNode("div", _hoisted_15, [
799
+ createElementVNode(
800
+ "span",
801
+ _hoisted_16,
802
+ "B " + toDisplayString(compareMode.value === "url" ? "新 URL" : "新文本"),
803
+ 1
804
+ /* TEXT */
805
+ ),
806
+ createElementVNode("button", {
807
+ class: "ml-auto text-xs text-gray-500 hover:text-primary transition-colors flex items-center gap-1",
808
+ onClick: _cache[6] || (_cache[6] = ($event) => handlePaste("new"))
809
+ }, [..._cache[20] || (_cache[20] = [
810
+ createElementVNode(
811
+ "span",
812
+ { class: "material-icons text-sm" },
813
+ "content_paste",
814
+ -1
815
+ /* CACHED */
816
+ ),
817
+ createTextVNode(
818
+ "粘贴 ",
819
+ -1
820
+ /* CACHED */
821
+ )
822
+ ])])
823
+ ]),
824
+ withDirectives(createElementVNode("textarea", {
825
+ "onUpdate:modelValue": _cache[7] || (_cache[7] = ($event) => newText.value = $event),
826
+ placeholder: compareMode.value === "url" ? "在此输入新 URL..." : "在此输入新文本...",
827
+ spellcheck: "false",
828
+ class: "flex-1 w-full bg-deep-charcoal text-gray-100 border-4 border-black rounded-xl p-4 font-mono text-sm leading-relaxed resize-none shadow-hard focus:border-primary focus:shadow-none focus:translate-x-1 focus:translate-y-1 transition-all outline-none placeholder-gray-600"
829
+ }, null, 8, _hoisted_17), [
830
+ [vModelText, newText.value]
831
+ ])
832
+ ])
722
833
  ]),
723
- withDirectives(createElementVNode(
724
- "textarea",
725
- {
726
- "onUpdate:modelValue": _cache[5] || (_cache[5] = ($event) => newText.value = $event),
727
- placeholder: "在此输入新文本...",
728
- spellcheck: "false",
729
- class: "flex-1 w-full bg-deep-charcoal text-gray-100 border-4 border-black rounded-xl p-4 font-mono text-sm leading-relaxed resize-none shadow-hard focus:border-primary focus:shadow-none focus:translate-x-1 focus:translate-y-1 transition-all outline-none placeholder-gray-600"
730
- },
731
- null,
732
- 512
733
- /* NEED_PATCH */
734
- ), [
735
- [vModelText, newText.value]
736
- ])
737
- ])
738
- ])) : createCommentVNode("v-if", true),
834
+ compareMode.value === "url" ? (openBlock(), createElementBlock("div", _hoisted_18, " URL 对比会先解析协议、主机、路径和查询参数,再按参数名排序后进行逐行差异对比,便于快速定位参数增删和取值变化。 ")) : createCommentVNode("v-if", true)
835
+ ],
836
+ 64
837
+ /* STABLE_FRAGMENT */
838
+ )) : createCommentVNode("v-if", true),
739
839
  createCommentVNode(" 对比结果:统一视图 "),
740
- hasCompared.value && viewMode.value === "unified" ? (openBlock(), createElementBlock("div", _hoisted_13, [
741
- createElementVNode("div", _hoisted_14, [
742
- createElementVNode("table", _hoisted_15, [
840
+ hasCompared.value && viewMode.value === "unified" ? (openBlock(), createElementBlock("div", _hoisted_19, [
841
+ createElementVNode("div", _hoisted_20, [
842
+ createElementVNode("table", _hoisted_21, [
743
843
  (openBlock(true), createElementBlock(
744
844
  Fragment,
745
845
  null,
@@ -802,17 +902,17 @@ body {
802
902
  ])
803
903
  ])) : createCommentVNode("v-if", true),
804
904
  createCommentVNode(" 对比结果:并排视图 "),
805
- hasCompared.value && viewMode.value === "split" ? (openBlock(), createElementBlock("div", _hoisted_16, [
905
+ hasCompared.value && viewMode.value === "split" ? (openBlock(), createElementBlock("div", _hoisted_22, [
806
906
  createElementVNode(
807
907
  "div",
808
908
  {
809
909
  ref_key: "leftPanel",
810
910
  ref: leftPanel,
811
- onScroll: _cache[6] || (_cache[6] = ($event) => syncScroll("left")),
911
+ onScroll: _cache[8] || (_cache[8] = ($event) => syncScroll("left")),
812
912
  class: "bg-deep-charcoal border-4 border-black rounded-xl overflow-auto shadow-hard"
813
913
  },
814
914
  [
815
- createElementVNode("table", _hoisted_17, [
915
+ createElementVNode("table", _hoisted_23, [
816
916
  (openBlock(true), createElementBlock(
817
917
  Fragment,
818
918
  null,
@@ -863,11 +963,11 @@ body {
863
963
  {
864
964
  ref_key: "rightPanel",
865
965
  ref: rightPanel,
866
- onScroll: _cache[7] || (_cache[7] = ($event) => syncScroll("right")),
966
+ onScroll: _cache[9] || (_cache[9] = ($event) => syncScroll("right")),
867
967
  class: "bg-deep-charcoal border-4 border-black rounded-xl overflow-auto shadow-hard"
868
968
  },
869
969
  [
870
- createElementVNode("table", _hoisted_18, [
970
+ createElementVNode("table", _hoisted_24, [
871
971
  (openBlock(true), createElementBlock(
872
972
  Fragment,
873
973
  null,
@@ -925,7 +1025,7 @@ const _export_sfc = (sfc, props) => {
925
1025
  }
926
1026
  return target;
927
1027
  };
928
- const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-90752a2e"]]);
1028
+ const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-0a7b0920"]]);
929
1029
  export {
930
1030
  index as default
931
1031
  };
@@ -1069,6 +1169,10 @@ export {
1069
1169
  position: relative;
1070
1170
  }
1071
1171
 
1172
+ .sticky {
1173
+ position: sticky;
1174
+ }
1175
+
1072
1176
  .inset-0 {
1073
1177
  inset: calc(var(--spacing) * 0);
1074
1178
  }
@@ -1081,6 +1185,10 @@ export {
1081
1185
  inset-inline-end: var(--spacing);
1082
1186
  }
1083
1187
 
1188
+ .top-0 {
1189
+ top: calc(var(--spacing) * 0);
1190
+ }
1191
+
1084
1192
  .top-1\\/2 {
1085
1193
  top: 50%;
1086
1194
  }
@@ -1093,6 +1201,10 @@ export {
1093
1201
  left: calc(var(--spacing) * 2);
1094
1202
  }
1095
1203
 
1204
+ .z-10 {
1205
+ z-index: 10;
1206
+ }
1207
+
1096
1208
  .z-50 {
1097
1209
  z-index: 50;
1098
1210
  }
@@ -1125,6 +1237,10 @@ export {
1125
1237
  margin-top: calc(var(--spacing) * 3);
1126
1238
  }
1127
1239
 
1240
+ .mt-4 {
1241
+ margin-top: calc(var(--spacing) * 4);
1242
+ }
1243
+
1128
1244
  .mr-1 {
1129
1245
  margin-right: calc(var(--spacing) * 1);
1130
1246
  }
@@ -1241,6 +1357,10 @@ export {
1241
1357
  height: calc(var(--spacing) * 10);
1242
1358
  }
1243
1359
 
1360
+ .h-11 {
1361
+ height: calc(var(--spacing) * 11);
1362
+ }
1363
+
1244
1364
  .h-12 {
1245
1365
  height: calc(var(--spacing) * 12);
1246
1366
  }
@@ -1257,6 +1377,10 @@ export {
1257
1377
  height: 100%;
1258
1378
  }
1259
1379
 
1380
+ .max-h-28 {
1381
+ max-height: calc(var(--spacing) * 28);
1382
+ }
1383
+
1260
1384
  .max-h-36 {
1261
1385
  max-height: calc(var(--spacing) * 36);
1262
1386
  }
@@ -1277,6 +1401,10 @@ export {
1277
1401
  max-height: 200px;
1278
1402
  }
1279
1403
 
1404
+ .max-h-\\[420px\\] {
1405
+ max-height: 420px;
1406
+ }
1407
+
1280
1408
  .max-h-full {
1281
1409
  max-height: 100%;
1282
1410
  }
@@ -1297,6 +1425,22 @@ export {
1297
1425
  min-height: 200px;
1298
1426
  }
1299
1427
 
1428
+ .min-h-\\[260px\\] {
1429
+ min-height: 260px;
1430
+ }
1431
+
1432
+ .min-h-\\[320px\\] {
1433
+ min-height: 320px;
1434
+ }
1435
+
1436
+ .min-h-full {
1437
+ min-height: 100%;
1438
+ }
1439
+
1440
+ .w-1 {
1441
+ width: calc(var(--spacing) * 1);
1442
+ }
1443
+
1300
1444
  .w-1\\.5 {
1301
1445
  width: calc(var(--spacing) * 1.5);
1302
1446
  }
@@ -1361,6 +1505,10 @@ export {
1361
1505
  width: calc(var(--spacing) * 32);
1362
1506
  }
1363
1507
 
1508
+ .w-56 {
1509
+ width: calc(var(--spacing) * 56);
1510
+ }
1511
+
1364
1512
  .w-72 {
1365
1513
  width: calc(var(--spacing) * 72);
1366
1514
  }
@@ -1401,6 +1549,10 @@ export {
1401
1549
  flex-shrink: 0;
1402
1550
  }
1403
1551
 
1552
+ .table-fixed {
1553
+ table-layout: fixed;
1554
+ }
1555
+
1404
1556
  .border-collapse {
1405
1557
  border-collapse: collapse;
1406
1558
  }
@@ -1420,6 +1572,10 @@ export {
1420
1572
  translate: var(--tw-translate-x) var(--tw-translate-y);
1421
1573
  }
1422
1574
 
1575
+ .scale-\\[0\\.98\\] {
1576
+ scale: .98;
1577
+ }
1578
+
1423
1579
  .transform {
1424
1580
  transform: var(--tw-rotate-x, ) var(--tw-rotate-y, ) var(--tw-rotate-z, ) var(--tw-skew-x, ) var(--tw-skew-y, );
1425
1581
  }
@@ -1440,6 +1596,10 @@ export {
1440
1596
  cursor: pointer;
1441
1597
  }
1442
1598
 
1599
+ .touch-none {
1600
+ touch-action: none;
1601
+ }
1602
+
1443
1603
  .resize {
1444
1604
  resize: both;
1445
1605
  }
@@ -1448,6 +1608,10 @@ export {
1448
1608
  resize: none;
1449
1609
  }
1450
1610
 
1611
+ .resize-y {
1612
+ resize: vertical;
1613
+ }
1614
+
1451
1615
  .appearance-none {
1452
1616
  appearance: none;
1453
1617
  }
@@ -1488,6 +1652,10 @@ export {
1488
1652
  align-items: center;
1489
1653
  }
1490
1654
 
1655
+ .items-stretch {
1656
+ align-items: stretch;
1657
+ }
1658
+
1491
1659
  .justify-between {
1492
1660
  justify-content: space-between;
1493
1661
  }
@@ -1552,6 +1720,12 @@ export {
1552
1720
  margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
1553
1721
  }
1554
1722
 
1723
+ :where(.space-y-4 > :not(:last-child)) {
1724
+ --tw-space-y-reverse: 0;
1725
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
1726
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
1727
+ }
1728
+
1555
1729
  .gap-x-6 {
1556
1730
  column-gap: calc(var(--spacing) * 6);
1557
1731
  }
@@ -1574,6 +1748,10 @@ export {
1574
1748
  overflow: hidden;
1575
1749
  }
1576
1750
 
1751
+ .overflow-x-auto {
1752
+ overflow-x: auto;
1753
+ }
1754
+
1577
1755
  .overflow-y-auto {
1578
1756
  overflow-y: auto;
1579
1757
  }
@@ -1613,6 +1791,11 @@ export {
1613
1791
  border-width: 4px;
1614
1792
  }
1615
1793
 
1794
+ .border-t-2 {
1795
+ border-top-style: var(--tw-border-style);
1796
+ border-top-width: 2px;
1797
+ }
1798
+
1616
1799
  .border-r {
1617
1800
  border-right-style: var(--tw-border-style);
1618
1801
  border-right-width: 1px;
@@ -1642,6 +1825,16 @@ export {
1642
1825
  border-color: var(--color-black);
1643
1826
  }
1644
1827
 
1828
+ .border-black\\/30 {
1829
+ border-color: #0000004d;
1830
+ }
1831
+
1832
+ @supports (color: color-mix(in lab, red, red)) {
1833
+ .border-black\\/30 {
1834
+ border-color: color-mix(in oklab, var(--color-black) 30%, transparent);
1835
+ }
1836
+ }
1837
+
1645
1838
  .border-coral-red {
1646
1839
  border-color: var(--color-coral-red);
1647
1840
  }
@@ -1884,6 +2077,16 @@ export {
1884
2077
  }
1885
2078
  }
1886
2079
 
2080
+ .bg-primary\\/30 {
2081
+ background-color: #f9b11f4d;
2082
+ }
2083
+
2084
+ @supports (color: color-mix(in lab, red, red)) {
2085
+ .bg-primary\\/30 {
2086
+ background-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
2087
+ }
2088
+ }
2089
+
1887
2090
  .bg-transparent {
1888
2091
  background-color: #0000;
1889
2092
  }
@@ -2032,6 +2235,10 @@ export {
2032
2235
  padding-block: calc(var(--spacing) * 3);
2033
2236
  }
2034
2237
 
2238
+ .py-4 {
2239
+ padding-block: calc(var(--spacing) * 4);
2240
+ }
2241
+
2035
2242
  .py-6 {
2036
2243
  padding-block: calc(var(--spacing) * 6);
2037
2244
  }
@@ -2040,6 +2247,10 @@ export {
2040
2247
  padding-block: calc(var(--spacing) * 8);
2041
2248
  }
2042
2249
 
2250
+ .pt-3 {
2251
+ padding-top: calc(var(--spacing) * 3);
2252
+ }
2253
+
2043
2254
  .pr-1 {
2044
2255
  padding-right: calc(var(--spacing) * 1);
2045
2256
  }
@@ -2064,6 +2275,14 @@ export {
2064
2275
  padding-right: calc(var(--spacing) * 11);
2065
2276
  }
2066
2277
 
2278
+ .pb-1 {
2279
+ padding-bottom: calc(var(--spacing) * 1);
2280
+ }
2281
+
2282
+ .pb-2 {
2283
+ padding-bottom: calc(var(--spacing) * 2);
2284
+ }
2285
+
2067
2286
  .pl-1\\.5 {
2068
2287
  padding-left: calc(var(--spacing) * 1.5);
2069
2288
  }
@@ -2104,6 +2323,10 @@ export {
2104
2323
  vertical-align: middle;
2105
2324
  }
2106
2325
 
2326
+ .align-top {
2327
+ vertical-align: top;
2328
+ }
2329
+
2107
2330
  .font-mono {
2108
2331
  font-family: var(--font-mono);
2109
2332
  }
@@ -2165,6 +2388,11 @@ export {
2165
2388
  line-height: calc(var(--spacing) * 6);
2166
2389
  }
2167
2390
 
2391
+ .leading-7 {
2392
+ --tw-leading: calc(var(--spacing) * 7);
2393
+ line-height: calc(var(--spacing) * 7);
2394
+ }
2395
+
2168
2396
  .leading-none {
2169
2397
  --tw-leading: 1;
2170
2398
  line-height: 1;
@@ -2195,6 +2423,10 @@ export {
2195
2423
  letter-spacing: var(--tracking-widest);
2196
2424
  }
2197
2425
 
2426
+ .\\[overflow-wrap\\:anywhere\\] {
2427
+ overflow-wrap: anywhere;
2428
+ }
2429
+
2198
2430
  .break-all {
2199
2431
  word-break: break-all;
2200
2432
  }
@@ -2391,6 +2623,10 @@ export {
2391
2623
  opacity: .7;
2392
2624
  }
2393
2625
 
2626
+ .opacity-100 {
2627
+ opacity: 1;
2628
+ }
2629
+
2394
2630
  .shadow-hard {
2395
2631
  --tw-shadow: 4px 4px 0 0 var(--tw-shadow-color, #000);
2396
2632
  box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
@@ -2634,6 +2870,11 @@ export {
2634
2870
  translate: var(--tw-translate-x) var(--tw-translate-y);
2635
2871
  }
2636
2872
 
2873
+ .focus\\:translate-x-\\[2px\\]:focus {
2874
+ --tw-translate-x: 2px;
2875
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2876
+ }
2877
+
2637
2878
  .focus\\:translate-x-\\[4px\\]:focus {
2638
2879
  --tw-translate-x: 4px;
2639
2880
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -2644,6 +2885,11 @@ export {
2644
2885
  translate: var(--tw-translate-x) var(--tw-translate-y);
2645
2886
  }
2646
2887
 
2888
+ .focus\\:translate-y-\\[2px\\]:focus {
2889
+ --tw-translate-y: 2px;
2890
+ translate: var(--tw-translate-x) var(--tw-translate-y);
2891
+ }
2892
+
2647
2893
  .focus\\:translate-y-\\[4px\\]:focus {
2648
2894
  --tw-translate-y: 4px;
2649
2895
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -2720,6 +2966,10 @@ export {
2720
2966
  .xl\\:grid-cols-3 {
2721
2967
  grid-template-columns: repeat(3, minmax(0, 1fr));
2722
2968
  }
2969
+
2970
+ .xl\\:grid-cols-\\[minmax\\(0\\,1fr\\)_minmax\\(0\\,1fr\\)_320px\\] {
2971
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) 320px;
2972
+ }
2723
2973
  }
2724
2974
  }
2725
2975
 
@@ -2979,10 +3229,10 @@ export {
2979
3229
  }
2980
3230
  }
2981
3231
 
2982
- table tr td[data-v-90752a2e] {
3232
+ table tr td[data-v-0a7b0920] {
2983
3233
  line-height: 1.75;
2984
3234
  }
2985
- .diff-num[data-v-90752a2e] {
3235
+ .diff-num[data-v-0a7b0920] {
2986
3236
  min-width: 3ch;
2987
3237
  }
2988
3238
  `;})();