@bendyline/squisq-editor-react 2.13.15 → 2.13.16

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.
@@ -46,13 +46,12 @@ import {
46
46
  ShapePalette
47
47
  } from "./chunk-HLU6ZBS7.js";
48
48
  import {
49
- BlockThumbnail,
50
49
  RecorderPanel,
51
50
  buildPreviewDoc,
52
51
  documentTitleFromFileName,
53
52
  resolveBlockVisual,
54
53
  useModalDialog
55
- } from "./chunk-FOKUOC7E.js";
54
+ } from "./chunk-ECS2FFXA.js";
56
55
  import {
57
56
  Icon
58
57
  } from "./chunk-UYB5CPRE.js";
@@ -35732,7 +35731,7 @@ function startNarrationTimingJob(input) {
35732
35731
  else jobs.delete(input.src);
35733
35732
  notify();
35734
35733
  };
35735
- import("./narrationTimingsFromAudio-ICMDSWPI.js").then(
35734
+ import("./narrationTimingsFromAudio-O67QKISS.js").then(
35736
35735
  ({ updateNarrationTimingsFromAudio }) => updateNarrationTimingsFromAudio({
35737
35736
  ...input,
35738
35737
  signal: job.abort.signal,
@@ -39338,13 +39337,37 @@ import { useCallback as useCallback49, useEffect as useEffect64, useMemo as useM
39338
39337
  import {
39339
39338
  resolveMediaSchedule as resolveMediaSchedule2,
39340
39339
  getDocPlaybackDuration,
39341
- VIEWPORT_PRESETS as VIEWPORT_PRESETS6
39340
+ VIEWPORT_PRESETS as VIEWPORT_PRESETS7
39342
39341
  } from "@bendyline/squisq/schemas";
39343
39342
  import { flattenBlocks as flattenBlocks5, DEFAULT_THEME as DEFAULT_THEME6, getPinnedBlockMeta } from "@bendyline/squisq/doc";
39344
39343
  import { createMediaTimeMap } from "@bendyline/squisq/mediaEdit";
39345
39344
  import { usesDynamicPresentation } from "@bendyline/squisq/transform";
39346
39345
  import { useProcessedAudio as useProcessedAudio2 } from "@bendyline/squisq-video-react/media-edit";
39347
- import { MediaClipLayer, MediaContext as MediaContext5 } from "@bendyline/squisq-react";
39346
+ import { MediaClipLayer, MediaContext as MediaContext6 } from "@bendyline/squisq-react";
39347
+
39348
+ // src/TimelineBlockPreview.tsx
39349
+ import { memo as memo2 } from "react";
39350
+ import { VIEWPORT_PRESETS as VIEWPORT_PRESETS6 } from "@bendyline/squisq/schemas";
39351
+ import { BlockRenderer as BlockRenderer4, MediaContext as MediaContext5 } from "@bendyline/squisq-react";
39352
+ import { jsx as jsx78 } from "react/jsx-runtime";
39353
+ var BlockThumbnail = memo2(function BlockThumbnail2({
39354
+ visual,
39355
+ buildPlayback = "all",
39356
+ viewport = VIEWPORT_PRESETS6.landscape,
39357
+ basePath = "/",
39358
+ mediaProvider = null
39359
+ }) {
39360
+ return /* @__PURE__ */ jsx78(MediaContext5.Provider, { value: mediaProvider, children: /* @__PURE__ */ jsx78(
39361
+ BlockRenderer4,
39362
+ {
39363
+ buildPlayback,
39364
+ block: visual,
39365
+ blockTime: 0,
39366
+ basePath,
39367
+ viewport
39368
+ }
39369
+ ) });
39370
+ });
39348
39371
 
39349
39372
  // src/useTimelineClock.ts
39350
39373
  import { useCallback as useCallback48, useEffect as useEffect62, useRef as useRef56, useState as useState73 } from "react";
@@ -39479,7 +39502,7 @@ function timelineBars(clips) {
39479
39502
  // src/TimelineItemMenu.tsx
39480
39503
  import { useEffect as useEffect63, useLayoutEffect as useLayoutEffect14, useRef as useRef57, useState as useState74 } from "react";
39481
39504
  import { createPortal as createPortal16 } from "react-dom";
39482
- import { Fragment as Fragment27, jsx as jsx78, jsxs as jsxs63 } from "react/jsx-runtime";
39505
+ import { Fragment as Fragment27, jsx as jsx79, jsxs as jsxs63 } from "react/jsx-runtime";
39483
39506
  function TimelineItemMenu({
39484
39507
  anchor,
39485
39508
  target,
@@ -39540,10 +39563,10 @@ function TimelineItemMenu({
39540
39563
  style: { ...style, ...accentStyle(accentColor) },
39541
39564
  children: [
39542
39565
  /* @__PURE__ */ jsxs63("div", { className: "squisq-timeline-item-menu-header", children: [
39543
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-kind", children: target.kind === "block" ? "Block" : "Video" }),
39544
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-title", title: target.title, children: target.title })
39566
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-kind", children: target.kind === "block" ? "Block" : "Video" }),
39567
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-title", title: target.title, children: target.title })
39545
39568
  ] }),
39546
- target.kind === "block" ? /* @__PURE__ */ jsx78(
39569
+ target.kind === "block" ? /* @__PURE__ */ jsx79(
39547
39570
  BlockMenu,
39548
39571
  {
39549
39572
  target,
@@ -39555,8 +39578,8 @@ function TimelineItemMenu({
39555
39578
  onTransition: onBlockTransition
39556
39579
  }
39557
39580
  ) : /* @__PURE__ */ jsxs63(Fragment27, { children: [
39558
- /* @__PURE__ */ jsx78(VideoMenu, { target, onPatch: onVideoPatch }),
39559
- onEditMedia && /* @__PURE__ */ jsx78(
39581
+ /* @__PURE__ */ jsx79(VideoMenu, { target, onPatch: onVideoPatch }),
39582
+ onEditMedia && /* @__PURE__ */ jsx79(
39560
39583
  "button",
39561
39584
  {
39562
39585
  type: "button",
@@ -39607,7 +39630,7 @@ function BlockMenu({
39607
39630
  "Dynamic slides time each slide from the narration or reading pace, so this section's length and start can't be pinned.",
39608
39631
  pinned && " A pinned time here stops a narrated deck from playing."
39609
39632
  ] }),
39610
- pinned && onClearTiming && /* @__PURE__ */ jsx78(
39633
+ pinned && onClearTiming && /* @__PURE__ */ jsx79(
39611
39634
  "button",
39612
39635
  {
39613
39636
  type: "button",
@@ -39622,7 +39645,7 @@ function BlockMenu({
39622
39645
  )
39623
39646
  ] }) : /* @__PURE__ */ jsxs63(Fragment27, { children: [
39624
39647
  /* @__PURE__ */ jsxs63("label", { className: "squisq-timeline-item-menu-check", children: [
39625
- /* @__PURE__ */ jsx78(
39648
+ /* @__PURE__ */ jsx79(
39626
39649
  "input",
39627
39650
  {
39628
39651
  type: "checkbox",
@@ -39630,10 +39653,10 @@ function BlockMenu({
39630
39653
  onChange: (event) => toggleAutotime(event.target.checked)
39631
39654
  }
39632
39655
  ),
39633
- /* @__PURE__ */ jsx78("span", { children: "Autotime block" })
39656
+ /* @__PURE__ */ jsx79("span", { children: "Autotime block" })
39634
39657
  ] }),
39635
- /* @__PURE__ */ jsx78("p", { className: "squisq-timeline-item-menu-hint", children: "Uses narration, content, and interior media when no explicit duration is set." }),
39636
- /* @__PURE__ */ jsx78(
39658
+ /* @__PURE__ */ jsx79("p", { className: "squisq-timeline-item-menu-hint", children: "Uses narration, content, and interior media when no explicit duration is set." }),
39659
+ /* @__PURE__ */ jsx79(
39637
39660
  MenuNumberField,
39638
39661
  {
39639
39662
  label: "Duration",
@@ -39647,7 +39670,7 @@ function BlockMenu({
39647
39670
  }
39648
39671
  }
39649
39672
  ),
39650
- /* @__PURE__ */ jsx78(
39673
+ /* @__PURE__ */ jsx79(
39651
39674
  MenuNumberField,
39652
39675
  {
39653
39676
  label: "Start time",
@@ -39662,8 +39685,8 @@ function BlockMenu({
39662
39685
  )
39663
39686
  ] }),
39664
39687
  /* @__PURE__ */ jsxs63("div", { className: "squisq-timeline-item-menu-row", children: [
39665
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-label", children: "Transition" }),
39666
- /* @__PURE__ */ jsx78(
39688
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-label", children: "Transition" }),
39689
+ /* @__PURE__ */ jsx79(
39667
39690
  TransitionPicker,
39668
39691
  {
39669
39692
  value: transition,
@@ -39695,14 +39718,14 @@ function VideoMenu({
39695
39718
  ];
39696
39719
  return /* @__PURE__ */ jsxs63("div", { className: "squisq-timeline-item-menu-body", children: [
39697
39720
  /* @__PURE__ */ jsxs63("div", { className: "squisq-timeline-item-menu-field", children: [
39698
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-label", children: "Placement" }),
39699
- /* @__PURE__ */ jsx78(
39721
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-label", children: "Placement" }),
39722
+ /* @__PURE__ */ jsx79(
39700
39723
  "div",
39701
39724
  {
39702
39725
  className: "squisq-timeline-item-menu-segments",
39703
39726
  role: "group",
39704
39727
  "aria-label": "Video placement",
39705
- children: placementOptions.map((option) => /* @__PURE__ */ jsx78(
39728
+ children: placementOptions.map((option) => /* @__PURE__ */ jsx79(
39706
39729
  "button",
39707
39730
  {
39708
39731
  type: "button",
@@ -39724,7 +39747,7 @@ function VideoMenu({
39724
39747
  ] }),
39725
39748
  placed && /* @__PURE__ */ jsxs63(Fragment27, { children: [
39726
39749
  /* @__PURE__ */ jsxs63("label", { className: "squisq-timeline-item-menu-check", children: [
39727
- /* @__PURE__ */ jsx78(
39750
+ /* @__PURE__ */ jsx79(
39728
39751
  "input",
39729
39752
  {
39730
39753
  type: "checkbox",
@@ -39738,11 +39761,11 @@ function VideoMenu({
39738
39761
  }
39739
39762
  }
39740
39763
  ),
39741
- /* @__PURE__ */ jsx78("span", { children: "Lock to block" })
39764
+ /* @__PURE__ */ jsx79("span", { children: "Lock to block" })
39742
39765
  ] }),
39743
39766
  placement === "picture-in-picture" && /* @__PURE__ */ jsxs63(Fragment27, { children: [
39744
39767
  /* @__PURE__ */ jsxs63("label", { className: "squisq-timeline-item-menu-field", children: [
39745
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-label", children: "PIP size" }),
39768
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-label", children: "PIP size" }),
39746
39769
  /* @__PURE__ */ jsxs63(
39747
39770
  "select",
39748
39771
  {
@@ -39759,14 +39782,14 @@ function VideoMenu({
39759
39782
  titleCase(target.defaultPipSize),
39760
39783
  ")"
39761
39784
  ] }),
39762
- /* @__PURE__ */ jsx78("option", { value: "small", children: "Small" }),
39763
- /* @__PURE__ */ jsx78("option", { value: "large", children: "Large" })
39785
+ /* @__PURE__ */ jsx79("option", { value: "small", children: "Small" }),
39786
+ /* @__PURE__ */ jsx79("option", { value: "large", children: "Large" })
39764
39787
  ]
39765
39788
  }
39766
39789
  )
39767
39790
  ] }),
39768
39791
  /* @__PURE__ */ jsxs63("label", { className: "squisq-timeline-item-menu-field", children: [
39769
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-label", children: "PIP shape" }),
39792
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-label", children: "PIP shape" }),
39770
39793
  /* @__PURE__ */ jsxs63(
39771
39794
  "select",
39772
39795
  {
@@ -39783,14 +39806,14 @@ function VideoMenu({
39783
39806
  titleCase(target.defaultPipShape),
39784
39807
  ")"
39785
39808
  ] }),
39786
- /* @__PURE__ */ jsx78("option", { value: "square", children: "Square" }),
39787
- /* @__PURE__ */ jsx78("option", { value: "wide", children: "Wide (16:9)" })
39809
+ /* @__PURE__ */ jsx79("option", { value: "square", children: "Square" }),
39810
+ /* @__PURE__ */ jsx79("option", { value: "wide", children: "Wide (16:9)" })
39788
39811
  ]
39789
39812
  }
39790
39813
  )
39791
39814
  ] }),
39792
39815
  /* @__PURE__ */ jsxs63("label", { className: "squisq-timeline-item-menu-field", children: [
39793
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-label", children: "PIP position" }),
39816
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-label", children: "PIP position" }),
39794
39817
  /* @__PURE__ */ jsxs63(
39795
39818
  "select",
39796
39819
  {
@@ -39807,10 +39830,10 @@ function VideoMenu({
39807
39830
  positionLabel(target.defaultPipPosition),
39808
39831
  ")"
39809
39832
  ] }),
39810
- /* @__PURE__ */ jsx78("option", { value: "top-left", children: "Top left" }),
39811
- /* @__PURE__ */ jsx78("option", { value: "top-right", children: "Top right" }),
39812
- /* @__PURE__ */ jsx78("option", { value: "bottom-left", children: "Bottom left" }),
39813
- /* @__PURE__ */ jsx78("option", { value: "bottom-right", children: "Bottom right" })
39833
+ /* @__PURE__ */ jsx79("option", { value: "top-left", children: "Top left" }),
39834
+ /* @__PURE__ */ jsx79("option", { value: "top-right", children: "Top right" }),
39835
+ /* @__PURE__ */ jsx79("option", { value: "bottom-left", children: "Bottom left" }),
39836
+ /* @__PURE__ */ jsx79("option", { value: "bottom-right", children: "Bottom right" })
39814
39837
  ]
39815
39838
  }
39816
39839
  )
@@ -39828,9 +39851,9 @@ function MenuNumberField({
39828
39851
  onChange
39829
39852
  }) {
39830
39853
  return /* @__PURE__ */ jsxs63("label", { className: "squisq-timeline-item-menu-field", children: [
39831
- /* @__PURE__ */ jsx78("span", { className: "squisq-timeline-item-menu-label", children: label }),
39854
+ /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-item-menu-label", children: label }),
39832
39855
  /* @__PURE__ */ jsxs63("span", { className: "squisq-timeline-item-menu-number", children: [
39833
- /* @__PURE__ */ jsx78(
39856
+ /* @__PURE__ */ jsx79(
39834
39857
  "input",
39835
39858
  {
39836
39859
  type: "number",
@@ -39843,7 +39866,7 @@ function MenuNumberField({
39843
39866
  onChange: (event) => onChange(event.target.value)
39844
39867
  }
39845
39868
  ),
39846
- /* @__PURE__ */ jsx78("span", { children: "sec" })
39869
+ /* @__PURE__ */ jsx79("span", { children: "sec" })
39847
39870
  ] })
39848
39871
  ] });
39849
39872
  }
@@ -39888,8 +39911,8 @@ function menuStyle(anchor, element) {
39888
39911
  }
39889
39912
 
39890
39913
  // src/TimelineTrack.tsx
39891
- import { jsx as jsx79, jsxs as jsxs64 } from "react/jsx-runtime";
39892
- var PREVIEW_VIEWPORT = VIEWPORT_PRESETS6.landscape;
39914
+ import { jsx as jsx80, jsxs as jsxs64 } from "react/jsx-runtime";
39915
+ var PREVIEW_VIEWPORT = VIEWPORT_PRESETS7.landscape;
39893
39916
  var DEFAULT_PX_PER_SECOND = 18;
39894
39917
  var ZOOM_MIN = 4;
39895
39918
  var ZOOM_MAX = 160;
@@ -39911,9 +39934,9 @@ function TimelineVideoFilmstrip({
39911
39934
  FILMSTRIP_MAX_FRAMES,
39912
39935
  Math.max(1, Math.ceil(width / FILMSTRIP_FRAME_WIDTH))
39913
39936
  );
39914
- return /* @__PURE__ */ jsx79("div", { className: "squisq-timeline-video-filmstrip", "aria-hidden": "true", children: Array.from({ length: frameCount }, (_2, index2) => {
39937
+ return /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-video-filmstrip", "aria-hidden": "true", children: Array.from({ length: frameCount }, (_2, index2) => {
39915
39938
  const sampleTime = Math.max(0, sourceStart) + Math.max(0, sourceLength) * ((index2 + 0.5) / frameCount);
39916
- return /* @__PURE__ */ jsx79(
39939
+ return /* @__PURE__ */ jsx80(
39917
39940
  "video",
39918
39941
  {
39919
39942
  src: resolvedSrc,
@@ -40225,7 +40248,7 @@ function TimelineTrack({
40225
40248
  for (let t = 0; t <= rulerEnd + 1e-3 && ticks.length < 1e3; t += tickSeconds) ticks.push(t);
40226
40249
  return /* @__PURE__ */ jsxs64("div", { className: "squisq-timeline", style: { height }, "data-testid": "timeline-track", children: [
40227
40250
  /* @__PURE__ */ jsxs64("div", { className: "squisq-timeline-controls", children: [
40228
- /* @__PURE__ */ jsx79(
40251
+ /* @__PURE__ */ jsx80(
40229
40252
  "button",
40230
40253
  {
40231
40254
  type: "button",
@@ -40242,7 +40265,7 @@ function TimelineTrack({
40242
40265
  " / ",
40243
40266
  formatClock3(total)
40244
40267
  ] }),
40245
- /* @__PURE__ */ jsx79(
40268
+ /* @__PURE__ */ jsx80(
40246
40269
  "button",
40247
40270
  {
40248
40271
  type: "button",
@@ -40254,7 +40277,7 @@ function TimelineTrack({
40254
40277
  children: "\u2212"
40255
40278
  }
40256
40279
  ),
40257
- /* @__PURE__ */ jsx79(
40280
+ /* @__PURE__ */ jsx80(
40258
40281
  "button",
40259
40282
  {
40260
40283
  type: "button",
@@ -40267,8 +40290,8 @@ function TimelineTrack({
40267
40290
  }
40268
40291
  )
40269
40292
  ] }),
40270
- /* @__PURE__ */ jsx79("div", { className: "squisq-timeline-scroll", ref: scrollRef, children: /* @__PURE__ */ jsxs64("div", { className: "squisq-timeline-inner", style: { width }, children: [
40271
- /* @__PURE__ */ jsx79("div", { className: "squisq-timeline-row squisq-timeline-row--blocks", children: blocks.map((b, i) => {
40293
+ /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-scroll", ref: scrollRef, children: /* @__PURE__ */ jsxs64("div", { className: "squisq-timeline-inner", style: { width }, children: [
40294
+ /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-row squisq-timeline-row--blocks", children: blocks.map((b, i) => {
40272
40295
  const line = headingLine(b);
40273
40296
  const isActive = line != null && line === activeBlockStartLine;
40274
40297
  const left = previewLeft(i);
@@ -40285,7 +40308,7 @@ function TimelineTrack({
40285
40308
  if (line != null) goToBlockByLine(line);
40286
40309
  },
40287
40310
  children: [
40288
- visualByBlock.has(b.id) && /* @__PURE__ */ jsx79("div", { className: "squisq-timeline-block-thumb", "aria-hidden": true, children: /* @__PURE__ */ jsx79(
40311
+ visualByBlock.has(b.id) && /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-block-thumb", "aria-hidden": true, children: /* @__PURE__ */ jsx80(
40289
40312
  BlockThumbnail,
40290
40313
  {
40291
40314
  visual: visualByBlock.get(b.id),
@@ -40293,7 +40316,7 @@ function TimelineTrack({
40293
40316
  mediaProvider
40294
40317
  }
40295
40318
  ) }),
40296
- !timingLocked && prev && headingLine(prev) != null && /* @__PURE__ */ jsx79(
40319
+ !timingLocked && prev && headingLine(prev) != null && /* @__PURE__ */ jsx80(
40297
40320
  "span",
40298
40321
  {
40299
40322
  className: "squisq-timeline-edge squisq-timeline-edge--left",
@@ -40314,8 +40337,8 @@ function TimelineTrack({
40314
40337
  )
40315
40338
  }
40316
40339
  ),
40317
- /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-block-label", children: b.title ?? b.id }),
40318
- line != null && /* @__PURE__ */ jsx79(
40340
+ /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-block-label", children: b.title ?? b.id }),
40341
+ line != null && /* @__PURE__ */ jsx80(
40319
40342
  "button",
40320
40343
  {
40321
40344
  type: "button",
@@ -40337,7 +40360,7 @@ function TimelineTrack({
40337
40360
  children: "\u2026"
40338
40361
  }
40339
40362
  ),
40340
- !timingLocked && line != null && /* @__PURE__ */ jsx79(
40363
+ !timingLocked && line != null && /* @__PURE__ */ jsx80(
40341
40364
  "span",
40342
40365
  {
40343
40366
  className: "squisq-timeline-edge squisq-timeline-edge--right",
@@ -40386,7 +40409,7 @@ function TimelineTrack({
40386
40409
  ...raw.edits ? { edits: raw.edits } : {}
40387
40410
  } : { kind: c.kind, src: c.src, clipStart: c.sourceIn };
40388
40411
  };
40389
- return /* @__PURE__ */ jsx79(
40412
+ return /* @__PURE__ */ jsx80(
40390
40413
  "div",
40391
40414
  {
40392
40415
  className: "squisq-timeline-row squisq-timeline-row--media",
@@ -40423,7 +40446,7 @@ function TimelineTrack({
40423
40446
  if (next) setMarkdownSource(next);
40424
40447
  },
40425
40448
  children: [
40426
- c.kind === "video" && /* @__PURE__ */ jsx79(
40449
+ c.kind === "video" && /* @__PURE__ */ jsx80(
40427
40450
  TimelineVideoFilmstrip,
40428
40451
  {
40429
40452
  src: c.src,
@@ -40432,8 +40455,8 @@ function TimelineTrack({
40432
40455
  width: clipWidth
40433
40456
  }
40434
40457
  ),
40435
- /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-clip-label", children: timelineMediaLabel(c.src, c.kind) }),
40436
- cutMarks.map((at2) => /* @__PURE__ */ jsx79(
40458
+ /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-clip-label", children: timelineMediaLabel(c.src, c.kind) }),
40459
+ cutMarks.map((at2) => /* @__PURE__ */ jsx80(
40437
40460
  "span",
40438
40461
  {
40439
40462
  className: "squisq-timeline-cut-mark",
@@ -40442,7 +40465,7 @@ function TimelineTrack({
40442
40465
  },
40443
40466
  at2
40444
40467
  )),
40445
- c.kind === "video" && c.sourceLine != null && /* @__PURE__ */ jsx79(
40468
+ c.kind === "video" && c.sourceLine != null && /* @__PURE__ */ jsx80(
40446
40469
  "button",
40447
40470
  {
40448
40471
  type: "button",
@@ -40468,7 +40491,7 @@ function TimelineTrack({
40468
40491
  children: "\u2026"
40469
40492
  }
40470
40493
  ),
40471
- editable && /* @__PURE__ */ jsx79(
40494
+ editable && /* @__PURE__ */ jsx80(
40472
40495
  "span",
40473
40496
  {
40474
40497
  className: "squisq-timeline-edge squisq-timeline-edge--right",
@@ -40518,7 +40541,7 @@ function TimelineTrack({
40518
40541
  ...m.clipStart != null ? { clipStart: m.clipStart } : {},
40519
40542
  ...m.clipEnd != null ? { clipEnd: m.clipEnd } : {}
40520
40543
  };
40521
- return /* @__PURE__ */ jsx79(
40544
+ return /* @__PURE__ */ jsx80(
40522
40545
  "div",
40523
40546
  {
40524
40547
  className: "squisq-timeline-row squisq-timeline-row--media",
@@ -40545,7 +40568,7 @@ function TimelineTrack({
40545
40568
  { onClick: () => selectClipAt(b.startTime, b.id) }
40546
40569
  ),
40547
40570
  children: [
40548
- m.kind === "video" && /* @__PURE__ */ jsx79(
40571
+ m.kind === "video" && /* @__PURE__ */ jsx80(
40549
40572
  TimelineVideoFilmstrip,
40550
40573
  {
40551
40574
  src: m.src,
@@ -40554,8 +40577,8 @@ function TimelineTrack({
40554
40577
  width: clipWidth
40555
40578
  }
40556
40579
  ),
40557
- /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-clip-label", children: timelineMediaLabel(m.src, m.kind) }),
40558
- m.kind === "video" && m.sourceLine != null && /* @__PURE__ */ jsx79(
40580
+ /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-clip-label", children: timelineMediaLabel(m.src, m.kind) }),
40581
+ m.kind === "video" && m.sourceLine != null && /* @__PURE__ */ jsx80(
40559
40582
  "button",
40560
40583
  {
40561
40584
  type: "button",
@@ -40580,7 +40603,7 @@ function TimelineTrack({
40580
40603
  children: "\u2026"
40581
40604
  }
40582
40605
  ),
40583
- m.sourceLine != null && /* @__PURE__ */ jsx79(
40606
+ m.sourceLine != null && /* @__PURE__ */ jsx80(
40584
40607
  "span",
40585
40608
  {
40586
40609
  className: "squisq-timeline-edge squisq-timeline-edge--right",
@@ -40602,7 +40625,7 @@ function TimelineTrack({
40602
40625
  })
40603
40626
  )
40604
40627
  ] }),
40605
- /* @__PURE__ */ jsx79(
40628
+ /* @__PURE__ */ jsx80(
40606
40629
  "div",
40607
40630
  {
40608
40631
  className: "squisq-timeline-row squisq-timeline-row--ruler",
@@ -40610,10 +40633,10 @@ function TimelineTrack({
40610
40633
  const rect = e2.currentTarget.getBoundingClientRect();
40611
40634
  seek((e2.clientX - rect.left) / pxPerSecond);
40612
40635
  },
40613
- children: ticks.map((t) => /* @__PURE__ */ jsx79("div", { className: "squisq-timeline-tick", style: { left: t * pxPerSecond }, children: /* @__PURE__ */ jsx79("span", { className: "squisq-timeline-tick-label", children: formatDur(t) }) }, t))
40636
+ children: ticks.map((t) => /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-tick", style: { left: t * pxPerSecond }, children: /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-tick-label", children: formatDur(t) }) }, t))
40614
40637
  }
40615
40638
  ),
40616
- /* @__PURE__ */ jsx79(
40639
+ /* @__PURE__ */ jsx80(
40617
40640
  "div",
40618
40641
  {
40619
40642
  className: "squisq-timeline-playhead",
@@ -40625,11 +40648,11 @@ function TimelineTrack({
40625
40648
  pause();
40626
40649
  setScrubbing(true);
40627
40650
  },
40628
- children: /* @__PURE__ */ jsx79("div", { className: "squisq-timeline-playhead-knob" })
40651
+ children: /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-playhead-knob" })
40629
40652
  }
40630
40653
  )
40631
40654
  ] }) }),
40632
- /* @__PURE__ */ jsx79("div", { ref: activeClock.registerMediaHost, className: "squisq-timeline-media-host", "aria-hidden": true, children: /* @__PURE__ */ jsx79(MediaContext5.Provider, { value: mediaProvider ?? null, children: /* @__PURE__ */ jsx79(
40655
+ /* @__PURE__ */ jsx80("div", { ref: activeClock.registerMediaHost, className: "squisq-timeline-media-host", "aria-hidden": true, children: /* @__PURE__ */ jsx80(MediaContext6.Provider, { value: mediaProvider ?? null, children: /* @__PURE__ */ jsx80(
40633
40656
  MediaClipLayer,
40634
40657
  {
40635
40658
  schedule: playbackClips,
@@ -40638,7 +40661,7 @@ function TimelineTrack({
40638
40661
  basePath
40639
40662
  }
40640
40663
  ) }) }),
40641
- itemMenu && itemMenuTarget && /* @__PURE__ */ jsx79(
40664
+ itemMenu && itemMenuTarget && /* @__PURE__ */ jsx80(
40642
40665
  TimelineItemMenu,
40643
40666
  {
40644
40667
  anchor: itemMenu.anchor,
@@ -40709,7 +40732,7 @@ function formatDur(seconds) {
40709
40732
  // src/TimelineVideoPanel.tsx
40710
40733
  import { useMemo as useMemo50 } from "react";
40711
40734
  import { MediaClipLayer as MediaClipLayer2 } from "@bendyline/squisq-react";
40712
- import { jsx as jsx80, jsxs as jsxs65 } from "react/jsx-runtime";
40735
+ import { jsx as jsx81, jsxs as jsxs65 } from "react/jsx-runtime";
40713
40736
  function TimelineVideoPanel({
40714
40737
  schedule,
40715
40738
  currentTime,
@@ -40730,10 +40753,10 @@ function TimelineVideoPanel({
40730
40753
  "aria-label": "Timeline video preview",
40731
40754
  children: [
40732
40755
  /* @__PURE__ */ jsxs65("header", { className: "squisq-timeline-video-header", children: [
40733
- /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-video-title", children: "Video monitor" }),
40734
- /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-video-label", title: activeLabel, children: activeLabel }),
40735
- /* @__PURE__ */ jsx80("span", { className: "squisq-timeline-video-time", children: formatClock4(currentTime) }),
40736
- onClose && /* @__PURE__ */ jsx80(
40756
+ /* @__PURE__ */ jsx81("span", { className: "squisq-timeline-video-title", children: "Video monitor" }),
40757
+ /* @__PURE__ */ jsx81("span", { className: "squisq-timeline-video-label", title: activeLabel, children: activeLabel }),
40758
+ /* @__PURE__ */ jsx81("span", { className: "squisq-timeline-video-time", children: formatClock4(currentTime) }),
40759
+ onClose && /* @__PURE__ */ jsx81(
40737
40760
  "button",
40738
40761
  {
40739
40762
  type: "button",
@@ -40745,8 +40768,8 @@ function TimelineVideoPanel({
40745
40768
  }
40746
40769
  )
40747
40770
  ] }),
40748
- /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-video-body", children: /* @__PURE__ */ jsxs65("div", { className: "squisq-timeline-video-stage", children: [
40749
- /* @__PURE__ */ jsx80(
40771
+ /* @__PURE__ */ jsx81("div", { className: "squisq-timeline-video-body", children: /* @__PURE__ */ jsxs65("div", { className: "squisq-timeline-video-stage", children: [
40772
+ /* @__PURE__ */ jsx81(
40750
40773
  MediaClipLayer2,
40751
40774
  {
40752
40775
  schedule: videos,
@@ -40758,7 +40781,7 @@ function TimelineVideoPanel({
40758
40781
  muted: true
40759
40782
  }
40760
40783
  ),
40761
- activeVideos.length === 0 && /* @__PURE__ */ jsx80("div", { className: "squisq-timeline-video-empty", children: "Move the playhead onto a video clip" })
40784
+ activeVideos.length === 0 && /* @__PURE__ */ jsx81("div", { className: "squisq-timeline-video-empty", children: "Move the playhead onto a video clip" })
40762
40785
  ] }) })
40763
40786
  ]
40764
40787
  }
@@ -40774,7 +40797,7 @@ function formatClock4(seconds) {
40774
40797
  import { useMemo as useMemo51 } from "react";
40775
40798
  import { getDocPlaybackDuration as getDocPlaybackDuration2, resolveMediaSchedule as resolveMediaSchedule3 } from "@bendyline/squisq/schemas";
40776
40799
  import { DocPlayer } from "@bendyline/squisq-react";
40777
- import { jsx as jsx81, jsxs as jsxs66 } from "react/jsx-runtime";
40800
+ import { jsx as jsx82, jsxs as jsxs66 } from "react/jsx-runtime";
40778
40801
  function TimelineCompositionPanel({
40779
40802
  doc,
40780
40803
  clock,
@@ -40846,11 +40869,11 @@ function TimelineCompositionPanel({
40846
40869
  "aria-label": "Timeline video composition preview",
40847
40870
  children: [
40848
40871
  /* @__PURE__ */ jsxs66("header", { className: "squisq-timeline-video-header", children: [
40849
- /* @__PURE__ */ jsx81("span", { className: "squisq-timeline-video-title", children: "Video composition" }),
40850
- /* @__PURE__ */ jsx81("span", { className: "squisq-timeline-video-label", children: formatPresentation(effectiveVideoPresentation) }),
40851
- /* @__PURE__ */ jsx81(PreviewToolbarControls, { displayMode: "video" }),
40852
- /* @__PURE__ */ jsx81("span", { className: "squisq-timeline-video-time", children: formatClock5(clock.currentTime) }),
40853
- onClose && /* @__PURE__ */ jsx81(
40872
+ /* @__PURE__ */ jsx82("span", { className: "squisq-timeline-video-title", children: "Video composition" }),
40873
+ /* @__PURE__ */ jsx82("span", { className: "squisq-timeline-video-label", children: formatPresentation(effectiveVideoPresentation) }),
40874
+ /* @__PURE__ */ jsx82(PreviewToolbarControls, { displayMode: "video" }),
40875
+ /* @__PURE__ */ jsx82("span", { className: "squisq-timeline-video-time", children: formatClock5(clock.currentTime) }),
40876
+ onClose && /* @__PURE__ */ jsx82(
40854
40877
  "button",
40855
40878
  {
40856
40879
  type: "button",
@@ -40862,7 +40885,7 @@ function TimelineCompositionPanel({
40862
40885
  }
40863
40886
  )
40864
40887
  ] }),
40865
- /* @__PURE__ */ jsx81("div", { className: "squisq-timeline-video-body", children: /* @__PURE__ */ jsx81("div", { className: "squisq-timeline-composition-stage", children: playerDoc ? /* @__PURE__ */ jsx81(
40888
+ /* @__PURE__ */ jsx82("div", { className: "squisq-timeline-video-body", children: /* @__PURE__ */ jsx82("div", { className: "squisq-timeline-composition-stage", children: playerDoc ? /* @__PURE__ */ jsx82(
40866
40889
  DocPlayer,
40867
40890
  {
40868
40891
  doc: playerDoc,
@@ -40888,7 +40911,7 @@ function TimelineCompositionPanel({
40888
40911
  enableSwipe: false,
40889
40912
  globalKeyboardShortcuts: false
40890
40913
  }
40891
- ) : /* @__PURE__ */ jsx81("div", { className: "squisq-timeline-video-empty", children: "Preparing video composition\u2026" }) }) })
40914
+ ) : /* @__PURE__ */ jsx82("div", { className: "squisq-timeline-video-empty", children: "Preparing video composition\u2026" }) }) })
40892
40915
  ]
40893
40916
  }
40894
40917
  );
@@ -40905,7 +40928,7 @@ function formatPresentation(presentation) {
40905
40928
  }
40906
40929
 
40907
40930
  // src/TimelineToolbar.tsx
40908
- import { jsx as jsx82, jsxs as jsxs67 } from "react/jsx-runtime";
40931
+ import { jsx as jsx83, jsxs as jsxs67 } from "react/jsx-runtime";
40909
40932
  function TimelineToolbar({
40910
40933
  literalVideoVisible,
40911
40934
  compositionVisible,
@@ -40922,7 +40945,7 @@ function TimelineToolbar({
40922
40945
  "aria-label": "Timeline view controls",
40923
40946
  "data-testid": "timeline-toolbar",
40924
40947
  children: [
40925
- /* @__PURE__ */ jsx82("span", { className: "squisq-timeline-toolbar-title", children: "Preview panes" }),
40948
+ /* @__PURE__ */ jsx83("span", { className: "squisq-timeline-toolbar-title", children: "Preview panes" }),
40926
40949
  /* @__PURE__ */ jsxs67(
40927
40950
  "button",
40928
40951
  {
@@ -40935,7 +40958,7 @@ function TimelineToolbar({
40935
40958
  "data-tooltip": literalVideoVisible ? "Hide literal video" : "Show literal video",
40936
40959
  children: [
40937
40960
  /* @__PURE__ */ jsxs67("svg", { width: "15", height: "15", viewBox: "0 0 15 15", "aria-hidden": "true", children: [
40938
- /* @__PURE__ */ jsx82(
40961
+ /* @__PURE__ */ jsx83(
40939
40962
  "rect",
40940
40963
  {
40941
40964
  x: "1.5",
@@ -40948,7 +40971,7 @@ function TimelineToolbar({
40948
40971
  strokeWidth: "1.4"
40949
40972
  }
40950
40973
  ),
40951
- /* @__PURE__ */ jsx82(
40974
+ /* @__PURE__ */ jsx83(
40952
40975
  "path",
40953
40976
  {
40954
40977
  d: "M10 5.5 13.5 4v7L10 9.5z",
@@ -40959,7 +40982,7 @@ function TimelineToolbar({
40959
40982
  }
40960
40983
  )
40961
40984
  ] }),
40962
- /* @__PURE__ */ jsx82("span", { children: "Video monitor" })
40985
+ /* @__PURE__ */ jsx83("span", { children: "Video monitor" })
40963
40986
  ]
40964
40987
  }
40965
40988
  ),
@@ -40975,7 +40998,7 @@ function TimelineToolbar({
40975
40998
  "data-tooltip": compositionVisible ? "Hide video composition" : "Show video composition",
40976
40999
  children: [
40977
41000
  /* @__PURE__ */ jsxs67("svg", { width: "15", height: "15", viewBox: "0 0 15 15", "aria-hidden": "true", children: [
40978
- /* @__PURE__ */ jsx82(
41001
+ /* @__PURE__ */ jsx83(
40979
41002
  "rect",
40980
41003
  {
40981
41004
  x: "1.5",
@@ -40988,10 +41011,10 @@ function TimelineToolbar({
40988
41011
  strokeWidth: "1.4"
40989
41012
  }
40990
41013
  ),
40991
- /* @__PURE__ */ jsx82("path", { d: "M5 13h5M7.5 11v2", stroke: "currentColor", strokeWidth: "1.4" }),
40992
- /* @__PURE__ */ jsx82("path", { d: "m6.3 5 3 1.5-3 1.5z", fill: "currentColor" })
41014
+ /* @__PURE__ */ jsx83("path", { d: "M5 13h5M7.5 11v2", stroke: "currentColor", strokeWidth: "1.4" }),
41015
+ /* @__PURE__ */ jsx83("path", { d: "m6.3 5 3 1.5-3 1.5z", fill: "currentColor" })
40993
41016
  ] }),
40994
- /* @__PURE__ */ jsx82("span", { children: "Video composition" })
41017
+ /* @__PURE__ */ jsx83("span", { children: "Video composition" })
40995
41018
  ]
40996
41019
  }
40997
41020
  )
@@ -41045,7 +41068,7 @@ function isFontAwesomeRule(rule) {
41045
41068
  }
41046
41069
 
41047
41070
  // src/PlainHtmlPreview.tsx
41048
- import { jsx as jsx83 } from "react/jsx-runtime";
41071
+ import { jsx as jsx84 } from "react/jsx-runtime";
41049
41072
  var cachedRender = null;
41050
41073
  var cachedRenderPromise = null;
41051
41074
  function loadRenderFn() {
@@ -41387,7 +41410,7 @@ function PlainHtmlPreview({
41387
41410
  document.addEventListener("keydown", handleKeyDown);
41388
41411
  return () => document.removeEventListener("keydown", handleKeyDown);
41389
41412
  }, [globalKeyboardShortcuts]);
41390
- return /* @__PURE__ */ jsx83(
41413
+ return /* @__PURE__ */ jsx84(
41391
41414
  "iframe",
41392
41415
  {
41393
41416
  ref: setIframeRef,
@@ -41602,7 +41625,7 @@ import {
41602
41625
  } from "react";
41603
41626
  import { createPortal as createPortal17 } from "react-dom";
41604
41627
  import { inferDocumentTitle as inferDocumentTitle2 } from "@bendyline/squisq/markdown";
41605
- import { jsx as jsx84, jsxs as jsxs68 } from "react/jsx-runtime";
41628
+ import { jsx as jsx85, jsxs as jsxs68 } from "react/jsx-runtime";
41606
41629
  var PresentationModeContext = createContext7(null);
41607
41630
  function usePresentationMode() {
41608
41631
  const value = useContext7(PresentationModeContext);
@@ -41996,8 +42019,8 @@ function PresentationModeProvider({
41996
42019
  "aria-label": "Exit presentation mode",
41997
42020
  title: "Exit presentation mode (Esc)",
41998
42021
  children: [
41999
- /* @__PURE__ */ jsx84(Icon, { icon: "fa-solid fa-compress" }),
42000
- /* @__PURE__ */ jsx84("span", { children: "Exit presentation" })
42022
+ /* @__PURE__ */ jsx85(Icon, { icon: "fa-solid fa-compress" }),
42023
+ /* @__PURE__ */ jsx85("span", { children: "Exit presentation" })
42001
42024
  ]
42002
42025
  }
42003
42026
  ) : null;
@@ -42006,7 +42029,7 @@ function PresentationModeProvider({
42006
42029
  (activeTarget === "control" || activeTarget === "fullscreen") && exitButton,
42007
42030
  activeTarget === "window" && popupRoot && exitButton ? createPortal17(exitButton, popupRoot) : null,
42008
42031
  error && typeof document !== "undefined" ? createPortal17(
42009
- /* @__PURE__ */ jsx84("div", { className: "squisq-presentation-error", "data-theme": colorScheme, role: "alert", children: error }),
42032
+ /* @__PURE__ */ jsx85("div", { className: "squisq-presentation-error", "data-theme": colorScheme, role: "alert", children: error }),
42010
42033
  document.body
42011
42034
  ) : null
42012
42035
  ] });
@@ -42103,7 +42126,7 @@ function PresentationModeControl() {
42103
42126
  (checked ?? first)?.focus();
42104
42127
  }, [anchor, open]);
42105
42128
  return /* @__PURE__ */ jsxs68("div", { className: "squisq-presentation-control", children: [
42106
- /* @__PURE__ */ jsx84(
42129
+ /* @__PURE__ */ jsx85(
42107
42130
  "button",
42108
42131
  {
42109
42132
  type: "button",
@@ -42112,10 +42135,10 @@ function PresentationModeControl() {
42112
42135
  "aria-pressed": activeTarget !== null,
42113
42136
  "data-tooltip": activeTarget ? "Exit presentation" : `Present: ${selected.label}`,
42114
42137
  onClick: () => void (activeTarget ? stop() : start()),
42115
- children: /* @__PURE__ */ jsx84(Icon, { icon: "fa-solid fa-display" })
42138
+ children: /* @__PURE__ */ jsx85(Icon, { icon: "fa-solid fa-display" })
42116
42139
  }
42117
42140
  ),
42118
- options.length > 1 && /* @__PURE__ */ jsx84(
42141
+ options.length > 1 && /* @__PURE__ */ jsx85(
42119
42142
  "button",
42120
42143
  {
42121
42144
  ref: triggerRef,
@@ -42131,11 +42154,11 @@ function PresentationModeControl() {
42131
42154
  event.preventDefault();
42132
42155
  openMenu();
42133
42156
  },
42134
- children: /* @__PURE__ */ jsx84("svg", { width: "10", height: "10", viewBox: "0 0 10 10", "aria-hidden": "true", children: /* @__PURE__ */ jsx84("path", { d: "M2 3.5 5 6.5 8 3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.4" }) })
42157
+ children: /* @__PURE__ */ jsx85("svg", { width: "10", height: "10", viewBox: "0 0 10 10", "aria-hidden": "true", children: /* @__PURE__ */ jsx85("path", { d: "M2 3.5 5 6.5 8 3.5", fill: "none", stroke: "currentColor", strokeWidth: "1.4" }) })
42135
42158
  }
42136
42159
  ),
42137
42160
  open && anchor ? createPortal17(
42138
- /* @__PURE__ */ jsx84(
42161
+ /* @__PURE__ */ jsx85(
42139
42162
  "div",
42140
42163
  {
42141
42164
  ref: menuRef,
@@ -42181,24 +42204,24 @@ function PresentationModeControl() {
42181
42204
  if (!alreadyThere) void start(option.target);
42182
42205
  },
42183
42206
  children: [
42184
- /* @__PURE__ */ jsx84(
42207
+ /* @__PURE__ */ jsx85(
42185
42208
  "span",
42186
42209
  {
42187
42210
  className: "squisq-use-mode-menu-icon squisq-presentation-menu-icon",
42188
42211
  "aria-hidden": "true",
42189
- children: /* @__PURE__ */ jsx84(Icon, { icon: option.icon })
42212
+ children: /* @__PURE__ */ jsx85(Icon, { icon: option.icon })
42190
42213
  }
42191
42214
  ),
42192
42215
  /* @__PURE__ */ jsxs68("span", { className: "squisq-use-mode-menu-copy squisq-presentation-menu-copy", children: [
42193
- /* @__PURE__ */ jsx84("span", { className: "squisq-use-mode-menu-label squisq-presentation-menu-label", children: option.label }),
42194
- /* @__PURE__ */ jsx84("span", { className: "squisq-use-mode-menu-summary squisq-presentation-menu-summary", children: disabled ? "Full screen is unavailable." : option.summary })
42216
+ /* @__PURE__ */ jsx85("span", { className: "squisq-use-mode-menu-label squisq-presentation-menu-label", children: option.label }),
42217
+ /* @__PURE__ */ jsx85("span", { className: "squisq-use-mode-menu-summary squisq-presentation-menu-summary", children: disabled ? "Full screen is unavailable." : option.summary })
42195
42218
  ] }),
42196
- /* @__PURE__ */ jsx84(
42219
+ /* @__PURE__ */ jsx85(
42197
42220
  "span",
42198
42221
  {
42199
42222
  className: "squisq-use-mode-menu-check squisq-presentation-menu-check",
42200
42223
  "aria-hidden": "true",
42201
- children: isSelected && /* @__PURE__ */ jsx84(Icon, { icon: "fa-solid fa-check" })
42224
+ children: isSelected && /* @__PURE__ */ jsx85(Icon, { icon: "fa-solid fa-check" })
42202
42225
  }
42203
42226
  )
42204
42227
  ]
@@ -42223,7 +42246,7 @@ import {
42223
42246
  useRef as useRef61,
42224
42247
  useState as useState78
42225
42248
  } from "react";
42226
- import { jsx as jsx85, jsxs as jsxs69 } from "react/jsx-runtime";
42249
+ import { jsx as jsx86, jsxs as jsxs69 } from "react/jsx-runtime";
42227
42250
  var PrintModeContext = createContext8(null);
42228
42251
  function usePrintMode() {
42229
42252
  const value = useContext8(PrintModeContext);
@@ -42334,7 +42357,7 @@ function PrintModeProvider({ rootRef, children }) {
42334
42357
  }),
42335
42358
  [active, close, open, print, registerPrintHandler, slidesPerPage]
42336
42359
  );
42337
- return /* @__PURE__ */ jsx85(PrintModeContext.Provider, { value, children });
42360
+ return /* @__PURE__ */ jsx86(PrintModeContext.Provider, { value, children });
42338
42361
  }
42339
42362
  function PrintModeControl() {
42340
42363
  const { open } = usePrintMode();
@@ -42347,8 +42370,8 @@ function PrintModeControl() {
42347
42370
  "aria-label": "Print",
42348
42371
  "data-tooltip": "Print",
42349
42372
  children: [
42350
- /* @__PURE__ */ jsx85(Icon, { icon: "fa-solid fa-print" }),
42351
- /* @__PURE__ */ jsx85("span", { children: "Print" })
42373
+ /* @__PURE__ */ jsx86(Icon, { icon: "fa-solid fa-print" }),
42374
+ /* @__PURE__ */ jsx86("span", { children: "Print" })
42352
42375
  ]
42353
42376
  }
42354
42377
  );
@@ -42358,8 +42381,8 @@ function PrintPreviewToolbar() {
42358
42381
  const { activeDisplayMode } = usePreviewSettings();
42359
42382
  const { slidesPerPage, setSlidesPerPage, print, close } = usePrintMode();
42360
42383
  return /* @__PURE__ */ jsxs69("div", { className: "squisq-print-toolbar", "aria-label": "Print preview controls", children: [
42361
- /* @__PURE__ */ jsx85("span", { className: "squisq-print-toolbar-title", children: "Print preview" }),
42362
- activeDisplayMode === "slideshow" && /* @__PURE__ */ jsx85("div", { className: "squisq-print-density", role: "group", "aria-label": "Slides per page", children: SLIDES_PER_PAGE_OPTIONS.map((value) => /* @__PURE__ */ jsxs69(
42384
+ /* @__PURE__ */ jsx86("span", { className: "squisq-print-toolbar-title", children: "Print preview" }),
42385
+ activeDisplayMode === "slideshow" && /* @__PURE__ */ jsx86("div", { className: "squisq-print-density", role: "group", "aria-label": "Slides per page", children: SLIDES_PER_PAGE_OPTIONS.map((value) => /* @__PURE__ */ jsxs69(
42363
42386
  "button",
42364
42387
  {
42365
42388
  type: "button",
@@ -42368,7 +42391,7 @@ function PrintPreviewToolbar() {
42368
42391
  "aria-label": `${value} ${value === 1 ? "slide" : "slides"} per page`,
42369
42392
  onClick: () => setSlidesPerPage(value),
42370
42393
  children: [
42371
- /* @__PURE__ */ jsx85("span", { children: value }),
42394
+ /* @__PURE__ */ jsx86("span", { children: value }),
42372
42395
  /* @__PURE__ */ jsxs69("span", { className: "squisq-print-density-label", children: [
42373
42396
  " ",
42374
42397
  value === 1 ? "slide" : "slides",
@@ -42378,14 +42401,14 @@ function PrintPreviewToolbar() {
42378
42401
  },
42379
42402
  value
42380
42403
  )) }),
42381
- /* @__PURE__ */ jsx85("div", { className: "squisq-print-toolbar-spacer" }),
42404
+ /* @__PURE__ */ jsx86("div", { className: "squisq-print-toolbar-spacer" }),
42382
42405
  /* @__PURE__ */ jsxs69("button", { type: "button", className: "squisq-print-action", onClick: print, children: [
42383
- /* @__PURE__ */ jsx85(Icon, { icon: "fa-solid fa-print" }),
42384
- /* @__PURE__ */ jsx85("span", { children: "Print" })
42406
+ /* @__PURE__ */ jsx86(Icon, { icon: "fa-solid fa-print" }),
42407
+ /* @__PURE__ */ jsx86("span", { children: "Print" })
42385
42408
  ] }),
42386
42409
  /* @__PURE__ */ jsxs69("button", { type: "button", className: "squisq-print-close", onClick: close, children: [
42387
- /* @__PURE__ */ jsx85(Icon, { icon: "fa-solid fa-xmark" }),
42388
- /* @__PURE__ */ jsx85("span", { children: "Close" })
42410
+ /* @__PURE__ */ jsx86(Icon, { icon: "fa-solid fa-xmark" }),
42411
+ /* @__PURE__ */ jsx86("span", { children: "Close" })
42389
42412
  ] })
42390
42413
  ] });
42391
42414
  }
@@ -42393,7 +42416,7 @@ function PrintPreviewToolbar() {
42393
42416
  // src/print/PrintPreview.tsx
42394
42417
  import { useCallback as useCallback53, useEffect as useEffect68, useMemo as useMemo55, useRef as useRef62 } from "react";
42395
42418
  import {
42396
- BlockRenderer as BlockRenderer4,
42419
+ BlockRenderer as BlockRenderer5,
42397
42420
  FlashcardFaceView,
42398
42421
  LinearDocView,
42399
42422
  useDocPlayback,
@@ -42404,7 +42427,7 @@ import {
42404
42427
  } from "@bendyline/squisq/schemas";
42405
42428
  import { expandCoverBlock as expandCoverBlock2, materializeFlashcards } from "@bendyline/squisq/doc";
42406
42429
  import { resolveTransformStyle } from "@bendyline/squisq/transform";
42407
- import { jsx as jsx86, jsxs as jsxs70 } from "react/jsx-runtime";
42430
+ import { jsx as jsx87, jsxs as jsxs70 } from "react/jsx-runtime";
42408
42431
  function chunk(values, size) {
42409
42432
  const groups = [];
42410
42433
  for (let index2 = 0; index2 < values.length; index2 += size) {
@@ -42458,7 +42481,7 @@ function PrintPreview({
42458
42481
  }, [isTextDocument, registerPrintHandler]);
42459
42482
  const title = contentDoc?.frontmatter?.title ?? contentDoc?.startBlock?.title ?? void 0;
42460
42483
  if (isTextDocument) {
42461
- return /* @__PURE__ */ jsx86("div", { className: "squisq-print-preview squisq-print-preview--document", children: /* @__PURE__ */ jsx86("div", { className: "squisq-print-document-paper", children: /* @__PURE__ */ jsx86(
42484
+ return /* @__PURE__ */ jsx87("div", { className: "squisq-print-preview squisq-print-preview--document", children: /* @__PURE__ */ jsx87("div", { className: "squisq-print-document-paper", children: /* @__PURE__ */ jsx87(
42462
42485
  PlainHtmlPreview,
42463
42486
  {
42464
42487
  markdown: documentMarkdown,
@@ -42473,8 +42496,8 @@ function PrintPreview({
42473
42496
  }
42474
42497
  if (displayMode === "linear") {
42475
42498
  return /* @__PURE__ */ jsxs70("div", { className: "squisq-print-preview squisq-print-preview--page", children: [
42476
- /* @__PURE__ */ jsx86("style", { children: "@page { margin: 0; }" }),
42477
- /* @__PURE__ */ jsx86("div", { className: "squisq-print-page-paper", children: /* @__PURE__ */ jsx86(
42499
+ /* @__PURE__ */ jsx87("style", { children: "@page { margin: 0; }" }),
42500
+ /* @__PURE__ */ jsx87("div", { className: "squisq-print-page-paper", children: /* @__PURE__ */ jsx87(
42478
42501
  LinearDocView,
42479
42502
  {
42480
42503
  className: "squisq-print-linear",
@@ -42509,7 +42532,7 @@ function PrintPreview({
42509
42532
  "--squisq-print-flashcard-surface": theme.colors.backgroundLight
42510
42533
  },
42511
42534
  children: [
42512
- /* @__PURE__ */ jsx86("style", { children: "@page { size: landscape; margin: 0; }" }),
42535
+ /* @__PURE__ */ jsx87("style", { children: "@page { size: landscape; margin: 0; }" }),
42513
42536
  flashcardDeck?.cards.map((card, index2) => /* @__PURE__ */ jsxs70("article", { className: "squisq-print-flashcard-sheet", children: [
42514
42537
  /* @__PURE__ */ jsxs70("header", { children: [
42515
42538
  /* @__PURE__ */ jsxs70("span", { children: [
@@ -42518,25 +42541,25 @@ function PrintPreview({
42518
42541
  " of ",
42519
42542
  flashcardDeck.cards.length
42520
42543
  ] }),
42521
- card.label && /* @__PURE__ */ jsx86("strong", { children: card.label })
42544
+ card.label && /* @__PURE__ */ jsx87("strong", { children: card.label })
42522
42545
  ] }),
42523
42546
  /* @__PURE__ */ jsxs70("div", { className: "squisq-print-flashcard-pair", children: [
42524
42547
  /* @__PURE__ */ jsxs70("section", { className: "squisq-print-flashcard-face", "aria-label": "Question side", children: [
42525
- /* @__PURE__ */ jsx86("small", { children: "Front" }),
42526
- /* @__PURE__ */ jsx86(FlashcardFaceView, { ...faceProps, face: card.front }),
42527
- card.kind === "multiple-choice" && /* @__PURE__ */ jsx86("ol", { className: "squisq-print-flashcard-choices", children: card.choices?.map((choice) => /* @__PURE__ */ jsx86("li", { children: /* @__PURE__ */ jsx86(FlashcardFaceView, { ...faceProps, face: choice.content }) }, choice.id)) })
42548
+ /* @__PURE__ */ jsx87("small", { children: "Front" }),
42549
+ /* @__PURE__ */ jsx87(FlashcardFaceView, { ...faceProps, face: card.front }),
42550
+ card.kind === "multiple-choice" && /* @__PURE__ */ jsx87("ol", { className: "squisq-print-flashcard-choices", children: card.choices?.map((choice) => /* @__PURE__ */ jsx87("li", { children: /* @__PURE__ */ jsx87(FlashcardFaceView, { ...faceProps, face: choice.content }) }, choice.id)) })
42528
42551
  ] }),
42529
42552
  /* @__PURE__ */ jsxs70("section", { className: "squisq-print-flashcard-face", "aria-label": "Answer side", children: [
42530
- /* @__PURE__ */ jsx86("small", { children: "Back" }),
42531
- /* @__PURE__ */ jsx86(FlashcardFaceView, { ...faceProps, face: card.back }),
42553
+ /* @__PURE__ */ jsx87("small", { children: "Back" }),
42554
+ /* @__PURE__ */ jsx87(FlashcardFaceView, { ...faceProps, face: card.back }),
42532
42555
  card.explanation && /* @__PURE__ */ jsxs70("div", { className: "squisq-print-flashcard-explanation", children: [
42533
- /* @__PURE__ */ jsx86("small", { children: "Explanation" }),
42534
- /* @__PURE__ */ jsx86(FlashcardFaceView, { ...faceProps, face: card.explanation })
42556
+ /* @__PURE__ */ jsx87("small", { children: "Explanation" }),
42557
+ /* @__PURE__ */ jsx87(FlashcardFaceView, { ...faceProps, face: card.explanation })
42535
42558
  ] })
42536
42559
  ] })
42537
42560
  ] })
42538
42561
  ] }, card.id)),
42539
- (!flashcardDeck || flashcardDeck.cards.length === 0) && /* @__PURE__ */ jsx86("p", { className: "squisq-print-empty", children: "Nothing to print." })
42562
+ (!flashcardDeck || flashcardDeck.cards.length === 0) && /* @__PURE__ */ jsx87("p", { className: "squisq-print-empty", children: "Nothing to print." })
42540
42563
  ]
42541
42564
  }
42542
42565
  );
@@ -42556,15 +42579,15 @@ function PrintPreview({
42556
42579
  "data-slides-per-page": density,
42557
42580
  style: previewStyle,
42558
42581
  children: [
42559
- /* @__PURE__ */ jsx86("style", { children: `@page { size: ${orientation}; margin: 0; }` }),
42560
- sheets.map((sheet, pageIndex) => /* @__PURE__ */ jsx86(
42582
+ /* @__PURE__ */ jsx87("style", { children: `@page { size: ${orientation}; margin: 0; }` }),
42583
+ sheets.map((sheet, pageIndex) => /* @__PURE__ */ jsx87(
42561
42584
  "div",
42562
42585
  {
42563
42586
  className: "squisq-print-sheet",
42564
42587
  "data-slides-per-page": density,
42565
42588
  "aria-label": `Print page ${pageIndex + 1}`,
42566
- children: sheet.map((block) => /* @__PURE__ */ jsx86("div", { className: "squisq-print-slide-cell", children: /* @__PURE__ */ jsx86("div", { className: "squisq-print-slide-frame", children: /* @__PURE__ */ jsx86(
42567
- BlockRenderer4,
42589
+ children: sheet.map((block) => /* @__PURE__ */ jsx87("div", { className: "squisq-print-slide-cell", children: /* @__PURE__ */ jsx87("div", { className: "squisq-print-slide-frame", children: /* @__PURE__ */ jsx87(
42590
+ BlockRenderer5,
42568
42591
  {
42569
42592
  block,
42570
42593
  blockTime: Math.max(0, block.duration),
@@ -42577,7 +42600,7 @@ function PrintPreview({
42577
42600
  },
42578
42601
  `${density}-${pageIndex}`
42579
42602
  )),
42580
- sheets.length === 0 && /* @__PURE__ */ jsx86("p", { className: "squisq-print-empty", children: "Nothing to print." })
42603
+ sheets.length === 0 && /* @__PURE__ */ jsx87("p", { className: "squisq-print-empty", children: "Nothing to print." })
42581
42604
  ]
42582
42605
  }
42583
42606
  );
@@ -42631,7 +42654,7 @@ function collectSlideshowDataSources(doc) {
42631
42654
  }
42632
42655
 
42633
42656
  // src/slideshow/SlideshowDataGrid.tsx
42634
- import { Fragment as Fragment28, jsx as jsx87 } from "react/jsx-runtime";
42657
+ import { Fragment as Fragment28, jsx as jsx88 } from "react/jsx-runtime";
42635
42658
  var EMPTY_CONTEXT = {
42636
42659
  container: null,
42637
42660
  mediaRevision: 0,
@@ -42649,7 +42672,7 @@ function SlideshowDataGridProvider({
42649
42672
  () => ({ container: container ?? null, mediaRevision, sources }),
42650
42673
  [container, mediaRevision, sources]
42651
42674
  );
42652
- return /* @__PURE__ */ jsx87(SlideshowDataGridContext.Provider, { value, children });
42675
+ return /* @__PURE__ */ jsx88(SlideshowDataGridContext.Provider, { value, children });
42653
42676
  }
42654
42677
  var EMPTY_VIEW = { sort: [], filter: [] };
42655
42678
  function sourceKey(source) {
@@ -42761,7 +42784,7 @@ function SlideshowDataGridRenderer({
42761
42784
  const initialView = ready?.initialView ?? EMPTY_VIEW;
42762
42785
  const [view, setView] = useState79(initialView);
42763
42786
  useEffect69(() => setView(initialView), [initialView, provider]);
42764
- if (!provider || !ingest || !gridModule) return /* @__PURE__ */ jsx87(Fragment28, { children: fallback });
42787
+ if (!provider || !ingest || !gridModule) return /* @__PURE__ */ jsx88(Fragment28, { children: fallback });
42765
42788
  const { style } = layer.content;
42766
42789
  const rowHeight = Math.max(32, style.fontSize * 2.1);
42767
42790
  const footerHeight = Math.max(28, style.fontSize * 1.5);
@@ -42790,7 +42813,7 @@ function SlideshowDataGridRenderer({
42790
42813
  "--squisq-grid-accent": style.headerBackground,
42791
42814
  "--squisq-grid-resize-handle": style.headerBackground
42792
42815
  };
42793
- return /* @__PURE__ */ jsx87("div", { className: "squisq-slideshow-data-grid", style: gridStyle, children: /* @__PURE__ */ jsx87(
42816
+ return /* @__PURE__ */ jsx88("div", { className: "squisq-slideshow-data-grid", style: gridStyle, children: /* @__PURE__ */ jsx88(
42794
42817
  gridModule.DataGrid,
42795
42818
  {
42796
42819
  provider,
@@ -42806,7 +42829,7 @@ function SlideshowDataGridRenderer({
42806
42829
 
42807
42830
  // src/PreviewPanel.tsx
42808
42831
  import { useProcessedAudio as useProcessedAudio3 } from "@bendyline/squisq-video-react/media-edit";
42809
- import { jsx as jsx88, jsxs as jsxs71 } from "react/jsx-runtime";
42832
+ import { jsx as jsx89, jsxs as jsxs71 } from "react/jsx-runtime";
42810
42833
  function PreviewPanel({
42811
42834
  basePath = "/",
42812
42835
  className,
@@ -42964,22 +42987,22 @@ function PreviewPanel({
42964
42987
  presentation?.popupRoot
42965
42988
  ]);
42966
42989
  if (isParsing && !isNarrateMode && !previewDoc) {
42967
- return /* @__PURE__ */ jsx88("div", { className: `squisq-preview-status ${className || ""}`, "data-testid": "preview-panel", children: /* @__PURE__ */ jsx88("p", { children: "Parsing\u2026" }) });
42990
+ return /* @__PURE__ */ jsx89("div", { className: `squisq-preview-status ${className || ""}`, "data-testid": "preview-panel", children: /* @__PURE__ */ jsx89("p", { children: "Parsing\u2026" }) });
42968
42991
  }
42969
42992
  if (parseError && !isNarrateMode) {
42970
42993
  return /* @__PURE__ */ jsxs71("div", { className: `squisq-preview-status ${className || ""}`, "data-testid": "preview-panel", children: [
42971
- /* @__PURE__ */ jsx88("h3", { children: "Parse Error" }),
42972
- /* @__PURE__ */ jsx88("pre", { children: parseError })
42994
+ /* @__PURE__ */ jsx89("h3", { children: "Parse Error" }),
42995
+ /* @__PURE__ */ jsx89("pre", { children: parseError })
42973
42996
  ] });
42974
42997
  }
42975
42998
  if (!previewDoc && !isDocumentMode && !isNarrateMode) {
42976
- return /* @__PURE__ */ jsx88("div", { className: `squisq-preview-status ${className || ""}`, "data-testid": "preview-panel", children: /* @__PURE__ */ jsx88("p", { children: "No content to preview. Start typing in the editor." }) });
42999
+ return /* @__PURE__ */ jsx89("div", { className: `squisq-preview-status ${className || ""}`, "data-testid": "preview-panel", children: /* @__PURE__ */ jsx89("p", { children: "No content to preview. Start typing in the editor." }) });
42977
43000
  }
42978
43001
  const fillsContainer = printMode?.active || isDocumentMode || isPageMode || isNarrateMode || isFlashcardsMode ? "stretch" : "center";
42979
43002
  const audienceWindowOpen = presentation?.activeTarget === "window";
42980
43003
  const renderSurface = (audience) => {
42981
43004
  if (!audience && printMode?.active) {
42982
- return /* @__PURE__ */ jsx88(
43005
+ return /* @__PURE__ */ jsx89(
42983
43006
  PrintPreview,
42984
43007
  {
42985
43008
  displayMode: activeDisplayMode,
@@ -42997,7 +43020,7 @@ function PreviewPanel({
42997
43020
  );
42998
43021
  }
42999
43022
  if (isDocumentMode) {
43000
- return /* @__PURE__ */ jsx88(
43023
+ return /* @__PURE__ */ jsx89(
43001
43024
  PlainHtmlPreview,
43002
43025
  {
43003
43026
  markdown: documentMarkdown,
@@ -43016,7 +43039,7 @@ function PreviewPanel({
43016
43039
  }
43017
43040
  if (isNarrateMode) {
43018
43041
  if (audience) return null;
43019
- return /* @__PURE__ */ jsx88(
43042
+ return /* @__PURE__ */ jsx89(
43020
43043
  TeleprompterView,
43021
43044
  {
43022
43045
  doc,
@@ -43035,7 +43058,7 @@ function PreviewPanel({
43035
43058
  );
43036
43059
  }
43037
43060
  if (isPageMode) {
43038
- return /* @__PURE__ */ jsx88(
43061
+ return /* @__PURE__ */ jsx89(
43039
43062
  LinearDocView2,
43040
43063
  {
43041
43064
  doc: contentDoc ?? doc,
@@ -43052,7 +43075,7 @@ function PreviewPanel({
43052
43075
  );
43053
43076
  }
43054
43077
  if (isFlashcardsMode) {
43055
- return /* @__PURE__ */ jsx88(
43078
+ return /* @__PURE__ */ jsx89(
43056
43079
  FlashcardView,
43057
43080
  {
43058
43081
  doc: contentDoc ?? doc,
@@ -43067,7 +43090,7 @@ function PreviewPanel({
43067
43090
  );
43068
43091
  }
43069
43092
  if (isDashboardMode) {
43070
- return /* @__PURE__ */ jsx88("div", { className: "squisq-dashboard-fit", children: /* @__PURE__ */ jsx88(
43093
+ return /* @__PURE__ */ jsx89("div", { className: "squisq-dashboard-fit", children: /* @__PURE__ */ jsx89(
43071
43094
  DashboardView,
43072
43095
  {
43073
43096
  doc: contentDoc ?? doc,
@@ -43082,10 +43105,10 @@ function PreviewPanel({
43082
43105
  ) });
43083
43106
  }
43084
43107
  if (audience && !followerAudioController) {
43085
- return /* @__PURE__ */ jsx88("div", { className: "squisq-presentation-connecting", children: "Connecting presentation..." });
43108
+ return /* @__PURE__ */ jsx89("div", { className: "squisq-presentation-connecting", children: "Connecting presentation..." });
43086
43109
  }
43087
43110
  const audienceCaptionMode = playbackState?.captionMode;
43088
- return /* @__PURE__ */ jsx88(
43111
+ return /* @__PURE__ */ jsx89(
43089
43112
  DocPlayer2,
43090
43113
  {
43091
43114
  doc: previewDoc,
@@ -43136,7 +43159,7 @@ function PreviewPanel({
43136
43159
  container: workspaceContainer,
43137
43160
  mediaRevision,
43138
43161
  children: [
43139
- /* @__PURE__ */ jsx88(
43162
+ /* @__PURE__ */ jsx89(
43140
43163
  "div",
43141
43164
  {
43142
43165
  className: `squisq-preview-container ${className || ""}`,
@@ -43149,16 +43172,16 @@ function PreviewPanel({
43149
43172
  overflow: "hidden",
43150
43173
  background: "var(--squisq-bg)"
43151
43174
  },
43152
- children: /* @__PURE__ */ jsx88("div", { ref: mainSurfaceRef, className: "squisq-preview-player", style: surfaceStyle, children: renderSurface(false) })
43175
+ children: /* @__PURE__ */ jsx89("div", { ref: mainSurfaceRef, className: "squisq-preview-player", style: surfaceStyle, children: renderSurface(false) })
43153
43176
  }
43154
43177
  ),
43155
43178
  audienceWindowOpen && presentation?.popupRoot && !isNarrateMode ? createPortal18(
43156
- /* @__PURE__ */ jsx88(
43179
+ /* @__PURE__ */ jsx89(
43157
43180
  "div",
43158
43181
  {
43159
43182
  className: "squisq-editor-shell squisq-presentation-window",
43160
43183
  "data-theme": colorScheme,
43161
- children: /* @__PURE__ */ jsx88("div", { className: "squisq-preview-container squisq-presentation-window-preview", children: /* @__PURE__ */ jsx88(
43184
+ children: /* @__PURE__ */ jsx89("div", { className: "squisq-preview-container squisq-presentation-window-preview", children: /* @__PURE__ */ jsx89(
43162
43185
  "div",
43163
43186
  {
43164
43187
  ref: popupSurfaceRef,
@@ -43184,7 +43207,7 @@ import { sanitizedSvgImageUrl as sanitizedSvgImageUrl2 } from "@bendyline/squisq
43184
43207
 
43185
43208
  // src/MediaPreviewDialog.tsx
43186
43209
  import { useEffect as useEffect71, useId as useId16, useRef as useRef64, useState as useState81 } from "react";
43187
- import { jsx as jsx89, jsxs as jsxs72 } from "react/jsx-runtime";
43210
+ import { jsx as jsx90, jsxs as jsxs72 } from "react/jsx-runtime";
43188
43211
  function MediaPreviewDialog({
43189
43212
  kind,
43190
43213
  name,
@@ -43202,13 +43225,13 @@ function MediaPreviewDialog({
43202
43225
  useEffect71(() => setPlaybackFailed(false), [src]);
43203
43226
  let body;
43204
43227
  if (failed || playbackFailed || src === "") {
43205
- body = /* @__PURE__ */ jsx89("div", { className: "squisq-media-preview-message", children: "This file can\u2019t be previewed." });
43228
+ body = /* @__PURE__ */ jsx90("div", { className: "squisq-media-preview-message", children: "This file can\u2019t be previewed." });
43206
43229
  } else if (src === null) {
43207
- body = /* @__PURE__ */ jsx89("div", { className: "squisq-media-preview-message", children: "Loading\u2026" });
43230
+ body = /* @__PURE__ */ jsx90("div", { className: "squisq-media-preview-message", children: "Loading\u2026" });
43208
43231
  } else if (kind === "image") {
43209
- body = /* @__PURE__ */ jsx89(ImageViewer, { src, alt: name, theme: isDark ? "dark" : "light" });
43232
+ body = /* @__PURE__ */ jsx90(ImageViewer, { src, alt: name, theme: isDark ? "dark" : "light" });
43210
43233
  } else if (kind === "video") {
43211
- body = /* @__PURE__ */ jsx89(
43234
+ body = /* @__PURE__ */ jsx90(
43212
43235
  "video",
43213
43236
  {
43214
43237
  className: "squisq-media-preview-video",
@@ -43221,11 +43244,11 @@ function MediaPreviewDialog({
43221
43244
  );
43222
43245
  } else {
43223
43246
  body = /* @__PURE__ */ jsxs72("div", { className: "squisq-media-preview-audio", children: [
43224
- /* @__PURE__ */ jsx89("span", { className: "squisq-media-preview-audio-icon", "aria-hidden": "true", children: "\u{1F50A}" }),
43225
- /* @__PURE__ */ jsx89("audio", { src, controls: true, autoPlay: true, onError: () => setPlaybackFailed(true) })
43247
+ /* @__PURE__ */ jsx90("span", { className: "squisq-media-preview-audio-icon", "aria-hidden": "true", children: "\u{1F50A}" }),
43248
+ /* @__PURE__ */ jsx90("audio", { src, controls: true, autoPlay: true, onError: () => setPlaybackFailed(true) })
43226
43249
  ] });
43227
43250
  }
43228
- return /* @__PURE__ */ jsx89(
43251
+ return /* @__PURE__ */ jsx90(
43229
43252
  "div",
43230
43253
  {
43231
43254
  ref: overlayRef,
@@ -43247,9 +43270,9 @@ function MediaPreviewDialog({
43247
43270
  "data-testid": "media-preview-dialog",
43248
43271
  children: [
43249
43272
  /* @__PURE__ */ jsxs72("header", { className: "squisq-media-preview-header", children: [
43250
- /* @__PURE__ */ jsx89("span", { id: titleId, className: "squisq-media-preview-title", title: name, children: name }),
43251
- /* @__PURE__ */ jsx89("span", { className: "squisq-media-preview-detail", children: detail }),
43252
- /* @__PURE__ */ jsx89(
43273
+ /* @__PURE__ */ jsx90("span", { id: titleId, className: "squisq-media-preview-title", title: name, children: name }),
43274
+ /* @__PURE__ */ jsx90("span", { className: "squisq-media-preview-detail", children: detail }),
43275
+ /* @__PURE__ */ jsx90(
43253
43276
  "button",
43254
43277
  {
43255
43278
  type: "button",
@@ -43260,7 +43283,7 @@ function MediaPreviewDialog({
43260
43283
  }
43261
43284
  )
43262
43285
  ] }),
43263
- /* @__PURE__ */ jsx89("div", { className: "squisq-media-preview-body", children: body })
43286
+ /* @__PURE__ */ jsx90("div", { className: "squisq-media-preview-body", children: body })
43264
43287
  ]
43265
43288
  }
43266
43289
  )
@@ -43269,7 +43292,7 @@ function MediaPreviewDialog({
43269
43292
  }
43270
43293
 
43271
43294
  // src/MediaBin.tsx
43272
- import { Fragment as Fragment29, jsx as jsx90, jsxs as jsxs73 } from "react/jsx-runtime";
43295
+ import { Fragment as Fragment29, jsx as jsx91, jsxs as jsxs73 } from "react/jsx-runtime";
43273
43296
  function formatSize(bytes) {
43274
43297
  if (bytes < 1024) return `${bytes} B`;
43275
43298
  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
@@ -43634,8 +43657,8 @@ function MediaBin({
43634
43657
  "aria-haspopup": "dialog",
43635
43658
  "aria-expanded": isRecorderOpen,
43636
43659
  children: [
43637
- /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-action-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-record-dot" }) }),
43638
- /* @__PURE__ */ jsx90("span", { children: "Record" })
43660
+ /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-action-icon", "aria-hidden": "true", children: /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-record-dot" }) }),
43661
+ /* @__PURE__ */ jsx91("span", { children: "Record" })
43639
43662
  ]
43640
43663
  }
43641
43664
  ),
@@ -43648,8 +43671,8 @@ function MediaBin({
43648
43671
  disabled: !mediaProvider || loading,
43649
43672
  title: mediaProvider ? "Upload files" : "Load a content zip or select a storage slot first",
43650
43673
  children: [
43651
- /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-action-icon", children: "+" }),
43652
- /* @__PURE__ */ jsx90("span", { children: "Upload" })
43674
+ /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-action-icon", children: "+" }),
43675
+ /* @__PURE__ */ jsx91("span", { children: "Upload" })
43653
43676
  ]
43654
43677
  }
43655
43678
  )
@@ -43658,10 +43681,10 @@ function MediaBin({
43658
43681
  /* @__PURE__ */ jsxs73("div", { className: "squisq-media-bin-list", ref: listRef, children: [
43659
43682
  !mediaProvider && /* @__PURE__ */ jsxs73("div", { className: "squisq-media-bin-empty", children: [
43660
43683
  "No media context.",
43661
- /* @__PURE__ */ jsx90("br", {}),
43684
+ /* @__PURE__ */ jsx91("br", {}),
43662
43685
  "Load a content zip or select a storage slot."
43663
43686
  ] }),
43664
- mediaProvider && entries.length === 0 && !loading && /* @__PURE__ */ jsx90("div", { className: "squisq-media-bin-empty", children: "No files yet." }),
43687
+ mediaProvider && entries.length === 0 && !loading && /* @__PURE__ */ jsx91("div", { className: "squisq-media-bin-empty", children: "No files yet." }),
43665
43688
  entries.map((entry) => {
43666
43689
  const thumb = thumbUrls[entry.name];
43667
43690
  const basename = basenameForPath(entry.name);
@@ -43700,7 +43723,7 @@ ${formatSize(entry.size)}`,
43700
43723
  onDragStart: handleDragStart,
43701
43724
  onKeyDown: (e2) => handleItemKeyDown(entry, e2),
43702
43725
  children: [
43703
- thumb ? /* @__PURE__ */ jsx90(
43726
+ thumb ? /* @__PURE__ */ jsx91(
43704
43727
  "img",
43705
43728
  {
43706
43729
  src: thumb,
@@ -43708,15 +43731,15 @@ ${formatSize(entry.size)}`,
43708
43731
  className: "squisq-media-bin-thumb",
43709
43732
  draggable: false
43710
43733
  }
43711
- ) : /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-icon", children: iconForMime(entry.mimeType) }),
43734
+ ) : /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-icon", children: iconForMime(entry.mimeType) }),
43712
43735
  /* @__PURE__ */ jsxs73("div", { className: "squisq-media-bin-meta", children: [
43713
- /* @__PURE__ */ jsx90("div", { className: "squisq-media-bin-name", children: basename }),
43736
+ /* @__PURE__ */ jsx91("div", { className: "squisq-media-bin-name", children: basename }),
43714
43737
  /* @__PURE__ */ jsxs73("div", { className: "squisq-media-bin-detail-row", children: [
43715
- /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-size", children: formatSize(entry.size) }),
43716
- isUnused && /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-unused-badge", title: "Not used in document", children: "Unused" })
43738
+ /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-size", children: formatSize(entry.size) }),
43739
+ isUnused && /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-unused-badge", title: "Not used in document", children: "Unused" })
43717
43740
  ] })
43718
43741
  ] }),
43719
- allowBinaryDownloads && /* @__PURE__ */ jsx90(
43742
+ allowBinaryDownloads && /* @__PURE__ */ jsx91(
43720
43743
  "button",
43721
43744
  {
43722
43745
  type: "button",
@@ -43730,7 +43753,7 @@ ${formatSize(entry.size)}`,
43730
43753
  void handleDownloadEntry(entry);
43731
43754
  },
43732
43755
  onDragStart: (event) => event.preventDefault(),
43733
- children: /* @__PURE__ */ jsx90("span", { "aria-hidden": "true", children: downloadingPath === entry.name ? "\u2026" : "\u2193" })
43756
+ children: /* @__PURE__ */ jsx91("span", { "aria-hidden": "true", children: downloadingPath === entry.name ? "\u2026" : "\u2193" })
43734
43757
  }
43735
43758
  )
43736
43759
  ]
@@ -43740,11 +43763,11 @@ ${formatSize(entry.size)}`,
43740
43763
  })
43741
43764
  ] }),
43742
43765
  isDropActive && /* @__PURE__ */ jsxs73("div", { className: "squisq-media-bin-drop-target", "aria-hidden": "true", children: [
43743
- /* @__PURE__ */ jsx90("span", { className: "squisq-media-bin-drop-target-icon", children: "+" }),
43744
- /* @__PURE__ */ jsx90("strong", { children: "Drop media here" }),
43745
- /* @__PURE__ */ jsx90("span", { children: "Attach to this document" })
43766
+ /* @__PURE__ */ jsx91("span", { className: "squisq-media-bin-drop-target-icon", children: "+" }),
43767
+ /* @__PURE__ */ jsx91("strong", { children: "Drop media here" }),
43768
+ /* @__PURE__ */ jsx91("span", { children: "Attach to this document" })
43746
43769
  ] }),
43747
- contextMenu && /* @__PURE__ */ jsx90(
43770
+ contextMenu && /* @__PURE__ */ jsx91(
43748
43771
  "div",
43749
43772
  {
43750
43773
  ref: contextMenuRef,
@@ -43752,7 +43775,7 @@ ${formatSize(entry.size)}`,
43752
43775
  role: "menu",
43753
43776
  "aria-label": `${contextMenu.entry.name} actions`,
43754
43777
  style: contextMenuStyle,
43755
- children: /* @__PURE__ */ jsx90(
43778
+ children: /* @__PURE__ */ jsx91(
43756
43779
  "button",
43757
43780
  {
43758
43781
  type: "button",
@@ -43765,7 +43788,7 @@ ${formatSize(entry.size)}`,
43765
43788
  )
43766
43789
  }
43767
43790
  ),
43768
- /* @__PURE__ */ jsx90(
43791
+ /* @__PURE__ */ jsx91(
43769
43792
  "input",
43770
43793
  {
43771
43794
  ref: fileInputRef,
@@ -43778,7 +43801,7 @@ ${formatSize(entry.size)}`,
43778
43801
  ]
43779
43802
  }
43780
43803
  ),
43781
- preview && previewKind !== "file" && /* @__PURE__ */ jsx90(
43804
+ preview && previewKind !== "file" && /* @__PURE__ */ jsx91(
43782
43805
  MediaPreviewDialog,
43783
43806
  {
43784
43807
  kind: previewKind,
@@ -43795,7 +43818,7 @@ ${formatSize(entry.size)}`,
43795
43818
 
43796
43819
  // src/DropZoneOverlay.tsx
43797
43820
  import { useState as useState83 } from "react";
43798
- import { Fragment as Fragment30, jsx as jsx91, jsxs as jsxs74 } from "react/jsx-runtime";
43821
+ import { Fragment as Fragment30, jsx as jsx92, jsxs as jsxs74 } from "react/jsx-runtime";
43799
43822
  function DropZoneOverlay({
43800
43823
  dragContentType,
43801
43824
  zoneProps,
@@ -43803,8 +43826,8 @@ function DropZoneOverlay({
43803
43826
  }) {
43804
43827
  const showMedia = dragContentType === "media" || dragContentType === "mixed";
43805
43828
  const showText = dragContentType === "text" || dragContentType === "mixed";
43806
- return /* @__PURE__ */ jsx91("div", { className: "squisq-drop-overlay", children: /* @__PURE__ */ jsxs74("div", { className: "squisq-drop-overlay-inner", children: [
43807
- showMedia && /* @__PURE__ */ jsx91(
43829
+ return /* @__PURE__ */ jsx92("div", { className: "squisq-drop-overlay", children: /* @__PURE__ */ jsxs74("div", { className: "squisq-drop-overlay-inner", children: [
43830
+ showMedia && /* @__PURE__ */ jsx92(
43808
43831
  DropZone,
43809
43832
  {
43810
43833
  target: "media",
@@ -43817,7 +43840,7 @@ function DropZoneOverlay({
43817
43840
  }
43818
43841
  ),
43819
43842
  showText && /* @__PURE__ */ jsxs74(Fragment30, { children: [
43820
- /* @__PURE__ */ jsx91(
43843
+ /* @__PURE__ */ jsx92(
43821
43844
  DropZone,
43822
43845
  {
43823
43846
  target: "insert",
@@ -43828,7 +43851,7 @@ function DropZoneOverlay({
43828
43851
  variant: "insert"
43829
43852
  }
43830
43853
  ),
43831
- /* @__PURE__ */ jsx91(
43854
+ /* @__PURE__ */ jsx92(
43832
43855
  DropZone,
43833
43856
  {
43834
43857
  target: "replace",
@@ -43886,9 +43909,9 @@ function DropZone({
43886
43909
  props.onDrop(e2);
43887
43910
  },
43888
43911
  children: [
43889
- /* @__PURE__ */ jsx91("span", { className: "squisq-drop-zone-icon", children: icon }),
43890
- /* @__PURE__ */ jsx91("span", { className: "squisq-drop-zone-label", children: label }),
43891
- /* @__PURE__ */ jsx91("span", { className: "squisq-drop-zone-desc", children: description })
43912
+ /* @__PURE__ */ jsx92("span", { className: "squisq-drop-zone-icon", children: icon }),
43913
+ /* @__PURE__ */ jsx92("span", { className: "squisq-drop-zone-label", children: label }),
43914
+ /* @__PURE__ */ jsx92("span", { className: "squisq-drop-zone-desc", children: description })
43892
43915
  ]
43893
43916
  }
43894
43917
  );
@@ -43908,7 +43931,7 @@ function clampTooltipLeft(anchorX, tooltipWidth, viewportWidth, edgePadding = ED
43908
43931
  }
43909
43932
 
43910
43933
  // src/Tooltip.tsx
43911
- import { jsx as jsx92 } from "react/jsx-runtime";
43934
+ import { jsx as jsx93 } from "react/jsx-runtime";
43912
43935
  var SHOW_DELAY_MS = 180;
43913
43936
  function TooltipLayer() {
43914
43937
  const [state, setState3] = useState84(null);
@@ -44011,7 +44034,7 @@ function TooltipLayer() {
44011
44034
  }, []);
44012
44035
  if (!state) return null;
44013
44036
  return createPortal19(
44014
- /* @__PURE__ */ jsx92(
44037
+ /* @__PURE__ */ jsx93(
44015
44038
  "div",
44016
44039
  {
44017
44040
  role: "tooltip",
@@ -44035,14 +44058,14 @@ import { useEffect as useEffect80, useRef as useRef75, useState as useState91, u
44035
44058
 
44036
44059
  // src/BlockPreviewPanel.tsx
44037
44060
  import { useMemo as useMemo58 } from "react";
44038
- import { VIEWPORT_PRESETS as VIEWPORT_PRESETS7 } from "@bendyline/squisq/schemas";
44061
+ import { VIEWPORT_PRESETS as VIEWPORT_PRESETS8 } from "@bendyline/squisq/schemas";
44039
44062
  import { flattenBlocks as flattenBlocks6, DEFAULT_THEME as DEFAULT_THEME7 } from "@bendyline/squisq/doc";
44040
- import { jsx as jsx93 } from "react/jsx-runtime";
44063
+ import { jsx as jsx94 } from "react/jsx-runtime";
44041
44064
  function BlockPreviewPanel({ basePath = "/" }) {
44042
44065
  const { doc, activeBlockStartLine, mediaProvider, workspaceContainer, fileName, mediaRevision } = useEditorContext();
44043
44066
  const previewSettings = usePreviewSettingsOptional();
44044
44067
  const theme = previewSettings?.activeTheme ?? DEFAULT_THEME7;
44045
- const viewport = previewSettings?.activeViewport ?? VIEWPORT_PRESETS7.landscape;
44068
+ const viewport = previewSettings?.activeViewport ?? VIEWPORT_PRESETS8.landscape;
44046
44069
  const projection = usePreviewProjection(doc, "", workspaceContainer, fileName, mediaRevision);
44047
44070
  const previewDoc = projection?.contentDoc ?? doc;
44048
44071
  const block = useMemo58(() => {
@@ -44056,12 +44079,12 @@ function BlockPreviewPanel({ basePath = "/" }) {
44056
44079
  [previewDoc, block, theme, viewport]
44057
44080
  );
44058
44081
  if (!visual) return null;
44059
- return /* @__PURE__ */ jsx93("div", { className: "squisq-block-preview-panel", "data-testid": "block-preview-panel", "aria-hidden": true, children: /* @__PURE__ */ jsx93(
44082
+ return /* @__PURE__ */ jsx94("div", { className: "squisq-block-preview-panel", "data-testid": "block-preview-panel", "aria-hidden": true, children: /* @__PURE__ */ jsx94(
44060
44083
  "div",
44061
44084
  {
44062
44085
  className: "squisq-block-preview-frame",
44063
44086
  style: { aspectRatio: `${viewport.width} / ${viewport.height}` },
44064
- children: /* @__PURE__ */ jsx93(
44087
+ children: /* @__PURE__ */ jsx94(
44065
44088
  BlockThumbnail,
44066
44089
  {
44067
44090
  visual,
@@ -44079,13 +44102,13 @@ import { useCallback as useCallback57, useEffect as useEffect75, useId as useId1
44079
44102
 
44080
44103
  // src/BlockPreviewList.tsx
44081
44104
  import { useCallback as useCallback56, useRef as useRef67 } from "react";
44082
- import { VIEWPORT_PRESETS as VIEWPORT_PRESETS8 } from "@bendyline/squisq/schemas";
44105
+ import { VIEWPORT_PRESETS as VIEWPORT_PRESETS9 } from "@bendyline/squisq/schemas";
44083
44106
  import { flattenBlocks as flattenBlocks7 } from "@bendyline/squisq/doc";
44084
- import { BlockRenderer as BlockRenderer5, MediaContext as MediaContext6 } from "@bendyline/squisq-react";
44085
- import { Fragment as Fragment31, jsx as jsx94, jsxs as jsxs75 } from "react/jsx-runtime";
44107
+ import { BlockRenderer as BlockRenderer6, MediaContext as MediaContext7 } from "@bendyline/squisq-react";
44108
+ import { Fragment as Fragment31, jsx as jsx95, jsxs as jsxs75 } from "react/jsx-runtime";
44086
44109
  function BlockPreviewList({
44087
44110
  basePath = "/",
44088
- viewport = VIEWPORT_PRESETS8.landscape,
44111
+ viewport = VIEWPORT_PRESETS9.landscape,
44089
44112
  mediaProvider = null,
44090
44113
  onNavigate
44091
44114
  }) {
@@ -44118,9 +44141,9 @@ function BlockPreviewList({
44118
44141
  [activeView, doc, goToBlockByLine, layoutMode, monacoEditor, onNavigate]
44119
44142
  );
44120
44143
  if (items.length === 0) {
44121
- return /* @__PURE__ */ jsx94("div", { className: "squisq-preview-list-empty", children: /* @__PURE__ */ jsx94("p", { children: "Add some content to see block previews." }) });
44144
+ return /* @__PURE__ */ jsx95("div", { className: "squisq-preview-list-empty", children: /* @__PURE__ */ jsx95("p", { children: "Add some content to see block previews." }) });
44122
44145
  }
44123
- return /* @__PURE__ */ jsx94(MediaContext6.Provider, { value: mediaProvider, children: /* @__PURE__ */ jsx94("ul", { ref: listRef, className: "squisq-preview-list", "aria-label": "Block previews", children: items.map((item) => /* @__PURE__ */ jsx94("li", { children: /* @__PURE__ */ jsxs75(
44146
+ return /* @__PURE__ */ jsx95(MediaContext7.Provider, { value: mediaProvider, children: /* @__PURE__ */ jsx95("ul", { ref: listRef, className: "squisq-preview-list", "aria-label": "Block previews", children: items.map((item) => /* @__PURE__ */ jsx95("li", { children: /* @__PURE__ */ jsxs75(
44124
44147
  "button",
44125
44148
  {
44126
44149
  type: "button",
@@ -44129,20 +44152,20 @@ function BlockPreviewList({
44129
44152
  onClick: () => handleSelect(item),
44130
44153
  children: [
44131
44154
  /* @__PURE__ */ jsxs75("span", { className: "squisq-inline-preview-card-label", children: [
44132
- /* @__PURE__ */ jsx94("span", { className: "squisq-inline-preview-card-template", children: templateLabel(item.template) }),
44155
+ /* @__PURE__ */ jsx95("span", { className: "squisq-inline-preview-card-template", children: templateLabel(item.template) }),
44133
44156
  item.headingText && /* @__PURE__ */ jsxs75(Fragment31, { children: [
44134
- /* @__PURE__ */ jsx94("span", { className: "squisq-inline-preview-card-sep", "aria-hidden": "true", children: "\u2014" }),
44135
- /* @__PURE__ */ jsx94("span", { className: "squisq-inline-preview-card-title", children: item.headingText })
44157
+ /* @__PURE__ */ jsx95("span", { className: "squisq-inline-preview-card-sep", "aria-hidden": "true", children: "\u2014" }),
44158
+ /* @__PURE__ */ jsx95("span", { className: "squisq-inline-preview-card-title", children: item.headingText })
44136
44159
  ] })
44137
44160
  ] }),
44138
- /* @__PURE__ */ jsx94(
44161
+ /* @__PURE__ */ jsx95(
44139
44162
  "span",
44140
44163
  {
44141
44164
  className: "squisq-inline-preview-card-svg",
44142
44165
  "aria-hidden": "true",
44143
44166
  style: { aspectRatio: `${viewport.width} / ${viewport.height}` },
44144
- children: /* @__PURE__ */ jsx94(
44145
- BlockRenderer5,
44167
+ children: /* @__PURE__ */ jsx95(
44168
+ BlockRenderer6,
44146
44169
  {
44147
44170
  block: item.block,
44148
44171
  buildPlayback: "all",
@@ -44282,7 +44305,7 @@ function useNavigationSheetSwipe({
44282
44305
  }
44283
44306
 
44284
44307
  // src/NavigationSheet.tsx
44285
- import { Fragment as Fragment32, jsx as jsx95, jsxs as jsxs76 } from "react/jsx-runtime";
44308
+ import { Fragment as Fragment32, jsx as jsx96, jsxs as jsxs76 } from "react/jsx-runtime";
44286
44309
  var PANEL_LABELS = {
44287
44310
  outline: "Outline",
44288
44311
  previews: "Block previews"
@@ -44363,8 +44386,8 @@ function NavigationSheet({
44363
44386
  "data-state": open ? "open" : dragPanel ? "dragging" : "closed",
44364
44387
  "data-testid": "navigation-sheet",
44365
44388
  children: [
44366
- /* @__PURE__ */ jsx95("div", { ref: scrimRef, className: "squisq-navigation-sheet-scrim", onClick: close }),
44367
- /* @__PURE__ */ jsx95(
44389
+ /* @__PURE__ */ jsx96("div", { ref: scrimRef, className: "squisq-navigation-sheet-scrim", onClick: close }),
44390
+ /* @__PURE__ */ jsx96(
44368
44391
  "div",
44369
44392
  {
44370
44393
  ref: panelRef,
@@ -44374,7 +44397,7 @@ function NavigationSheet({
44374
44397
  tabIndex: -1,
44375
44398
  children: content && /* @__PURE__ */ jsxs76(Fragment32, { children: [
44376
44399
  /* @__PURE__ */ jsxs76("div", { className: "squisq-navigation-sheet-header", children: [
44377
- /* @__PURE__ */ jsx95("div", { className: "squisq-navigation-sheet-tabs", role: "tablist", children: PANELS.map((option) => /* @__PURE__ */ jsx95(
44400
+ /* @__PURE__ */ jsx96("div", { className: "squisq-navigation-sheet-tabs", role: "tablist", children: PANELS.map((option) => /* @__PURE__ */ jsx96(
44378
44401
  "button",
44379
44402
  {
44380
44403
  type: "button",
@@ -44388,25 +44411,25 @@ function NavigationSheet({
44388
44411
  },
44389
44412
  option
44390
44413
  )) }),
44391
- /* @__PURE__ */ jsx95(
44414
+ /* @__PURE__ */ jsx96(
44392
44415
  "button",
44393
44416
  {
44394
44417
  type: "button",
44395
44418
  className: "squisq-navigation-sheet-close",
44396
44419
  "aria-label": "Close",
44397
44420
  onClick: close,
44398
- children: /* @__PURE__ */ jsx95(Icon, { icon: "xmark" })
44421
+ children: /* @__PURE__ */ jsx96(Icon, { icon: "xmark" })
44399
44422
  }
44400
44423
  )
44401
44424
  ] }),
44402
- /* @__PURE__ */ jsx95(
44425
+ /* @__PURE__ */ jsx96(
44403
44426
  "div",
44404
44427
  {
44405
44428
  id: `${tabIdPrefix}-body`,
44406
44429
  className: "squisq-navigation-sheet-body",
44407
44430
  role: "tabpanel",
44408
44431
  "aria-labelledby": `${tabIdPrefix}-${content}`,
44409
- children: content === "outline" ? /* @__PURE__ */ jsx95(OutlinePanel, { presentation: "sheet", readOnly, onNavigate: close }) : /* @__PURE__ */ jsx95(
44432
+ children: content === "outline" ? /* @__PURE__ */ jsx96(OutlinePanel, { presentation: "sheet", readOnly, onNavigate: close }) : /* @__PURE__ */ jsx96(
44410
44433
  BlockPreviewList,
44411
44434
  {
44412
44435
  basePath,
@@ -44425,7 +44448,7 @@ function NavigationSheet({
44425
44448
  }
44426
44449
 
44427
44450
  // src/proofing/ProofingPanel.tsx
44428
- import { jsx as jsx96, jsxs as jsxs77 } from "react/jsx-runtime";
44451
+ import { jsx as jsx97, jsxs as jsxs77 } from "react/jsx-runtime";
44429
44452
  var CATEGORY_LABELS = {
44430
44453
  spelling: "Spelling",
44431
44454
  grammar: "Grammar",
@@ -44439,10 +44462,10 @@ function ProofingPanel() {
44439
44462
  /* @__PURE__ */ jsxs77("div", { className: "squisq-proof-panel-header", children: [
44440
44463
  /* @__PURE__ */ jsxs77("span", { className: "squisq-proof-panel-title", children: [
44441
44464
  "Proofing",
44442
- /* @__PURE__ */ jsx96("span", { className: "squisq-proof-panel-count", children: findings.length })
44465
+ /* @__PURE__ */ jsx97("span", { className: "squisq-proof-panel-count", children: findings.length })
44443
44466
  ] }),
44444
44467
  /* @__PURE__ */ jsxs77("span", { className: "squisq-proof-panel-actions", children: [
44445
- /* @__PURE__ */ jsx96(
44468
+ /* @__PURE__ */ jsx97(
44446
44469
  "button",
44447
44470
  {
44448
44471
  type: "button",
@@ -44454,7 +44477,7 @@ function ProofingPanel() {
44454
44477
  children: "\u2191"
44455
44478
  }
44456
44479
  ),
44457
- /* @__PURE__ */ jsx96(
44480
+ /* @__PURE__ */ jsx97(
44458
44481
  "button",
44459
44482
  {
44460
44483
  type: "button",
@@ -44466,7 +44489,7 @@ function ProofingPanel() {
44466
44489
  children: "\u2193"
44467
44490
  }
44468
44491
  ),
44469
- /* @__PURE__ */ jsx96(
44492
+ /* @__PURE__ */ jsx97(
44470
44493
  "button",
44471
44494
  {
44472
44495
  type: "button",
@@ -44479,20 +44502,20 @@ function ProofingPanel() {
44479
44502
  )
44480
44503
  ] })
44481
44504
  ] }),
44482
- state.status === "loading" && /* @__PURE__ */ jsx96("div", { className: "squisq-proof-panel-empty", children: "Loading proofing engine\u2026" }),
44505
+ state.status === "loading" && /* @__PURE__ */ jsx97("div", { className: "squisq-proof-panel-empty", children: "Loading proofing engine\u2026" }),
44483
44506
  state.status === "error" && /* @__PURE__ */ jsxs77("div", { className: "squisq-proof-panel-empty", children: [
44484
44507
  "Proofing failed to load.",
44485
- /* @__PURE__ */ jsx96("button", { type: "button", className: "squisq-proof-panel-retry", onClick: state.retrySetup, children: "Retry" })
44508
+ /* @__PURE__ */ jsx97("button", { type: "button", className: "squisq-proof-panel-retry", onClick: state.retrySetup, children: "Retry" })
44486
44509
  ] }),
44487
- state.status === "ready" && findings.length === 0 && /* @__PURE__ */ jsx96("div", { className: "squisq-proof-panel-empty", children: "No issues found." }),
44488
- /* @__PURE__ */ jsx96("ul", { className: "squisq-proof-panel-list", children: findings.map((finding) => /* @__PURE__ */ jsx96("li", { children: /* @__PURE__ */ jsxs77(
44510
+ state.status === "ready" && findings.length === 0 && /* @__PURE__ */ jsx97("div", { className: "squisq-proof-panel-empty", children: "No issues found." }),
44511
+ /* @__PURE__ */ jsx97("ul", { className: "squisq-proof-panel-list", children: findings.map((finding) => /* @__PURE__ */ jsx97("li", { children: /* @__PURE__ */ jsxs77(
44489
44512
  "button",
44490
44513
  {
44491
44514
  type: "button",
44492
44515
  className: finding.id === activeFindingId ? "squisq-proof-panel-row squisq-proof-panel-row--active" : "squisq-proof-panel-row",
44493
44516
  onClick: () => state.selectFinding(finding.id),
44494
44517
  children: [
44495
- /* @__PURE__ */ jsx96(
44518
+ /* @__PURE__ */ jsx97(
44496
44519
  "span",
44497
44520
  {
44498
44521
  className: `squisq-proof-dot squisq-proof-dot--${finding.category}`,
@@ -44501,8 +44524,8 @@ function ProofingPanel() {
44501
44524
  }
44502
44525
  ),
44503
44526
  /* @__PURE__ */ jsxs77("span", { className: "squisq-proof-panel-row-body", children: [
44504
- /* @__PURE__ */ jsx96("span", { className: "squisq-proof-panel-excerpt", children: finding.originalText }),
44505
- /* @__PURE__ */ jsx96("span", { className: "squisq-proof-panel-message", children: proofMessageText(finding) })
44527
+ /* @__PURE__ */ jsx97("span", { className: "squisq-proof-panel-excerpt", children: finding.originalText }),
44528
+ /* @__PURE__ */ jsx97("span", { className: "squisq-proof-panel-message", children: proofMessageText(finding) })
44506
44529
  ] })
44507
44530
  ]
44508
44531
  }
@@ -44517,7 +44540,7 @@ import {
44517
44540
  MemoryContentContainer,
44518
44541
  scopeContainer
44519
44542
  } from "@bendyline/squisq/storage";
44520
- import { jsx as jsx97, jsxs as jsxs78 } from "react/jsx-runtime";
44543
+ import { jsx as jsx98, jsxs as jsxs78 } from "react/jsx-runtime";
44521
44544
  function ImageEditModal({
44522
44545
  relativePath,
44523
44546
  container,
@@ -44576,7 +44599,7 @@ function ImageEditModal({
44576
44599
  },
44577
44600
  [mediaProvider, relativePath, onSaved]
44578
44601
  );
44579
- return /* @__PURE__ */ jsx97(
44602
+ return /* @__PURE__ */ jsx98(
44580
44603
  "div",
44581
44604
  {
44582
44605
  ref: modalRef,
@@ -44590,9 +44613,9 @@ function ImageEditModal({
44590
44613
  },
44591
44614
  children: /* @__PURE__ */ jsxs78("div", { ref: surfaceRef, className: "squisq-image-edit-modal__surface", children: [
44592
44615
  /* @__PURE__ */ jsxs78("header", { className: "squisq-image-edit-modal__header", children: [
44593
- /* @__PURE__ */ jsx97("span", { className: "squisq-image-edit-modal__title", children: "Edit image" }),
44594
- /* @__PURE__ */ jsx97("span", { className: "squisq-image-edit-modal__path", children: relativePath }),
44595
- /* @__PURE__ */ jsx97(
44616
+ /* @__PURE__ */ jsx98("span", { className: "squisq-image-edit-modal__title", children: "Edit image" }),
44617
+ /* @__PURE__ */ jsx98("span", { className: "squisq-image-edit-modal__path", children: relativePath }),
44618
+ /* @__PURE__ */ jsx98(
44596
44619
  "button",
44597
44620
  {
44598
44621
  type: "button",
@@ -44604,10 +44627,10 @@ function ImageEditModal({
44604
44627
  }
44605
44628
  )
44606
44629
  ] }),
44607
- /* @__PURE__ */ jsx97("div", { className: "squisq-image-edit-modal__body", children: resolveError ? /* @__PURE__ */ jsxs78("div", { className: "squisq-image-edit-modal__error", children: [
44630
+ /* @__PURE__ */ jsx98("div", { className: "squisq-image-edit-modal__body", children: resolveError ? /* @__PURE__ */ jsxs78("div", { className: "squisq-image-edit-modal__error", children: [
44608
44631
  "Failed to load image: ",
44609
44632
  resolveError
44610
- ] }) : !saveFormat ? /* @__PURE__ */ jsx97("div", { className: "squisq-image-edit-modal__error", children: "Editing supports PNG, JPEG, and WebP images without changing the asset type." }) : !initialSrc ? /* @__PURE__ */ jsx97("div", { className: "squisq-image-edit-modal__loading", children: "Loading image\u2026" }) : /* @__PURE__ */ jsx97(
44633
+ ] }) : !saveFormat ? /* @__PURE__ */ jsx98("div", { className: "squisq-image-edit-modal__error", children: "Editing supports PNG, JPEG, and WebP images without changing the asset type." }) : !initialSrc ? /* @__PURE__ */ jsx98("div", { className: "squisq-image-edit-modal__loading", children: "Loading image\u2026" }) : /* @__PURE__ */ jsx98(
44611
44634
  ImageEditor,
44612
44635
  {
44613
44636
  filesContainer: sidecar,
@@ -44778,7 +44801,7 @@ function centeredCrop(ratio, frameWidth, frameHeight) {
44778
44801
  }
44779
44802
 
44780
44803
  // src/mediaEdit/MediaEditAudioSection.tsx
44781
- import { Fragment as Fragment33, jsx as jsx98, jsxs as jsxs79 } from "react/jsx-runtime";
44804
+ import { Fragment as Fragment33, jsx as jsx99, jsxs as jsxs79 } from "react/jsx-runtime";
44782
44805
  var STAGES = [
44783
44806
  {
44784
44807
  id: "highpass",
@@ -44924,26 +44947,26 @@ function usePreviewPlayer(preview) {
44924
44947
  return { playing, play, stop, seek, position, duration };
44925
44948
  }
44926
44949
  function PlayIcon() {
44927
- return /* @__PURE__ */ jsx98(
44950
+ return /* @__PURE__ */ jsx99(
44928
44951
  "svg",
44929
44952
  {
44930
44953
  className: "squisq-media-edit-icon",
44931
44954
  viewBox: "0 0 10 10",
44932
44955
  "aria-hidden": "true",
44933
44956
  focusable: "false",
44934
- children: /* @__PURE__ */ jsx98("path", { d: "M2 1 9 5 2 9Z" })
44957
+ children: /* @__PURE__ */ jsx99("path", { d: "M2 1 9 5 2 9Z" })
44935
44958
  }
44936
44959
  );
44937
44960
  }
44938
44961
  function StopIcon() {
44939
- return /* @__PURE__ */ jsx98(
44962
+ return /* @__PURE__ */ jsx99(
44940
44963
  "svg",
44941
44964
  {
44942
44965
  className: "squisq-media-edit-icon",
44943
44966
  viewBox: "0 0 10 10",
44944
44967
  "aria-hidden": "true",
44945
44968
  focusable: "false",
44946
- children: /* @__PURE__ */ jsx98("rect", { x: "1.5", y: "1.5", width: "7", height: "7", rx: "1" })
44969
+ children: /* @__PURE__ */ jsx99("rect", { x: "1.5", y: "1.5", width: "7", height: "7", rx: "1" })
44947
44970
  }
44948
44971
  );
44949
44972
  }
@@ -44995,11 +45018,11 @@ function MediaEditAudioSection({
44995
45018
  }, [draftFx.ops.length, manager, item.src, knownFx, previewFrom]);
44996
45019
  return /* @__PURE__ */ jsxs79("div", { className: "squisq-media-edit-section", children: [
44997
45020
  /* @__PURE__ */ jsxs79("div", { className: "squisq-media-edit-presets", role: "group", "aria-label": "Presets", children: [
44998
- /* @__PURE__ */ jsx98("button", { type: "button", onClick: () => onChange({ ...draft, fx: presetFx("voice") }), children: "Clean up voice" }),
44999
- /* @__PURE__ */ jsx98("button", { type: "button", onClick: () => onChange({ ...draft, fx: presetFx("levels") }), children: "Levels only" }),
45000
- /* @__PURE__ */ jsx98("button", { type: "button", onClick: () => onChange({ ...draft, fx: presetFx("none") }), children: "None" })
45021
+ /* @__PURE__ */ jsx99("button", { type: "button", onClick: () => onChange({ ...draft, fx: presetFx("voice") }), children: "Clean up voice" }),
45022
+ /* @__PURE__ */ jsx99("button", { type: "button", onClick: () => onChange({ ...draft, fx: presetFx("levels") }), children: "Levels only" }),
45023
+ /* @__PURE__ */ jsx99("button", { type: "button", onClick: () => onChange({ ...draft, fx: presetFx("none") }), children: "None" })
45001
45024
  ] }),
45002
- /* @__PURE__ */ jsx98("ul", { className: "squisq-media-edit-stages", children: STAGES.map((stage) => {
45025
+ /* @__PURE__ */ jsx99("ul", { className: "squisq-media-edit-stages", children: STAGES.map((stage) => {
45003
45026
  const s = draft.fx[stage.id];
45004
45027
  const inputId = `${idPrefix}-${stage.id}`;
45005
45028
  return /* @__PURE__ */ jsxs79(
@@ -45009,7 +45032,7 @@ function MediaEditAudioSection({
45009
45032
  "data-enabled": s.enabled ? "true" : "false",
45010
45033
  children: [
45011
45034
  /* @__PURE__ */ jsxs79("label", { className: "squisq-media-edit-stage__toggle", children: [
45012
- /* @__PURE__ */ jsx98(
45035
+ /* @__PURE__ */ jsx99(
45013
45036
  "input",
45014
45037
  {
45015
45038
  type: "checkbox",
@@ -45017,9 +45040,9 @@ function MediaEditAudioSection({
45017
45040
  onChange: (e2) => setStage(stage.id, { enabled: e2.target.checked })
45018
45041
  }
45019
45042
  ),
45020
- /* @__PURE__ */ jsx98("span", { className: "squisq-media-edit-stage__label", children: stage.label })
45043
+ /* @__PURE__ */ jsx99("span", { className: "squisq-media-edit-stage__label", children: stage.label })
45021
45044
  ] }),
45022
- /* @__PURE__ */ jsx98(
45045
+ /* @__PURE__ */ jsx99(
45023
45046
  "input",
45024
45047
  {
45025
45048
  id: inputId,
@@ -45035,9 +45058,9 @@ function MediaEditAudioSection({
45035
45058
  onChange: (e2) => setStage(stage.id, { value: stage.toValue(Number(e2.target.value)) })
45036
45059
  }
45037
45060
  ),
45038
- /* @__PURE__ */ jsx98("output", { className: "squisq-media-edit-stage__value", htmlFor: inputId, children: stage.format(s.value) }),
45039
- /* @__PURE__ */ jsx98("p", { className: "squisq-media-edit-stage__hint", children: stage.hint }),
45040
- stage.id === "loudness" && s.enabled && /* @__PURE__ */ jsx98("div", { className: "squisq-media-edit-chips", role: "group", "aria-label": "Targets", children: LOUDNESS_PRESETS.map((preset) => /* @__PURE__ */ jsxs79(
45061
+ /* @__PURE__ */ jsx99("output", { className: "squisq-media-edit-stage__value", htmlFor: inputId, children: stage.format(s.value) }),
45062
+ /* @__PURE__ */ jsx99("p", { className: "squisq-media-edit-stage__hint", children: stage.hint }),
45063
+ stage.id === "loudness" && s.enabled && /* @__PURE__ */ jsx99("div", { className: "squisq-media-edit-chips", role: "group", "aria-label": "Targets", children: LOUDNESS_PRESETS.map((preset) => /* @__PURE__ */ jsxs79(
45041
45064
  "button",
45042
45065
  {
45043
45066
  type: "button",
@@ -45064,7 +45087,7 @@ function MediaEditAudioSection({
45064
45087
  previewFrom.toFixed(0),
45065
45088
  " s"
45066
45089
  ] }),
45067
- /* @__PURE__ */ jsx98(
45090
+ /* @__PURE__ */ jsx99(
45068
45091
  "input",
45069
45092
  {
45070
45093
  type: "range",
@@ -45076,7 +45099,7 @@ function MediaEditAudioSection({
45076
45099
  }
45077
45100
  )
45078
45101
  ] }),
45079
- /* @__PURE__ */ jsx98("div", { className: "squisq-media-edit-preview__actions", children: /* @__PURE__ */ jsx98(
45102
+ /* @__PURE__ */ jsx99("div", { className: "squisq-media-edit-preview__actions", children: /* @__PURE__ */ jsx99(
45080
45103
  "button",
45081
45104
  {
45082
45105
  type: "button",
@@ -45087,8 +45110,8 @@ function MediaEditAudioSection({
45087
45110
  ) }),
45088
45111
  preview != null && player.duration > 0 && /* @__PURE__ */ jsxs79(Fragment33, { children: [
45089
45112
  /* @__PURE__ */ jsxs79("div", { className: "squisq-media-edit-playback", "data-playing": player.playing ?? void 0, children: [
45090
- /* @__PURE__ */ jsx98("span", { className: "squisq-media-edit-playback__label", children: player.playing ? `${player.playing === "original" ? "Original" : "Processed"} from ${Math.round(preview.startSec)} s` : "Stopped" }),
45091
- /* @__PURE__ */ jsx98(
45113
+ /* @__PURE__ */ jsx99("span", { className: "squisq-media-edit-playback__label", children: player.playing ? `${player.playing === "original" ? "Original" : "Processed"} from ${Math.round(preview.startSec)} s` : "Stopped" }),
45114
+ /* @__PURE__ */ jsx99(
45092
45115
  "input",
45093
45116
  {
45094
45117
  type: "range",
@@ -45117,7 +45140,7 @@ function MediaEditAudioSection({
45117
45140
  disabled: previewing,
45118
45141
  onClick: () => player.play("original"),
45119
45142
  children: [
45120
- /* @__PURE__ */ jsx98(PlayIcon, {}),
45143
+ /* @__PURE__ */ jsx99(PlayIcon, {}),
45121
45144
  "Original"
45122
45145
  ]
45123
45146
  }
@@ -45130,26 +45153,26 @@ function MediaEditAudioSection({
45130
45153
  disabled: previewing,
45131
45154
  onClick: () => player.play("processed"),
45132
45155
  children: [
45133
- /* @__PURE__ */ jsx98(PlayIcon, {}),
45156
+ /* @__PURE__ */ jsx99(PlayIcon, {}),
45134
45157
  "Processed"
45135
45158
  ]
45136
45159
  }
45137
45160
  ),
45138
45161
  /* @__PURE__ */ jsxs79("button", { type: "button", disabled: !player.playing, onClick: player.stop, children: [
45139
- /* @__PURE__ */ jsx98(StopIcon, {}),
45162
+ /* @__PURE__ */ jsx99(StopIcon, {}),
45140
45163
  "Stop"
45141
45164
  ] })
45142
45165
  ] })
45143
45166
  ] }),
45144
- preview != null && previewedFx !== knownFx && /* @__PURE__ */ jsx98("p", { className: "squisq-media-edit-note", children: "Settings changed \u2014 update the preview to hear them." }),
45145
- previewError && /* @__PURE__ */ jsx98("p", { className: "squisq-media-edit-note squisq-media-edit-note--error", role: "alert", children: previewError })
45167
+ preview != null && previewedFx !== knownFx && /* @__PURE__ */ jsx99("p", { className: "squisq-media-edit-note", children: "Settings changed \u2014 update the preview to hear them." }),
45168
+ previewError && /* @__PURE__ */ jsx99("p", { className: "squisq-media-edit-note squisq-media-edit-note--error", role: "alert", children: previewError })
45146
45169
  ] })
45147
45170
  ] });
45148
45171
  }
45149
45172
 
45150
45173
  // src/mediaEdit/MediaEditTimingSection.tsx
45151
45174
  import { useCallback as useCallback60, useEffect as useEffect78, useRef as useRef72, useState as useState88 } from "react";
45152
- import { jsx as jsx99, jsxs as jsxs80 } from "react/jsx-runtime";
45175
+ import { jsx as jsx100, jsxs as jsxs80 } from "react/jsx-runtime";
45153
45176
  var DEFAULT_MAX_PAUSE = 0.8;
45154
45177
  function formatDb(value) {
45155
45178
  if (value === 0) return "0 dB";
@@ -45192,8 +45215,8 @@ function MediaEditTimingSection({
45192
45215
  const saved = cutSeconds(draft.cuts);
45193
45216
  return /* @__PURE__ */ jsxs80("div", { className: "squisq-media-edit-section", children: [
45194
45217
  /* @__PURE__ */ jsxs80("div", { className: "squisq-media-edit-row", children: [
45195
- /* @__PURE__ */ jsx99("label", { className: "squisq-media-edit-row__label", htmlFor: `${idPrefix}-pause`, children: "Shorten pauses longer than" }),
45196
- /* @__PURE__ */ jsx99(
45218
+ /* @__PURE__ */ jsx100("label", { className: "squisq-media-edit-row__label", htmlFor: `${idPrefix}-pause`, children: "Shorten pauses longer than" }),
45219
+ /* @__PURE__ */ jsx100(
45197
45220
  "input",
45198
45221
  {
45199
45222
  id: `${idPrefix}-pause`,
@@ -45212,8 +45235,8 @@ function MediaEditTimingSection({
45212
45235
  ] })
45213
45236
  ] }),
45214
45237
  /* @__PURE__ */ jsxs80("div", { className: "squisq-media-edit-preview__actions", children: [
45215
- /* @__PURE__ */ jsx99("button", { type: "button", onClick: findPauses, disabled: finding, children: finding ? "Finding pauses\u2026" : "Find pauses" }),
45216
- /* @__PURE__ */ jsx99(
45238
+ /* @__PURE__ */ jsx100("button", { type: "button", onClick: findPauses, disabled: finding, children: finding ? "Finding pauses\u2026" : "Find pauses" }),
45239
+ /* @__PURE__ */ jsx100(
45217
45240
  "button",
45218
45241
  {
45219
45242
  type: "button",
@@ -45223,11 +45246,11 @@ function MediaEditTimingSection({
45223
45246
  }
45224
45247
  )
45225
45248
  ] }),
45226
- /* @__PURE__ */ jsx99("p", { className: "squisq-media-edit-note", role: "status", "aria-live": "polite", children: draft.cuts.length === 0 ? "No pauses shortened." : `${draft.cuts.length} ${draft.cuts.length === 1 ? "pause" : "pauses"} shortened, saving ${formatClock6(saved)}.` }),
45227
- error && /* @__PURE__ */ jsx99("p", { className: "squisq-media-edit-note squisq-media-edit-note--error", role: "alert", children: error }),
45249
+ /* @__PURE__ */ jsx100("p", { className: "squisq-media-edit-note", role: "status", "aria-live": "polite", children: draft.cuts.length === 0 ? "No pauses shortened." : `${draft.cuts.length} ${draft.cuts.length === 1 ? "pause" : "pauses"} shortened, saving ${formatClock6(saved)}.` }),
45250
+ error && /* @__PURE__ */ jsx100("p", { className: "squisq-media-edit-note squisq-media-edit-note--error", role: "alert", children: error }),
45228
45251
  /* @__PURE__ */ jsxs80("div", { className: "squisq-media-edit-row", children: [
45229
- /* @__PURE__ */ jsx99("label", { className: "squisq-media-edit-row__label", htmlFor: `${idPrefix}-gain`, children: "Volume" }),
45230
- /* @__PURE__ */ jsx99(
45252
+ /* @__PURE__ */ jsx100("label", { className: "squisq-media-edit-row__label", htmlFor: `${idPrefix}-gain`, children: "Volume" }),
45253
+ /* @__PURE__ */ jsx100(
45231
45254
  "input",
45232
45255
  {
45233
45256
  id: `${idPrefix}-gain`,
@@ -45240,11 +45263,11 @@ function MediaEditTimingSection({
45240
45263
  onChange: (e2) => onChange({ ...draft, gain: Number(e2.target.value) })
45241
45264
  }
45242
45265
  ),
45243
- /* @__PURE__ */ jsx99("output", { htmlFor: `${idPrefix}-gain`, children: formatDb(draft.gain) })
45266
+ /* @__PURE__ */ jsx100("output", { htmlFor: `${idPrefix}-gain`, children: formatDb(draft.gain) })
45244
45267
  ] }),
45245
45268
  ["fadeIn", "fadeOut"].map((key) => /* @__PURE__ */ jsxs80("div", { className: "squisq-media-edit-row", children: [
45246
- /* @__PURE__ */ jsx99("label", { className: "squisq-media-edit-row__label", htmlFor: `${idPrefix}-${key}`, children: key === "fadeIn" ? "Fade in" : "Fade out" }),
45247
- /* @__PURE__ */ jsx99(
45269
+ /* @__PURE__ */ jsx100("label", { className: "squisq-media-edit-row__label", htmlFor: `${idPrefix}-${key}`, children: key === "fadeIn" ? "Fade in" : "Fade out" }),
45270
+ /* @__PURE__ */ jsx100(
45248
45271
  "input",
45249
45272
  {
45250
45273
  id: `${idPrefix}-${key}`,
@@ -45257,7 +45280,7 @@ function MediaEditTimingSection({
45257
45280
  onChange: (e2) => onChange({ ...draft, [key]: Number(e2.target.value) })
45258
45281
  }
45259
45282
  ),
45260
- /* @__PURE__ */ jsx99("output", { htmlFor: `${idPrefix}-${key}`, children: draft[key] === 0 ? "Off" : `${draft[key].toFixed(1)} s` })
45283
+ /* @__PURE__ */ jsx100("output", { htmlFor: `${idPrefix}-${key}`, children: draft[key] === 0 ? "Off" : `${draft[key].toFixed(1)} s` })
45261
45284
  ] }, key))
45262
45285
  ] });
45263
45286
  }
@@ -45269,7 +45292,7 @@ import {
45269
45292
  useState as useState89
45270
45293
  } from "react";
45271
45294
  import { normalizeMediaCrop } from "@bendyline/squisq/mediaEdit";
45272
- import { jsx as jsx100, jsxs as jsxs81 } from "react/jsx-runtime";
45295
+ import { jsx as jsx101, jsxs as jsxs81 } from "react/jsx-runtime";
45273
45296
  var FULL = { x: 0, y: 0, w: 1, h: 1 };
45274
45297
  var MIN_EDGE = 0.05;
45275
45298
  var NUDGE = 0.01;
@@ -45351,7 +45374,7 @@ function MediaEditFrameSection({ item, draft, onChange }) {
45351
45374
  const pct = (n) => `${(n * 100).toFixed(2)}%`;
45352
45375
  return /* @__PURE__ */ jsxs81("div", { className: "squisq-media-edit-section", children: [
45353
45376
  /* @__PURE__ */ jsxs81("div", { className: "squisq-media-edit-chips", role: "group", "aria-label": "Crop aspect", children: [
45354
- ASPECTS.map((option) => /* @__PURE__ */ jsx100(
45377
+ ASPECTS.map((option) => /* @__PURE__ */ jsx101(
45355
45378
  "button",
45356
45379
  {
45357
45380
  type: "button",
@@ -45366,7 +45389,7 @@ function MediaEditFrameSection({ item, draft, onChange }) {
45366
45389
  },
45367
45390
  option.label
45368
45391
  )),
45369
- /* @__PURE__ */ jsx100(
45392
+ /* @__PURE__ */ jsx101(
45370
45393
  "button",
45371
45394
  {
45372
45395
  type: "button",
@@ -45386,7 +45409,7 @@ function MediaEditFrameSection({ item, draft, onChange }) {
45386
45409
  className: "squisq-media-edit-crop",
45387
45410
  style: frame ? { aspectRatio: `${frame.w} / ${frame.h}` } : void 0,
45388
45411
  children: [
45389
- src && /* @__PURE__ */ jsx100(
45412
+ src && /* @__PURE__ */ jsx101(
45390
45413
  "video",
45391
45414
  {
45392
45415
  src,
@@ -45402,7 +45425,7 @@ function MediaEditFrameSection({ item, draft, onChange }) {
45402
45425
  }
45403
45426
  }
45404
45427
  ),
45405
- /* @__PURE__ */ jsx100(
45428
+ /* @__PURE__ */ jsx101(
45406
45429
  "div",
45407
45430
  {
45408
45431
  className: "squisq-media-edit-crop__rect",
@@ -45413,7 +45436,7 @@ function MediaEditFrameSection({ item, draft, onChange }) {
45413
45436
  style: { left: pct(crop.x), top: pct(crop.y), width: pct(crop.w), height: pct(crop.h) },
45414
45437
  onPointerDown: startDrag("move"),
45415
45438
  onKeyDown,
45416
- children: ["nw", "ne", "sw", "se"].map((handle) => /* @__PURE__ */ jsx100(
45439
+ children: ["nw", "ne", "sw", "se"].map((handle) => /* @__PURE__ */ jsx101(
45417
45440
  "span",
45418
45441
  {
45419
45442
  className: `squisq-media-edit-crop__handle squisq-media-edit-crop__handle--${handle}`,
@@ -45426,12 +45449,12 @@ function MediaEditFrameSection({ item, draft, onChange }) {
45426
45449
  ]
45427
45450
  }
45428
45451
  ),
45429
- /* @__PURE__ */ jsx100("p", { className: "squisq-media-edit-note", children: draft.crop ? "Only the framed area is shown and exported." : "Drag the corners or pick an aspect to crop." })
45452
+ /* @__PURE__ */ jsx101("p", { className: "squisq-media-edit-note", children: draft.crop ? "Only the framed area is shown and exported." : "Drag the corners or pick an aspect to crop." })
45430
45453
  ] });
45431
45454
  }
45432
45455
 
45433
45456
  // src/mediaEdit/MediaEditModal.tsx
45434
- import { Fragment as Fragment34, jsx as jsx101, jsxs as jsxs82 } from "react/jsx-runtime";
45457
+ import { Fragment as Fragment34, jsx as jsx102, jsxs as jsxs82 } from "react/jsx-runtime";
45435
45458
  var TABS = [
45436
45459
  { id: "audio", label: "Audio cleanup" },
45437
45460
  { id: "timing", label: "Timing" },
@@ -45466,9 +45489,9 @@ function RenderStatusText({
45466
45489
  }) {
45467
45490
  switch (status.state) {
45468
45491
  case "ready":
45469
- return /* @__PURE__ */ jsx101(Fragment34, { children: "Processed audio is in use." });
45492
+ return /* @__PURE__ */ jsx102(Fragment34, { children: "Processed audio is in use." });
45470
45493
  case "queued":
45471
- return /* @__PURE__ */ jsx101(Fragment34, { children: "Waiting to process\u2026" });
45494
+ return /* @__PURE__ */ jsx102(Fragment34, { children: "Waiting to process\u2026" });
45472
45495
  case "rendering":
45473
45496
  return /* @__PURE__ */ jsxs82(Fragment34, { children: [
45474
45497
  "Processing\u2026 ",
@@ -45479,7 +45502,7 @@ function RenderStatusText({
45479
45502
  "Processing failed: ",
45480
45503
  status.error,
45481
45504
  " ",
45482
- /* @__PURE__ */ jsx101("button", { type: "button", onClick: onRetry, children: "Retry" })
45505
+ /* @__PURE__ */ jsx102("button", { type: "button", onClick: onRetry, children: "Retry" })
45483
45506
  ] });
45484
45507
  }
45485
45508
  }
@@ -45530,7 +45553,7 @@ function MediaEditModal({ target, onClose }) {
45530
45553
  const tabbed = item != null && mediaEditRenders != null;
45531
45554
  const tabId = (tab) => `${titleId}-tab-${tab}`;
45532
45555
  const panelId = (tab) => `${titleId}-panel-${tab}`;
45533
- return /* @__PURE__ */ jsx101(
45556
+ return /* @__PURE__ */ jsx102(
45534
45557
  "div",
45535
45558
  {
45536
45559
  ref: modalRef,
@@ -45549,10 +45572,10 @@ function MediaEditModal({ target, onClose }) {
45549
45572
  "aria-labelledby": titleId,
45550
45573
  children: [
45551
45574
  /* @__PURE__ */ jsxs82("header", { className: "squisq-media-edit-modal__header", children: [
45552
- /* @__PURE__ */ jsx101("span", { id: titleId, className: "squisq-media-edit-modal__title", children: title }),
45553
- /* @__PURE__ */ jsx101("span", { className: "squisq-media-edit-modal__path", children: target.src }),
45554
- renderStatus && /* @__PURE__ */ jsx101(RenderStatusBadge, { status: renderStatus }),
45555
- /* @__PURE__ */ jsx101(
45575
+ /* @__PURE__ */ jsx102("span", { id: titleId, className: "squisq-media-edit-modal__title", children: title }),
45576
+ /* @__PURE__ */ jsx102("span", { className: "squisq-media-edit-modal__path", children: target.src }),
45577
+ renderStatus && /* @__PURE__ */ jsx102(RenderStatusBadge, { status: renderStatus }),
45578
+ /* @__PURE__ */ jsx102(
45556
45579
  "button",
45557
45580
  {
45558
45581
  type: "button",
@@ -45563,8 +45586,8 @@ function MediaEditModal({ target, onClose }) {
45563
45586
  }
45564
45587
  )
45565
45588
  ] }),
45566
- !item ? /* @__PURE__ */ jsx101("p", { className: "squisq-media-edit-modal__empty", children: "This clip is no longer in the document." }) : !mediaEditRenders ? /* @__PURE__ */ jsx101("p", { className: "squisq-media-edit-modal__empty", children: "Media editing needs a media folder for this document." }) : /* @__PURE__ */ jsxs82(Fragment34, { children: [
45567
- /* @__PURE__ */ jsx101("div", { className: "squisq-media-edit-tabs", role: "tablist", "aria-label": "Edit sections", children: tabs.map((tab, index2) => {
45589
+ !item ? /* @__PURE__ */ jsx102("p", { className: "squisq-media-edit-modal__empty", children: "This clip is no longer in the document." }) : !mediaEditRenders ? /* @__PURE__ */ jsx102("p", { className: "squisq-media-edit-modal__empty", children: "Media editing needs a media folder for this document." }) : /* @__PURE__ */ jsxs82(Fragment34, { children: [
45590
+ /* @__PURE__ */ jsx102("div", { className: "squisq-media-edit-tabs", role: "tablist", "aria-label": "Edit sections", children: tabs.map((tab, index2) => {
45568
45591
  const selected = tab.id === activeTab;
45569
45592
  const edited = tabHasEdits(tab.id, draft);
45570
45593
  return /* @__PURE__ */ jsxs82(
@@ -45586,21 +45609,21 @@ function MediaEditModal({ target, onClose }) {
45586
45609
  onKeyDown: (e2) => onTabKeyDown(e2, index2),
45587
45610
  children: [
45588
45611
  tab.label,
45589
- edited && /* @__PURE__ */ jsx101("span", { className: "squisq-sr-only", children: " (edited)" })
45612
+ edited && /* @__PURE__ */ jsx102("span", { className: "squisq-sr-only", children: " (edited)" })
45590
45613
  ]
45591
45614
  },
45592
45615
  tab.id
45593
45616
  );
45594
45617
  }) }),
45595
45618
  /* @__PURE__ */ jsxs82("div", { className: "squisq-media-edit-modal__body", children: [
45596
- /* @__PURE__ */ jsx101(
45619
+ /* @__PURE__ */ jsx102(
45597
45620
  "div",
45598
45621
  {
45599
45622
  role: "tabpanel",
45600
45623
  id: panelId("audio"),
45601
45624
  "aria-labelledby": tabId("audio"),
45602
45625
  hidden: activeTab !== "audio",
45603
- children: /* @__PURE__ */ jsx101(
45626
+ children: /* @__PURE__ */ jsx102(
45604
45627
  MediaEditAudioSection,
45605
45628
  {
45606
45629
  item,
@@ -45612,14 +45635,14 @@ function MediaEditModal({ target, onClose }) {
45612
45635
  )
45613
45636
  }
45614
45637
  ),
45615
- /* @__PURE__ */ jsx101(
45638
+ /* @__PURE__ */ jsx102(
45616
45639
  "div",
45617
45640
  {
45618
45641
  role: "tabpanel",
45619
45642
  id: panelId("timing"),
45620
45643
  "aria-labelledby": tabId("timing"),
45621
45644
  hidden: activeTab !== "timing",
45622
- children: /* @__PURE__ */ jsx101(
45645
+ children: /* @__PURE__ */ jsx102(
45623
45646
  MediaEditTimingSection,
45624
45647
  {
45625
45648
  item,
@@ -45631,14 +45654,14 @@ function MediaEditModal({ target, onClose }) {
45631
45654
  )
45632
45655
  }
45633
45656
  ),
45634
- item.kind === "video" && /* @__PURE__ */ jsx101(
45657
+ item.kind === "video" && /* @__PURE__ */ jsx102(
45635
45658
  "div",
45636
45659
  {
45637
45660
  role: "tabpanel",
45638
45661
  id: panelId("frame"),
45639
45662
  "aria-labelledby": tabId("frame"),
45640
45663
  hidden: activeTab !== "frame",
45641
- children: /* @__PURE__ */ jsx101(MediaEditFrameSection, { item, draft, onChange: setDraft })
45664
+ children: /* @__PURE__ */ jsx102(MediaEditFrameSection, { item, draft, onChange: setDraft })
45642
45665
  }
45643
45666
  ),
45644
45667
  companions.length > 0 && /* @__PURE__ */ jsxs82("p", { className: "squisq-media-edit-note", children: [
@@ -45652,15 +45675,15 @@ function MediaEditModal({ target, onClose }) {
45652
45675
  ] })
45653
45676
  ] }),
45654
45677
  /* @__PURE__ */ jsxs82("footer", { className: "squisq-media-edit-modal__footer", children: [
45655
- /* @__PURE__ */ jsx101("p", { className: "squisq-media-edit-status", role: "status", "data-state": renderStatus?.state, children: renderStatus && item && mediaEditRenders && /* @__PURE__ */ jsx101(
45678
+ /* @__PURE__ */ jsx102("p", { className: "squisq-media-edit-status", role: "status", "data-state": renderStatus?.state, children: renderStatus && item && mediaEditRenders && /* @__PURE__ */ jsx102(
45656
45679
  RenderStatusText,
45657
45680
  {
45658
45681
  status: renderStatus,
45659
45682
  onRetry: () => mediaEditRenders.retry(item.clip)
45660
45683
  }
45661
45684
  ) }),
45662
- /* @__PURE__ */ jsx101("button", { type: "button", onClick: onClose, children: "Cancel" }),
45663
- /* @__PURE__ */ jsx101(
45685
+ /* @__PURE__ */ jsx102("button", { type: "button", onClick: onClose, children: "Cancel" }),
45686
+ /* @__PURE__ */ jsx102(
45664
45687
  "button",
45665
45688
  {
45666
45689
  type: "button",
@@ -45920,12 +45943,12 @@ import {
45920
45943
  MemoryContentContainer as MemoryContentContainer2,
45921
45944
  createMediaProviderFromContainer
45922
45945
  } from "@bendyline/squisq/storage";
45923
- import { MediaContext as MediaContext7, useMediaClipDurations } from "@bendyline/squisq-react";
45946
+ import { MediaContext as MediaContext8, useMediaClipDurations } from "@bendyline/squisq-react";
45924
45947
  import {
45925
45948
  createMediaEditRenderManager,
45926
45949
  useProcessedAudio as useProcessedAudio4
45927
45950
  } from "@bendyline/squisq-video-react/media-edit";
45928
- import { Fragment as Fragment35, jsx as jsx102, jsxs as jsxs83 } from "react/jsx-runtime";
45951
+ import { Fragment as Fragment35, jsx as jsx103, jsxs as jsxs83 } from "react/jsx-runtime";
45929
45952
  function EditorShell({
45930
45953
  ariaLabel,
45931
45954
  initialMarkdown = "",
@@ -46035,7 +46058,7 @@ function EditorShell({
46035
46058
  const effectiveMediaEditRenders = mediaEditRenders === void 0 ? ownedMediaEditRenders : mediaEditRenders;
46036
46059
  const filesToggleEnabled = showFilesToggle ?? effectiveMediaProvider !== void 0;
46037
46060
  const effectiveInitialView = hostMode === "chat" || !showPlayTab && initialView === "preview" ? "wysiwyg" : initialView;
46038
- return /* @__PURE__ */ jsx102(MediaContext7.Provider, { value: effectiveMediaProvider ?? null, children: /* @__PURE__ */ jsx102(
46061
+ return /* @__PURE__ */ jsx103(MediaContext8.Provider, { value: effectiveMediaProvider ?? null, children: /* @__PURE__ */ jsx103(
46039
46062
  EditorProvider,
46040
46063
  {
46041
46064
  initialMarkdown,
@@ -46081,7 +46104,7 @@ function EditorShell({
46081
46104
  themeInheritance,
46082
46105
  viewPreferences,
46083
46106
  onViewPreferencesChange,
46084
- children: /* @__PURE__ */ jsx102(ProofingRoot, { children: /* @__PURE__ */ jsx102(ReviewRoot, { providers: reviewProviders, children: /* @__PURE__ */ jsx102(PageTemplateContext.Provider, { value: pageTemplates, children: /* @__PURE__ */ jsx102(
46107
+ children: /* @__PURE__ */ jsx103(ProofingRoot, { children: /* @__PURE__ */ jsx103(ReviewRoot, { providers: reviewProviders, children: /* @__PURE__ */ jsx103(PageTemplateContext.Provider, { value: pageTemplates, children: /* @__PURE__ */ jsx103(
46085
46108
  EditorShellInner,
46086
46109
  {
46087
46110
  ariaLabel: ariaLabel ?? (hostMode === "chat" ? "Message" : fileName ? `Edit ${fileName}` : "Document editor"),
@@ -46147,11 +46170,11 @@ function UseModeToolbarControls({
46147
46170
  summarizationDesigner
46148
46171
  }) {
46149
46172
  const printMode = usePrintMode();
46150
- if (printMode.active) return /* @__PURE__ */ jsx102(PrintPreviewToolbar, {});
46173
+ if (printMode.active) return /* @__PURE__ */ jsx103(PrintPreviewToolbar, {});
46151
46174
  return /* @__PURE__ */ jsxs83(Fragment35, { children: [
46152
- /* @__PURE__ */ jsx102(PreviewToolbarControls, { summarizationDesigner }),
46153
- /* @__PURE__ */ jsx102(PresentationModeControl, {}),
46154
- allowPrint && /* @__PURE__ */ jsx102(PrintModeControl, {})
46175
+ /* @__PURE__ */ jsx103(PreviewToolbarControls, { summarizationDesigner }),
46176
+ /* @__PURE__ */ jsx103(PresentationModeControl, {}),
46177
+ allowPrint && /* @__PURE__ */ jsx103(PrintModeControl, {})
46155
46178
  ] });
46156
46179
  }
46157
46180
  function UseModeProviders({
@@ -46160,13 +46183,13 @@ function UseModeProviders({
46160
46183
  allowPresentationWindow,
46161
46184
  allowPresentationFullscreen
46162
46185
  }) {
46163
- return /* @__PURE__ */ jsx102(
46186
+ return /* @__PURE__ */ jsx103(
46164
46187
  PresentationModeProvider,
46165
46188
  {
46166
46189
  rootRef,
46167
46190
  allowWindow: allowPresentationWindow,
46168
46191
  allowFullscreen: allowPresentationFullscreen,
46169
- children: /* @__PURE__ */ jsx102(PrintModeProvider, { rootRef, children })
46192
+ children: /* @__PURE__ */ jsx103(PrintModeProvider, { rootRef, children })
46170
46193
  }
46171
46194
  );
46172
46195
  }
@@ -46560,7 +46583,7 @@ function EditorShellInner({
46560
46583
  },
46561
46584
  ...containerProps,
46562
46585
  children: [
46563
- /* @__PURE__ */ jsx102(CustomThemeProvider, { docThemes, onDocThemesChange, children: /* @__PURE__ */ jsx102(
46586
+ /* @__PURE__ */ jsx103(CustomThemeProvider, { docThemes, onDocThemesChange, children: /* @__PURE__ */ jsx103(
46564
46587
  PreviewSettingsProvider,
46565
46588
  {
46566
46589
  doc,
@@ -46577,16 +46600,16 @@ function EditorShellInner({
46577
46600
  children: [
46578
46601
  isImageMode ? (toolbarSlotLeft || toolbarSlotRight) && /* @__PURE__ */ jsxs83("div", { className: "squisq-editor-header squisq-editor-header--image", children: [
46579
46602
  toolbarSlotLeft,
46580
- /* @__PURE__ */ jsx102("div", { style: { flex: 1 } }),
46603
+ /* @__PURE__ */ jsx103("div", { style: { flex: 1 } }),
46581
46604
  toolbarSlotRight
46582
- ] }) : /* @__PURE__ */ jsx102("div", { className: "squisq-editor-header", children: /* @__PURE__ */ jsx102(
46605
+ ] }) : /* @__PURE__ */ jsx103("div", { className: "squisq-editor-header", children: /* @__PURE__ */ jsx103(
46583
46606
  Toolbar,
46584
46607
  {
46585
46608
  showFiles,
46586
46609
  fileCount: mediaCount,
46587
46610
  onToggleFiles: !isCodeMode && filesToggleEnabled ? handleToggleFiles : void 0,
46588
46611
  slotLeft: toolbarSlotLeft,
46589
- slotAfterTabs: !isCodeMode && isPreview && /* @__PURE__ */ jsx102(
46612
+ slotAfterTabs: !isCodeMode && isPreview && /* @__PURE__ */ jsx103(
46590
46613
  UseModeToolbarControls,
46591
46614
  {
46592
46615
  allowPrint,
@@ -46628,7 +46651,7 @@ function EditorShellInner({
46628
46651
  position: "relative"
46629
46652
  },
46630
46653
  children: [
46631
- isImageMode && imageSrc && (imageMode === "edit" && imageEditorContainer ? /* @__PURE__ */ jsx102(
46654
+ isImageMode && imageSrc && (imageMode === "edit" && imageEditorContainer ? /* @__PURE__ */ jsx103(
46632
46655
  ImageEditor,
46633
46656
  {
46634
46657
  filesContainer: imageEditorContainer,
@@ -46638,7 +46661,7 @@ function EditorShellInner({
46638
46661
  onExport: onImageExport,
46639
46662
  surface: colorScheme === "dark" ? DARK_SURFACE2 : LIGHT_SURFACE2
46640
46663
  }
46641
- ) : /* @__PURE__ */ jsx102(ImageViewer, { src: imageSrc, alt: imageAlt, theme: colorScheme })),
46664
+ ) : /* @__PURE__ */ jsx103(ImageViewer, { src: imageSrc, alt: imageAlt, theme: colorScheme })),
46642
46665
  !isImageMode && editingView === "raw" && /* @__PURE__ */ jsxs83(
46643
46666
  "div",
46644
46667
  {
@@ -46646,8 +46669,8 @@ function EditorShellInner({
46646
46669
  hidden: isPreview,
46647
46670
  style: isPreview ? { display: "none" } : void 0,
46648
46671
  children: [
46649
- isMarkdownMode && outlineVisible && /* @__PURE__ */ jsx102(OutlinePanel, { width: outlineWidth, readOnly }, "outline"),
46650
- /* @__PURE__ */ jsx102(
46672
+ isMarkdownMode && outlineVisible && /* @__PURE__ */ jsx103(OutlinePanel, { width: outlineWidth, readOnly }, "outline"),
46673
+ /* @__PURE__ */ jsx103(
46651
46674
  BlockCardView,
46652
46675
  {
46653
46676
  active: isCardMode,
@@ -46656,7 +46679,7 @@ function EditorShellInner({
46656
46679
  onPrev: prevBlock,
46657
46680
  onNext: nextBlock,
46658
46681
  onAdd: addBlock,
46659
- children: /* @__PURE__ */ jsx102("div", { className: "squisq-raw-editor-container", children: /* @__PURE__ */ jsx102(
46682
+ children: /* @__PURE__ */ jsx103("div", { className: "squisq-raw-editor-container", children: /* @__PURE__ */ jsx103(
46660
46683
  RawEditor,
46661
46684
  {
46662
46685
  ariaLabel: `${ariaLabel} \u2014 source`,
@@ -46668,9 +46691,9 @@ function EditorShellInner({
46668
46691
  },
46669
46692
  "raw-frame"
46670
46693
  ),
46671
- isCodeMode && codeContext && /* @__PURE__ */ jsx102(CodeContextZones, { options: codeContext }, "code-context"),
46672
- isMarkdownMode && isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx102(BlockPreviewPanel, { basePath }, "block-preview"),
46673
- isMarkdownMode && !isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx102(
46694
+ isCodeMode && codeContext && /* @__PURE__ */ jsx103(CodeContextZones, { options: codeContext }, "code-context"),
46695
+ isMarkdownMode && isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx103(BlockPreviewPanel, { basePath }, "block-preview"),
46696
+ isMarkdownMode && !isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx103(
46674
46697
  InlinePreviewGutter,
46675
46698
  {
46676
46699
  width: inlinePreviewWidth,
@@ -46679,7 +46702,7 @@ function EditorShellInner({
46679
46702
  },
46680
46703
  "inline"
46681
46704
  ),
46682
- isMarkdownMode && /* @__PURE__ */ jsx102(
46705
+ isMarkdownMode && /* @__PURE__ */ jsx103(
46683
46706
  NavigationSheet,
46684
46707
  {
46685
46708
  panel: navigationSheetPanel,
@@ -46701,8 +46724,8 @@ function EditorShellInner({
46701
46724
  hidden: isPreview,
46702
46725
  style: isPreview ? { display: "none" } : void 0,
46703
46726
  children: [
46704
- outlineVisible && /* @__PURE__ */ jsx102(OutlinePanel, { width: outlineWidth, readOnly }, "outline"),
46705
- /* @__PURE__ */ jsx102(
46727
+ outlineVisible && /* @__PURE__ */ jsx103(OutlinePanel, { width: outlineWidth, readOnly }, "outline"),
46728
+ /* @__PURE__ */ jsx103(
46706
46729
  BlockCardView,
46707
46730
  {
46708
46731
  active: isCardMode,
@@ -46711,7 +46734,7 @@ function EditorShellInner({
46711
46734
  onPrev: prevBlock,
46712
46735
  onNext: nextBlock,
46713
46736
  onAdd: addBlock,
46714
- children: /* @__PURE__ */ jsx102(
46737
+ children: /* @__PURE__ */ jsx103(
46715
46738
  WysiwygEditor,
46716
46739
  {
46717
46740
  ariaLabel,
@@ -46729,8 +46752,8 @@ function EditorShellInner({
46729
46752
  },
46730
46753
  "wysiwyg-frame"
46731
46754
  ),
46732
- isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx102(BlockPreviewPanel, { basePath }, "block-preview"),
46733
- !isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx102(
46755
+ isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx103(BlockPreviewPanel, { basePath }, "block-preview"),
46756
+ !isCardMode && inlinePreviewVisible && /* @__PURE__ */ jsx103(
46734
46757
  InlinePreviewGutter,
46735
46758
  {
46736
46759
  width: inlinePreviewWidth,
@@ -46739,7 +46762,7 @@ function EditorShellInner({
46739
46762
  },
46740
46763
  "inline"
46741
46764
  ),
46742
- /* @__PURE__ */ jsx102(
46765
+ /* @__PURE__ */ jsx103(
46743
46766
  NavigationSheet,
46744
46767
  {
46745
46768
  panel: navigationSheetPanel,
@@ -46754,7 +46777,7 @@ function EditorShellInner({
46754
46777
  },
46755
46778
  "wysiwyg-shell"
46756
46779
  ),
46757
- isMarkdownMode && isPreview && /* @__PURE__ */ jsx102(
46780
+ isMarkdownMode && isPreview && /* @__PURE__ */ jsx103(
46758
46781
  PreviewPanel,
46759
46782
  {
46760
46783
  basePath,
@@ -46767,7 +46790,7 @@ function EditorShellInner({
46767
46790
  ]
46768
46791
  }
46769
46792
  ),
46770
- isTimelineMode && timelineVideoVisible && /* @__PURE__ */ jsx102(
46793
+ isTimelineMode && timelineVideoVisible && /* @__PURE__ */ jsx103(
46771
46794
  TimelineVideoPanel,
46772
46795
  {
46773
46796
  schedule: timelineVideoSchedule,
@@ -46777,7 +46800,7 @@ function EditorShellInner({
46777
46800
  onClose: () => setTimelineVideoVisible(false)
46778
46801
  }
46779
46802
  ),
46780
- isTimelineMode && timelineCompositionVisible && /* @__PURE__ */ jsx102(
46803
+ isTimelineMode && timelineCompositionVisible && /* @__PURE__ */ jsx103(
46781
46804
  TimelineCompositionPanel,
46782
46805
  {
46783
46806
  doc,
@@ -46787,7 +46810,7 @@ function EditorShellInner({
46787
46810
  onClose: () => setTimelineCompositionVisible(false)
46788
46811
  }
46789
46812
  ),
46790
- isMarkdownMode && showFiles && /* @__PURE__ */ jsx102(
46813
+ isMarkdownMode && showFiles && /* @__PURE__ */ jsx103(
46791
46814
  MediaBin,
46792
46815
  {
46793
46816
  mediaProvider,
@@ -46803,11 +46826,11 @@ function EditorShellInner({
46803
46826
  highlightPath: filesFocusPath
46804
46827
  }
46805
46828
  ),
46806
- isMarkdownMode && /* @__PURE__ */ jsx102(ProofingPanel, {}),
46807
- isMarkdownMode && /* @__PURE__ */ jsx102(ReviewPanel, {}),
46829
+ isMarkdownMode && /* @__PURE__ */ jsx103(ProofingPanel, {}),
46830
+ isMarkdownMode && /* @__PURE__ */ jsx103(ReviewPanel, {}),
46808
46831
  isMarkdownMode && sidePanelSlot,
46809
- isMarkdownMode && /* @__PURE__ */ jsx102(ThemeDesignerDock, {}),
46810
- isMarkdownMode && isDragging && !(activeView === "wysiwyg" && dragContentType === "media") && /* @__PURE__ */ jsx102(
46832
+ isMarkdownMode && /* @__PURE__ */ jsx103(ThemeDesignerDock, {}),
46833
+ isMarkdownMode && isDragging && !(activeView === "wysiwyg" && dragContentType === "media") && /* @__PURE__ */ jsx103(
46811
46834
  DropZoneOverlay,
46812
46835
  {
46813
46836
  dragContentType,
@@ -46818,7 +46841,7 @@ function EditorShellInner({
46818
46841
  ]
46819
46842
  }
46820
46843
  ),
46821
- isTimelineMode && /* @__PURE__ */ jsx102(
46844
+ isTimelineMode && /* @__PURE__ */ jsx103(
46822
46845
  TimelineToolbar,
46823
46846
  {
46824
46847
  literalVideoVisible: timelineVideoVisible,
@@ -46829,7 +46852,7 @@ function EditorShellInner({
46829
46852
  onToggleComposition: () => setTimelineCompositionVisible((visible) => !visible)
46830
46853
  }
46831
46854
  ),
46832
- isTimelineMode && /* @__PURE__ */ jsx102(
46855
+ isTimelineMode && /* @__PURE__ */ jsx103(
46833
46856
  TimelineTrack,
46834
46857
  {
46835
46858
  doc: timelineDoc,
@@ -46838,8 +46861,8 @@ function EditorShellInner({
46838
46861
  basePath
46839
46862
  }
46840
46863
  ),
46841
- statusBarVisible && !isImageMode && /* @__PURE__ */ jsx102(StatusBar, { slotRight: statusBarSlotRight }),
46842
- isMarkdownMode && allowRecording && mediaProvider && /* @__PURE__ */ jsx102(
46864
+ statusBarVisible && !isImageMode && /* @__PURE__ */ jsx103(StatusBar, { slotRight: statusBarSlotRight }),
46865
+ isMarkdownMode && allowRecording && mediaProvider && /* @__PURE__ */ jsx103(
46843
46866
  RecorderEntry,
46844
46867
  {
46845
46868
  open: mediaBinRecorderOpen,
@@ -46852,8 +46875,8 @@ function EditorShellInner({
46852
46875
  )
46853
46876
  }
46854
46877
  ) }),
46855
- /* @__PURE__ */ jsx102(TooltipLayer, {}),
46856
- imageEditTarget !== null && mediaProvider && /* @__PURE__ */ jsx102(
46878
+ /* @__PURE__ */ jsx103(TooltipLayer, {}),
46879
+ imageEditTarget !== null && mediaProvider && /* @__PURE__ */ jsx103(
46857
46880
  ImageEditModal,
46858
46881
  {
46859
46882
  relativePath: imageEditTarget,
@@ -46869,12 +46892,12 @@ function EditorShellInner({
46869
46892
  shellTheme: colorScheme
46870
46893
  }
46871
46894
  ),
46872
- mediaEditTarget !== null && /* @__PURE__ */ jsx102(MediaEditModal, { target: mediaEditTarget, onClose: closeMediaEdit })
46895
+ mediaEditTarget !== null && /* @__PURE__ */ jsx103(MediaEditModal, { target: mediaEditTarget, onClose: closeMediaEdit })
46873
46896
  ]
46874
46897
  }
46875
46898
  );
46876
46899
  return /* @__PURE__ */ jsxs83(EditorContextMenuProvider, { rootRef: shellRef, readOnly, children: [
46877
- /* @__PURE__ */ jsx102(MediaEditContextMenuItems, {}),
46900
+ /* @__PURE__ */ jsx103(MediaEditContextMenuItems, {}),
46878
46901
  shell
46879
46902
  ] });
46880
46903
  }