@mulmoclaude/mulmoscript-plugin 3.1.0 → 4.1.0

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/style.css CHANGED
@@ -82,6 +82,7 @@
82
82
  --color-gray-600: oklch(44.6% .03 256.802);
83
83
  --color-gray-700: oklch(37.3% .034 259.733);
84
84
  --color-gray-800: oklch(27.8% .033 256.848);
85
+ --color-gray-900: oklch(21% .034 264.665);
85
86
  --color-black: #000;
86
87
  --color-white: #fff;
87
88
  --spacing: .25rem;
@@ -93,6 +94,8 @@
93
94
  --text-base--line-height: calc(1.5 / 1);
94
95
  --text-lg: 1.125rem;
95
96
  --text-lg--line-height: calc(1.75 / 1.125);
97
+ --text-xl: 1.25rem;
98
+ --text-xl--line-height: calc(1.75 / 1.25);
96
99
  --text-3xl: 1.875rem;
97
100
  --text-3xl--line-height: calc(2.25 / 1.875);
98
101
  --text-4xl: 2.25rem;
@@ -373,6 +376,10 @@
373
376
  visibility: collapse;
374
377
  }
375
378
 
379
+ .invisible {
380
+ visibility: hidden;
381
+ }
382
+
376
383
  .visible {
377
384
  visibility: visible;
378
385
  }
@@ -461,6 +468,40 @@
461
468
  z-index: 50;
462
469
  }
463
470
 
471
+ .container {
472
+ width: 100%;
473
+ }
474
+
475
+ @media (min-width: 40rem) {
476
+ .container {
477
+ max-width: 40rem;
478
+ }
479
+ }
480
+
481
+ @media (min-width: 48rem) {
482
+ .container {
483
+ max-width: 48rem;
484
+ }
485
+ }
486
+
487
+ @media (min-width: 64rem) {
488
+ .container {
489
+ max-width: 64rem;
490
+ }
491
+ }
492
+
493
+ @media (min-width: 80rem) {
494
+ .container {
495
+ max-width: 80rem;
496
+ }
497
+ }
498
+
499
+ @media (min-width: 96rem) {
500
+ .container {
501
+ max-width: 96rem;
502
+ }
503
+ }
504
+
464
505
  .m-auto {
465
506
  margin: auto;
466
507
  }
@@ -509,6 +550,10 @@
509
550
  display: flex;
510
551
  }
511
552
 
553
+ .grid {
554
+ display: grid;
555
+ }
556
+
512
557
  .hidden {
513
558
  display: none;
514
559
  }
@@ -569,6 +614,10 @@
569
614
  height: calc(var(--spacing) * 36);
570
615
  }
571
616
 
617
+ .h-\[720px\] {
618
+ height: 720px;
619
+ }
620
+
572
621
  .h-full {
573
622
  height: 100%;
574
623
  }
@@ -581,6 +630,14 @@
581
630
  max-height: 85vh;
582
631
  }
583
632
 
633
+ .min-h-0 {
634
+ min-height: 0;
635
+ }
636
+
637
+ .min-h-screen {
638
+ min-height: 100vh;
639
+ }
640
+
584
641
  .w-3 {
585
642
  width: calc(var(--spacing) * 3);
586
643
  }
@@ -617,6 +674,10 @@
617
674
  width: calc(var(--spacing) * 48);
618
675
  }
619
676
 
677
+ .w-96 {
678
+ width: calc(var(--spacing) * 96);
679
+ }
680
+
620
681
  .w-\[45\%\] {
621
682
  width: 45%;
622
683
  }
@@ -745,12 +806,28 @@
745
806
  margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));
746
807
  }
747
808
 
809
+ :where(.space-y-2 > :not(:last-child)) {
810
+ --tw-space-y-reverse: 0;
811
+ margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));
812
+ margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
813
+ }
814
+
815
+ :where(.space-y-4 > :not(:last-child)) {
816
+ --tw-space-y-reverse: 0;
817
+ margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
818
+ margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
819
+ }
820
+
748
821
  .truncate {
749
822
  text-overflow: ellipsis;
750
823
  white-space: nowrap;
751
824
  overflow: hidden;
752
825
  }
753
826
 
827
+ .overflow-auto {
828
+ overflow: auto;
829
+ }
830
+
754
831
  .overflow-hidden {
755
832
  overflow: hidden;
756
833
  }
@@ -781,6 +858,11 @@
781
858
  border-top-width: 1px;
782
859
  }
783
860
 
861
+ .border-r {
862
+ border-right-style: var(--tw-border-style);
863
+ border-right-width: 1px;
864
+ }
865
+
784
866
  .border-b {
785
867
  border-bottom-style: var(--tw-border-style);
786
868
  border-bottom-width: 1px;
@@ -898,6 +980,10 @@
898
980
  background-color: var(--color-gray-50);
899
981
  }
900
982
 
983
+ .bg-gray-100 {
984
+ background-color: var(--color-gray-100);
985
+ }
986
+
901
987
  .bg-green-600 {
902
988
  background-color: var(--color-green-600);
903
989
  }
@@ -966,6 +1052,10 @@
966
1052
  padding: calc(var(--spacing) * 2);
967
1053
  }
968
1054
 
1055
+ .p-6 {
1056
+ padding: calc(var(--spacing) * 6);
1057
+ }
1058
+
969
1059
  .px-1 {
970
1060
  padding-inline: var(--spacing);
971
1061
  }
@@ -1076,6 +1166,11 @@
1076
1166
  line-height: var(--tw-leading, var(--text-sm--line-height));
1077
1167
  }
1078
1168
 
1169
+ .text-xl {
1170
+ font-size: var(--text-xl);
1171
+ line-height: var(--tw-leading, var(--text-xl--line-height));
1172
+ }
1173
+
1079
1174
  .text-xs {
1080
1175
  font-size: var(--text-xs);
1081
1176
  line-height: var(--tw-leading, var(--text-xs--line-height));
@@ -1160,6 +1255,10 @@
1160
1255
  color: var(--color-gray-800);
1161
1256
  }
1162
1257
 
1258
+ .text-gray-900 {
1259
+ color: var(--color-gray-900);
1260
+ }
1261
+
1163
1262
  .text-green-400 {
1164
1263
  color: var(--color-green-400);
1165
1264
  }
@@ -1629,19 +1728,20 @@
1629
1728
  transform: rotate(360deg);
1630
1729
  }
1631
1730
  }
1632
-
1633
- .bottom-bar-wrapper[data-v-f8c0d52b] {
1731
+ /*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
1732
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-space-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-outline-style:solid;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1}}}@layer theme{:root,:host{--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-400:oklch(70.4% .191 22.216);--color-red-600:oklch(57.7% .245 27.325);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-700:oklch(55.5% .163 48.998);--color-emerald-500:oklch(69.6% .17 162.48);--color-cyan-500:oklch(71.5% .143 215.221);--color-sky-500:oklch(68.5% .169 237.323);--color-violet-500:oklch(60.6% .25 292.717);--color-fuchsia-500:oklch(66.7% .295 322.15);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-500:oklch(64.5% .246 16.439);--color-rose-600:oklch(58.6% .253 17.585);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-100:oklch(96.7% .003 264.542);--color-gray-200:oklch(92.8% .006 264.531);--color-stone-50:oklch(98.5% .001 106.423);--color-stone-100:oklch(97% .001 106.424);--color-stone-200:oklch(92.3% .003 48.717);--color-stone-300:oklch(86.9% .005 56.366);--color-stone-400:oklch(70.9% .01 56.259);--color-stone-500:oklch(55.3% .013 58.071);--color-stone-600:oklch(44.4% .011 73.639);--color-stone-700:oklch(37.4% .01 67.558);--color-stone-900:oklch(21.6% .006 56.043);--color-white:#fff;--spacing:.25rem;--container-2xl:42rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--font-weight-extrabold:800;--tracking-wide:.025em;--tracking-wider:.05em;--leading-tight:1.25;--leading-snug:1.375;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--aspect-video:16 / 9;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1)}}@layer base,components;@layer utilities{.\@container{container-type:inline-size}.collapse{visibility:collapse}.invisible{visibility:hidden}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.inset-0{inset:0}.-top-20{top:calc(var(--spacing) * -20)}.top-0{top:0}.top-5{top:calc(var(--spacing) * 5)}.top-\[52px\]{top:52px}.-right-8{right:calc(var(--spacing) * -8)}.right-0{right:0}.right-1{right:var(--spacing)}.right-4{right:calc(var(--spacing) * 4)}.right-6{right:calc(var(--spacing) * 6)}.-bottom-12{bottom:calc(var(--spacing) * -12)}.bottom-0{bottom:0}.bottom-2{bottom:calc(var(--spacing) * 2)}.bottom-5{bottom:calc(var(--spacing) * 5)}.-left-16{left:calc(var(--spacing) * -16)}.left-0{left:0}.left-1{left:var(--spacing)}.left-4{left:calc(var(--spacing) * 4)}.left-6{left:calc(var(--spacing) * 6)}.z-0{z-index:0}.z-10{z-index:10}.z-50{z-index:50}.z-\[1\]{z-index:1}.col-span-2{grid-column:span 2/span 2}.col-span-3{grid-column:span 3/span 3}.col-span-4{grid-column:span 4/span 4}.row-2{grid-row:2}.container{width:100%}@media (min-width:40rem){.container{max-width:40rem}}@media (min-width:48rem){.container{max-width:48rem}}@media (min-width:64rem){.container{max-width:64rem}}@media (min-width:80rem){.container{max-width:80rem}}@media (min-width:96rem){.container{max-width:96rem}}.mx-1{margin-inline:var(--spacing)}.mx-12{margin-inline:calc(var(--spacing) * 12)}.mx-auto{margin-inline:auto}.my-2{margin-block:calc(var(--spacing) * 2)}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mt-10{margin-top:calc(var(--spacing) * 10)}.mt-auto{margin-top:auto}.mr-2{margin-right:calc(var(--spacing) * 2)}.mb-1{margin-bottom:var(--spacing)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.mb-8{margin-bottom:calc(var(--spacing) * 8)}.ml-1{margin-left:var(--spacing)}.ml-2{margin-left:calc(var(--spacing) * 2)}.ml-3{margin-left:calc(var(--spacing) * 3)}.ml-6{margin-left:calc(var(--spacing) * 6)}.ml-auto{margin-left:auto}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.list-item{display:list-item}.table{display:table}.aspect-video{aspect-ratio:var(--aspect-video)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-10{height:calc(var(--spacing) * 10)}.h-16{height:calc(var(--spacing) * 16)}.h-\[2px\]{height:2px}.h-\[3px\]{height:3px}.h-\[280px\]{height:280px}.h-\[360px\]{height:360px}.h-full{height:100%}.max-h-1\/2{max-height:50%}.min-h-0{min-height:0}.w-1{width:var(--spacing)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-10{width:calc(var(--spacing) * 10)}.w-12{width:calc(var(--spacing) * 12)}.w-14{width:calc(var(--spacing) * 14)}.w-16{width:calc(var(--spacing) * 16)}.w-24{width:calc(var(--spacing) * 24)}.w-32{width:calc(var(--spacing) * 32)}.w-56{width:calc(var(--spacing) * 56)}.w-\[48px\]{width:48px}.w-\[280px\]{width:280px}.w-\[360px\]{width:360px}.w-full{width:100%}.w-px{width:1px}.max-w-2xl{max-width:var(--container-2xl)}.max-w-3xl{max-width:var(--container-3xl)}.max-w-none{max-width:none}.min-w-0{min-width:0}.min-w-\[80px\]{min-width:80px}.flex-1{flex:1}.flex-\[1\.5\]{flex:1.5}.shrink{flex-shrink:1}.shrink-0{flex-shrink:0}.flex-grow{flex-grow:1}.border-collapse{border-collapse:collapse}.rotate-180{rotate:180deg}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-cols-4{grid-template-columns:repeat(4,minmax(0,1fr))}.grid-rows-2{grid-template-rows:repeat(2,minmax(0,1fr))}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.content-center{align-content:center}.content-start{align-content:flex-start}.items-baseline{align-items:baseline}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.justify-start{justify-content:flex-start}.gap-1{gap:var(--spacing)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(var(--spacing) * var(--tw-space-y-reverse));margin-block-end:calc(var(--spacing) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}.self-start{align-self:flex-start}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-t{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.rounded-l{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-gray-200{border-color:var(--color-gray-200)}.border-red-400{border-color:var(--color-red-400)}.border-stone-200{border-color:var(--color-stone-200)}.border-stone-300{border-color:var(--color-stone-300)}.border-stone-700{border-color:var(--color-stone-700)}.border-transparent{border-color:#0000}.bg-\[\#0D1117\]{background-color:#0d1117}.bg-amber-500{background-color:var(--color-amber-500)}.bg-cyan-500{background-color:var(--color-cyan-500)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-fuchsia-500{background-color:var(--color-fuchsia-500)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-100{background-color:var(--color-gray-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-rose-500{background-color:var(--color-rose-500)}.bg-sky-500{background-color:var(--color-sky-500)}.bg-stone-50{background-color:var(--color-stone-50)}.bg-stone-50\/40{background-color:#fafaf966}@supports (color:color-mix(in lab, red, red)){.bg-stone-50\/40{background-color:color-mix(in oklab, var(--color-stone-50) 40%, transparent)}}.bg-stone-200{background-color:var(--color-stone-200)}.bg-stone-700{background-color:var(--color-stone-700)}.bg-violet-500{background-color:var(--color-violet-500)}.bg-white{background-color:var(--color-white)}.bg-white\/60{background-color:#fff9}@supports (color:color-mix(in lab, red, red)){.bg-white\/60{background-color:color-mix(in oklab, var(--color-white) 60%, transparent)}}.object-contain{object-fit:contain}.object-cover{object-fit:cover}.p-1{padding:var(--spacing)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.p-10{padding:calc(var(--spacing) * 10)}.px-1{padding-inline:var(--spacing)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.px-6{padding-inline:calc(var(--spacing) * 6)}.px-8{padding-inline:calc(var(--spacing) * 8)}.px-10{padding-inline:calc(var(--spacing) * 10)}.px-12{padding-inline:calc(var(--spacing) * 12)}.px-16{padding-inline:calc(var(--spacing) * 16)}.px-20{padding-inline:calc(var(--spacing) * 20)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.pt-3{padding-top:calc(var(--spacing) * 3)}.pt-8{padding-top:calc(var(--spacing) * 8)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pb-3{padding-bottom:calc(var(--spacing) * 3)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.text-\[13px\]{font-size:13px}.text-\[14px\]{font-size:14px}.text-\[15px\]{font-size:15px}.text-\[17px\]{font-size:17px}.text-\[19px\]{font-size:19px}.text-\[22px\]{font-size:22px}.text-\[32px\]{font-size:32px}.text-\[34px\]{font-size:34px}.text-\[36px\]{font-size:36px}.text-\[42px\]{font-size:42px}.text-\[48px\]{font-size:48px}.text-\[52px\]{font-size:52px}.text-\[60px\]{font-size:60px}.text-\[64px\]{font-size:64px}.text-\[68px\]{font-size:68px}.text-\[76px\]{font-size:76px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-extrabold{--tw-font-weight:var(--font-weight-extrabold);font-weight:var(--font-weight-extrabold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.16em\]{--tw-tracking:.16em;letter-spacing:.16em}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-500{color:var(--color-amber-500)}.text-amber-700{color:var(--color-amber-700)}.text-red-600{color:var(--color-red-600)}.text-rose-600{color:var(--color-rose-600)}.text-stone-400{color:var(--color-stone-400)}.text-stone-500{color:var(--color-stone-500)}.text-stone-600{color:var(--color-stone-600)}.text-stone-700{color:var(--color-stone-700)}.text-white{color:var(--color-white)}.text-white\/70{color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.text-white\/70{color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.uppercase{text-transform:uppercase}.italic{font-style:italic}.not-italic{font-style:normal}.opacity-10{opacity:.1}.opacity-80{opacity:.8}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-offset-2{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.invert{--tw-invert:invert(100%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}@media (hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-stone-300:hover{border-color:var(--color-stone-300)}.hover\:bg-red-50:hover{background-color:var(--color-red-50)}.hover\:bg-rose-100:hover{background-color:var(--color-rose-100)}.hover\:bg-stone-100:hover{background-color:var(--color-stone-100)}.hover\:bg-stone-200:hover{background-color:var(--color-stone-200)}.hover\:text-stone-900:hover{color:var(--color-stone-900)}}.disabled\:opacity-30:disabled{opacity:.3}@media (min-width:40rem){.sm\:inline{display:inline}}@container (min-width:48rem){.\@3xl\:max-h-none{max-height:none}.\@3xl\:w-\[var\(--beat-editor-pane-width\,24rem\)\]{width:var(--beat-editor-pane-width,24rem)}.\@3xl\:flex-row{flex-direction:row}.\@3xl\:border-t-0{border-top-style:var(--tw-border-style);border-top-width:0}.\@3xl\:border-l{border-left-style:var(--tw-border-style);border-left-width:1px}}}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}
1733
+ .bottom-bar-wrapper[data-v-87bf6e4c] {
1634
1734
  position: relative;
1635
1735
  flex-shrink: 0;
1636
1736
  }
1637
- .script-source[data-v-f8c0d52b] {
1737
+ .script-source[data-v-87bf6e4c] {
1638
1738
  padding: 0.5rem;
1639
1739
  background: #f5f5f5;
1640
1740
  border-top: 1px solid #e0e0e0;
1641
1741
  font-family: Consolas, "MS Gothic", "BIZ UDGothic", monospace;
1642
1742
  font-size: 0.85rem;
1643
1743
  }
1644
- .script-source summary[data-v-f8c0d52b] {
1744
+ .script-source summary[data-v-87bf6e4c] {
1645
1745
  cursor: pointer;
1646
1746
  user-select: none;
1647
1747
  padding: 0.5rem;
@@ -1650,13 +1750,13 @@
1650
1750
  font-weight: 500;
1651
1751
  color: #333;
1652
1752
  }
1653
- .script-source[open] summary[data-v-f8c0d52b] {
1753
+ .script-source[open] summary[data-v-87bf6e4c] {
1654
1754
  margin-bottom: 0.5rem;
1655
1755
  }
1656
- .script-source summary[data-v-f8c0d52b]:hover {
1756
+ .script-source summary[data-v-87bf6e4c]:hover {
1657
1757
  background: #d8d8d8;
1658
1758
  }
1659
- .script-editor[data-v-f8c0d52b] {
1759
+ .script-editor[data-v-87bf6e4c] {
1660
1760
  width: 100%;
1661
1761
  height: 40vh;
1662
1762
  padding: 1rem;
@@ -1670,23 +1770,23 @@
1670
1770
  margin-bottom: 0.5rem;
1671
1771
  line-height: 1.5;
1672
1772
  }
1673
- .script-editor[data-v-f8c0d52b]:focus {
1773
+ .script-editor[data-v-87bf6e4c]:focus {
1674
1774
  outline: none;
1675
1775
  border-color: #4caf50;
1676
1776
  box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.1);
1677
1777
  }
1678
- .script-editor-invalid[data-v-f8c0d52b] {
1778
+ .script-editor-invalid[data-v-87bf6e4c] {
1679
1779
  border-color: #ef4444;
1680
1780
  }
1681
- .script-editor-invalid[data-v-f8c0d52b]:focus {
1781
+ .script-editor-invalid[data-v-87bf6e4c]:focus {
1682
1782
  border-color: #ef4444;
1683
1783
  box-shadow: 0 0 0 2px rgba(239, 68, 68, 0.1);
1684
1784
  }
1685
- .editor-actions[data-v-f8c0d52b] {
1785
+ .editor-actions[data-v-87bf6e4c] {
1686
1786
  display: flex;
1687
1787
  justify-content: space-between;
1688
1788
  }
1689
- .apply-btn[data-v-f8c0d52b] {
1789
+ .apply-btn[data-v-87bf6e4c] {
1690
1790
  padding: 0.5rem 1rem;
1691
1791
  background: #4caf50;
1692
1792
  color: white;
@@ -1697,16 +1797,16 @@
1697
1797
  transition: background 0.2s;
1698
1798
  font-weight: 500;
1699
1799
  }
1700
- .apply-btn[data-v-f8c0d52b]:hover {
1800
+ .apply-btn[data-v-87bf6e4c]:hover {
1701
1801
  background: #45a049;
1702
1802
  }
1703
- .apply-btn[data-v-f8c0d52b]:disabled {
1803
+ .apply-btn[data-v-87bf6e4c]:disabled {
1704
1804
  background: #cccccc;
1705
1805
  color: #666666;
1706
1806
  cursor: not-allowed;
1707
1807
  opacity: 0.6;
1708
1808
  }
1709
- .cancel-btn[data-v-f8c0d52b] {
1809
+ .cancel-btn[data-v-87bf6e4c] {
1710
1810
  padding: 0.5rem 1rem;
1711
1811
  background: #e0e0e0;
1712
1812
  color: #333;
@@ -1717,10 +1817,10 @@
1717
1817
  transition: background 0.2s;
1718
1818
  font-weight: 500;
1719
1819
  }
1720
- .cancel-btn[data-v-f8c0d52b]:hover {
1820
+ .cancel-btn[data-v-87bf6e4c]:hover {
1721
1821
  background: #d0d0d0;
1722
1822
  }
1723
- .copy-btn[data-v-f8c0d52b] {
1823
+ .copy-btn[data-v-87bf6e4c] {
1724
1824
  position: absolute;
1725
1825
  bottom: 0.3rem;
1726
1826
  right: 0.65rem;
@@ -1731,10 +1831,10 @@
1731
1831
  cursor: pointer;
1732
1832
  z-index: 1;
1733
1833
  }
1734
- .copy-btn[data-v-f8c0d52b]:hover {
1834
+ .copy-btn[data-v-87bf6e4c]:hover {
1735
1835
  color: #000;
1736
1836
  }
1737
- .copy-btn .material-icons[data-v-f8c0d52b] {
1837
+ .copy-btn .material-icons[data-v-87bf6e4c] {
1738
1838
  font-size: 1.15rem;
1739
1839
  }
1740
1840
  /*$vite$:1*/
@@ -1 +1 @@
1
- {"version":3,"file":"View.vue.d.ts","sourceRoot":"","sources":["../../src/vue/View.vue"],"names":[],"mappings":"AAy1CA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA6CrD,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;CACrD,CAAC;AAk7DF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"View.vue.d.ts","sourceRoot":"","sources":["../../src/vue/View.vue"],"names":[],"mappings":"AAk3CA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AA8CrD,KAAK,WAAW,GAAG;IACjB,cAAc,EAAE,kBAAkB,CAAC,eAAe,CAAC,CAAC;CACrD,CAAC;AAk8DF,QAAA,MAAM,YAAY;;;;kFAGhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -14,5 +14,6 @@ export declare function useDeckEditor({ api, filePath, effectiveScript, commitSc
14
14
  deckScriptInput: ComputedRef<DeckScriptShape>;
15
15
  onDeckUpdate: (next: DeckScriptShape) => void;
16
16
  flushPendingDeckSave: () => void;
17
+ watchForeignWrites: (reload: () => void) => () => void;
17
18
  };
18
19
  //# sourceMappingURL=useDeckEditor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDeckEditor.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useDeckEditor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIjE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C;gFAC4E;IAC5E,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;yBA+BtE,eAAe,KAAG,IAAI;gCAOjB,IAAI;EAQtC"}
1
+ {"version":3,"file":"useDeckEditor.d.ts","sourceRoot":"","sources":["../../../src/vue/composables/useDeckEditor.ts"],"names":[],"mappings":"AAMA,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,KAAK,CAAC;AAEjD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAgBjE,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,oBAAoB,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,eAAe,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C;gFAC4E;IAC5E,YAAY,EAAE,CAAC,IAAI,EAAE,WAAW,KAAK,IAAI,CAAC;CAC3C;AAED,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,EAAE,oBAAoB;;;yBA+BtE,eAAe,KAAG,IAAI;gCAOjB,IAAI;iCAcD,MAAM,IAAI,KAAG,MAAM,IAAI;EAY5D"}
@@ -70,8 +70,8 @@ export declare function isBeatImageReference(beat: {
70
70
  };
71
71
  }): boolean;
72
72
  /** Pure check: is every beat in the script a `slide`-typed beat?
73
- * When true, the View mounts `@mulmocast/deck-web`'s
74
- * `MulmoScriptDeckEditor` instead of the per-beat list UI (#1575).
73
+ * When true, the View mounts `@mulmocast/beat-editor`'s
74
+ * `BeatListEditor` instead of the per-beat list UI (#1575).
75
75
  * Empty / missing `beats[]` returns false — there's nothing to edit
76
76
  * as a deck, fall through to the existing UI which renders an empty
77
77
  * state. Mixed scripts (any non-`slide` beat) also return false; that
@@ -1,4 +1,5 @@
1
1
  import "../style.css";
2
+ import "@mulmocast/beat-editor/style.css";
2
3
  import type { ToolPlugin } from "gui-chat-protocol/vue";
3
4
  import type { MulmoScriptData, SaveMulmoScriptArgs } from "../core/types";
4
5
  import View from "./View.vue";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,OAAO,MAAM,eAAe,CAAC;AAEpC,eAAO,MAAM,MAAM,EAAE,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,mBAAmB,CAIpF,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACrG,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1J,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;;;AAEzB,wBAA0B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vue/index.ts"],"names":[],"mappings":"AAAA,OAAO,cAAc,CAAC;AAMtB,OAAO,kCAAkC,CAAC;AAE1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,IAAI,MAAM,YAAY,CAAC;AAC9B,OAAO,OAAO,MAAM,eAAe,CAAC;AAEpC,eAAO,MAAM,MAAM,EAAE,UAAU,CAAC,eAAe,EAAE,eAAe,EAAE,mBAAmB,CAIpF,CAAC;AAEF,YAAY,EAAE,eAAe,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACrG,YAAY,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC1J,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,4BAA4B,EAAE,cAAc,EAAE,KAAK,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EAAE,uBAAuB,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AACvG,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;;;;AAEzB,wBAA0B"}
@@ -14,6 +14,9 @@ export interface MulmoScriptTransport {
14
14
  /** Subscribe to the host's generation channel, pre-filtered to one
15
15
  * script's wire path. Returns the unsubscribe function. */
16
16
  onGenerationEvent(filePath: () => string, handler: (event: MulmoScriptGenerationEvent) => void): () => void;
17
+ /** Subscribe to writes of one script, skipping the echo of this View's own
18
+ * (`ownOrigin`). Returns the unsubscribe function. */
19
+ onScriptChanged(filePath: () => string, ownOrigin: string, handler: () => void): () => void;
17
20
  }
18
21
  export declare function useMulmoScriptTransport(): MulmoScriptTransport;
19
22
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/vue/transport.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAKvH,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,KAAK,OAAO,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAkBtH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnI;gEAC4D;IAC5D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7G;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CA4B9D"}
1
+ {"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/vue/transport.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAA2B,uBAAuB,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AAKhJ,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,KAAK,OAAO,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,uBAAuB,EAAE;IAAE,IAAI,EAAE,CAAC,CAAA;CAAE,CAAC,EAAE,MAAM,CAAC,CAAC;AAyBtH,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,CAAC,SAAS,uBAAuB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnI;gEAC4D;IAC5D,iBAAiB,CAAC,QAAQ,EAAE,MAAM,MAAM,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,0BAA0B,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC5G;2DACuD;IACvD,eAAe,CAAC,QAAQ,EAAE,MAAM,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC;CAC7F;AAED,wBAAgB,uBAAuB,IAAI,oBAAoB,CA4C9D"}
@@ -1,4 +1,4 @@
1
- import type { SlideLayout, SlideTheme } from "@mulmocast/deck-web";
1
+ import type { SlideLayout, SlideTheme } from "@mulmocast/beat-editor";
2
2
  import type { Beat } from "./helpers";
3
3
  export interface ImageEntry {
4
4
  type: string;
@@ -1 +1 @@
1
- {"version":3,"file":"viewTypes.d.ts","sourceRoot":"","sources":["../../src/vue/viewTypes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;mDAEmD;AACnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;IACF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IACrC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB"}
1
+ {"version":3,"file":"viewTypes.d.ts","sourceRoot":"","sources":["../../src/vue/viewTypes.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEtC,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;mDAEmD;AACnD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACnC;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAMD,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,WAAW,CAAC;QACpB,KAAK,CAAC,EAAE,UAAU,CAAC;QACnB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;KACtB,CAAC;IACF,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,KAAK,CAAC,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,CAAC;IAC7D,WAAW,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,UAAU,CAAA;KAAE,CAAC;IACrC,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACtB"}
package/dist/vue.cjs CHANGED
@@ -3,9 +3,10 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_plugin = require("./plugin-BLp8tSYt.cjs");
6
- const require_contract = require("./contract-DxKVCRQk.cjs");
6
+ const require_contract = require("./contract-BhN3yKJC.cjs");
7
7
  let _mulmocast_types = require("@mulmocast/types");
8
8
  let vue = require("vue");
9
+ let _mulmocast_beat_editor = require("@mulmocast/beat-editor");
9
10
  let gui_chat_protocol_vue = require("gui-chat-protocol/vue");
10
11
  //#region src/vue/support.ts
11
12
  function isRecord(value) {
@@ -119,8 +120,8 @@ function isBeatImageReference(beat) {
119
120
  return beat.image?.type === "beat";
120
121
  }
121
122
  /** Pure check: is every beat in the script a `slide`-typed beat?
122
- * When true, the View mounts `@mulmocast/deck-web`'s
123
- * `MulmoScriptDeckEditor` instead of the per-beat list UI (#1575).
123
+ * When true, the View mounts `@mulmocast/beat-editor`'s
124
+ * `BeatListEditor` instead of the per-beat list UI (#1575).
124
125
  * Empty / missing `beats[]` returns false — there's nothing to edit
125
126
  * as a deck, fall through to the existing UI which renders an empty
126
127
  * state. Mixed scripts (any non-`slide` beat) also return false; that
@@ -212,6 +213,15 @@ var GENERATION_EVENT_KINDS = /* @__PURE__ */ new Set([
212
213
  "movie",
213
214
  "pdf"
214
215
  ]);
216
+ function parseScriptChangedEvent(payload) {
217
+ if (!isRecord(payload)) return null;
218
+ const { filePath, origin } = payload;
219
+ if (typeof filePath !== "string") return null;
220
+ return {
221
+ filePath,
222
+ ...typeof origin === "string" ? { origin } : {}
223
+ };
224
+ }
215
225
  function parseGenerationEvent(payload) {
216
226
  if (!isRecord(payload)) return null;
217
227
  const { kind, filePath, key, done, error } = payload;
@@ -258,9 +268,25 @@ function useMulmoScriptTransport() {
258
268
  handler(event);
259
269
  });
260
270
  }
271
+ /**
272
+ * A write to this script landed — reload from disk.
273
+ *
274
+ * `ownOrigin` is this View's id. Its own writes echo back on the same channel, and acting
275
+ * on them would rebuild the element the caret is in on every keystroke, so they are dropped
276
+ * here. A write from the agent carries no origin and always reaches the handler.
277
+ */
278
+ function onScriptChanged(filePath, ownOrigin, handler) {
279
+ return runtime.pubsub.subscribe(require_contract.SCRIPT_CHANGED_EVENT, (payload) => {
280
+ const event = parseScriptChangedEvent(payload);
281
+ if (!event) return;
282
+ if (!require_contract.shouldReloadForScriptChange(event, filePath(), ownOrigin)) return;
283
+ handler();
284
+ });
285
+ }
261
286
  return {
262
287
  call,
263
- onGenerationEvent
288
+ onGenerationEvent,
289
+ onScriptChanged
264
290
  };
265
291
  }
266
292
  //#endregion
@@ -554,6 +580,17 @@ function useCharacterImages({ api, filePath, chatSessionId, getImages }) {
554
580
  //#endregion
555
581
  //#region src/vue/composables/useDeckEditor.ts
556
582
  var DECK_SAVE_DEBOUNCE_MS = 300;
583
+ /**
584
+ * Who this editor is, on the wire.
585
+ *
586
+ * Every write carries it so the server's "this script changed" broadcast can be told apart
587
+ * from someone else's. Without it a save would echo back and reload the editor mid-keystroke,
588
+ * rebuilding the element the caret sits in.
589
+ *
590
+ * Per module instance rather than per component: one View is mounted at a time, and a value
591
+ * that survives a remount keeps a save in flight from being mistaken for a foreign write.
592
+ */
593
+ var EDITOR_ORIGIN = `deck-editor-${Math.random().toString(36).slice(2)}`;
557
594
  function useDeckEditor({ api, filePath, effectiveScript, commitScript }) {
558
595
  const isDeck = (0, vue.computed)(() => isAllSlideDeck(effectiveScript.value));
559
596
  const deckScriptInput = (0, vue.computed)(() => effectiveScript.value);
@@ -573,7 +610,8 @@ function useDeckEditor({ api, filePath, effectiveScript, commitScript }) {
573
610
  if (!next || !filePath.value) return;
574
611
  const response = await api.call("updateScript", {
575
612
  filePath: filePath.value,
576
- script: next
613
+ script: next,
614
+ origin: EDITOR_ORIGIN
577
615
  });
578
616
  if (!response.ok) {
579
617
  console.error("[presentMulmoScript] deck save failed:", response.error);
@@ -590,11 +628,25 @@ function useDeckEditor({ api, filePath, effectiveScript, commitScript }) {
590
628
  flushDeckSave();
591
629
  }
592
630
  }
631
+ /**
632
+ * Reload when someone else writes this script — the agent, or another window.
633
+ *
634
+ * A pending local edit is flushed first rather than dropped: the user's keystrokes are the
635
+ * thing they would notice losing, and the write that triggered this has already landed, so
636
+ * flushing cannot clobber it out of order.
637
+ */
638
+ function watchForeignWrites(reload) {
639
+ return api.onScriptChanged(() => filePath.value, EDITOR_ORIGIN, () => {
640
+ flushPendingDeckSave();
641
+ reload();
642
+ });
643
+ }
593
644
  return {
594
645
  isDeck,
595
646
  deckScriptInput,
596
647
  onDeckUpdate,
597
- flushPendingDeckSave
648
+ flushPendingDeckSave,
649
+ watchForeignWrites
598
650
  };
599
651
  }
600
652
  /** Reactive message bundle for the active host locale. The plugin carries its
@@ -1376,7 +1428,7 @@ var View_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vue.def
1376
1428
  props: { selectedResult: {} },
1377
1429
  emits: ["updateResult"],
1378
1430
  setup(__props, { emit: __emit }) {
1379
- const MulmoScriptDeckEditor = (0, vue.defineAsyncComponent)(() => import("@mulmocast/deck-web").then((mod) => mod.MulmoScriptDeckEditor));
1431
+ const BeatListEditor = (0, vue.defineAsyncComponent)(() => import("@mulmocast/beat-editor").then((mod) => mod.BeatListEditor));
1380
1432
  const api = useMulmoScriptTransport();
1381
1433
  const adapter = useHostAdapter();
1382
1434
  const canFetchMedia = (0, vue.computed)(() => Boolean(adapter.fetchMediaBlob));
@@ -1537,16 +1589,24 @@ var View_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vue.def
1537
1589
  }
1538
1590
  });
1539
1591
  }
1540
- const { isDeck, deckScriptInput, onDeckUpdate, flushPendingDeckSave } = useDeckEditor({
1592
+ const { isDeck, deckScriptInput, onDeckUpdate, flushPendingDeckSave, watchForeignWrites } = useDeckEditor({
1541
1593
  api,
1542
1594
  filePath,
1543
1595
  effectiveScript,
1544
1596
  commitScript
1545
1597
  });
1598
+ const unsubscribeForeignWrites = watchForeignWrites(() => {
1599
+ refreshScriptFromDisk();
1600
+ });
1601
+ const deckBeats = (0, vue.computed)(() => (0, _mulmocast_beat_editor.beatsOf)(deckScriptInput.value));
1602
+ function onDeckBeatsUpdate(beats) {
1603
+ onDeckUpdate((0, _mulmocast_beat_editor.withBeats)(deckScriptInput.value, beats));
1604
+ }
1546
1605
  (0, vue.onBeforeUnmount)(() => {
1547
1606
  flushPendingDeckSave();
1548
1607
  resetBeatMovies();
1549
1608
  unsubscribeGenerationEvents();
1609
+ unsubscribeForeignWrites();
1550
1610
  });
1551
1611
  const loadedSource = (0, vue.ref)("");
1552
1612
  const sourceChanged = (0, vue.computed)(() => editableSource.value !== loadedSource.value);
@@ -2019,11 +2079,10 @@ var View_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ (0, vue.def
2019
2079
  "onCharDrop",
2020
2080
  "onRenderCharacter"
2021
2081
  ])) : (0, vue.createCommentVNode)("", true),
2022
- (0, vue.unref)(isDeck) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_14, [(0, vue.createVNode)((0, vue.unref)(MulmoScriptDeckEditor), {
2023
- script: (0, vue.unref)(deckScriptInput),
2024
- layout: "compact",
2025
- "onUpdate:script": (0, vue.unref)(onDeckUpdate)
2026
- }, null, 8, ["script", "onUpdate:script"])])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
2082
+ (0, vue.unref)(isDeck) ? ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", _hoisted_14, [(0, vue.createVNode)((0, vue.unref)(BeatListEditor), {
2083
+ beats: deckBeats.value,
2084
+ "onUpdate:beats": onDeckBeatsUpdate
2085
+ }, null, 8, ["beats"])])) : ((0, vue.openBlock)(), (0, vue.createElementBlock)("div", {
2027
2086
  key: 3,
2028
2087
  ref_key: "beatListEl",
2029
2088
  ref: beatListEl,
@@ -2225,7 +2284,7 @@ var _plugin_vue_export_helper_default = (sfc, props) => {
2225
2284
  };
2226
2285
  //#endregion
2227
2286
  //#region src/vue/View.vue
2228
- var View_default = /*#__PURE__*/ _plugin_vue_export_helper_default(View_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-f8c0d52b"]]);
2287
+ var View_default = /*#__PURE__*/ _plugin_vue_export_helper_default(View_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-87bf6e4c"]]);
2229
2288
  //#endregion
2230
2289
  //#region src/vue/Preview.vue?vue&type=script&setup=true&lang.ts
2231
2290
  var _hoisted_1 = {