@hyperframes/studio 0.8.104 → 0.8.105
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{hyperframes-player-DAoaajuM.js → hyperframes-player-tnfCiVdR.js} +1 -1
- package/dist/assets/{index-BDK4rTMb.js → index-Ca6LZlVb.js} +1 -1
- package/dist/assets/index-Cre9X4RS.css +1 -0
- package/dist/assets/{index-De2aO4XM.js → index-DEDhPmPD.js} +205 -205
- package/dist/assets/{index-WV9LroAD.js → index-zpe332hb.js} +1 -1
- package/dist/{chunk-62DDWOSH.js → chunk-EEXSYY5F.js} +19 -18
- package/dist/chunk-EEXSYY5F.js.map +1 -0
- package/dist/{chunk-6GAO75IU.js → chunk-NCUBAVGK.js} +10 -8
- package/dist/chunk-NCUBAVGK.js.map +1 -0
- package/dist/{chunk-HIGHVWYD.js → chunk-QADHJFDF.js} +2 -2
- package/dist/index.css +6 -1
- package/dist/index.css.map +1 -1
- package/dist/index.html +2 -2
- package/dist/index.js +614 -638
- package/dist/index.js.map +1 -1
- package/dist/player.js +2 -2
- package/dist/styles/tailwind-preset.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/ui.js +2 -2
- package/package.json +8 -8
- package/src/captions/components/CaptionAnimationPanel.tsx +2 -2
- package/src/captions/components/CaptionPropertyPanel.tsx +2 -2
- package/src/captions/components/CaptionTimeline.tsx +3 -3
- package/src/components/AskAgentModal.tsx +1 -1
- package/src/components/LintModal.tsx +35 -35
- package/src/components/StudioErrorBoundary.tsx +1 -1
- package/src/components/StudioHeader.dom.test.tsx +4 -4
- package/src/components/StudioHeader.tsx +2 -1
- package/src/components/StudioToast.tsx +7 -16
- package/src/components/TimelineToolPicker.tsx +1 -1
- package/src/components/TimelineToolbar.tsx +11 -11
- package/src/components/dock/Dock.tsx +1 -1
- package/src/components/dock/dock.css +9 -1
- package/src/components/editor/AnimationCard.tsx +5 -5
- package/src/components/editor/AnimationCardParts.tsx +1 -1
- package/src/components/editor/BlockParamsPanel.tsx +3 -3
- package/src/components/editor/BorderRadiusEditor.tsx +8 -15
- package/src/components/editor/CanvasContextMenu.tsx +1 -1
- package/src/components/editor/ComputedTweenNotice.tsx +1 -1
- package/src/components/editor/DomEditRotateHandle.tsx +1 -1
- package/src/components/editor/EaseCurveSection.tsx +14 -19
- package/src/components/editor/EaseModeControls.tsx +2 -2
- package/src/components/editor/EaseParamFields.tsx +8 -8
- package/src/components/editor/FileTree.tsx +1 -1
- package/src/components/editor/FileTreeIcons.tsx +47 -26
- package/src/components/editor/FileTreeNodes.tsx +11 -8
- package/src/components/editor/GestureRecordControl.tsx +3 -3
- package/src/components/editor/GsapAddAnimationControl.tsx +1 -1
- package/src/components/editor/GsapAnimationSection.tsx +2 -2
- package/src/components/editor/InlineTextToolbar.tsx +4 -4
- package/src/components/editor/InspectorHeaderActions.tsx +1 -1
- package/src/components/editor/KeyframeDiamond.tsx +6 -4
- package/src/components/editor/KeyframeNavigation.tsx +4 -4
- package/src/components/editor/LayersPanel.tsx +3 -3
- package/src/components/editor/PromotableControl.tsx +2 -2
- package/src/components/editor/PropertyPanelEmptyState.tsx +4 -4
- package/src/components/editor/PropertyPanelFlatFooter.tsx +2 -2
- package/src/components/editor/PropertyPanelFlatHeader.test.tsx +1 -1
- package/src/components/editor/PropertyPanelFlatHeader.tsx +2 -2
- package/src/components/editor/SnapToolbar.tsx +5 -5
- package/src/components/editor/TimelineFxPopover.tsx +4 -4
- package/src/components/editor/Transform3DCube.tsx +1 -1
- package/src/components/editor/anchoredResizeReleaseShift.test.ts +0 -84
- package/src/components/editor/easeCurveSvg.tsx +1 -1
- package/src/components/editor/manualEditsDom.ts +3 -3
- package/src/components/editor/manualEditsDomPatches.test.ts +2 -86
- package/src/components/editor/manualEditsDomPatches.ts +0 -30
- package/src/components/editor/manualEditsSnapshot.ts +1 -0
- package/src/components/editor/persistSeam.integration.test.ts +0 -18
- package/src/components/editor/plainTranslate.ts +34 -3
- package/src/components/editor/propertyPanelColorCurveGraph.tsx +2 -2
- package/src/components/editor/propertyPanelColorGradingControls.tsx +1 -1
- package/src/components/editor/propertyPanelColorGradingSection.tsx +8 -8
- package/src/components/editor/propertyPanelColorGradingSlider.tsx +1 -1
- package/src/components/editor/propertyPanelColorSecondary.tsx +4 -4
- package/src/components/editor/propertyPanelFill.tsx +6 -6
- package/src/components/editor/propertyPanelFlatColorGradingAccessory.tsx +3 -3
- package/src/components/editor/propertyPanelFlatColorGradingSection.test.tsx +1 -1
- package/src/components/editor/propertyPanelFlatColorGradingSection.tsx +6 -9
- package/src/components/editor/propertyPanelFlatEffectsSection.tsx +4 -4
- package/src/components/editor/propertyPanelFlatMediaSection.tsx +2 -2
- package/src/components/editor/propertyPanelFlatMotionSection.tsx +2 -2
- package/src/components/editor/propertyPanelFlatOverlaysSection.tsx +2 -2
- package/src/components/editor/propertyPanelFlatPrimitives.test.tsx +4 -3
- package/src/components/editor/propertyPanelFlatPrimitives.tsx +1 -1
- package/src/components/editor/propertyPanelFlatSliderReadout.tsx +1 -1
- package/src/components/editor/propertyPanelFont.tsx +2 -2
- package/src/components/editor/propertyPanelFxCarveModule.tsx +1 -1
- package/src/components/editor/propertyPanelFxControls.tsx +2 -2
- package/src/components/editor/propertyPanelFxEqModule.tsx +2 -2
- package/src/components/editor/propertyPanelFxNodeRow.tsx +1 -1
- package/src/components/editor/propertyPanelFxPresetRun.tsx +1 -1
- package/src/components/editor/propertyPanelMediaSection.tsx +1 -1
- package/src/components/editor/propertyPanelPrimitives.tsx +1 -1
- package/src/components/editor/propertyPanelSections.tsx +2 -2
- package/src/components/editor/propertyPanelValueTier.test.ts +1 -1
- package/src/components/editor/propertyPanelValueTier.ts +1 -1
- package/src/components/feedback/StudioFeedbackCard.tsx +11 -23
- package/src/components/nle/AssetPreviewOverlay.tsx +1 -1
- package/src/components/nle/AudioMeterStrip.tsx +2 -2
- package/src/components/nle/NLEPreview.test.ts +8 -4
- package/src/components/nle/PreviewOverlays.tsx +1 -1
- package/src/components/nle/PreviewPane.tsx +3 -3
- package/src/components/nle/PreviewPoster.tsx +29 -1
- package/src/components/nle/PreviewZoomOverlay.tsx +1 -1
- package/src/components/panels/SlideshowPanel.tsx +4 -4
- package/src/components/panels/SlideshowSubPanels.tsx +19 -21
- package/src/components/panels/VariablesBindElement.tsx +1 -1
- package/src/components/panels/VariablesDeclarationForm.tsx +1 -1
- package/src/components/panels/VariablesPanel.tsx +4 -6
- package/src/components/panels/VariablesRowAction.tsx +1 -1
- package/src/components/renders/FfmpegRequiredNotice.tsx +4 -4
- package/src/components/renders/RenderQueue.tsx +2 -2
- package/src/components/renders/RenderQueueItem.tsx +3 -3
- package/src/components/sidebar/AssetCard.tsx +3 -3
- package/src/components/sidebar/AssetContextMenu.tsx +7 -7
- package/src/components/sidebar/AssetsTab.tsx +6 -6
- package/src/components/sidebar/AudioRow.tsx +5 -3
- package/src/components/sidebar/BlocksTab.tsx +6 -6
- package/src/components/sidebar/CompositionsTab.drag.test.tsx +3 -69
- package/src/components/sidebar/CompositionsTab.rootBadge.test.tsx +4 -50
- package/src/components/sidebar/CompositionsTab.thumbnails.test.tsx +256 -0
- package/src/components/sidebar/CompositionsTab.tsx +65 -12
- package/src/components/sidebar/PromptPreviewModal.tsx +3 -3
- package/src/components/sidebar/SidebarLintButton.tsx +3 -3
- package/src/components/sidebar/compositionsTabTestUtils.tsx +39 -0
- package/src/components/timelineToolbarStyles.ts +3 -3
- package/src/components/ui/Button.tsx +4 -4
- package/src/components/ui/HyperframesLogo.tsx +19 -18
- package/src/components/ui/Input.tsx +1 -1
- package/src/components/ui/Menu.tsx +4 -2
- package/src/hooks/elementOffsetStager.ts +8 -7
- package/src/hooks/useClipboard.source.test.ts +42 -4
- package/src/hooks/useClipboard.ts +13 -3
- package/src/hooks/useDomEditCommits.ts +0 -3
- package/src/hooks/useDomGeometryCommit.test.tsx +4 -1
- package/src/hooks/useDomGeometryCommit.ts +0 -1
- package/src/hooks/useDomGeometryCommits.test.tsx +177 -32
- package/src/hooks/useDomGeometryCommits.ts +4 -49
- package/src/player/components/ClipContextMenu.tsx +1 -1
- package/src/player/components/CompositionThumbnail.tsx +23 -11
- package/src/player/components/EditModal.tsx +6 -6
- package/src/player/components/KeyframeDiamondContextMenu.tsx +2 -2
- package/src/player/components/PlayerControls.tsx +3 -3
- package/src/player/components/ShortcutsPanel.tsx +8 -20
- package/src/player/components/TimelineCanvas.tsx +1 -1
- package/src/player/components/TimelineClip.tsx +2 -2
- package/src/player/components/TimelineEmptyState.tsx +2 -2
- package/src/player/components/TimelineLanes.tsx +0 -1
- package/src/player/components/TrackClipCount.tsx +1 -1
- package/src/player/components/VolumeControl.tsx +1 -1
- package/src/player/components/timelineClipChildren.tsx +1 -1
- package/src/player/components/timelineMotionStyles.test.ts +6 -22
- package/src/player/components/trackHeaderLabelRows.tsx +16 -16
- package/src/player/lib/thumbnailScheduler.ts +4 -5
- package/src/player/lib/timelineViewportBudgets.test.ts +1 -1
- package/src/player/lib/timelineViewportBudgets.ts +1 -1
- package/src/styles/hex-baseline.json +7 -19
- package/src/styles/studio.css +0 -9
- package/src/styles/tailwind-preset.shared.js +2 -1
- package/src/styles/theme.css +204 -147
- package/src/styles/theme.test.ts +13 -9
- package/src/utils/blockCategories.ts +41 -9
- package/src/utils/clipboardPayload.ts +2 -0
- package/dist/assets/index-CQN3M56N.css +0 -1
- package/dist/chunk-62DDWOSH.js.map +0 -1
- package/dist/chunk-6GAO75IU.js.map +0 -1
- package/src/hooks/gsapTargetCache.ts +0 -62
- /package/dist/{chunk-HIGHVWYD.js.map → chunk-QADHJFDF.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
HyperframesLogo
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-EEXSYY5F.js";
|
|
4
4
|
import {
|
|
5
5
|
DOCK_PANEL_COMPONENT,
|
|
6
6
|
LAYER_REVEAL_PRIOR_POSITION_ATTR,
|
|
@@ -67,7 +67,7 @@ import {
|
|
|
67
67
|
whenPreviewBooted,
|
|
68
68
|
wrapTimeline,
|
|
69
69
|
writeStudioUiPreferences
|
|
70
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-QADHJFDF.js";
|
|
71
71
|
import {
|
|
72
72
|
Button,
|
|
73
73
|
ContextMenu,
|
|
@@ -99,7 +99,7 @@ import {
|
|
|
99
99
|
fieldBase,
|
|
100
100
|
fieldText,
|
|
101
101
|
popupSurface
|
|
102
|
-
} from "./chunk-
|
|
102
|
+
} from "./chunk-NCUBAVGK.js";
|
|
103
103
|
import {
|
|
104
104
|
DOM_EDIT_LAYER_OBSERVER_INIT,
|
|
105
105
|
buildDefaultDomEditTextField,
|
|
@@ -532,6 +532,12 @@ if (typeof window !== "undefined") {
|
|
|
532
532
|
// src/player/components/ShortcutsPanel.tsx
|
|
533
533
|
import { useState, useCallback as useCallback2, useEffect as useEffect2, useId, useRef as useRef2, memo } from "react";
|
|
534
534
|
|
|
535
|
+
// src/components/timelineToolbarStyles.ts
|
|
536
|
+
var flatBtn = "flex h-7 w-7 items-center justify-center rounded-md transition-colors";
|
|
537
|
+
var flatIdle = `${flatBtn} text-text-2 hover:bg-hover hover:text-text-0 active:bg-press active:scale-[0.98]`;
|
|
538
|
+
var flatActive = `${flatBtn} bg-on text-text-0 hover:bg-on-hover active:scale-[0.98]`;
|
|
539
|
+
var flatDisabled = `${flatBtn} text-text-off cursor-not-allowed`;
|
|
540
|
+
|
|
535
541
|
// src/hooks/useContextMenuDismiss.ts
|
|
536
542
|
import { useCallback, useEffect, useRef } from "react";
|
|
537
543
|
function useContextMenuDismiss(onClose) {
|
|
@@ -709,7 +715,7 @@ var ShortcutsPanel = memo(function ShortcutsPanel2({
|
|
|
709
715
|
ref: triggerRef,
|
|
710
716
|
type: "button",
|
|
711
717
|
onClick: () => setShowShortcuts((v) => !v),
|
|
712
|
-
className:
|
|
718
|
+
className: showShortcuts ? flatActive : flatIdle,
|
|
713
719
|
"aria-label": "Shortcuts and tools",
|
|
714
720
|
"aria-expanded": showShortcuts,
|
|
715
721
|
"aria-controls": shortcutsPanelId,
|
|
@@ -741,10 +747,8 @@ var ShortcutsPanel = memo(function ShortcutsPanel2({
|
|
|
741
747
|
tabIndex: -1,
|
|
742
748
|
role: "dialog",
|
|
743
749
|
"aria-label": "Keyboard shortcuts and tools",
|
|
744
|
-
className: "absolute bottom-full right-0 mb-2 z-50 rounded-lg shadow-
|
|
750
|
+
className: "absolute bottom-full right-0 mb-2 z-50 rounded-lg border border-border bg-raised shadow-popover min-w-[220px] overflow-y-auto outline-hidden",
|
|
745
751
|
style: {
|
|
746
|
-
background: "#161618",
|
|
747
|
-
border: "1px solid rgba(255,255,255,0.08)",
|
|
748
752
|
maxHeight: "min(280px, calc(100vh - 80px))"
|
|
749
753
|
},
|
|
750
754
|
children: [
|
|
@@ -777,20 +781,13 @@ var ShortcutsPanel = memo(function ShortcutsPanel2({
|
|
|
777
781
|
) })
|
|
778
782
|
] })
|
|
779
783
|
] }),
|
|
780
|
-
/* @__PURE__ */ jsx("div", {
|
|
784
|
+
/* @__PURE__ */ jsx("div", { className: "border-t border-border" }),
|
|
781
785
|
/* @__PURE__ */ jsxs("div", { className: "px-3 pt-2.5 pb-2", children: [
|
|
782
786
|
/* @__PURE__ */ jsx("p", { className: "text-[9px] font-medium text-neutral-500 uppercase tracking-wider mb-1.5", children: "Work area" }),
|
|
783
787
|
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-1", children: [
|
|
784
788
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
785
789
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
786
|
-
/* @__PURE__ */ jsx(
|
|
787
|
-
"span",
|
|
788
|
-
{
|
|
789
|
-
className: "font-mono text-[10px] rounded-sm border border-neutral-700 px-1.5 py-0.5 text-neutral-300 min-w-[20px] text-center",
|
|
790
|
-
style: { background: "rgba(255,255,255,0.05)" },
|
|
791
|
-
children: "I"
|
|
792
|
-
}
|
|
793
|
-
),
|
|
790
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] rounded-sm border border-neutral-700 px-1.5 py-0.5 text-neutral-300 min-w-[20px] text-center bg-hover", children: "I" }),
|
|
794
791
|
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-400", children: "In-point" })
|
|
795
792
|
] }),
|
|
796
793
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", children: inPoint !== null ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -820,14 +817,7 @@ var ShortcutsPanel = memo(function ShortcutsPanel2({
|
|
|
820
817
|
] }),
|
|
821
818
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center justify-between gap-2", children: [
|
|
822
819
|
/* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
|
|
823
|
-
/* @__PURE__ */ jsx(
|
|
824
|
-
"span",
|
|
825
|
-
{
|
|
826
|
-
className: "font-mono text-[10px] rounded-sm border border-neutral-700 px-1.5 py-0.5 text-neutral-300 min-w-[20px] text-center",
|
|
827
|
-
style: { background: "rgba(255,255,255,0.05)" },
|
|
828
|
-
children: "O"
|
|
829
|
-
}
|
|
830
|
-
),
|
|
820
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] rounded-sm border border-neutral-700 px-1.5 py-0.5 text-neutral-300 min-w-[20px] text-center bg-hover", children: "O" }),
|
|
831
821
|
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-400", children: "Out-point" })
|
|
832
822
|
] }),
|
|
833
823
|
/* @__PURE__ */ jsx("div", { className: "flex items-center gap-1.5", children: outPoint !== null ? /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
@@ -857,18 +847,11 @@ var ShortcutsPanel = memo(function ShortcutsPanel2({
|
|
|
857
847
|
] })
|
|
858
848
|
] })
|
|
859
849
|
] }),
|
|
860
|
-
/* @__PURE__ */ jsx("div", {
|
|
850
|
+
/* @__PURE__ */ jsx("div", { className: "border-t border-border" }),
|
|
861
851
|
/* @__PURE__ */ jsx("div", { className: "px-3 pt-2.5 pb-3 flex flex-col gap-3", children: sections.map((section, sectionIndex) => /* @__PURE__ */ jsxs("div", { children: [
|
|
862
852
|
/* @__PURE__ */ jsx("p", { className: "text-[9px] font-medium text-neutral-500 uppercase tracking-wider mb-1.5", children: section.title }),
|
|
863
853
|
/* @__PURE__ */ jsx("div", { className: "flex flex-col gap-1", children: section.hints.map((hint, hintIndex) => /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
864
|
-
/* @__PURE__ */ jsx(
|
|
865
|
-
"span",
|
|
866
|
-
{
|
|
867
|
-
className: "font-mono text-[10px] rounded-sm border border-neutral-700 px-1.5 py-0.5 text-neutral-300 min-w-[36px] text-center",
|
|
868
|
-
style: { background: "rgba(255,255,255,0.05)" },
|
|
869
|
-
children: hint.key
|
|
870
|
-
}
|
|
871
|
-
),
|
|
854
|
+
/* @__PURE__ */ jsx("span", { className: "font-mono text-[10px] rounded-sm border border-neutral-700 px-1.5 py-0.5 text-neutral-300 min-w-[36px] text-center bg-hover", children: hint.key }),
|
|
872
855
|
/* @__PURE__ */ jsx("span", { className: "text-[10px] text-neutral-400", children: hint.label })
|
|
873
856
|
] }, hintIndex)) })
|
|
874
857
|
] }, sectionIndex)) })
|
|
@@ -1039,7 +1022,7 @@ var VolumeControl = memo3(function VolumeControl2({
|
|
|
1039
1022
|
disabled,
|
|
1040
1023
|
"aria-label": muteLabel,
|
|
1041
1024
|
"aria-pressed": silent,
|
|
1042
|
-
className: `flex h-7 w-7 shrink-0 items-center justify-center rounded-md transition-colors disabled:pointer-events-none disabled:opacity-30 ${silent ? "text-
|
|
1025
|
+
className: `flex h-7 w-7 shrink-0 items-center justify-center rounded-md transition-colors disabled:pointer-events-none disabled:opacity-30 ${silent ? "text-accent-ink" : "text-neutral-500 hover:text-neutral-200"}`,
|
|
1043
1026
|
children: /* @__PURE__ */ jsx3(VolumeIcon, { muted: audioMuted, volume: audioVolume })
|
|
1044
1027
|
}
|
|
1045
1028
|
) })
|
|
@@ -1085,7 +1068,7 @@ var LoopButton = memo4(function LoopButton2({
|
|
|
1085
1068
|
setLoopEnabled(!loopEnabled);
|
|
1086
1069
|
},
|
|
1087
1070
|
disabled,
|
|
1088
|
-
className: `flex h-7 w-7 items-center justify-center rounded-md transition-colors disabled:opacity-30 ${loopEnabled ? "text-
|
|
1071
|
+
className: `flex h-7 w-7 items-center justify-center rounded-md transition-colors disabled:opacity-30 ${loopEnabled ? "text-accent-ink" : "text-neutral-500 hover:text-neutral-200"}`,
|
|
1089
1072
|
"aria-label": loopEnabled ? "Disable loop playback" : "Enable loop playback",
|
|
1090
1073
|
"aria-pressed": loopEnabled,
|
|
1091
1074
|
children: /* @__PURE__ */ jsxs4(
|
|
@@ -1123,7 +1106,7 @@ var FullscreenButton = memo4(function FullscreenButton2({
|
|
|
1123
1106
|
trackStudioEvent("playback", { action: "fullscreen_toggle", active: !isFullscreen });
|
|
1124
1107
|
onToggleFullscreen();
|
|
1125
1108
|
},
|
|
1126
|
-
className: `flex h-7 w-7 shrink-0 items-center justify-center rounded-md transition-colors ${isFullscreen ? "text-
|
|
1109
|
+
className: `flex h-7 w-7 shrink-0 items-center justify-center rounded-md transition-colors ${isFullscreen ? "text-accent-ink" : "text-neutral-500 hover:text-neutral-200"}`,
|
|
1127
1110
|
"aria-label": isFullscreen ? "Exit fullscreen" : "Enter fullscreen",
|
|
1128
1111
|
children: /* @__PURE__ */ jsx4(
|
|
1129
1112
|
"svg",
|
|
@@ -1221,7 +1204,7 @@ var PlayerControls = memo4(function PlayerControls2({
|
|
|
1221
1204
|
children: [
|
|
1222
1205
|
/* @__PURE__ */ jsx4("span", { ref: timeDisplayRef, children: formatTime(0) }),
|
|
1223
1206
|
timeDisplayMode === "time" ? /* @__PURE__ */ jsxs4(Fragment3, { children: [
|
|
1224
|
-
/* @__PURE__ */ jsx4("span", { className: "mx-0.5 text-
|
|
1207
|
+
/* @__PURE__ */ jsx4("span", { className: "mx-0.5 text-text-off", children: "/" }),
|
|
1225
1208
|
/* @__PURE__ */ jsx4("span", { className: "text-neutral-600", children: formatTime(duration) })
|
|
1226
1209
|
] }) : null
|
|
1227
1210
|
]
|
|
@@ -6590,7 +6573,7 @@ function MiniCurveSvg({
|
|
|
6590
6573
|
{
|
|
6591
6574
|
d,
|
|
6592
6575
|
fill: "none",
|
|
6593
|
-
|
|
6576
|
+
className: active ? "stroke-accent-ink" : "stroke-text-muted",
|
|
6594
6577
|
strokeWidth: "1.5",
|
|
6595
6578
|
strokeLinecap: "round"
|
|
6596
6579
|
}
|
|
@@ -6630,7 +6613,7 @@ var EasePresetGrid = function EasePresetGrid2({
|
|
|
6630
6613
|
/* @__PURE__ */ jsx11(
|
|
6631
6614
|
"span",
|
|
6632
6615
|
{
|
|
6633
|
-
className: `text-center text-[8px] leading-none ${isActive ? "text-
|
|
6616
|
+
className: `text-center text-[8px] leading-none ${isActive ? "text-accent-ink" : "text-neutral-500"}`,
|
|
6634
6617
|
children: preset.label
|
|
6635
6618
|
}
|
|
6636
6619
|
)
|
|
@@ -6647,7 +6630,7 @@ function EaseModeToggle({
|
|
|
6647
6630
|
return /* @__PURE__ */ jsx11(
|
|
6648
6631
|
"div",
|
|
6649
6632
|
{
|
|
6650
|
-
className: "mb-2 grid grid-cols-3 rounded-md bg-
|
|
6633
|
+
className: "mb-2 grid grid-cols-3 rounded-md bg-press p-0.5",
|
|
6651
6634
|
role: "radiogroup",
|
|
6652
6635
|
"aria-label": "Ease editor mode",
|
|
6653
6636
|
children: EASE_MODES.map((candidateMode) => {
|
|
@@ -6753,7 +6736,7 @@ function EaseBezierField({
|
|
|
6753
6736
|
}
|
|
6754
6737
|
},
|
|
6755
6738
|
onBlur: (event) => commit(event.currentTarget.value),
|
|
6756
|
-
className: `w-full rounded border bg-
|
|
6739
|
+
className: `w-full rounded border bg-input px-1.5 py-1 font-mono text-[10px] text-neutral-300 outline-hidden ${error ? "border-danger-ink/70 focus:border-danger-ink" : "border-border focus:border-panel-accent/50"}`
|
|
6757
6740
|
}
|
|
6758
6741
|
)
|
|
6759
6742
|
] }),
|
|
@@ -6762,7 +6745,7 @@ function EaseBezierField({
|
|
|
6762
6745
|
{
|
|
6763
6746
|
id: errorId,
|
|
6764
6747
|
"aria-live": "polite",
|
|
6765
|
-
className: `mt-1 text-[9px] text-
|
|
6748
|
+
className: `mt-1 text-[9px] text-danger-ink ${error ? "" : "sr-only"}`,
|
|
6766
6749
|
children: error ?? "Valid bezier values"
|
|
6767
6750
|
}
|
|
6768
6751
|
)
|
|
@@ -6830,7 +6813,7 @@ function SpringBounceField({
|
|
|
6830
6813
|
const bounce = parseSpringBounce2(`spring(${value})`);
|
|
6831
6814
|
if (bounce !== null) onCommit(`spring(${round2(bounce)})`);
|
|
6832
6815
|
},
|
|
6833
|
-
className: "w-16 rounded-sm border border-
|
|
6816
|
+
className: "w-16 rounded-sm border border-border bg-input px-1.5 py-1 font-mono text-[10px] text-neutral-300 outline-hidden focus:border-panel-accent/50"
|
|
6834
6817
|
}
|
|
6835
6818
|
)
|
|
6836
6819
|
] });
|
|
@@ -6851,7 +6834,7 @@ function WiggleField({
|
|
|
6851
6834
|
min: 1,
|
|
6852
6835
|
step: 1,
|
|
6853
6836
|
onCommit: (value) => commitWiggle(onCommit, value, config.type, amplitude),
|
|
6854
|
-
className: "w-14 rounded-sm border border-
|
|
6837
|
+
className: "w-14 rounded-sm border border-border bg-input px-1.5 py-1 font-mono text-[10px] text-neutral-300 outline-hidden focus:border-panel-accent/50"
|
|
6855
6838
|
}
|
|
6856
6839
|
)
|
|
6857
6840
|
] }),
|
|
@@ -6867,7 +6850,7 @@ function WiggleField({
|
|
|
6867
6850
|
commitWiggle(onCommit, config.wiggles, event.currentTarget.value, amplitude);
|
|
6868
6851
|
}
|
|
6869
6852
|
},
|
|
6870
|
-
className: "rounded-sm border border-
|
|
6853
|
+
className: "rounded-sm border border-border bg-input px-1.5 py-1 text-[10px] text-neutral-300 outline-hidden focus:border-panel-accent/50",
|
|
6871
6854
|
children: WIGGLE_TYPES.map((type) => /* @__PURE__ */ jsx12("option", { value: type, children: type }, type))
|
|
6872
6855
|
}
|
|
6873
6856
|
)
|
|
@@ -6883,7 +6866,7 @@ function WiggleField({
|
|
|
6883
6866
|
max: 1,
|
|
6884
6867
|
step: 0.01,
|
|
6885
6868
|
onCommit: (value) => commitWiggle(onCommit, config.wiggles, config.type, value),
|
|
6886
|
-
className: "w-16 rounded-sm border border-
|
|
6869
|
+
className: "w-16 rounded-sm border border-border bg-input px-1.5 py-1 font-mono text-[10px] text-neutral-300 outline-hidden focus:border-panel-accent/50"
|
|
6887
6870
|
}
|
|
6888
6871
|
)
|
|
6889
6872
|
] })
|
|
@@ -6902,7 +6885,6 @@ var VMAX = 1 + HR / S;
|
|
|
6902
6885
|
var VMIN = -HR / S;
|
|
6903
6886
|
var DRAG_VMAX = 2;
|
|
6904
6887
|
var DRAG_VMIN = -1;
|
|
6905
|
-
var ACCENT = "#3CE6AC";
|
|
6906
6888
|
function EaseTypeDropdown({
|
|
6907
6889
|
kind,
|
|
6908
6890
|
ease,
|
|
@@ -6971,7 +6953,7 @@ function EaseTypeDropdown({
|
|
|
6971
6953
|
"aria-expanded": open,
|
|
6972
6954
|
"aria-controls": open ? menuId : void 0,
|
|
6973
6955
|
onClick: () => setOpen((prev) => !prev),
|
|
6974
|
-
className: "flex w-full items-center gap-2 rounded-md border border-
|
|
6956
|
+
className: "flex w-full items-center gap-2 rounded-md border border-border bg-input px-2 py-1.5 text-left transition-colors hover:border-border-strong",
|
|
6975
6957
|
children: [
|
|
6976
6958
|
/* @__PURE__ */ jsx13(MiniCurveSvg, { ease, active: true, size: 16 }),
|
|
6977
6959
|
/* @__PURE__ */ jsx13("span", { className: "text-[11px] text-neutral-200", children: label }),
|
|
@@ -6997,7 +6979,7 @@ function EaseTypeDropdown({
|
|
|
6997
6979
|
role: "menu",
|
|
6998
6980
|
"aria-label": `${MODE_LABELS[kind]} ease presets`,
|
|
6999
6981
|
onKeyDown: handleMenuKeyDown,
|
|
7000
|
-
className: "absolute inset-x-0 top-full z-20 mt-1 rounded-md border border-
|
|
6982
|
+
className: "absolute inset-x-0 top-full z-20 mt-1 rounded-md border border-border bg-raised p-2 shadow-xl",
|
|
7001
6983
|
children: /* @__PURE__ */ jsx13(
|
|
7002
6984
|
EasePresetGrid,
|
|
7003
6985
|
{
|
|
@@ -7184,7 +7166,7 @@ function EaseCurveSection({
|
|
|
7184
7166
|
/* @__PURE__ */ jsx13(
|
|
7185
7167
|
"div",
|
|
7186
7168
|
{
|
|
7187
|
-
className: "mx-auto overflow-hidden rounded-md border border-
|
|
7169
|
+
className: "mx-auto overflow-hidden rounded-md border border-border bg-input",
|
|
7188
7170
|
style: { aspectRatio: `${SVGW} / ${SVGH}`, width: "100%", maxWidth: 230 },
|
|
7189
7171
|
children: /* @__PURE__ */ jsxs9(
|
|
7190
7172
|
"svg",
|
|
@@ -7206,7 +7188,7 @@ function EaseCurveSection({
|
|
|
7206
7188
|
y1: top,
|
|
7207
7189
|
x2: xToSvg(q),
|
|
7208
7190
|
y2: bottom,
|
|
7209
|
-
|
|
7191
|
+
className: "stroke-text-0",
|
|
7210
7192
|
strokeOpacity: "0.05",
|
|
7211
7193
|
strokeWidth: "1"
|
|
7212
7194
|
},
|
|
@@ -7219,7 +7201,7 @@ function EaseCurveSection({
|
|
|
7219
7201
|
y1: yToSvg(q),
|
|
7220
7202
|
x2: right,
|
|
7221
7203
|
y2: yToSvg(q),
|
|
7222
|
-
|
|
7204
|
+
className: "stroke-text-0",
|
|
7223
7205
|
strokeOpacity: "0.05",
|
|
7224
7206
|
strokeWidth: "1"
|
|
7225
7207
|
},
|
|
@@ -7233,7 +7215,7 @@ function EaseCurveSection({
|
|
|
7233
7215
|
width: S,
|
|
7234
7216
|
height: bottom - top,
|
|
7235
7217
|
fill: "none",
|
|
7236
|
-
|
|
7218
|
+
className: "stroke-text-0",
|
|
7237
7219
|
strokeOpacity: "0.1",
|
|
7238
7220
|
strokeWidth: "1"
|
|
7239
7221
|
}
|
|
@@ -7245,7 +7227,7 @@ function EaseCurveSection({
|
|
|
7245
7227
|
y1: a0.y,
|
|
7246
7228
|
x2: a1.x,
|
|
7247
7229
|
y2: a1.y,
|
|
7248
|
-
|
|
7230
|
+
className: "stroke-text-0",
|
|
7249
7231
|
strokeOpacity: "0.08",
|
|
7250
7232
|
strokeWidth: "1",
|
|
7251
7233
|
strokeDasharray: "3 4"
|
|
@@ -7259,8 +7241,7 @@ function EaseCurveSection({
|
|
|
7259
7241
|
y1: a0.y,
|
|
7260
7242
|
x2: p1.x,
|
|
7261
7243
|
y2: p1.y,
|
|
7262
|
-
|
|
7263
|
-
strokeOpacity: "0.5",
|
|
7244
|
+
className: "stroke-accent-ink",
|
|
7264
7245
|
strokeWidth: "1.5"
|
|
7265
7246
|
}
|
|
7266
7247
|
),
|
|
@@ -7271,8 +7252,7 @@ function EaseCurveSection({
|
|
|
7271
7252
|
y1: a1.y,
|
|
7272
7253
|
x2: p2.x,
|
|
7273
7254
|
y2: p2.y,
|
|
7274
|
-
|
|
7275
|
-
strokeOpacity: "0.5",
|
|
7255
|
+
className: "stroke-accent-ink",
|
|
7276
7256
|
strokeWidth: "1.5"
|
|
7277
7257
|
}
|
|
7278
7258
|
)
|
|
@@ -7282,13 +7262,13 @@ function EaseCurveSection({
|
|
|
7282
7262
|
{
|
|
7283
7263
|
d: curvePath2,
|
|
7284
7264
|
fill: "none",
|
|
7285
|
-
|
|
7265
|
+
className: "stroke-accent-ink",
|
|
7286
7266
|
strokeWidth: "2.5",
|
|
7287
7267
|
strokeLinecap: "round"
|
|
7288
7268
|
}
|
|
7289
7269
|
),
|
|
7290
|
-
/* @__PURE__ */ jsx13("circle", { cx: a0.x, cy: a0.y, r: "3",
|
|
7291
|
-
/* @__PURE__ */ jsx13("circle", { cx: a1.x, cy: a1.y, r: "3",
|
|
7270
|
+
/* @__PURE__ */ jsx13("circle", { cx: a0.x, cy: a0.y, r: "3", className: "fill-accent-ink" }),
|
|
7271
|
+
/* @__PURE__ */ jsx13("circle", { cx: a1.x, cy: a1.y, r: "3", className: "fill-accent-ink" }),
|
|
7292
7272
|
showHandles && [["p1", p1], ["p2", p2]].map(([key2, pt]) => /* @__PURE__ */ jsxs9("g", { children: [
|
|
7293
7273
|
/* @__PURE__ */ jsx13(
|
|
7294
7274
|
"circle",
|
|
@@ -7304,7 +7284,7 @@ function EaseCurveSection({
|
|
|
7304
7284
|
"aria-valuemax": 1,
|
|
7305
7285
|
"aria-valuenow": key2 === "p1" ? x1 : x2,
|
|
7306
7286
|
"aria-valuetext": `x ${key2 === "p1" ? x1 : x2}, y ${key2 === "p1" ? y1 : y2}`,
|
|
7307
|
-
className: "cursor-grab stroke-transparent outline-hidden active:cursor-grabbing focus-visible:stroke-
|
|
7287
|
+
className: "cursor-grab stroke-transparent outline-hidden active:cursor-grabbing focus-visible:stroke-text-0 focus-visible:stroke-[2px]",
|
|
7308
7288
|
onPointerDown: (e) => handlePointerDown(key2, e),
|
|
7309
7289
|
onKeyDown: (event) => handleKeyDown(key2, event),
|
|
7310
7290
|
onPointerEnter: () => setHover(key2),
|
|
@@ -7317,10 +7297,8 @@ function EaseCurveSection({
|
|
|
7317
7297
|
cx: pt.x,
|
|
7318
7298
|
cy: pt.y,
|
|
7319
7299
|
r: hover === key2 || draggingRef.current === key2 ? 7 : 5.5,
|
|
7320
|
-
fill: "#0a0a1a",
|
|
7321
|
-
stroke: ACCENT,
|
|
7322
7300
|
strokeWidth: "2.5",
|
|
7323
|
-
className: "pointer-events-none transition-[r]"
|
|
7301
|
+
className: "pointer-events-none fill-input stroke-accent-ink transition-[r]"
|
|
7324
7302
|
}
|
|
7325
7303
|
)
|
|
7326
7304
|
] }, key2))
|
|
@@ -7591,8 +7569,11 @@ var KeyframeDiamond = memo6(function KeyframeDiamond2({
|
|
|
7591
7569
|
isHold = false
|
|
7592
7570
|
}) {
|
|
7593
7571
|
const isFilled = state === "active";
|
|
7594
|
-
const
|
|
7595
|
-
|
|
7572
|
+
const color = {
|
|
7573
|
+
active: "text-accent",
|
|
7574
|
+
inactive: "text-text-2 hover:text-text-0",
|
|
7575
|
+
ghost: "text-text-off hover:text-text-0"
|
|
7576
|
+
}[state];
|
|
7596
7577
|
return /* @__PURE__ */ jsx15(
|
|
7597
7578
|
"button",
|
|
7598
7579
|
{
|
|
@@ -7601,8 +7582,7 @@ var KeyframeDiamond = memo6(function KeyframeDiamond2({
|
|
|
7601
7582
|
e.stopPropagation();
|
|
7602
7583
|
onClick();
|
|
7603
7584
|
},
|
|
7604
|
-
className:
|
|
7605
|
-
style: { color, opacity },
|
|
7585
|
+
className: `relative shrink-0 p-0.5 transition-colors before:absolute before:-inset-1.5 before:content-[''] ${color}`,
|
|
7606
7586
|
title,
|
|
7607
7587
|
"aria-label": title,
|
|
7608
7588
|
"aria-pressed": state === "active",
|
|
@@ -7667,12 +7647,12 @@ function ArrowLeft({ disabled }) {
|
|
|
7667
7647
|
height: "10",
|
|
7668
7648
|
viewBox: "0 0 6 10",
|
|
7669
7649
|
fill: "none",
|
|
7670
|
-
|
|
7650
|
+
className: disabled ? "text-text-off" : "text-text-2",
|
|
7671
7651
|
children: /* @__PURE__ */ jsx16(
|
|
7672
7652
|
"path",
|
|
7673
7653
|
{
|
|
7674
7654
|
d: "M5 1L1 5L5 9",
|
|
7675
|
-
stroke: "
|
|
7655
|
+
stroke: "currentColor",
|
|
7676
7656
|
strokeWidth: "1.4",
|
|
7677
7657
|
strokeLinecap: "round",
|
|
7678
7658
|
strokeLinejoin: "round"
|
|
@@ -7689,12 +7669,12 @@ function ArrowRight({ disabled }) {
|
|
|
7689
7669
|
height: "10",
|
|
7690
7670
|
viewBox: "0 0 6 10",
|
|
7691
7671
|
fill: "none",
|
|
7692
|
-
|
|
7672
|
+
className: disabled ? "text-text-off" : "text-text-2",
|
|
7693
7673
|
children: /* @__PURE__ */ jsx16(
|
|
7694
7674
|
"path",
|
|
7695
7675
|
{
|
|
7696
7676
|
d: "M1 1L5 5L1 9",
|
|
7697
|
-
stroke: "
|
|
7677
|
+
stroke: "currentColor",
|
|
7698
7678
|
strokeWidth: "1.4",
|
|
7699
7679
|
strokeLinecap: "round",
|
|
7700
7680
|
strokeLinejoin: "round"
|
|
@@ -10970,7 +10950,7 @@ function ClipLintDot({ element }) {
|
|
|
10970
10950
|
return /* @__PURE__ */ jsx21(
|
|
10971
10951
|
"span",
|
|
10972
10952
|
{
|
|
10973
|
-
className: "absolute w-1.5 h-1.5 rounded-full bg-
|
|
10953
|
+
className: "absolute w-1.5 h-1.5 rounded-full bg-warning-ink",
|
|
10974
10954
|
style: { top: 7, right: 7 },
|
|
10975
10955
|
title: lint.messages.join("\n")
|
|
10976
10956
|
}
|
|
@@ -11888,7 +11868,7 @@ var TIMELINE_VIEWPORT_BUDGETS = Object.freeze({
|
|
|
11888
11868
|
richPreviewP95Ms: 750,
|
|
11889
11869
|
constrainedRichPreviewP95Ms: 1200,
|
|
11890
11870
|
supportedFixtureFallbackRatio: 0.02,
|
|
11891
|
-
scrollSamplesPerRun:
|
|
11871
|
+
scrollSamplesPerRun: 63,
|
|
11892
11872
|
warmupRuns: 3,
|
|
11893
11873
|
measuredRuns: 5,
|
|
11894
11874
|
requiredPassingRuns: 4
|
|
@@ -14184,7 +14164,7 @@ var TimelineClip = memo10(function TimelineClip2({
|
|
|
14184
14164
|
width: 2,
|
|
14185
14165
|
borderRadius: 1,
|
|
14186
14166
|
background: "var(--clip-handle)",
|
|
14187
|
-
opacity: handleOpacity
|
|
14167
|
+
opacity: handleOpacity
|
|
14188
14168
|
}
|
|
14189
14169
|
}
|
|
14190
14170
|
)
|
|
@@ -14216,7 +14196,7 @@ var TimelineClip = memo10(function TimelineClip2({
|
|
|
14216
14196
|
width: 2,
|
|
14217
14197
|
borderRadius: 1,
|
|
14218
14198
|
background: "var(--clip-handle)",
|
|
14219
|
-
opacity: handleOpacity
|
|
14199
|
+
opacity: handleOpacity
|
|
14220
14200
|
}
|
|
14221
14201
|
}
|
|
14222
14202
|
)
|
|
@@ -16614,7 +16594,7 @@ function TrackClipCount({ clipCount }) {
|
|
|
16614
16594
|
{
|
|
16615
16595
|
"aria-label": `${clipCount} clips`,
|
|
16616
16596
|
title: `${clipCount} clips`,
|
|
16617
|
-
className: "shrink-0 rounded-full bg-
|
|
16597
|
+
className: "shrink-0 rounded-full bg-hover px-1 text-[9px] leading-[14px] tabular-nums text-text-muted",
|
|
16618
16598
|
children: clipCount
|
|
16619
16599
|
}
|
|
16620
16600
|
);
|
|
@@ -17123,7 +17103,7 @@ function TimelineFxPopover({
|
|
|
17123
17103
|
ref: rootRef,
|
|
17124
17104
|
role: "dialog",
|
|
17125
17105
|
"aria-label": "Effects",
|
|
17126
|
-
className: "z-200 flex flex-col overflow-hidden rounded-md border border-
|
|
17106
|
+
className: "z-200 flex flex-col overflow-hidden rounded-md border border-border bg-raised p-2 shadow-xl",
|
|
17127
17107
|
style: clampedStyle(anchorRect),
|
|
17128
17108
|
onKeyDown,
|
|
17129
17109
|
onPointerDown: (event) => event.stopPropagation(),
|
|
@@ -17137,12 +17117,12 @@ function TimelineFxPopover({
|
|
|
17137
17117
|
onAuditionTracked: (id) => trackPresetAuditioned(id, { trackKind })
|
|
17138
17118
|
}
|
|
17139
17119
|
) }),
|
|
17140
|
-
/* @__PURE__ */ jsxs23("div", { className: "mt-2 flex shrink-0 items-center justify-between border-t border-
|
|
17120
|
+
/* @__PURE__ */ jsxs23("div", { className: "mt-2 flex shrink-0 items-center justify-between border-t border-border pt-2 text-[10px] text-text-muted", children: [
|
|
17141
17121
|
/* @__PURE__ */ jsx41(
|
|
17142
17122
|
"button",
|
|
17143
17123
|
{
|
|
17144
17124
|
type: "button",
|
|
17145
|
-
className: "hover:text-
|
|
17125
|
+
className: "hover:text-text-0",
|
|
17146
17126
|
onClick: () => {
|
|
17147
17127
|
onClose();
|
|
17148
17128
|
onOpenRack();
|
|
@@ -17154,7 +17134,7 @@ function TimelineFxPopover({
|
|
|
17154
17134
|
"button",
|
|
17155
17135
|
{
|
|
17156
17136
|
type: "button",
|
|
17157
|
-
className: "hover:text-
|
|
17137
|
+
className: "hover:text-text-0",
|
|
17158
17138
|
onClick: () => {
|
|
17159
17139
|
onClose();
|
|
17160
17140
|
onOpenRack();
|
|
@@ -17644,7 +17624,7 @@ function PropertyGroupNavigation({
|
|
|
17644
17624
|
onSeek,
|
|
17645
17625
|
children
|
|
17646
17626
|
}) {
|
|
17647
|
-
const CHEVRON_BUTTON_CLASS = "relative h-5 w-3 border-0 bg-transparent p-0 text-
|
|
17627
|
+
const CHEVRON_BUTTON_CLASS = "relative h-5 w-3 border-0 bg-transparent p-0 text-text-2 hover:text-text-0 disabled:text-text-off focus-visible:outline-solid focus-visible:outline-1 focus-visible:outline-ring before:absolute before:left-1/2 before:top-1/2 before:h-6 before:w-6 before:-translate-x-1/2 before:-translate-y-1/2 before:content-['']";
|
|
17648
17628
|
const seekTo = (keyframe) => {
|
|
17649
17629
|
if (keyframe) {
|
|
17650
17630
|
onSeek?.(expandedElement.start + keyframe.percentage / 100 * expandedElement.duration);
|
|
@@ -17711,7 +17691,7 @@ function PropertyGroupHeaderRow({
|
|
|
17711
17691
|
tabIndex: rovingTargetId === timelinePropertyRowId(elementId2, lane.group) ? 0 : -1,
|
|
17712
17692
|
"data-property-group": lane.group,
|
|
17713
17693
|
"data-timeline-lane-top": getTimelineLaneTop(laneIndex),
|
|
17714
|
-
className: "absolute left-0 flex items-center gap-1 overflow-hidden px-1.5 text-[10px] text-
|
|
17694
|
+
className: "absolute left-0 flex items-center gap-1 overflow-hidden px-1.5 text-[10px] text-text-2",
|
|
17715
17695
|
style: {
|
|
17716
17696
|
top: getTimelineLaneTop(laneIndex),
|
|
17717
17697
|
// The header column narrows to contentOrigin whenever that is under
|
|
@@ -17726,13 +17706,13 @@ function PropertyGroupHeaderRow({
|
|
|
17726
17706
|
/* @__PURE__ */ jsx44(
|
|
17727
17707
|
"span",
|
|
17728
17708
|
{
|
|
17729
|
-
className: "absolute left-1.5 top-0 w-px bg-
|
|
17709
|
+
className: "absolute left-1.5 top-0 w-px bg-text-0/15",
|
|
17730
17710
|
style: { height: isLastLane ? "50%" : "100%" }
|
|
17731
17711
|
}
|
|
17732
17712
|
),
|
|
17733
|
-
/* @__PURE__ */ jsx44("span", { className: "absolute left-1.5 top-1/2 h-px w-1.5 bg-
|
|
17713
|
+
/* @__PURE__ */ jsx44("span", { className: "absolute left-1.5 top-1/2 h-px w-1.5 bg-text-0/15" })
|
|
17734
17714
|
] }),
|
|
17735
|
-
/* @__PURE__ */ jsx44("span", { className: "w-[46px] shrink-0 truncate text-
|
|
17715
|
+
/* @__PURE__ */ jsx44("span", { className: "w-[46px] shrink-0 truncate text-text-0", title: label, children: label }),
|
|
17736
17716
|
/* @__PURE__ */ jsx44(
|
|
17737
17717
|
PropertyGroupNavigation,
|
|
17738
17718
|
{
|
|
@@ -17747,7 +17727,7 @@ function PropertyGroupHeaderRow({
|
|
|
17747
17727
|
"aria-pressed": !!navigation.currentKeyframe,
|
|
17748
17728
|
"aria-label": `${navigation.currentKeyframe ? "Remove" : "Add"} ${label} keyframe`,
|
|
17749
17729
|
title: `${navigation.currentKeyframe ? "Remove" : "Add"} ${label} keyframe`,
|
|
17750
|
-
className: "flex h-6 w-6 shrink-0 items-center justify-center border-0 bg-transparent p-0 text-[11px] text-
|
|
17730
|
+
className: "flex h-6 w-6 shrink-0 items-center justify-center border-0 bg-transparent p-0 text-[11px] text-accent-ink focus-visible:outline-solid focus-visible:outline-1 focus-visible:outline-ring",
|
|
17751
17731
|
onClick: (event) => {
|
|
17752
17732
|
event.stopPropagation();
|
|
17753
17733
|
if (toggleTarget) {
|
|
@@ -17762,7 +17742,7 @@ function PropertyGroupHeaderRow({
|
|
|
17762
17742
|
/* @__PURE__ */ jsx44(
|
|
17763
17743
|
"span",
|
|
17764
17744
|
{
|
|
17765
|
-
className: "min-w-0 flex-1 truncate text-right tabular-nums text-
|
|
17745
|
+
className: "min-w-0 flex-1 truncate text-right tabular-nums text-text-muted",
|
|
17766
17746
|
title: valueReadout(lane.group, values),
|
|
17767
17747
|
children: valueReadout(lane.group, values)
|
|
17768
17748
|
}
|
|
@@ -17790,7 +17770,7 @@ function AutomationLaneHeaderRow({
|
|
|
17790
17770
|
{
|
|
17791
17771
|
"data-automation-lane-label": label,
|
|
17792
17772
|
"data-timeline-lane-top": top,
|
|
17793
|
-
className: "absolute left-0 flex items-center gap-1 overflow-hidden px-1.5 text-[10px] text-
|
|
17773
|
+
className: "absolute left-0 flex items-center gap-1 overflow-hidden px-1.5 text-[10px] text-text-2",
|
|
17794
17774
|
style: {
|
|
17795
17775
|
top,
|
|
17796
17776
|
width: columnWidth,
|
|
@@ -17802,11 +17782,11 @@ function AutomationLaneHeaderRow({
|
|
|
17802
17782
|
/* @__PURE__ */ jsx44(
|
|
17803
17783
|
"span",
|
|
17804
17784
|
{
|
|
17805
|
-
className: "absolute left-1.5 top-0 w-px bg-
|
|
17785
|
+
className: "absolute left-1.5 top-0 w-px bg-text-0/15",
|
|
17806
17786
|
style: { height: isLastLane ? "50%" : "100%" }
|
|
17807
17787
|
}
|
|
17808
17788
|
),
|
|
17809
|
-
/* @__PURE__ */ jsx44("span", { className: "absolute left-1.5 top-1/2 h-px w-1.5 bg-
|
|
17789
|
+
/* @__PURE__ */ jsx44("span", { className: "absolute left-1.5 top-1/2 h-px w-1.5 bg-text-0/15" })
|
|
17810
17790
|
] }),
|
|
17811
17791
|
/* @__PURE__ */ jsxs26(
|
|
17812
17792
|
"button",
|
|
@@ -17816,19 +17796,19 @@ function AutomationLaneHeaderRow({
|
|
|
17816
17796
|
"aria-label": onReveal ? `Show ${label} in the effect rack` : void 0,
|
|
17817
17797
|
title: onReveal ? `Show ${label} in the effect rack` : label,
|
|
17818
17798
|
disabled: !onReveal,
|
|
17819
|
-
className: "flex min-w-0 flex-1 flex-col justify-center rounded-sm border-0 bg-transparent p-0 text-left leading-tight enabled:hover:text-
|
|
17799
|
+
className: "flex min-w-0 flex-1 flex-col justify-center rounded-sm border-0 bg-transparent p-0 text-left leading-tight enabled:hover:text-text-0 focus-visible:outline-solid focus-visible:outline-1 focus-visible:outline-ring",
|
|
17820
17800
|
onPointerDown: (event) => event.stopPropagation(),
|
|
17821
17801
|
onClick: (event) => {
|
|
17822
17802
|
event.stopPropagation();
|
|
17823
17803
|
onReveal?.();
|
|
17824
17804
|
},
|
|
17825
17805
|
children: [
|
|
17826
|
-
/* @__PURE__ */ jsx44("span", { "data-automation-lane-name": "", className: "truncate font-mono text-[9px] text-
|
|
17806
|
+
/* @__PURE__ */ jsx44("span", { "data-automation-lane-name": "", className: "truncate font-mono text-[9px] text-text-2", children: name }),
|
|
17827
17807
|
param ? /* @__PURE__ */ jsx44(
|
|
17828
17808
|
"span",
|
|
17829
17809
|
{
|
|
17830
17810
|
"data-automation-lane-param": "",
|
|
17831
|
-
className: "truncate font-mono text-[9px] text-
|
|
17811
|
+
className: "truncate font-mono text-[9px] text-text-muted",
|
|
17832
17812
|
children: param
|
|
17833
17813
|
}
|
|
17834
17814
|
) : null,
|
|
@@ -17836,7 +17816,7 @@ function AutomationLaneHeaderRow({
|
|
|
17836
17816
|
"span",
|
|
17837
17817
|
{
|
|
17838
17818
|
"data-automation-lane-also": "",
|
|
17839
|
-
className: "truncate text-[9px] text-
|
|
17819
|
+
className: "truncate text-[9px] text-warning-ink",
|
|
17840
17820
|
title: `${alsoAutomatedBy} is also fading this \u2014 the two multiply.`,
|
|
17841
17821
|
children: [
|
|
17842
17822
|
alsoAutomatedBy,
|
|
@@ -17853,7 +17833,7 @@ function AutomationLaneHeaderRow({
|
|
|
17853
17833
|
type: "button",
|
|
17854
17834
|
"aria-label": `Remove ${label} automation`,
|
|
17855
17835
|
title: `Remove ${label} automation`,
|
|
17856
|
-
className: "flex h-6 w-6 shrink-0 items-center justify-center border-0 bg-transparent p-0 text-[11px] text-
|
|
17836
|
+
className: "flex h-6 w-6 shrink-0 items-center justify-center border-0 bg-transparent p-0 text-[11px] text-text-muted hover:text-text-0 focus-visible:outline-solid focus-visible:outline-1 focus-visible:outline-ring",
|
|
17857
17837
|
onPointerDown: (event) => event.stopPropagation(),
|
|
17858
17838
|
onClick: (event) => {
|
|
17859
17839
|
event.stopPropagation();
|
|
@@ -21121,8 +21101,7 @@ function TimelineLanes({
|
|
|
21121
21101
|
color: ts.label,
|
|
21122
21102
|
fontSize: 11,
|
|
21123
21103
|
letterSpacing: "0.06em",
|
|
21124
|
-
textTransform: "uppercase"
|
|
21125
|
-
opacity: 0.5
|
|
21104
|
+
textTransform: "uppercase"
|
|
21126
21105
|
},
|
|
21127
21106
|
children: "New track"
|
|
21128
21107
|
}
|
|
@@ -21457,7 +21436,7 @@ var TimelineCanvas = memo13(function TimelineCanvas2() {
|
|
|
21457
21436
|
"aria-hidden": "true",
|
|
21458
21437
|
"data-testid": "timeline-ghost-lane",
|
|
21459
21438
|
"data-active": ghostLaneActive || void 0,
|
|
21460
|
-
className: `pointer-events-none absolute flex items-center justify-center rounded-lg border border-dashed text-[11px] transition-colors duration-150 ${ghostLaneActive ? "border-studio-accent/60 bg-studio-accent/6 text-
|
|
21439
|
+
className: `pointer-events-none absolute flex items-center justify-center rounded-lg border border-dashed text-[11px] transition-colors duration-150 ${ghostLaneActive ? "border-studio-accent/60 bg-studio-accent/6 text-accent-ink" : "border-neutral-700/50 text-neutral-500"}`,
|
|
21461
21440
|
style: {
|
|
21462
21441
|
top: props.rowGeometry.getRowTop(ghostLaneRow) + CLIP_Y,
|
|
21463
21442
|
left: props.contentOrigin,
|
|
@@ -21798,7 +21777,7 @@ function EditPopover({ rangeStart, rangeEnd, anchorX, anchorY, onClose }) {
|
|
|
21798
21777
|
] })
|
|
21799
21778
|
] }),
|
|
21800
21779
|
elementsInRange.length > 0 && /* @__PURE__ */ jsx56("div", { className: "px-4 py-2 border-b border-neutral-800/40 max-h-24 overflow-y-auto", children: elementsInRange.map((el) => /* @__PURE__ */ jsxs36("div", { className: "flex items-center justify-between py-0.5", children: [
|
|
21801
|
-
/* @__PURE__ */ jsxs36("span", { className: "text-[10px] font-mono text-
|
|
21780
|
+
/* @__PURE__ */ jsxs36("span", { className: "text-[10px] font-mono text-accent-ink/80", children: [
|
|
21802
21781
|
"#",
|
|
21803
21782
|
el.id
|
|
21804
21783
|
] }),
|
|
@@ -21821,14 +21800,14 @@ function EditPopover({ rangeStart, rangeEnd, anchorX, anchorY, onClose }) {
|
|
|
21821
21800
|
className: "w-full px-3 py-2 text-xs bg-neutral-800/60 border border-neutral-700/40 rounded-lg text-neutral-200 placeholder:text-neutral-600 resize-none focus:outline-hidden focus:border-studio-accent/40 transition-colors"
|
|
21822
21801
|
}
|
|
21823
21802
|
) }),
|
|
21824
|
-
copyError && /* @__PURE__ */ jsx56("p", { className: "px-3 pb-2 text-[10px] text-
|
|
21803
|
+
copyError && /* @__PURE__ */ jsx56("p", { className: "px-3 pb-2 text-[10px] text-danger-ink", role: "alert", children: "Copy failed \u2014 check clipboard permissions and try again." }),
|
|
21825
21804
|
/* @__PURE__ */ jsxs36("div", { className: "grid grid-cols-2 gap-2 px-3 pb-3", children: [
|
|
21826
21805
|
/* @__PURE__ */ jsx56(
|
|
21827
21806
|
"button",
|
|
21828
21807
|
{
|
|
21829
21808
|
onClick: handleCopyPrompt,
|
|
21830
21809
|
disabled: !buildPromptCopyText(prompt),
|
|
21831
|
-
className: `py-1.5 text-[11px] font-medium rounded-lg transition-all border ${copiedPromptOnly ? "bg-
|
|
21810
|
+
className: `py-1.5 text-[11px] font-medium rounded-lg transition-all border ${copiedPromptOnly ? "bg-accent/15 text-accent-ink border-accent/30" : "bg-neutral-800/70 text-neutral-200 border-neutral-700/50 hover:bg-neutral-800"} disabled:opacity-50 disabled:cursor-not-allowed`,
|
|
21832
21811
|
children: copiedPromptOnly ? "Prompt Copied!" : "Copy Prompt"
|
|
21833
21812
|
}
|
|
21834
21813
|
),
|
|
@@ -21836,10 +21815,10 @@ function EditPopover({ rangeStart, rangeEnd, anchorX, anchorY, onClose }) {
|
|
|
21836
21815
|
"button",
|
|
21837
21816
|
{
|
|
21838
21817
|
onClick: handleCopy2,
|
|
21839
|
-
className: `py-1.5 text-[11px] font-medium rounded-lg transition-all ${copiedAgentPrompt ? "bg-
|
|
21818
|
+
className: `py-1.5 text-[11px] font-medium rounded-lg transition-all ${copiedAgentPrompt ? "bg-accent/15 text-accent-ink border border-accent/30" : "bg-studio-accent/15 text-accent-ink border border-studio-accent/25 hover:bg-studio-accent/25"}`,
|
|
21840
21819
|
children: [
|
|
21841
21820
|
copiedAgentPrompt ? "Copied!" : "Copy to Agent",
|
|
21842
|
-
!copiedAgentPrompt && /* @__PURE__ */ jsx56("span", { className: "text-[9px] text-
|
|
21821
|
+
!copiedAgentPrompt && /* @__PURE__ */ jsx56("span", { className: "text-[9px] text-text-muted ml-1.5", children: "Cmd+Enter" })
|
|
21843
21822
|
]
|
|
21844
21823
|
}
|
|
21845
21824
|
)
|
|
@@ -21893,7 +21872,7 @@ function useMenuKeyboardNav(menuRef) {
|
|
|
21893
21872
|
// src/player/components/KeyframeDiamondContextMenu.tsx
|
|
21894
21873
|
import { jsx as jsx57, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
21895
21874
|
var ITEM_CLS = "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-neutral-200 hover:bg-neutral-800 focus-visible:bg-neutral-800 outline-hidden cursor-pointer text-left";
|
|
21896
|
-
var DESTRUCTIVE_ITEM_CLS = "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-
|
|
21875
|
+
var DESTRUCTIVE_ITEM_CLS = "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-danger-ink hover:bg-neutral-800 focus-visible:bg-neutral-800 outline-hidden cursor-pointer text-left";
|
|
21897
21876
|
function KeyframeDiamondContextMenu({
|
|
21898
21877
|
state,
|
|
21899
21878
|
onClose,
|
|
@@ -22000,7 +21979,7 @@ function KeyframeDiamondContextMenu({
|
|
|
22000
21979
|
{
|
|
22001
21980
|
type: "button",
|
|
22002
21981
|
role: "menuitem",
|
|
22003
|
-
className: "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-
|
|
21982
|
+
className: "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-danger-ink hover:bg-danger/25 focus-visible:bg-danger/25 outline-hidden cursor-pointer text-left",
|
|
22004
21983
|
onClick: () => {
|
|
22005
21984
|
onDeleteAll(state.element, state.animationId);
|
|
22006
21985
|
onClose();
|
|
@@ -22172,7 +22151,7 @@ var ClipContextMenu = memo14(function ClipContextMenu2({
|
|
|
22172
22151
|
{
|
|
22173
22152
|
type: "button",
|
|
22174
22153
|
role: "menuitem",
|
|
22175
|
-
className: "w-full flex items-center justify-between px-3 py-1.5 text-xs text-
|
|
22154
|
+
className: "w-full flex items-center justify-between px-3 py-1.5 text-xs text-danger-ink hover:bg-neutral-800 focus-visible:bg-neutral-800 outline-hidden cursor-pointer text-left",
|
|
22176
22155
|
onClick: () => {
|
|
22177
22156
|
onDelete(element);
|
|
22178
22157
|
onClose();
|
|
@@ -22537,7 +22516,7 @@ function TimelineEmptyState({
|
|
|
22537
22516
|
strokeWidth: "1.5",
|
|
22538
22517
|
strokeLinecap: "round",
|
|
22539
22518
|
strokeLinejoin: "round",
|
|
22540
|
-
className: "text-
|
|
22519
|
+
className: "text-accent-ink shrink-0",
|
|
22541
22520
|
children: [
|
|
22542
22521
|
/* @__PURE__ */ jsx62("path", { d: "M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4" }),
|
|
22543
22522
|
/* @__PURE__ */ jsx62("polyline", { points: "7 10 12 15 17 10" }),
|
|
@@ -22545,7 +22524,7 @@ function TimelineEmptyState({
|
|
|
22545
22524
|
]
|
|
22546
22525
|
}
|
|
22547
22526
|
),
|
|
22548
|
-
/* @__PURE__ */ jsx62("span", { className: "text-[13px] text-
|
|
22527
|
+
/* @__PURE__ */ jsx62("span", { className: "text-[13px] text-accent-ink", children: "Drop media files to import" })
|
|
22549
22528
|
] }) : /* @__PURE__ */ jsxs42(Fragment20, { children: [
|
|
22550
22529
|
/* @__PURE__ */ jsxs42(
|
|
22551
22530
|
"svg",
|
|
@@ -22782,10 +22761,7 @@ var ThumbnailScheduler = class {
|
|
|
22782
22761
|
this.scrolling = scrolling;
|
|
22783
22762
|
if (!scrolling) this.pump();
|
|
22784
22763
|
}
|
|
22785
|
-
/**
|
|
22786
|
-
* Hold server-rendered composition thumbnails while the preview loads a new document: both
|
|
22787
|
-
* are served by the same Studio server, and the preview is what the person is waiting for.
|
|
22788
|
-
*/
|
|
22764
|
+
/** Holds composition renders while the preview loads: same server, and the preview is what the person awaits. */
|
|
22789
22765
|
setPreviewReloading(reloading) {
|
|
22790
22766
|
if (this.previewReloading === reloading) return;
|
|
22791
22767
|
this.previewReloading = reloading;
|
|
@@ -22909,7 +22885,7 @@ var ThumbnailScheduler = class {
|
|
|
22909
22885
|
cacheResult(entry2) {
|
|
22910
22886
|
const isWaveform = entry2.request.kind === "waveform";
|
|
22911
22887
|
const byteBudget = isWaveform ? this.budgets.waveformCacheBytes : this.budgets.thumbnailCacheBytes;
|
|
22912
|
-
entry2.cached = entry2.weight <= byteBudget;
|
|
22888
|
+
entry2.cached = !entry2.request.discardWhenReleased && entry2.weight <= byteBudget;
|
|
22913
22889
|
if (!entry2.cached) return;
|
|
22914
22890
|
if (isWaveform) this.waveformCacheBytes += entry2.weight;
|
|
22915
22891
|
else this.cacheBytes += entry2.weight;
|
|
@@ -23468,6 +23444,17 @@ function compositionPathOfPreviewUrl(previewUrl) {
|
|
|
23468
23444
|
const match = /\/preview\/comp\/([^?#]+)/.exec(previewUrl);
|
|
23469
23445
|
return match?.[1] ? decodeURIComponent(match[1]) : "index.html";
|
|
23470
23446
|
}
|
|
23447
|
+
function compositionThumbnailRequest(url, projectId, { sessionEpoch = 0, priority = "visible", rich = false } = {}) {
|
|
23448
|
+
return {
|
|
23449
|
+
key: createThumbnailKey({ kind: "composition", url }),
|
|
23450
|
+
projectId,
|
|
23451
|
+
sessionEpoch,
|
|
23452
|
+
kind: "composition",
|
|
23453
|
+
priority,
|
|
23454
|
+
rich,
|
|
23455
|
+
load: (signal) => loadCompositionImage(url, signal)
|
|
23456
|
+
};
|
|
23457
|
+
}
|
|
23471
23458
|
async function loadCompositionImage(url, signal) {
|
|
23472
23459
|
const response = await fetch(url, { signal });
|
|
23473
23460
|
if (!response.ok) throw new Error(`Composition thumbnail failed (${response.status})`);
|
|
@@ -23510,15 +23497,7 @@ var CompositionThumbnail = memo18(function CompositionThumbnail2({
|
|
|
23510
23497
|
contentRevision
|
|
23511
23498
|
});
|
|
23512
23499
|
const request = useMemo34(
|
|
23513
|
-
() => ({
|
|
23514
|
-
key: createThumbnailKey({ kind: "composition", url }),
|
|
23515
|
-
projectId,
|
|
23516
|
-
sessionEpoch,
|
|
23517
|
-
kind: "composition",
|
|
23518
|
-
priority,
|
|
23519
|
-
rich: true,
|
|
23520
|
-
load: (signal) => loadCompositionImage(url, signal)
|
|
23521
|
-
}),
|
|
23500
|
+
() => compositionThumbnailRequest(url, projectId, { sessionEpoch, priority, rich: true }),
|
|
23522
23501
|
[priority, projectId, sessionEpoch, url]
|
|
23523
23502
|
);
|
|
23524
23503
|
const snapshot3 = useThumbnailLease(request);
|
|
@@ -23558,7 +23537,7 @@ var CompositionThumbnail = memo18(function CompositionThumbnail2({
|
|
|
23558
23537
|
))
|
|
23559
23538
|
}
|
|
23560
23539
|
),
|
|
23561
|
-
snapshot3.status === "loading" && /* @__PURE__ */ jsx66("div", { className: "absolute inset-0 animate-pulse bg-
|
|
23540
|
+
snapshot3.status === "loading" && /* @__PURE__ */ jsx66("div", { className: "absolute inset-0 animate-pulse bg-text-0/[0.035]" }),
|
|
23562
23541
|
label && /* @__PURE__ */ jsx66("div", { className: "absolute inset-y-0 left-3 z-10 flex items-center", children: /* @__PURE__ */ jsx66(
|
|
23563
23542
|
"span",
|
|
23564
23543
|
{
|
|
@@ -27115,7 +27094,7 @@ function PreviewZoomOverlay({
|
|
|
27115
27094
|
"button",
|
|
27116
27095
|
{
|
|
27117
27096
|
type: "button",
|
|
27118
|
-
className: "rounded px-1.5 py-0.5 font-medium text-
|
|
27097
|
+
className: "rounded px-1.5 py-0.5 font-medium text-accent-ink hover:bg-white/10 transition-colors",
|
|
27119
27098
|
onClick: onFit,
|
|
27120
27099
|
"aria-label": "Fit the whole frame in view",
|
|
27121
27100
|
"data-testid": "preview-zoom-fit",
|
|
@@ -27233,8 +27212,7 @@ function usePreviewPoster(projectId, activeKey, directUrl) {
|
|
|
27233
27212
|
const renderMissingPoster = useCallback46(() => {
|
|
27234
27213
|
if (missingForRef.current !== visit || liveReadyForRef.current !== visit) return;
|
|
27235
27214
|
missingForRef.current = null;
|
|
27236
|
-
|
|
27237
|
-
});
|
|
27215
|
+
renderPosterForNextOpen(projectId);
|
|
27238
27216
|
}, [visit, projectId]);
|
|
27239
27217
|
const onLiveReadyToShowChange = useCallback46(
|
|
27240
27218
|
(ready) => {
|
|
@@ -27259,6 +27237,27 @@ function usePreviewPoster(projectId, activeKey, directUrl) {
|
|
|
27259
27237
|
}
|
|
27260
27238
|
};
|
|
27261
27239
|
}
|
|
27240
|
+
function renderPosterForNextOpen(projectId) {
|
|
27241
|
+
const url = previewPosterUrl(projectId, false);
|
|
27242
|
+
const request = {
|
|
27243
|
+
key: createThumbnailKey({ kind: "poster-render", url }),
|
|
27244
|
+
projectId,
|
|
27245
|
+
sessionEpoch: 0,
|
|
27246
|
+
kind: "composition",
|
|
27247
|
+
priority: "overscan",
|
|
27248
|
+
discardWhenReleased: true,
|
|
27249
|
+
load: async (signal) => {
|
|
27250
|
+
await (await fetch(url, { signal })).arrayBuffer();
|
|
27251
|
+
return { value: { kind: "image", url, aspect: 16 / 9 }, weight: 0 };
|
|
27252
|
+
}
|
|
27253
|
+
};
|
|
27254
|
+
const settled = () => ["ready", "error"].includes(thumbnailScheduler.getSnapshot(request).status);
|
|
27255
|
+
let lease = null;
|
|
27256
|
+
lease = thumbnailScheduler.acquire(request, () => {
|
|
27257
|
+
if (settled()) lease?.release();
|
|
27258
|
+
});
|
|
27259
|
+
if (settled()) lease.release();
|
|
27260
|
+
}
|
|
27262
27261
|
function useVisitNumber(key2) {
|
|
27263
27262
|
const [seen, setSeen] = useState30({ key: key2, visit: 0 });
|
|
27264
27263
|
if (seen.key === key2) return seen.visit;
|
|
@@ -28019,7 +28018,7 @@ function AssetPreviewOverlay() {
|
|
|
28019
28018
|
/* @__PURE__ */ jsx73(
|
|
28020
28019
|
"button",
|
|
28021
28020
|
{
|
|
28022
|
-
className: "absolute top-2 right-2 w-6 h-6 rounded-full bg-
|
|
28021
|
+
className: "absolute top-2 right-2 w-6 h-6 rounded-full bg-raised hover:bg-press text-text-2 hover:text-text-0 flex items-center justify-center transition-colors z-10",
|
|
28023
28022
|
onClick: (e) => {
|
|
28024
28023
|
e.stopPropagation();
|
|
28025
28024
|
clearPreviewAsset();
|
|
@@ -28480,7 +28479,7 @@ function PreviewPane({
|
|
|
28480
28479
|
"div",
|
|
28481
28480
|
{
|
|
28482
28481
|
ref: containerRef,
|
|
28483
|
-
className: `flex-1 min-h-0 flex flex-col overflow-hidden bg-[var(--studio-preview-bg,var(--color-neutral-950))] ${isFullscreen ? "" : "m-3 rounded-md border border-
|
|
28482
|
+
className: `scheme-dark flex-1 min-h-0 flex flex-col overflow-hidden bg-[var(--studio-preview-bg,var(--color-neutral-950))] ${isFullscreen ? "" : "m-3 rounded-md border border-border"}`,
|
|
28484
28483
|
"data-studio-fullscreen-target": "",
|
|
28485
28484
|
children: [
|
|
28486
28485
|
/* @__PURE__ */ jsxs51(
|
|
@@ -28736,7 +28735,7 @@ function useMeterLoop(strips, bars, iframeRef) {
|
|
|
28736
28735
|
}, [previewIframeRef, bars]);
|
|
28737
28736
|
}
|
|
28738
28737
|
function Bar({ maskRef, peakRef }) {
|
|
28739
|
-
return /* @__PURE__ */ jsxs52("div", { className: "relative h-full w-[18px] overflow-hidden rounded-[2px] bg-neutral-900", children: [
|
|
28738
|
+
return /* @__PURE__ */ jsxs52("div", { className: "scheme-dark relative h-full w-[18px] overflow-hidden rounded-[2px] bg-neutral-900", children: [
|
|
28740
28739
|
/* @__PURE__ */ jsx77(
|
|
28741
28740
|
"div",
|
|
28742
28741
|
{
|
|
@@ -28772,7 +28771,7 @@ function Bar({ maskRef, peakRef }) {
|
|
|
28772
28771
|
{
|
|
28773
28772
|
ref: peakRef,
|
|
28774
28773
|
"data-testid": "meter-peak",
|
|
28775
|
-
className: "absolute inset-x-0 bottom-0 h-px bg-
|
|
28774
|
+
className: "absolute inset-x-0 bottom-0 h-px bg-text-0"
|
|
28776
28775
|
}
|
|
28777
28776
|
)
|
|
28778
28777
|
] });
|
|
@@ -32114,7 +32113,7 @@ function restoreOriginalTranslateProperty(element) {
|
|
|
32114
32113
|
element.removeAttribute(STUDIO_ORIGINAL_TRANSLATE_ATTR);
|
|
32115
32114
|
}
|
|
32116
32115
|
function clearStudioPathOffset(element) {
|
|
32117
|
-
if (element.hasAttribute(STUDIO_PATH_OFFSET_ATTR) || styleUsesStudioOffset(element.style.getPropertyValue("translate"))) {
|
|
32116
|
+
if (element.hasAttribute(STUDIO_PATH_OFFSET_ATTR) || element.hasAttribute(STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR) || styleUsesStudioOffset(element.style.getPropertyValue("translate"))) {
|
|
32118
32117
|
restoreOriginalTranslateProperty(element);
|
|
32119
32118
|
}
|
|
32120
32119
|
restoreInlineDisplay(element);
|
|
@@ -32444,25 +32443,6 @@ function appendTransformDisplayOps(element, ops) {
|
|
|
32444
32443
|
ops.push({ type: "attribute", property: STUDIO_ORIGINAL_TRANSFORM_DISPLAY_ATTR, value: null });
|
|
32445
32444
|
}
|
|
32446
32445
|
}
|
|
32447
|
-
function buildPathOffsetPatches(element) {
|
|
32448
|
-
const ops = [];
|
|
32449
|
-
collectInlineStyleOps(element, [STUDIO_OFFSET_X_PROP, STUDIO_OFFSET_Y_PROP], ops);
|
|
32450
|
-
const inlineTranslate = element.style.getPropertyValue("translate");
|
|
32451
|
-
const hasOffsetVars = element.style.getPropertyValue(STUDIO_OFFSET_X_PROP) || element.style.getPropertyValue(STUDIO_OFFSET_Y_PROP);
|
|
32452
|
-
const translateValue = inlineTranslate && inlineTranslate !== "none" ? inlineTranslate : hasOffsetVars ? `var(${STUDIO_OFFSET_X_PROP}, 0px) var(${STUDIO_OFFSET_Y_PROP}, 0px)` : null;
|
|
32453
|
-
if (translateValue) {
|
|
32454
|
-
ops.push({ type: "inline-style", property: "translate", value: translateValue });
|
|
32455
|
-
}
|
|
32456
|
-
ops.push({ type: "attribute", property: STUDIO_PATH_OFFSET_ATTR, value: "true" });
|
|
32457
|
-
collectAttributeOps(
|
|
32458
|
-
element,
|
|
32459
|
-
[STUDIO_ORIGINAL_TRANSLATE_ATTR, STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR],
|
|
32460
|
-
ops
|
|
32461
|
-
);
|
|
32462
|
-
collectInlineStyleOps(element, ["display"], ops);
|
|
32463
|
-
collectAttributeOps(element, [STUDIO_ORIGINAL_TRANSFORM_DISPLAY_ATTR], ops);
|
|
32464
|
-
return ops;
|
|
32465
|
-
}
|
|
32466
32446
|
function buildClearPathOffsetPatches(element) {
|
|
32467
32447
|
const originalInlineTranslate = element.getAttribute(STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR);
|
|
32468
32448
|
const ops = [
|
|
@@ -32931,10 +32911,32 @@ var UNREADABLE_TRANSLATE = "Studio can't read this layer's translate. Move it in
|
|
|
32931
32911
|
function formatTranslatePx(p) {
|
|
32932
32912
|
return `${roundTo3(p.x)}px ${roundTo3(p.y)}px`;
|
|
32933
32913
|
}
|
|
32934
|
-
|
|
32935
|
-
|
|
32914
|
+
var LEGACY_OFFSET_VARS = [STUDIO_OFFSET_X_PROP, STUDIO_OFFSET_Y_PROP];
|
|
32915
|
+
function writePlainMove(el, p) {
|
|
32916
|
+
writeTranslatePx(el, p);
|
|
32917
|
+
const patches = [
|
|
32918
|
+
{ type: "inline-style", property: "translate", value: formatTranslatePx(p) },
|
|
32919
|
+
{
|
|
32920
|
+
type: "attribute",
|
|
32921
|
+
property: STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR,
|
|
32922
|
+
value: el.getAttribute(STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR)
|
|
32923
|
+
}
|
|
32924
|
+
];
|
|
32925
|
+
for (const prop of LEGACY_OFFSET_VARS.filter((v) => el.style.getPropertyValue(v))) {
|
|
32926
|
+
el.style.removeProperty(prop);
|
|
32927
|
+
patches.push({ type: "inline-style", property: prop, value: null });
|
|
32928
|
+
}
|
|
32929
|
+
if (el.hasAttribute(STUDIO_PATH_OFFSET_ATTR)) {
|
|
32930
|
+
el.removeAttribute(STUDIO_PATH_OFFSET_ATTR);
|
|
32931
|
+
patches.push({ type: "attribute", property: STUDIO_PATH_OFFSET_ATTR, value: null });
|
|
32932
|
+
}
|
|
32933
|
+
return patches;
|
|
32936
32934
|
}
|
|
32937
32935
|
function writeTranslatePx(el, p) {
|
|
32936
|
+
if (!el.hasAttribute(STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR)) {
|
|
32937
|
+
const own = el.style.getPropertyValue("translate");
|
|
32938
|
+
el.setAttribute(STUDIO_ORIGINAL_INLINE_TRANSLATE_ATTR, styleUsesStudioOffset(own) ? "" : own);
|
|
32939
|
+
}
|
|
32938
32940
|
el.style.setProperty("translate", formatTranslatePx(p));
|
|
32939
32941
|
}
|
|
32940
32942
|
function readMoveOffset(el, plainTranslate = !gsapWritesPosition(el)) {
|
|
@@ -35371,7 +35373,7 @@ function DomEditRotateHandle({
|
|
|
35371
35373
|
title: "Rotate",
|
|
35372
35374
|
"aria-label": "Rotate selection",
|
|
35373
35375
|
onPointerDown: onStartRotate,
|
|
35374
|
-
children: /* @__PURE__ */ jsx85("span", { className: "pointer-events-none flex h-[18px] w-[18px] items-center justify-center rounded-full border border-studio-accent/70 bg-studio-surface text-
|
|
35376
|
+
children: /* @__PURE__ */ jsx85("span", { className: "pointer-events-none flex h-[18px] w-[18px] items-center justify-center rounded-full border border-studio-accent/70 bg-studio-surface text-accent-ink shadow-[0_0_3px_rgba(0,0,0,0.45)]", children: /* @__PURE__ */ jsxs58(
|
|
35375
35377
|
"svg",
|
|
35376
35378
|
{
|
|
35377
35379
|
width: "11",
|
|
@@ -35767,7 +35769,7 @@ var CanvasContextMenu = memo24(function CanvasContextMenu2({
|
|
|
35767
35769
|
"button",
|
|
35768
35770
|
{
|
|
35769
35771
|
type: "button",
|
|
35770
|
-
className: "w-full flex items-center justify-between px-3 py-1.5 text-xs text-
|
|
35772
|
+
className: "w-full flex items-center justify-between px-3 py-1.5 text-xs text-danger-ink hover:bg-neutral-800 cursor-pointer text-left",
|
|
35771
35773
|
onPointerDown: (e) => {
|
|
35772
35774
|
if (e.button !== 0) return;
|
|
35773
35775
|
e.preventDefault();
|
|
@@ -36324,7 +36326,7 @@ function InlineTextToolbar({
|
|
|
36324
36326
|
"data-inline-text-toolbar": "true",
|
|
36325
36327
|
role: "toolbar",
|
|
36326
36328
|
"aria-label": "Text formatting",
|
|
36327
|
-
className: "pointer-events-auto fixed z-200 flex items-center gap-1 rounded-lg border border-
|
|
36329
|
+
className: "pointer-events-auto fixed z-200 flex items-center gap-1 rounded-lg border border-border bg-raised p-1 shadow-[0_8px_24px_rgba(0,0,0,0.55)]",
|
|
36328
36330
|
style: {
|
|
36329
36331
|
left: placement.left,
|
|
36330
36332
|
top: placement.top,
|
|
@@ -36337,14 +36339,14 @@ function InlineTextToolbar({
|
|
|
36337
36339
|
/* @__PURE__ */ jsxs61(
|
|
36338
36340
|
"label",
|
|
36339
36341
|
{
|
|
36340
|
-
className: "group relative flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-
|
|
36342
|
+
className: "group relative flex h-6 w-6 cursor-pointer items-center justify-center rounded-md hover:bg-hover",
|
|
36341
36343
|
title: "Text colour",
|
|
36342
36344
|
children: [
|
|
36343
36345
|
/* @__PURE__ */ jsx88(
|
|
36344
36346
|
"span",
|
|
36345
36347
|
{
|
|
36346
36348
|
"aria-hidden": "true",
|
|
36347
|
-
className: "h-4 w-4 rounded-full border-2 border-
|
|
36349
|
+
className: "h-4 w-4 rounded-full border-2 border-border-strong transition-transform duration-150 group-hover:scale-110 group-active:scale-95",
|
|
36348
36350
|
style: {
|
|
36349
36351
|
background: swatchBackground(placement.colours, styles.color),
|
|
36350
36352
|
backgroundOrigin: "border-box"
|
|
@@ -36426,7 +36428,7 @@ function ToolbarToggle({
|
|
|
36426
36428
|
title: label,
|
|
36427
36429
|
"aria-label": label,
|
|
36428
36430
|
"aria-pressed": on,
|
|
36429
|
-
className: `flex h-6 w-6 items-center justify-center rounded-md text-xs ${on ? "bg-studio-accent/20 text-
|
|
36431
|
+
className: `flex h-6 w-6 items-center justify-center rounded-md text-xs ${on ? "bg-studio-accent/20 text-accent-ink" : "text-text-2 hover:bg-hover"}`,
|
|
36430
36432
|
style: {
|
|
36431
36433
|
fontWeight: bold ? 700 : 400,
|
|
36432
36434
|
fontStyle: italic ? "italic" : "normal",
|
|
@@ -41103,7 +41105,7 @@ function editableAnimationId(animations, kind, sel) {
|
|
|
41103
41105
|
|
|
41104
41106
|
// src/components/editor/MotionPathNode.tsx
|
|
41105
41107
|
import { jsx as jsx93, jsxs as jsxs64 } from "react/jsx-runtime";
|
|
41106
|
-
var
|
|
41108
|
+
var ACCENT = "var(--hf-accent, #3CE6AC)";
|
|
41107
41109
|
function MotionPathNode(props) {
|
|
41108
41110
|
const { cx, cy, r, interactive, removable, grabbing, selected } = props;
|
|
41109
41111
|
const bx = cx + r * 1.8;
|
|
@@ -41123,7 +41125,7 @@ function MotionPathNode(props) {
|
|
|
41123
41125
|
stroke: "#0b0f1a",
|
|
41124
41126
|
strokeWidth: 1.5,
|
|
41125
41127
|
vectorEffect: "non-scaling-stroke",
|
|
41126
|
-
style: { fill:
|
|
41128
|
+
style: { fill: ACCENT }
|
|
41127
41129
|
}
|
|
41128
41130
|
),
|
|
41129
41131
|
interactive && /* @__PURE__ */ jsx93(
|
|
@@ -41158,7 +41160,7 @@ function MotionPathNode(props) {
|
|
|
41158
41160
|
stroke: "#0b0f1a",
|
|
41159
41161
|
strokeWidth: 1,
|
|
41160
41162
|
vectorEffect: "non-scaling-stroke",
|
|
41161
|
-
style: { fill:
|
|
41163
|
+
style: { fill: ACCENT }
|
|
41162
41164
|
}
|
|
41163
41165
|
),
|
|
41164
41166
|
/* @__PURE__ */ jsx93(
|
|
@@ -41484,7 +41486,7 @@ var MotionPathOverlay = memo26(function MotionPathOverlay2({
|
|
|
41484
41486
|
strokeWidth: 1.5,
|
|
41485
41487
|
strokeDasharray: "3 3",
|
|
41486
41488
|
vectorEffect: "non-scaling-stroke",
|
|
41487
|
-
style: { stroke:
|
|
41489
|
+
style: { stroke: ACCENT },
|
|
41488
41490
|
opacity: 0.85
|
|
41489
41491
|
}
|
|
41490
41492
|
)
|
|
@@ -41680,7 +41682,7 @@ var MotionPathOverlay = memo26(function MotionPathOverlay2({
|
|
|
41680
41682
|
{
|
|
41681
41683
|
points,
|
|
41682
41684
|
fill: "none",
|
|
41683
|
-
style: { stroke:
|
|
41685
|
+
style: { stroke: ACCENT },
|
|
41684
41686
|
strokeWidth: 1.5,
|
|
41685
41687
|
strokeDasharray: "5 5",
|
|
41686
41688
|
strokeLinejoin: "round",
|
|
@@ -41703,7 +41705,7 @@ var MotionPathOverlay = memo26(function MotionPathOverlay2({
|
|
|
41703
41705
|
strokeDasharray: "2 2",
|
|
41704
41706
|
vectorEffect: "non-scaling-stroke",
|
|
41705
41707
|
className: "pointer-events-none",
|
|
41706
|
-
style: { stroke:
|
|
41708
|
+
style: { stroke: ACCENT }
|
|
41707
41709
|
}
|
|
41708
41710
|
),
|
|
41709
41711
|
abs.map((p, i) => /* @__PURE__ */ jsx94(
|
|
@@ -41806,7 +41808,7 @@ var SnapToolbar = memo27(function SnapToolbar2() {
|
|
|
41806
41808
|
"button",
|
|
41807
41809
|
{
|
|
41808
41810
|
type: "button",
|
|
41809
|
-
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${motionPathArmed ? "bg-studio-accent/20 text-
|
|
41811
|
+
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${motionPathArmed ? "bg-studio-accent/20 text-accent-ink" : "bg-black/40 text-white/60 hover:bg-black/60 hover:text-white/80"}`,
|
|
41810
41812
|
onClick: () => setMotionPathArmed(!motionPathArmed),
|
|
41811
41813
|
title: motionPathArmed ? "Click the canvas to set the destination" : "Set motion destination",
|
|
41812
41814
|
"aria-label": "Set motion destination",
|
|
@@ -41823,7 +41825,7 @@ var SnapToolbar = memo27(function SnapToolbar2() {
|
|
|
41823
41825
|
"button",
|
|
41824
41826
|
{
|
|
41825
41827
|
type: "button",
|
|
41826
|
-
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${visible ? "bg-studio-accent/20 text-
|
|
41828
|
+
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${visible ? "bg-studio-accent/20 text-accent-ink" : "bg-black/40 text-white/60 hover:bg-black/60 hover:text-white/80"}`,
|
|
41827
41829
|
onClick: toggle,
|
|
41828
41830
|
title: `${label} ${visible ? "on" : "off"}`,
|
|
41829
41831
|
"aria-label": `Toggle ${label.toLowerCase()}`,
|
|
@@ -41837,7 +41839,7 @@ var SnapToolbar = memo27(function SnapToolbar2() {
|
|
|
41837
41839
|
"button",
|
|
41838
41840
|
{
|
|
41839
41841
|
type: "button",
|
|
41840
|
-
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${prefs.snapEnabled ? "bg-studio-accent/20 text-
|
|
41842
|
+
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${prefs.snapEnabled ? "bg-studio-accent/20 text-accent-ink" : "bg-black/40 text-white/60 hover:bg-black/60 hover:text-white/80"}`,
|
|
41841
41843
|
onClick: toggleSnap,
|
|
41842
41844
|
title: prefs.snapEnabled ? "Snap enabled (S)" : "Snap disabled (S)",
|
|
41843
41845
|
"aria-label": "Toggle snap",
|
|
@@ -41850,7 +41852,7 @@ var SnapToolbar = memo27(function SnapToolbar2() {
|
|
|
41850
41852
|
{
|
|
41851
41853
|
ref: gridButtonRef,
|
|
41852
41854
|
type: "button",
|
|
41853
|
-
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${prefs.gridVisible ? "bg-studio-accent/20 text-
|
|
41855
|
+
className: `rounded-md p-1.5 transition-colors active:scale-[0.95] ${prefs.gridVisible ? "bg-studio-accent/20 text-accent-ink" : "bg-black/40 text-white/60 hover:bg-black/60 hover:text-white/80"}`,
|
|
41854
41856
|
onClick: toggleGrid,
|
|
41855
41857
|
onContextMenu: (e) => {
|
|
41856
41858
|
e.preventDefault();
|
|
@@ -41877,7 +41879,7 @@ var SnapToolbar = memo27(function SnapToolbar2() {
|
|
|
41877
41879
|
"div",
|
|
41878
41880
|
{
|
|
41879
41881
|
ref: popoverRef,
|
|
41880
|
-
className: "absolute right-0 top-full mt-1 rounded-lg bg-
|
|
41882
|
+
className: "absolute right-0 top-full mt-1 rounded-lg bg-raised border border-border p-3 shadow-xl min-w-[180px]",
|
|
41881
41883
|
children: [
|
|
41882
41884
|
/* @__PURE__ */ jsxs66("label", { className: "flex items-center justify-between text-xs text-white/80 mb-2", children: [
|
|
41883
41885
|
/* @__PURE__ */ jsx95("span", { children: "Grid spacing" }),
|
|
@@ -42137,7 +42139,7 @@ function PreviewOverlays({
|
|
|
42137
42139
|
{
|
|
42138
42140
|
type: "button",
|
|
42139
42141
|
onClick: enterCaptionMode,
|
|
42140
|
-
className: "pointer-events-auto absolute top-2 left-1/2 -translate-x-1/2 z-60 rounded-full border border-neutral-700 bg-black/60 px-2.5 py-1 text-2xs text-neutral-300 transition-colors hover:border-studio-accent/50 hover:text-
|
|
42142
|
+
className: "pointer-events-auto absolute top-2 left-1/2 -translate-x-1/2 z-60 rounded-full border border-neutral-700 bg-black/60 px-2.5 py-1 text-2xs text-neutral-300 transition-colors hover:border-studio-accent/50 hover:text-accent-ink focus-visible:outline-solid focus-visible:outline-1 focus-visible:outline-studio-accent",
|
|
42141
42143
|
children: "Edit captions"
|
|
42142
42144
|
}
|
|
42143
42145
|
)
|
|
@@ -43771,7 +43773,7 @@ var CaptionTimeline = memo29(function CaptionTimeline2({
|
|
|
43771
43773
|
tabIndex: 0,
|
|
43772
43774
|
"aria-label": `Caption word "${seg.text}"`,
|
|
43773
43775
|
"aria-pressed": isSelected,
|
|
43774
|
-
className: `absolute top-1 bottom-1 rounded flex items-center overflow-hidden cursor-pointer focus-visible:ring-1 focus-visible:ring-
|
|
43776
|
+
className: `absolute top-1 bottom-1 rounded flex items-center overflow-hidden cursor-pointer focus-visible:ring-1 focus-visible:ring-text-0 outline-hidden${isSelected ? " ring-1 ring-text-0/50 z-10" : ""}`,
|
|
43775
43777
|
style: {
|
|
43776
43778
|
left,
|
|
43777
43779
|
width,
|
|
@@ -43796,7 +43798,7 @@ var CaptionTimeline = memo29(function CaptionTimeline2({
|
|
|
43796
43798
|
/* @__PURE__ */ jsx98(
|
|
43797
43799
|
"div",
|
|
43798
43800
|
{
|
|
43799
|
-
className: "absolute top-0 bottom-0 w-px bg-
|
|
43801
|
+
className: "absolute top-0 bottom-0 w-px bg-text-0/70 pointer-events-none z-20",
|
|
43800
43802
|
style: { left: playheadLeft },
|
|
43801
43803
|
"aria-hidden": "true"
|
|
43802
43804
|
}
|
|
@@ -46035,7 +46037,7 @@ function WindowMenu() {
|
|
|
46035
46037
|
onClick: () => togglePanel(id),
|
|
46036
46038
|
className: "flex w-full items-center gap-2 px-3 py-1.5 text-left text-[11px] text-neutral-300 hover:bg-neutral-800",
|
|
46037
46039
|
children: [
|
|
46038
|
-
/* @__PURE__ */ jsx101("span", { className: "w-3 text-
|
|
46040
|
+
/* @__PURE__ */ jsx101("span", { className: "w-3 text-accent-ink", children: openPanels.has(id) ? "\u2713" : "" }),
|
|
46039
46041
|
PANEL_DEFINITIONS[id].title
|
|
46040
46042
|
]
|
|
46041
46043
|
},
|
|
@@ -47103,7 +47105,7 @@ function InspectorHeaderActions({
|
|
|
47103
47105
|
track2("button", "Copy element info");
|
|
47104
47106
|
onCopy();
|
|
47105
47107
|
},
|
|
47106
|
-
className: `flex h-6 w-6 items-center justify-center rounded transition-colors ${copied ? "text-
|
|
47108
|
+
className: `flex h-6 w-6 items-center justify-center rounded transition-colors ${copied ? "text-accent-ink" : "text-neutral-500 hover:bg-neutral-800 hover:text-neutral-300"}`,
|
|
47107
47109
|
title: copied ? "Copied!" : "Copy element info to clipboard",
|
|
47108
47110
|
children: /* @__PURE__ */ jsxs75(
|
|
47109
47111
|
"svg",
|
|
@@ -48138,7 +48140,7 @@ function SegmentedControl({
|
|
|
48138
48140
|
onChange(option.value);
|
|
48139
48141
|
},
|
|
48140
48142
|
"aria-pressed": option.value === value,
|
|
48141
|
-
className: `min-w-0 truncate rounded px-2 py-[5px] text-[11px] font-medium transition-colors disabled:cursor-not-allowed ${option.value === value ? "bg-panel-hover text-
|
|
48143
|
+
className: `min-w-0 truncate rounded px-2 py-[5px] text-[11px] font-medium transition-colors disabled:cursor-not-allowed ${option.value === value ? "bg-panel-hover text-text-0" : "text-panel-text-4 hover:text-panel-text-2"}`,
|
|
48142
48144
|
children: option.label
|
|
48143
48145
|
},
|
|
48144
48146
|
option.value
|
|
@@ -48489,7 +48491,7 @@ function MediaSection({
|
|
|
48489
48491
|
/* @__PURE__ */ jsx110("div", { className: "h-1 overflow-hidden rounded-full bg-panel-border", children: /* @__PURE__ */ jsx110(
|
|
48490
48492
|
"div",
|
|
48491
48493
|
{
|
|
48492
|
-
className: `h-full rounded-full ${removeProgress.status === "failed" ? "bg-
|
|
48494
|
+
className: `h-full rounded-full ${removeProgress.status === "failed" ? "bg-danger-ink" : "bg-studio-accent"}`,
|
|
48493
48495
|
style: { width: `${Math.max(0, Math.min(100, removeProgress.progress))}%` }
|
|
48494
48496
|
}
|
|
48495
48497
|
) })
|
|
@@ -48791,7 +48793,7 @@ function ColorGradingSliderControl({
|
|
|
48791
48793
|
event.stopPropagation();
|
|
48792
48794
|
settings.onClick();
|
|
48793
48795
|
},
|
|
48794
|
-
className: `relative flex h-5 w-5 shrink-0 items-center justify-center rounded transition-colors hover:bg-panel-hover hover:text-panel-text-1 disabled:cursor-not-allowed disabled:opacity-40 ${settings.active ? "text-
|
|
48796
|
+
className: `relative flex h-5 w-5 shrink-0 items-center justify-center rounded transition-colors hover:bg-panel-hover hover:text-panel-text-1 disabled:cursor-not-allowed disabled:opacity-40 ${settings.active ? "text-accent-ink" : "text-panel-text-5"}`,
|
|
48795
48797
|
title: settings.label,
|
|
48796
48798
|
children: [
|
|
48797
48799
|
/* @__PURE__ */ jsx111(Settings, { size: 11 }),
|
|
@@ -49256,7 +49258,7 @@ function ColorGradingControls({
|
|
|
49256
49258
|
}
|
|
49257
49259
|
)
|
|
49258
49260
|
] }),
|
|
49259
|
-
lutImportError && /* @__PURE__ */ jsx112("div", { className: "text-[10px] text-
|
|
49261
|
+
lutImportError && /* @__PURE__ */ jsx112("div", { className: "text-[10px] text-danger-ink", role: "alert", children: lutImportError }),
|
|
49260
49262
|
grading.lut && /* @__PURE__ */ jsxs79("div", { className: "grid gap-2", children: [
|
|
49261
49263
|
selectedProjectLut && /* @__PURE__ */ jsxs79("div", { className: "flex min-w-0 items-start gap-2 text-[10px] leading-4 text-panel-text-3", children: [
|
|
49262
49264
|
/* @__PURE__ */ jsx112("span", { className: "mt-[5px] h-1.5 w-1.5 shrink-0 rounded-full bg-studio-accent" }),
|
|
@@ -50127,7 +50129,7 @@ function useColorGradingController({
|
|
|
50127
50129
|
// src/components/editor/propertyPanelColorGradingSection.tsx
|
|
50128
50130
|
import { jsx as jsx113, jsxs as jsxs80 } from "react/jsx-runtime";
|
|
50129
50131
|
function StatusPill({ status }) {
|
|
50130
|
-
const dotClass = status.state === "active" ? "bg-
|
|
50132
|
+
const dotClass = status.state === "active" ? "bg-accent" : status.state === "pending" ? "bg-warning-ink" : status.state === "unavailable" ? "bg-danger-ink" : "bg-panel-text-5";
|
|
50131
50133
|
return /* @__PURE__ */ jsxs80(
|
|
50132
50134
|
"div",
|
|
50133
50135
|
{
|
|
@@ -50149,16 +50151,16 @@ function HdrMediaWarning({ metadata }) {
|
|
|
50149
50151
|
metadata.color.colorPrimaries,
|
|
50150
50152
|
metadata.color.colorTransfer
|
|
50151
50153
|
].filter(Boolean).join(" \xB7 ");
|
|
50152
|
-
return /* @__PURE__ */ jsxs80("div", { className: "mb-3 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-[11px] leading-4 text-
|
|
50154
|
+
return /* @__PURE__ */ jsxs80("div", { className: "mb-3 rounded-md border border-amber-500/30 bg-amber-500/10 px-3 py-2 text-[11px] leading-4 text-warning-ink", children: [
|
|
50153
50155
|
/* @__PURE__ */ jsxs80("div", { className: "mb-1 flex min-w-0 items-center justify-between gap-2", children: [
|
|
50154
50156
|
/* @__PURE__ */ jsxs80("span", { className: "font-semibold", children: [
|
|
50155
50157
|
metadata.color.label,
|
|
50156
50158
|
" source"
|
|
50157
50159
|
] }),
|
|
50158
|
-
/* @__PURE__ */ jsx113("span", { className: "rounded-sm bg-amber-
|
|
50160
|
+
/* @__PURE__ */ jsx113("span", { className: "rounded-sm bg-amber-500/15 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-warning-ink", children: "SDR preview" })
|
|
50159
50161
|
] }),
|
|
50160
|
-
/* @__PURE__ */ jsx113("p", { className: "text-
|
|
50161
|
-
details && /* @__PURE__ */ jsx113("p", { className: "mt-1 truncate text-[10px] text-
|
|
50162
|
+
/* @__PURE__ */ jsx113("p", { className: "text-text-2", children: "These controls use the current SDR shader preview path. Render may stay HDR-tagged, but this is not true HDR color grading yet." }),
|
|
50163
|
+
details && /* @__PURE__ */ jsx113("p", { className: "mt-1 truncate text-[10px] text-text-muted", children: details })
|
|
50162
50164
|
] });
|
|
50163
50165
|
}
|
|
50164
50166
|
function HoldBeforeButton({
|
|
@@ -50215,7 +50217,7 @@ function HoldBeforeButton({
|
|
|
50215
50217
|
event.preventDefault();
|
|
50216
50218
|
onHoldChange(false);
|
|
50217
50219
|
},
|
|
50218
|
-
className: `flex h-6 w-6 shrink-0 items-center justify-center rounded transition-colors ${active ? "bg-studio-accent text-
|
|
50220
|
+
className: `flex h-6 w-6 shrink-0 items-center justify-center rounded transition-colors ${active ? "bg-studio-accent text-on-accent" : "text-panel-text-4 hover:bg-panel-hover hover:text-panel-text-1"} disabled:cursor-not-allowed disabled:opacity-40`,
|
|
50219
50221
|
title: "Hold to show original",
|
|
50220
50222
|
children: /* @__PURE__ */ jsx113(Compare, { size: 13 })
|
|
50221
50223
|
}
|
|
@@ -51208,7 +51210,7 @@ function FontFamilyField({
|
|
|
51208
51210
|
type: "button",
|
|
51209
51211
|
disabled: disabled || loadingLocalFonts,
|
|
51210
51212
|
onClick: loadBrowserLocalFonts,
|
|
51211
|
-
className: "rounded-lg border border-neutral-700 bg-neutral-900 px-2.5 text-[10px] font-medium text-neutral-400 transition-colors hover:border-neutral-600 hover:text-neutral-100 disabled:cursor-not-allowed disabled:text-
|
|
51213
|
+
className: "rounded-lg border border-neutral-700 bg-neutral-900 px-2.5 text-[10px] font-medium text-neutral-400 transition-colors hover:border-neutral-600 hover:text-neutral-100 disabled:cursor-not-allowed disabled:text-text-off",
|
|
51212
51214
|
children: loadingLocalFonts ? "..." : "Local"
|
|
51213
51215
|
}
|
|
51214
51216
|
),
|
|
@@ -51218,7 +51220,7 @@ function FontFamilyField({
|
|
|
51218
51220
|
type: "button",
|
|
51219
51221
|
disabled: disabled || importingFonts || !onImportFonts,
|
|
51220
51222
|
onClick: () => fontInputRef.current?.click(),
|
|
51221
|
-
className: "rounded-lg border border-neutral-700 bg-neutral-900 px-2.5 text-[10px] font-medium text-neutral-400 transition-colors hover:border-neutral-600 hover:text-neutral-100 disabled:cursor-not-allowed disabled:text-
|
|
51223
|
+
className: "rounded-lg border border-neutral-700 bg-neutral-900 px-2.5 text-[10px] font-medium text-neutral-400 transition-colors hover:border-neutral-600 hover:text-neutral-100 disabled:cursor-not-allowed disabled:text-text-off",
|
|
51222
51224
|
children: importingFonts ? "..." : "Import"
|
|
51223
51225
|
}
|
|
51224
51226
|
),
|
|
@@ -51636,7 +51638,7 @@ function VariablesBindElement({
|
|
|
51636
51638
|
className: `${VARIABLES_INPUT_CLASS} font-mono`
|
|
51637
51639
|
}
|
|
51638
51640
|
),
|
|
51639
|
-
existingDecl && /* @__PURE__ */ jsxs84("p", { className: "text-[9px] leading-snug text-
|
|
51641
|
+
existingDecl && /* @__PURE__ */ jsxs84("p", { className: "text-[9px] leading-snug text-warning-ink", children: [
|
|
51640
51642
|
'"',
|
|
51641
51643
|
trimmedId,
|
|
51642
51644
|
'" already exists. This element will use its current value',
|
|
@@ -51827,7 +51829,7 @@ function PromotableControl({
|
|
|
51827
51829
|
bound && /* @__PURE__ */ jsxs85(
|
|
51828
51830
|
"span",
|
|
51829
51831
|
{
|
|
51830
|
-
className: "pointer-events-none absolute -top-2 right-1.5 z-10 inline-flex max-w-[60%] items-center gap-1 truncate rounded-sm bg-studio-accent/20 px-1 py-px font-mono text-[8px] font-medium text-
|
|
51832
|
+
className: "pointer-events-none absolute -top-2 right-1.5 z-10 inline-flex max-w-[60%] items-center gap-1 truncate rounded-sm bg-studio-accent/20 px-1 py-px font-mono text-[8px] font-medium text-accent-ink",
|
|
51831
51833
|
title: `Bound to variable "${promote.boundId}"`,
|
|
51832
51834
|
children: [
|
|
51833
51835
|
"\u25C6 ",
|
|
@@ -51844,7 +51846,7 @@ function PromotableControl({
|
|
|
51844
51846
|
e.stopPropagation();
|
|
51845
51847
|
promote.promote();
|
|
51846
51848
|
},
|
|
51847
|
-
className: "absolute -top-2 right-1.5 z-10 inline-flex items-center gap-1 rounded-sm bg-
|
|
51849
|
+
className: "absolute -top-2 right-1.5 z-10 inline-flex items-center gap-1 rounded-sm bg-raised/80 px-1 py-px font-mono text-[8px] font-medium text-neutral-400 opacity-70 transition-colors hover:bg-studio-accent/20 hover:text-accent-ink hover:opacity-100",
|
|
51848
51850
|
children: "\u25C7 var"
|
|
51849
51851
|
}
|
|
51850
51852
|
)
|
|
@@ -52304,7 +52306,7 @@ function ImageFillField({
|
|
|
52304
52306
|
type: "button",
|
|
52305
52307
|
disabled: disabled || uploading,
|
|
52306
52308
|
onClick: () => fileInputRef.current?.click(),
|
|
52307
|
-
className: `inline-flex h-7 max-w-full items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors ${disabled || uploading ? "cursor-not-allowed text-neutral-600" : "cursor-pointer hover:border-neutral-600 hover:text-
|
|
52309
|
+
className: `inline-flex h-7 max-w-full items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors ${disabled || uploading ? "cursor-not-allowed text-neutral-600" : "cursor-pointer hover:border-neutral-600 hover:text-text-0"}`,
|
|
52308
52310
|
children: [
|
|
52309
52311
|
/* @__PURE__ */ jsx121(Plus, { size: 12, className: "shrink-0" }),
|
|
52310
52312
|
/* @__PURE__ */ jsx121("span", { className: "truncate", children: uploading ? "Uploading\u2026" : "Upload image" })
|
|
@@ -52327,7 +52329,7 @@ function ImageFillField({
|
|
|
52327
52329
|
}
|
|
52328
52330
|
)
|
|
52329
52331
|
] }),
|
|
52330
|
-
uploadError && /* @__PURE__ */ jsx121("div", { className: "text-[10px] text-
|
|
52332
|
+
uploadError && /* @__PURE__ */ jsx121("div", { className: "text-[10px] text-danger-ink", role: "alert", children: uploadError }),
|
|
52331
52333
|
imageAssets.length > 0 ? /* @__PURE__ */ jsxs87("div", { className: "space-y-3", children: [
|
|
52332
52334
|
selectedAsset && /* @__PURE__ */ jsx121("div", { className: "overflow-hidden rounded-xl border border-neutral-800 bg-neutral-900/80", children: /* @__PURE__ */ jsx121(
|
|
52333
52335
|
"img",
|
|
@@ -52491,7 +52493,7 @@ function GradientField({
|
|
|
52491
52493
|
track2("toggle", "Repeat gradient");
|
|
52492
52494
|
patch({ repeating: e.target.checked });
|
|
52493
52495
|
},
|
|
52494
|
-
className: "h-4 w-4 rounded-sm border-neutral-700 bg-neutral-950 text-
|
|
52496
|
+
className: "h-4 w-4 rounded-sm border-neutral-700 bg-neutral-950 text-accent-ink focus:ring-panel-accent"
|
|
52495
52497
|
}
|
|
52496
52498
|
),
|
|
52497
52499
|
"Repeat"
|
|
@@ -52511,7 +52513,7 @@ function GradientField({
|
|
|
52511
52513
|
}))
|
|
52512
52514
|
});
|
|
52513
52515
|
},
|
|
52514
|
-
className: "inline-flex h-7 items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-
|
|
52516
|
+
className: "inline-flex h-7 items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-text-0 disabled:cursor-not-allowed disabled:text-neutral-600",
|
|
52515
52517
|
children: [
|
|
52516
52518
|
/* @__PURE__ */ jsx121(ReverseGradientIcon, { size: 16 }),
|
|
52517
52519
|
"Reverse"
|
|
@@ -52605,7 +52607,7 @@ function GradientField({
|
|
|
52605
52607
|
disabled: disabled || parsed.stops.length >= 6,
|
|
52606
52608
|
onClick: () => addStop(),
|
|
52607
52609
|
title: parsed.stops.length >= 6 ? "Maximum 6 stops" : "Add a gradient stop",
|
|
52608
|
-
className: "inline-flex h-7 items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-
|
|
52610
|
+
className: "inline-flex h-7 items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-text-0 active:scale-[0.98] disabled:cursor-not-allowed disabled:text-neutral-600",
|
|
52609
52611
|
children: [
|
|
52610
52612
|
/* @__PURE__ */ jsx121(Plus, { size: 12 }),
|
|
52611
52613
|
"Add stop"
|
|
@@ -52644,7 +52646,7 @@ function GradientField({
|
|
|
52644
52646
|
type: "button",
|
|
52645
52647
|
disabled: disabled || parsed.stops.length <= 2,
|
|
52646
52648
|
onClick: () => removeStop(index),
|
|
52647
|
-
className: "mt-[22px] flex h-10 items-center justify-center rounded-lg border border-neutral-700 bg-neutral-950 text-neutral-400 transition-colors hover:border-neutral-600 hover:text-
|
|
52649
|
+
className: "mt-[22px] flex h-10 items-center justify-center rounded-lg border border-neutral-700 bg-neutral-950 text-neutral-400 transition-colors hover:border-neutral-600 hover:text-text-0 disabled:cursor-not-allowed disabled:text-text-off",
|
|
52648
52650
|
"aria-label": `Remove stop ${index + 1}`,
|
|
52649
52651
|
children: /* @__PURE__ */ jsx121(X, { size: 12 })
|
|
52650
52652
|
}
|
|
@@ -52703,6 +52705,7 @@ function BorderRadiusEditor({
|
|
|
52703
52705
|
setLinked((l) => !l);
|
|
52704
52706
|
}, [linked, uniform, tl, onCommit]);
|
|
52705
52707
|
const path = buildRoundedRectPath(PREVIEW_W, PREVIEW_H, sTL, sTR, sBR, sBL);
|
|
52708
|
+
const dotFill = linked ? "fill-[light-dark(oklch(0.5_0.2_260),#3b82f6)]" : "fill-[light-dark(oklch(0.55_0.2_294),#a78bfa)]";
|
|
52706
52709
|
return /* @__PURE__ */ jsxs88("div", { className: "space-y-3", children: [
|
|
52707
52710
|
/* @__PURE__ */ jsxs88("div", { className: "flex items-center gap-3", children: [
|
|
52708
52711
|
/* @__PURE__ */ jsxs88(
|
|
@@ -52713,27 +52716,11 @@ function BorderRadiusEditor({
|
|
|
52713
52716
|
viewBox: `0 0 ${PREVIEW_W} ${PREVIEW_H}`,
|
|
52714
52717
|
className: "shrink-0",
|
|
52715
52718
|
children: [
|
|
52716
|
-
/* @__PURE__ */ jsx122(
|
|
52717
|
-
|
|
52718
|
-
|
|
52719
|
-
|
|
52720
|
-
|
|
52721
|
-
stroke: "rgba(255,255,255,0.24)",
|
|
52722
|
-
strokeWidth: 1.5
|
|
52723
|
-
}
|
|
52724
|
-
),
|
|
52725
|
-
/* @__PURE__ */ jsx122("circle", { cx: sTL, cy: sTL, r: 3, fill: linked ? "#3b82f6" : "#a78bfa" }),
|
|
52726
|
-
/* @__PURE__ */ jsx122("circle", { cx: PREVIEW_W - sTR, cy: sTR, r: 3, fill: linked ? "#3b82f6" : "#a78bfa" }),
|
|
52727
|
-
/* @__PURE__ */ jsx122(
|
|
52728
|
-
"circle",
|
|
52729
|
-
{
|
|
52730
|
-
cx: PREVIEW_W - sBR,
|
|
52731
|
-
cy: PREVIEW_H - sBR,
|
|
52732
|
-
r: 3,
|
|
52733
|
-
fill: linked ? "#3b82f6" : "#a78bfa"
|
|
52734
|
-
}
|
|
52735
|
-
),
|
|
52736
|
-
/* @__PURE__ */ jsx122("circle", { cx: sBL, cy: PREVIEW_H - sBL, r: 3, fill: linked ? "#3b82f6" : "#a78bfa" })
|
|
52719
|
+
/* @__PURE__ */ jsx122("path", { d: path, className: "fill-text-0/[0.06] stroke-text-0/25", strokeWidth: 1.5 }),
|
|
52720
|
+
/* @__PURE__ */ jsx122("circle", { cx: sTL, cy: sTL, r: 3, className: dotFill }),
|
|
52721
|
+
/* @__PURE__ */ jsx122("circle", { cx: PREVIEW_W - sTR, cy: sTR, r: 3, className: dotFill }),
|
|
52722
|
+
/* @__PURE__ */ jsx122("circle", { cx: PREVIEW_W - sBR, cy: PREVIEW_H - sBR, r: 3, className: dotFill }),
|
|
52723
|
+
/* @__PURE__ */ jsx122("circle", { cx: sBL, cy: PREVIEW_H - sBL, r: 3, className: dotFill })
|
|
52737
52724
|
]
|
|
52738
52725
|
}
|
|
52739
52726
|
),
|
|
@@ -53555,7 +53542,7 @@ function TextFieldEditor({
|
|
|
53555
53542
|
track2("button", "Remove text field");
|
|
53556
53543
|
onRemoveTextField(field.key);
|
|
53557
53544
|
},
|
|
53558
|
-
className: "inline-flex h-7 shrink-0 items-center rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-
|
|
53545
|
+
className: "inline-flex h-7 shrink-0 items-center rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-text-0",
|
|
53559
53546
|
children: "Remove"
|
|
53560
53547
|
}
|
|
53561
53548
|
)
|
|
@@ -53694,7 +53681,7 @@ function TextSection({
|
|
|
53694
53681
|
if (nextKey) setActiveTextFieldKey(nextKey);
|
|
53695
53682
|
});
|
|
53696
53683
|
},
|
|
53697
|
-
className: "inline-flex h-7 max-w-full items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-
|
|
53684
|
+
className: "inline-flex h-7 max-w-full items-center gap-1.5 rounded-lg border border-neutral-700 bg-neutral-950 px-2.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-text-0",
|
|
53698
53685
|
children: [
|
|
53699
53686
|
/* @__PURE__ */ jsx124(Plus, { size: 12, className: "shrink-0" }),
|
|
53700
53687
|
/* @__PURE__ */ jsx124("span", { className: "truncate", children: "Add text" })
|
|
@@ -53942,7 +53929,7 @@ function ComputedTweenNotice({
|
|
|
53942
53929
|
{
|
|
53943
53930
|
type: "button",
|
|
53944
53931
|
onClick: onUnroll,
|
|
53945
|
-
className: "shrink-0 rounded-sm px-1.5 py-0.5 text-[9px] font-medium text-
|
|
53932
|
+
className: "shrink-0 rounded-sm px-1.5 py-0.5 text-[9px] font-medium text-accent-ink hover:bg-neutral-800",
|
|
53946
53933
|
title: "Rewrite the helper/loop into explicit tweens so this keyframe edits directly",
|
|
53947
53934
|
children: "Unroll to edit"
|
|
53948
53935
|
}
|
|
@@ -54103,7 +54090,7 @@ function RemoveButton({ onClick, title }) {
|
|
|
54103
54090
|
{
|
|
54104
54091
|
type: "button",
|
|
54105
54092
|
onClick,
|
|
54106
|
-
className: "relative shrink-0 rounded-sm p-1.5 text-neutral-600 transition-colors hover:bg-neutral-800 hover:text-
|
|
54093
|
+
className: "relative shrink-0 rounded-sm p-1.5 text-neutral-600 transition-colors hover:bg-neutral-800 hover:text-danger-ink active:scale-[0.95]",
|
|
54107
54094
|
title,
|
|
54108
54095
|
"aria-label": title,
|
|
54109
54096
|
children: /* @__PURE__ */ jsx128(
|
|
@@ -54390,7 +54377,7 @@ var AnimationCard = memo34(function AnimationCard2({
|
|
|
54390
54377
|
/* @__PURE__ */ jsx129(
|
|
54391
54378
|
"span",
|
|
54392
54379
|
{
|
|
54393
|
-
className: "rounded-sm bg-panel-accent/10 px-1.5 py-0.5 text-[10px] font-semibold text-
|
|
54380
|
+
className: "rounded-sm bg-panel-accent/10 px-1.5 py-0.5 text-[10px] font-semibold text-accent-ink",
|
|
54394
54381
|
title: METHOD_TOOLTIPS[animation.method],
|
|
54395
54382
|
children: methodLabel
|
|
54396
54383
|
}
|
|
@@ -54546,7 +54533,7 @@ var AnimationCard = memo34(function AnimationCard2({
|
|
|
54546
54533
|
)
|
|
54547
54534
|
] }) }),
|
|
54548
54535
|
animation.method === "fromTo" && /* @__PURE__ */ jsxs95("div", { className: "space-y-1", children: [
|
|
54549
|
-
/* @__PURE__ */ jsx129("p", { className: "text-[9px] font-semibold uppercase tracking-wider text-
|
|
54536
|
+
/* @__PURE__ */ jsx129("p", { className: "text-[9px] font-semibold uppercase tracking-wider text-warning-ink", children: "From" }),
|
|
54550
54537
|
/* @__PURE__ */ jsx129("div", { className: "space-y-1.5", children: Object.entries(animation.fromProperties ?? {}).map(([prop, val]) => /* @__PURE__ */ jsx129(
|
|
54551
54538
|
PropertyRow,
|
|
54552
54539
|
{
|
|
@@ -54568,11 +54555,11 @@ var AnimationCard = memo34(function AnimationCard2({
|
|
|
54568
54555
|
onAdd: (prop) => onAddFromProperty?.(animation.id, prop),
|
|
54569
54556
|
onOpen: () => setAddingFromProp(true),
|
|
54570
54557
|
onClose: () => setAddingFromProp(false),
|
|
54571
|
-
buttonClassName: "text-[11px] font-medium text-
|
|
54558
|
+
buttonClassName: "text-[11px] font-medium text-warning-ink transition-colors hover:text-text-0"
|
|
54572
54559
|
}
|
|
54573
54560
|
) })
|
|
54574
54561
|
] }),
|
|
54575
|
-
animation.method === "fromTo" && Object.keys(animation.properties).length > 0 && /* @__PURE__ */ jsx129("p", { className: "text-[9px] font-semibold uppercase tracking-wider text-
|
|
54562
|
+
animation.method === "fromTo" && Object.keys(animation.properties).length > 0 && /* @__PURE__ */ jsx129("p", { className: "text-[9px] font-semibold uppercase tracking-wider text-accent-ink", children: "To" }),
|
|
54576
54563
|
Object.keys(animation.properties).length > 0 && /* @__PURE__ */ jsx129("div", { className: "space-y-1.5", children: Object.entries(animation.properties).map(([prop, val]) => /* @__PURE__ */ jsx129(
|
|
54577
54564
|
PropertyRow,
|
|
54578
54565
|
{
|
|
@@ -54626,7 +54613,7 @@ var AnimationCard = memo34(function AnimationCard2({
|
|
|
54626
54613
|
{
|
|
54627
54614
|
type: "button",
|
|
54628
54615
|
onClick: () => onDeleteAnimation(animation.id),
|
|
54629
|
-
className: "ml-auto text-[11px] font-medium text-
|
|
54616
|
+
className: "ml-auto text-[11px] font-medium rounded-sm text-danger-ink transition-colors hover:bg-danger/15",
|
|
54630
54617
|
title: "Remove this animation",
|
|
54631
54618
|
children: "Remove"
|
|
54632
54619
|
}
|
|
@@ -54642,7 +54629,7 @@ var AnimationCard = memo34(function AnimationCard2({
|
|
|
54642
54629
|
import { jsx as jsx130, jsxs as jsxs96 } from "react/jsx-runtime";
|
|
54643
54630
|
var STYLES = {
|
|
54644
54631
|
classic: {
|
|
54645
|
-
method: "rounded-lg border border-neutral-700 bg-neutral-900 px-2.5 py-1.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-
|
|
54632
|
+
method: "rounded-lg border border-neutral-700 bg-neutral-900 px-2.5 py-1.5 text-[11px] font-medium text-neutral-300 transition-colors hover:border-neutral-600 hover:text-text-0",
|
|
54646
54633
|
cancel: "px-1.5 text-[11px] text-neutral-500 hover:text-neutral-300",
|
|
54647
54634
|
trigger: "text-[11px] font-medium text-neutral-400 transition-colors hover:text-neutral-200"
|
|
54648
54635
|
},
|
|
@@ -54841,8 +54828,8 @@ var GsapAnimationSection = memo35(function GsapAnimationSection2({
|
|
|
54841
54828
|
...callbacks
|
|
54842
54829
|
}) {
|
|
54843
54830
|
return /* @__PURE__ */ jsxs98(Section, { title: "Animation", icon: /* @__PURE__ */ jsx132(Film, { size: 15 }), children: [
|
|
54844
|
-
multipleTimelines && /* @__PURE__ */ jsx132("p", { className: "mb-2 rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-
|
|
54845
|
-
unsupportedTimelinePattern && /* @__PURE__ */ jsx132("p", { className: "mb-2 rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-
|
|
54831
|
+
multipleTimelines && /* @__PURE__ */ jsx132("p", { className: "mb-2 rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-warning-ink", children: "This file has multiple GSAP timelines. Animation editing is disabled to prevent data loss \u2014 consolidate into a single timeline to enable editing." }),
|
|
54832
|
+
unsupportedTimelinePattern && /* @__PURE__ */ jsx132("p", { className: "mb-2 rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-warning-ink", children: `This timeline uses a computed key (window.__timelines[variable]) the editor can't resolve statically. Use a string-literal key (window.__timelines["id"]) or a variable declaration (const tl = gsap.timeline()) to enable editing.` }),
|
|
54846
54833
|
multipleTimelines || unsupportedTimelinePattern ? null : /* @__PURE__ */ jsx132(
|
|
54847
54834
|
GsapAnimationList,
|
|
54848
54835
|
{
|
|
@@ -55184,7 +55171,7 @@ function Transform3DCube({
|
|
|
55184
55171
|
title: keyframed ? "3D transform is keyframed \u2014 click a field diamond to add keyframes" : "Keyframe the 3D transform (animate it over time)",
|
|
55185
55172
|
"aria-label": "Keyframe 3D transform",
|
|
55186
55173
|
"aria-pressed": keyframed,
|
|
55187
|
-
className: `absolute left-1.5 top-1.5 rounded p-0.5 hover:bg-neutral-800 ${keyframed ? "text-
|
|
55174
|
+
className: `absolute left-1.5 top-1.5 rounded p-0.5 hover:bg-neutral-800 ${keyframed ? "text-accent-ink" : "text-neutral-500 hover:text-neutral-200"}`,
|
|
55188
55175
|
children: /* @__PURE__ */ jsx133(
|
|
55189
55176
|
"svg",
|
|
55190
55177
|
{
|
|
@@ -55544,7 +55531,7 @@ import { Eye as Eye4, EyeSlash as EyeSlash3 } from "@phosphor-icons/react";
|
|
|
55544
55531
|
import { jsx as jsx135, jsxs as jsxs101 } from "react/jsx-runtime";
|
|
55545
55532
|
var ICON_BY_KIND = { text: Type, media: Film, other: Square };
|
|
55546
55533
|
var ICON_COLOR_BY_KIND = {
|
|
55547
|
-
text: "text-
|
|
55534
|
+
text: "text-accent-ink",
|
|
55548
55535
|
media: "text-panel-media",
|
|
55549
55536
|
other: "text-panel-container"
|
|
55550
55537
|
};
|
|
@@ -55627,7 +55614,7 @@ function PropertyPanelFlatHeader({
|
|
|
55627
55614
|
track2("button", "Copy element info");
|
|
55628
55615
|
onCopy();
|
|
55629
55616
|
},
|
|
55630
|
-
className: copied ? "text-
|
|
55617
|
+
className: copied ? "text-accent-ink" : void 0,
|
|
55631
55618
|
children: /* @__PURE__ */ jsx135(ClipboardList, { size: 13 })
|
|
55632
55619
|
}
|
|
55633
55620
|
),
|
|
@@ -55685,7 +55672,7 @@ function PropertyPanelFlatFooter({
|
|
|
55685
55672
|
height: "13",
|
|
55686
55673
|
viewBox: "0 0 16 16",
|
|
55687
55674
|
fill: "currentColor",
|
|
55688
|
-
className: "text-
|
|
55675
|
+
className: "text-accent-ink",
|
|
55689
55676
|
children: /* @__PURE__ */ jsx136("path", { d: "M8 1l1.4 4.6L14 7l-4.6 1.4L8 13l-1.4-4.6L2 7l4.6-1.4z" })
|
|
55690
55677
|
}
|
|
55691
55678
|
),
|
|
@@ -55705,7 +55692,7 @@ function PropertyPanelFlatFooter({
|
|
|
55705
55692
|
track2("button", "Gesture recording");
|
|
55706
55693
|
onToggleRecording();
|
|
55707
55694
|
},
|
|
55708
|
-
className: recording ? "text-
|
|
55695
|
+
className: recording ? "text-danger-ink animate-pulse" : "text-danger-ink",
|
|
55709
55696
|
children: /* @__PURE__ */ jsx136("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "currentColor", children: recording ? /* @__PURE__ */ jsx136("rect", { x: "2", y: "2", width: "10", height: "10", rx: "1.5" }) : /* @__PURE__ */ jsx136("circle", { cx: "7", cy: "7", r: "6" }) })
|
|
55710
55697
|
}
|
|
55711
55698
|
)
|
|
@@ -55778,7 +55765,7 @@ function FlatSliderReadout({
|
|
|
55778
55765
|
e.stopPropagation();
|
|
55779
55766
|
},
|
|
55780
55767
|
onBlur: () => commit(false),
|
|
55781
|
-
className: `w-11 shrink-0 rounded-[3px] border bg-panel-surface px-1 text-right font-mono text-[10px] text-panel-text-0 outline-none ${invalid ? "border-
|
|
55768
|
+
className: `w-11 shrink-0 rounded-[3px] border bg-panel-surface px-1 text-right font-mono text-[10px] text-panel-text-0 outline-none ${invalid ? "border-dashed border-danger-ink" : "border-panel-accent"}`
|
|
55782
55769
|
}
|
|
55783
55770
|
);
|
|
55784
55771
|
}
|
|
@@ -55816,7 +55803,7 @@ var VALUE_TIER_LABEL_CLASS = {
|
|
|
55816
55803
|
var VALUE_TIER_VALUE_CLASS = {
|
|
55817
55804
|
default: "text-panel-text-3",
|
|
55818
55805
|
explicitDefault: "text-panel-text-0",
|
|
55819
|
-
explicitCustom: "text-
|
|
55806
|
+
explicitCustom: "text-accent-ink"
|
|
55820
55807
|
};
|
|
55821
55808
|
|
|
55822
55809
|
// src/components/editor/propertyPanelFlatSelectRow.tsx
|
|
@@ -56243,7 +56230,7 @@ function FlatSlider({
|
|
|
56243
56230
|
"div",
|
|
56244
56231
|
{
|
|
56245
56232
|
"data-flat-slider-knob": "true",
|
|
56246
|
-
className: `absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full ${tier === "explicitCustom" ? "h-2 w-2 bg-
|
|
56233
|
+
className: `absolute top-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full ${tier === "explicitCustom" ? "h-2 w-2 bg-text-0" : "h-[7px] w-[7px] bg-panel-text-4"}`,
|
|
56247
56234
|
style: { left: `${clampedPct}%` }
|
|
56248
56235
|
}
|
|
56249
56236
|
)
|
|
@@ -57645,8 +57632,8 @@ function FlatMotionSection({
|
|
|
57645
57632
|
}
|
|
57646
57633
|
),
|
|
57647
57634
|
showEffects && /* @__PURE__ */ jsxs110(Fragment41, { children: [
|
|
57648
|
-
multipleTimelines && /* @__PURE__ */ jsx146("p", { className: "rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-
|
|
57649
|
-
unsupportedTimelinePattern && /* @__PURE__ */ jsx146("p", { className: "rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-
|
|
57635
|
+
multipleTimelines && /* @__PURE__ */ jsx146("p", { className: "rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-warning-ink", children: "This file has multiple GSAP timelines. Animation editing is disabled to prevent data loss \u2014 consolidate into a single timeline to enable editing." }),
|
|
57636
|
+
unsupportedTimelinePattern && /* @__PURE__ */ jsx146("p", { className: "rounded-lg bg-amber-500/10 px-3 py-2 text-[11px] leading-relaxed text-warning-ink", children: "This timeline uses a computed key the editor can't resolve statically." }),
|
|
57650
57637
|
!multipleTimelines && !unsupportedTimelinePattern && /* @__PURE__ */ jsx146(
|
|
57651
57638
|
GsapAnimationList,
|
|
57652
57639
|
{
|
|
@@ -57802,7 +57789,7 @@ function AutomationToggle({
|
|
|
57802
57789
|
"button",
|
|
57803
57790
|
{
|
|
57804
57791
|
type: "button",
|
|
57805
|
-
className: `hf-fx-automate w-[16px] shrink-0 rounded-[3px] border font-mono text-[9px] leading-none ${automated ? "border-panel-accent text-
|
|
57792
|
+
className: `hf-fx-automate w-[16px] shrink-0 rounded-[3px] border font-mono text-[9px] leading-none ${automated ? "border-panel-accent text-accent-ink" : "border-panel-border-input text-panel-text-2 hover:text-panel-text-0"}`,
|
|
57806
57793
|
"aria-pressed": automated,
|
|
57807
57794
|
"aria-label": automated ? `Remove ${label} automation` : `Automate ${label}`,
|
|
57808
57795
|
onClick: () => automated ? onRemoveAutomation?.(paramKey) : onAutomate?.(paramKey),
|
|
@@ -57883,7 +57870,7 @@ function FxParamRow({
|
|
|
57883
57870
|
/* @__PURE__ */ jsx147(
|
|
57884
57871
|
"span",
|
|
57885
57872
|
{
|
|
57886
|
-
className: `hf-fx-label w-[86px] shrink-0 wrap-break-word text-[10px] leading-tight ${automated ? "text-
|
|
57873
|
+
className: `hf-fx-label w-[86px] shrink-0 wrap-break-word text-[10px] leading-tight ${automated ? "text-accent-ink" : "text-panel-text-2"}`,
|
|
57887
57874
|
children: param.label
|
|
57888
57875
|
}
|
|
57889
57876
|
),
|
|
@@ -58243,7 +58230,7 @@ function FxCarveMember({
|
|
|
58243
58230
|
children: value
|
|
58244
58231
|
}
|
|
58245
58232
|
),
|
|
58246
|
-
automated ? /* @__PURE__ */ jsx148("span", { className: "text-
|
|
58233
|
+
automated ? /* @__PURE__ */ jsx148("span", { className: "text-accent-ink", children: "A" }) : null
|
|
58247
58234
|
]
|
|
58248
58235
|
},
|
|
58249
58236
|
param.key
|
|
@@ -58558,7 +58545,7 @@ function Fader2({
|
|
|
58558
58545
|
/* @__PURE__ */ jsx149(
|
|
58559
58546
|
"span",
|
|
58560
58547
|
{
|
|
58561
|
-
className: `hf-fx-eq-value font-mono text-[9px] tabular-nums ${moved ? "text-
|
|
58548
|
+
className: `hf-fx-eq-value font-mono text-[9px] tabular-nums ${moved ? "text-accent-ink" : "text-panel-text-2"}`,
|
|
58562
58549
|
children: moved ? shown(value) : "0"
|
|
58563
58550
|
}
|
|
58564
58551
|
)
|
|
@@ -58604,7 +58591,7 @@ function FxEqModule({
|
|
|
58604
58591
|
"button",
|
|
58605
58592
|
{
|
|
58606
58593
|
type: "button",
|
|
58607
|
-
className: "hf-fx-remove px-1 text-[11px] text-panel-text-2 hover:text-
|
|
58594
|
+
className: "hf-fx-remove px-1 text-[11px] text-panel-text-2 hover:text-danger-ink",
|
|
58608
58595
|
"aria-label": "Remove Tone",
|
|
58609
58596
|
disabled,
|
|
58610
58597
|
onClick: onRemove,
|
|
@@ -59039,7 +59026,7 @@ function FxNodeHeader({
|
|
|
59039
59026
|
"button",
|
|
59040
59027
|
{
|
|
59041
59028
|
type: "button",
|
|
59042
|
-
className: "hf-fx-remove px-1 font-mono text-[11px] text-panel-text-2 hover:text-
|
|
59029
|
+
className: "hf-fx-remove px-1 font-mono text-[11px] text-panel-text-2 hover:text-danger-ink disabled:opacity-40",
|
|
59043
59030
|
title: "Remove",
|
|
59044
59031
|
disabled,
|
|
59045
59032
|
onClick: onRemove,
|
|
@@ -59263,7 +59250,7 @@ function FxPresetRun({
|
|
|
59263
59250
|
"button",
|
|
59264
59251
|
{
|
|
59265
59252
|
type: "button",
|
|
59266
|
-
className: "hf-fx-preset-run-remove px-1 font-mono text-[11px] text-panel-text-2 hover:text-
|
|
59253
|
+
className: "hf-fx-preset-run-remove px-1 font-mono text-[11px] text-panel-text-2 hover:text-danger-ink disabled:opacity-40",
|
|
59267
59254
|
title: `Remove ${preset.label}`,
|
|
59268
59255
|
disabled,
|
|
59269
59256
|
onClick: onRemoveRun,
|
|
@@ -60922,7 +60909,7 @@ function FlatMediaSection({
|
|
|
60922
60909
|
"data-flat-media-remove-bg": "true",
|
|
60923
60910
|
disabled: !canRemoveBackground || removeBusy,
|
|
60924
60911
|
onClick: () => void runBackgroundRemoval(),
|
|
60925
|
-
className: "flex items-center gap-1 text-[10px] font-medium text-
|
|
60912
|
+
className: "flex items-center gap-1 text-[10px] font-medium text-accent-ink disabled:cursor-not-allowed disabled:opacity-50",
|
|
60926
60913
|
title: canRemoveBackground ? "Remove background and save a transparent asset" : "Select a project-local image or video asset",
|
|
60927
60914
|
children: removeBusy ? "Working" : "Remove BG"
|
|
60928
60915
|
}
|
|
@@ -60950,7 +60937,7 @@ function FlatMediaSection({
|
|
|
60950
60937
|
/* @__PURE__ */ jsx160("div", { className: "h-1 overflow-hidden rounded-full bg-panel-hover", children: /* @__PURE__ */ jsx160(
|
|
60951
60938
|
"div",
|
|
60952
60939
|
{
|
|
60953
|
-
className: `h-full rounded-full ${removeProgress.status === "failed" ? "bg-
|
|
60940
|
+
className: `h-full rounded-full ${removeProgress.status === "failed" ? "bg-danger-ink" : "bg-panel-accent"}`,
|
|
60954
60941
|
style: { width: `${Math.max(0, Math.min(100, removeProgress.progress))}%` }
|
|
60955
60942
|
}
|
|
60956
60943
|
) })
|
|
@@ -61574,7 +61561,7 @@ function CurveGraph({
|
|
|
61574
61561
|
onSettle();
|
|
61575
61562
|
}
|
|
61576
61563
|
},
|
|
61577
|
-
className: "mx-auto aspect-square w-full max-w-[200px] touch-none rounded-sm border border-panel-border-input bg-
|
|
61564
|
+
className: "mx-auto aspect-square w-full max-w-[200px] touch-none rounded-sm scheme-dark border border-panel-border-input bg-bg-0 outline-hidden focus:ring-1 focus:ring-inset focus:ring-panel-accent",
|
|
61578
61565
|
children: [
|
|
61579
61566
|
/* @__PURE__ */ jsx161("defs", { children: /* @__PURE__ */ jsxs123("linearGradient", { id: `hf-hue-axis-${tab.key}`, children: [
|
|
61580
61567
|
/* @__PURE__ */ jsx161("stop", { offset: "0%", stopColor: "#f33" }),
|
|
@@ -61585,7 +61572,7 @@ function CurveGraph({
|
|
|
61585
61572
|
/* @__PURE__ */ jsx161("stop", { offset: "83.3%", stopColor: "#f3f" }),
|
|
61586
61573
|
/* @__PURE__ */ jsx161("stop", { offset: "100%", stopColor: "#f33" })
|
|
61587
61574
|
] }) }),
|
|
61588
|
-
[0.25, 0.5, 0.75].map((ratio) => /* @__PURE__ */ jsxs123("g", {
|
|
61575
|
+
[0.25, 0.5, 0.75].map((ratio) => /* @__PURE__ */ jsxs123("g", { className: "stroke-text-0/10", strokeWidth: "0.5", children: [
|
|
61589
61576
|
/* @__PURE__ */ jsx161(
|
|
61590
61577
|
"line",
|
|
61591
61578
|
{
|
|
@@ -62490,14 +62477,14 @@ function PropertyPanelColorSecondary({
|
|
|
62490
62477
|
setSampling(false);
|
|
62491
62478
|
}
|
|
62492
62479
|
},
|
|
62493
|
-
className: "flex min-h-7 items-center gap-1.5 text-[10px] font-medium text-
|
|
62480
|
+
className: "flex min-h-7 items-center gap-1.5 text-[10px] font-medium text-accent-ink hover:text-accent-ink/80 disabled:opacity-50",
|
|
62494
62481
|
children: [
|
|
62495
62482
|
/* @__PURE__ */ jsx165(Eyedropper, { size: 12 }),
|
|
62496
62483
|
sampling ? "Capturing frame" : "Sample color from frame"
|
|
62497
62484
|
]
|
|
62498
62485
|
}
|
|
62499
62486
|
),
|
|
62500
|
-
captureError && /* @__PURE__ */ jsx165("p", { role: "alert", className: "text-[9px] leading-4 text-
|
|
62487
|
+
captureError && /* @__PURE__ */ jsx165("p", { role: "alert", className: "text-[9px] leading-4 text-danger-ink", children: captureError }),
|
|
62501
62488
|
sampleFrame && samplePixels && /* @__PURE__ */ jsxs127("div", { className: "space-y-1", children: [
|
|
62502
62489
|
/* @__PURE__ */ jsxs127("div", { className: "flex gap-2 text-[9px]", children: [
|
|
62503
62490
|
/* @__PURE__ */ jsx165(
|
|
@@ -62506,7 +62493,7 @@ function PropertyPanelColorSecondary({
|
|
|
62506
62493
|
type: "button",
|
|
62507
62494
|
"aria-pressed": !showMatte,
|
|
62508
62495
|
onClick: () => setShowMatte(false),
|
|
62509
|
-
className: !showMatte ? "text-
|
|
62496
|
+
className: !showMatte ? "text-accent-ink" : "text-panel-text-4",
|
|
62510
62497
|
children: "Source"
|
|
62511
62498
|
}
|
|
62512
62499
|
),
|
|
@@ -62516,7 +62503,7 @@ function PropertyPanelColorSecondary({
|
|
|
62516
62503
|
type: "button",
|
|
62517
62504
|
"aria-pressed": showMatte,
|
|
62518
62505
|
onClick: () => setShowMatte(true),
|
|
62519
|
-
className: showMatte ? "text-
|
|
62506
|
+
className: showMatte ? "text-accent-ink" : "text-panel-text-4",
|
|
62520
62507
|
children: "Selection matte"
|
|
62521
62508
|
}
|
|
62522
62509
|
)
|
|
@@ -63039,9 +63026,9 @@ import { useEffect as useEffect93, useRef as useRef109 } from "react";
|
|
|
63039
63026
|
import { isHfColorGradingActive as isHfColorGradingActive3 } from "@hyperframes/core/color-grading";
|
|
63040
63027
|
import { jsx as jsx167, jsxs as jsxs129 } from "react/jsx-runtime";
|
|
63041
63028
|
var STATUS_DOT_CLASS = {
|
|
63042
|
-
active: "bg-
|
|
63043
|
-
pending: "bg-
|
|
63044
|
-
unavailable: "bg-
|
|
63029
|
+
active: "bg-accent",
|
|
63030
|
+
pending: "bg-warning-ink",
|
|
63031
|
+
unavailable: "bg-danger-ink",
|
|
63045
63032
|
missing: "bg-panel-text-5",
|
|
63046
63033
|
inactive: "bg-panel-text-5"
|
|
63047
63034
|
};
|
|
@@ -63174,24 +63161,17 @@ function HdrBanner({ metadata }) {
|
|
|
63174
63161
|
"div",
|
|
63175
63162
|
{
|
|
63176
63163
|
"data-flat-grade-hdr-banner": "true",
|
|
63177
|
-
className: "rounded-md border border-amber-500/30 bg-amber-500/10 px-2.5 py-1.5 text-[10px] leading-4 text-
|
|
63164
|
+
className: "rounded-md border border-amber-500/30 bg-amber-500/10 px-2.5 py-1.5 text-[10px] leading-4 text-warning-ink",
|
|
63178
63165
|
children: [
|
|
63179
63166
|
/* @__PURE__ */ jsxs130("div", { className: "mb-0.5 flex items-center justify-between gap-2", children: [
|
|
63180
63167
|
/* @__PURE__ */ jsxs130("span", { className: "font-semibold", children: [
|
|
63181
63168
|
metadata.color.label,
|
|
63182
63169
|
" source"
|
|
63183
63170
|
] }),
|
|
63184
|
-
/* @__PURE__ */ jsx168("span", { className: "rounded-sm bg-amber-
|
|
63171
|
+
/* @__PURE__ */ jsx168("span", { className: "rounded-sm bg-amber-500/15 px-1.5 py-0.5 text-[9px] font-semibold uppercase tracking-wide text-warning-ink", children: "SDR preview" })
|
|
63185
63172
|
] }),
|
|
63186
|
-
/* @__PURE__ */ jsx168("p", { className: "text-
|
|
63187
|
-
details && /* @__PURE__ */ jsx168(
|
|
63188
|
-
"p",
|
|
63189
|
-
{
|
|
63190
|
-
"data-flat-grade-hdr-detail": "true",
|
|
63191
|
-
className: "mt-0.5 truncate text-[9px] text-amber-100/55",
|
|
63192
|
-
children: details
|
|
63193
|
-
}
|
|
63194
|
-
)
|
|
63173
|
+
/* @__PURE__ */ jsx168("p", { className: "text-text-2", children: "These controls use the current SDR shader preview path. Render may stay HDR-tagged, but this is not true HDR color grading yet." }),
|
|
63174
|
+
details && /* @__PURE__ */ jsx168("p", { "data-flat-grade-hdr-detail": "true", className: "mt-0.5 truncate text-[9px] text-text-muted", children: details })
|
|
63195
63175
|
]
|
|
63196
63176
|
}
|
|
63197
63177
|
);
|
|
@@ -63291,7 +63271,7 @@ function FlatColorGradingSection({
|
|
|
63291
63271
|
{
|
|
63292
63272
|
type: "button",
|
|
63293
63273
|
onClick: onRequestPresetPreviews,
|
|
63294
|
-
className: "text-[10px] font-medium text-
|
|
63274
|
+
className: "text-[10px] font-medium text-accent-ink hover:text-accent-ink/80",
|
|
63295
63275
|
children: "Retry look previews"
|
|
63296
63276
|
}
|
|
63297
63277
|
),
|
|
@@ -63592,7 +63572,7 @@ function FlatColorGradingSection({
|
|
|
63592
63572
|
track2("button", "Apply grade to scope");
|
|
63593
63573
|
onApplyToScope();
|
|
63594
63574
|
},
|
|
63595
|
-
className: "text-[11px] font-medium text-
|
|
63575
|
+
className: "text-[11px] font-medium text-accent-ink hover:text-accent-ink/80 disabled:cursor-not-allowed disabled:opacity-50",
|
|
63596
63576
|
children: applyBusy ? "Applying" : "Apply"
|
|
63597
63577
|
}
|
|
63598
63578
|
)
|
|
@@ -64068,7 +64048,7 @@ function FlatEffectsSection({
|
|
|
64068
64048
|
track2("button", "Customize effect palette");
|
|
64069
64049
|
onCommitColorGrading({ ...grading, palette: fallback });
|
|
64070
64050
|
},
|
|
64071
|
-
className: "flex min-h-[28px] items-center gap-1 text-[10px] font-medium text-
|
|
64051
|
+
className: "flex min-h-[28px] items-center gap-1 text-[10px] font-medium text-accent-ink hover:text-accent-ink/80",
|
|
64072
64052
|
children: [
|
|
64073
64053
|
/* @__PURE__ */ jsx170(Plus, { size: 11 }),
|
|
64074
64054
|
" Custom palette"
|
|
@@ -64179,7 +64159,7 @@ function FlatEffectsSection({
|
|
|
64179
64159
|
type: "button",
|
|
64180
64160
|
title: `Remove ${selectedEffect.label}`,
|
|
64181
64161
|
onClick: () => removeEffect(selectedEffect),
|
|
64182
|
-
className: "text-panel-text-4 hover:text-
|
|
64162
|
+
className: "text-panel-text-4 hover:text-danger-ink",
|
|
64183
64163
|
children: /* @__PURE__ */ jsx170(X, { size: 11 })
|
|
64184
64164
|
}
|
|
64185
64165
|
)
|
|
@@ -64222,7 +64202,7 @@ function FlatEffectsSection({
|
|
|
64222
64202
|
"data-flat-effects-add-toggle": "true",
|
|
64223
64203
|
"aria-expanded": catalogOpen,
|
|
64224
64204
|
onClick: () => setCatalogOpen((open) => !open),
|
|
64225
|
-
className: "flex min-h-[30px] items-center gap-1 text-[10px] font-medium text-
|
|
64205
|
+
className: "flex min-h-[30px] items-center gap-1 text-[10px] font-medium text-accent-ink hover:text-accent-ink/80",
|
|
64226
64206
|
children: [
|
|
64227
64207
|
/* @__PURE__ */ jsx170(Plus, { size: 11 }),
|
|
64228
64208
|
" Add effect"
|
|
@@ -64244,7 +64224,7 @@ function FlatEffectsSection({
|
|
|
64244
64224
|
"aria-selected": catalogGroup === group.label,
|
|
64245
64225
|
"data-flat-effect-group": group.label,
|
|
64246
64226
|
onClick: () => setCatalogGroup(group.label),
|
|
64247
|
-
className: `min-h-[25px] min-w-0 truncate bg-panel-bg px-2 text-[9px] ${catalogGroup === group.label ? "font-medium text-
|
|
64227
|
+
className: `min-h-[25px] min-w-0 truncate bg-panel-bg px-2 text-[9px] ${catalogGroup === group.label ? "font-medium text-accent-ink" : "text-panel-text-4 hover:text-panel-text-1"}`,
|
|
64248
64228
|
children: group.label
|
|
64249
64229
|
},
|
|
64250
64230
|
group.label
|
|
@@ -64379,15 +64359,47 @@ import {
|
|
|
64379
64359
|
resolveBlockCategory
|
|
64380
64360
|
} from "@hyperframes/core/registry";
|
|
64381
64361
|
var COLOR_MAP = {
|
|
64382
|
-
transitions: {
|
|
64383
|
-
|
|
64384
|
-
|
|
64385
|
-
|
|
64386
|
-
|
|
64387
|
-
|
|
64388
|
-
|
|
64389
|
-
|
|
64390
|
-
|
|
64362
|
+
transitions: {
|
|
64363
|
+
bg: "bg-blue-500/15",
|
|
64364
|
+
text: "text-[light-dark(oklch(0.48_0.12_255),var(--color-blue-400))]",
|
|
64365
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_255),var(--color-blue-400))]"
|
|
64366
|
+
},
|
|
64367
|
+
vfx: {
|
|
64368
|
+
bg: "bg-purple-500/15",
|
|
64369
|
+
text: "text-[light-dark(oklch(0.48_0.12_305),var(--color-purple-400))]",
|
|
64370
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_305),var(--color-purple-400))]"
|
|
64371
|
+
},
|
|
64372
|
+
social: {
|
|
64373
|
+
bg: "bg-pink-500/15",
|
|
64374
|
+
text: "text-[light-dark(oklch(0.48_0.12_350),var(--color-pink-400))]",
|
|
64375
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_350),var(--color-pink-400))]"
|
|
64376
|
+
},
|
|
64377
|
+
data: {
|
|
64378
|
+
bg: "bg-green-500/15",
|
|
64379
|
+
text: "text-[light-dark(oklch(0.48_0.12_152),var(--color-green-400))]",
|
|
64380
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_152),var(--color-green-400))]"
|
|
64381
|
+
},
|
|
64382
|
+
scenes: { bg: "bg-amber-500/15", text: "text-warning-ink", dot: "bg-warning-ink" },
|
|
64383
|
+
captions: {
|
|
64384
|
+
bg: "bg-cyan-500/15",
|
|
64385
|
+
text: "text-[light-dark(oklch(0.48_0.12_212),var(--color-cyan-400))]",
|
|
64386
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_212),var(--color-cyan-400))]"
|
|
64387
|
+
},
|
|
64388
|
+
effects: {
|
|
64389
|
+
bg: "bg-rose-500/15",
|
|
64390
|
+
text: "text-[light-dark(oklch(0.48_0.12_13),var(--color-rose-400))]",
|
|
64391
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_13),var(--color-rose-400))]"
|
|
64392
|
+
},
|
|
64393
|
+
"text-effects": {
|
|
64394
|
+
bg: "bg-violet-500/15",
|
|
64395
|
+
text: "text-[light-dark(oklch(0.48_0.12_294),var(--color-violet-400))]",
|
|
64396
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_294),var(--color-violet-400))]"
|
|
64397
|
+
},
|
|
64398
|
+
"code-animation": {
|
|
64399
|
+
bg: "bg-emerald-500/15",
|
|
64400
|
+
text: "text-[light-dark(oklch(0.48_0.12_163),var(--color-emerald-400))]",
|
|
64401
|
+
dot: "bg-[light-dark(oklch(0.48_0.12_163),var(--color-emerald-400))]"
|
|
64402
|
+
}
|
|
64391
64403
|
};
|
|
64392
64404
|
function getCategoryColors(category) {
|
|
64393
64405
|
return COLOR_MAP[category];
|
|
@@ -64492,7 +64504,7 @@ function FlatOverlaysSection({
|
|
|
64492
64504
|
return /* @__PURE__ */ jsx171("div", { className: "py-4 text-center text-[10px] text-panel-text-4", children: "Loading overlays\u2026" });
|
|
64493
64505
|
}
|
|
64494
64506
|
if (error) {
|
|
64495
|
-
return /* @__PURE__ */ jsx171("div", { className: "py-4 text-center text-[10px] text-
|
|
64507
|
+
return /* @__PURE__ */ jsx171("div", { className: "py-4 text-center text-[10px] text-danger-ink", children: error });
|
|
64496
64508
|
}
|
|
64497
64509
|
const busy = adding !== null;
|
|
64498
64510
|
return /* @__PURE__ */ jsx171("div", { "data-flat-overlays": "true", className: FLAT_PREVIEW_GRID, children: overlays.map((overlay) => /* @__PURE__ */ jsxs132(
|
|
@@ -64541,7 +64553,7 @@ function FlatOverlaysSection({
|
|
|
64541
64553
|
Plus,
|
|
64542
64554
|
{
|
|
64543
64555
|
size: 12,
|
|
64544
|
-
className: "absolute right-1.5 top-1.5 text-white opacity-70 drop-shadow-sm group-hover:text-
|
|
64556
|
+
className: "absolute right-1.5 top-1.5 text-white opacity-70 drop-shadow-sm group-hover:text-accent-ink group-hover:opacity-100"
|
|
64545
64557
|
}
|
|
64546
64558
|
)
|
|
64547
64559
|
] }),
|
|
@@ -65058,7 +65070,7 @@ function GestureRecordPanelButton({
|
|
|
65058
65070
|
track2("button", "Gesture recording");
|
|
65059
65071
|
onToggleRecording();
|
|
65060
65072
|
},
|
|
65061
|
-
className: `w-full flex items-center justify-center gap-2 rounded-lg py-2 text-[11px] font-medium transition-colors ${recording ? "bg-red-500/15 text-
|
|
65073
|
+
className: `w-full flex items-center justify-center gap-2 rounded-lg py-2 text-[11px] font-medium transition-colors ${recording ? "bg-red-500/15 text-danger-ink border border-red-500/30 animate-pulse" : "bg-panel-input text-panel-text-2 hover:bg-panel-hover border border-panel-border"}`,
|
|
65062
65074
|
children: [
|
|
65063
65075
|
/* @__PURE__ */ jsx173(GestureRecordIcon, { recording }),
|
|
65064
65076
|
recording ? `Stop recording ${(recordingDuration ?? 0).toFixed(1)}s -- press R` : "Record gesture (R) -- move pointer to capture motion"
|
|
@@ -65088,14 +65100,14 @@ function FlatEmptyState() {
|
|
|
65088
65100
|
/* @__PURE__ */ jsxs135("div", { className: "mt-2 flex w-full flex-col gap-1.5", children: [
|
|
65089
65101
|
/* @__PURE__ */ jsxs135("span", { className: "flex items-center justify-between rounded-lg border border-panel-border bg-panel-bg px-3 py-2", children: [
|
|
65090
65102
|
/* @__PURE__ */ jsxs135("span", { className: "flex items-center gap-2 text-[11px] text-panel-text-2", children: [
|
|
65091
|
-
/* @__PURE__ */ jsx174("span", { className: "text-
|
|
65103
|
+
/* @__PURE__ */ jsx174("span", { className: "text-danger-ink", children: "\u25CF" }),
|
|
65092
65104
|
"Record a gesture"
|
|
65093
65105
|
] }),
|
|
65094
65106
|
/* @__PURE__ */ jsx174("span", { className: "rounded-sm border border-panel-border-input px-[5px] py-px font-mono text-[9px] text-panel-text-5", children: "R" })
|
|
65095
65107
|
] }),
|
|
65096
65108
|
/* @__PURE__ */ jsxs135("span", { className: "flex items-center justify-between rounded-lg border border-panel-border bg-panel-bg px-3 py-2", children: [
|
|
65097
65109
|
/* @__PURE__ */ jsxs135("span", { className: "flex items-center gap-2 text-[11px] text-panel-text-2", children: [
|
|
65098
|
-
/* @__PURE__ */ jsx174("span", { className: "text-
|
|
65110
|
+
/* @__PURE__ */ jsx174("span", { className: "text-accent-ink", children: "\u2726" }),
|
|
65099
65111
|
"Describe a change to the agent"
|
|
65100
65112
|
] }),
|
|
65101
65113
|
/* @__PURE__ */ jsx174("span", { className: "rounded-sm border border-panel-border-input px-[5px] py-px font-mono text-[9px] text-panel-text-5", children: "\u2318K" })
|
|
@@ -65108,7 +65120,7 @@ function elementKindGlyph(element) {
|
|
|
65108
65120
|
return { glyph: "\u25C6", className: "bg-panel-media/10 text-panel-media" };
|
|
65109
65121
|
}
|
|
65110
65122
|
if (element.textFields?.length > 0) {
|
|
65111
|
-
return { glyph: "T", className: "bg-panel-accent/10 text-
|
|
65123
|
+
return { glyph: "T", className: "bg-panel-accent/10 text-accent-ink" };
|
|
65112
65124
|
}
|
|
65113
65125
|
return { glyph: "\u25A6", className: "bg-panel-container/10 text-panel-container" };
|
|
65114
65126
|
}
|
|
@@ -65122,7 +65134,7 @@ function FlatMultiSelectState({
|
|
|
65122
65134
|
const hasAudio = !canHideSelections(multiSelectedElements);
|
|
65123
65135
|
return /* @__PURE__ */ jsxs135("div", { className: "flex flex-col gap-3 px-4 py-3", children: [
|
|
65124
65136
|
/* @__PURE__ */ jsxs135("div", { className: "flex items-center gap-3 rounded-xl border border-panel-border bg-panel-surface p-3", children: [
|
|
65125
|
-
/* @__PURE__ */ jsx174("span", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-panel-accent/10 text-
|
|
65137
|
+
/* @__PURE__ */ jsx174("span", { className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-panel-accent/10 text-accent-ink", children: /* @__PURE__ */ jsx174(Layers, { size: 16 }) }),
|
|
65126
65138
|
/* @__PURE__ */ jsxs135("div", { className: "min-w-0 flex-1", children: [
|
|
65127
65139
|
/* @__PURE__ */ jsxs135("div", { className: "text-[13px] font-semibold text-panel-text-0", children: [
|
|
65128
65140
|
multiSelectCount,
|
|
@@ -65745,34 +65757,52 @@ import {
|
|
|
65745
65757
|
import { jsx as jsx176 } from "react/jsx-runtime";
|
|
65746
65758
|
var SZ = 14;
|
|
65747
65759
|
var W = "duotone";
|
|
65760
|
+
var RED = "text-[light-dark(oklch(0.59_0.194_35),oklch(0.71_0.194_35))]";
|
|
65761
|
+
var BLUE = "text-[light-dark(oklch(0.56_0.14_253),oklch(0.69_0.14_253))]";
|
|
65762
|
+
var GREEN = "text-[light-dark(oklch(0.53_0.192_150),#22C55E)]";
|
|
65763
|
+
var GRAY = "text-[light-dark(oklch(0.56_0.019_261),#9CA3AF)]";
|
|
65764
|
+
var DIM = "text-[light-dark(oklch(0.55_0.023_264),oklch(0.69_0.023_264))]";
|
|
65765
|
+
var ICONS = /* @__PURE__ */ new Map([
|
|
65766
|
+
["html", [FileHtml, RED]],
|
|
65767
|
+
["css", [FileCss, "text-[light-dark(oklch(0.5_0.2_266),oklch(0.71_0.2_266))]"]],
|
|
65768
|
+
["js", [FileJs, "text-[light-dark(oklch(0.56_0.156_101),#F0DB4F)]"]],
|
|
65769
|
+
["jsx", [FileJsx, "text-[light-dark(oklch(0.55_0.117_219),#61DAFB)]"]],
|
|
65770
|
+
["ts", [FileTs, BLUE]],
|
|
65771
|
+
["tsx", [FileTsx, BLUE]],
|
|
65772
|
+
["json", [FileCode, "text-[light-dark(oklch(0.54_0.182_152),#4ADE80)]"]],
|
|
65773
|
+
["svg", [FileSvg, "text-[light-dark(oklch(0.58_0.187_48),#F97316)]"]],
|
|
65774
|
+
["md", [FileMd, GRAY]],
|
|
65775
|
+
["txt", [FileTxt, GRAY]],
|
|
65776
|
+
["png", [FilePng, GREEN]],
|
|
65777
|
+
["jpg", [FileJpg, GREEN]],
|
|
65778
|
+
["webp", [PhImage, GREEN]],
|
|
65779
|
+
["mp4", [FileVideo, "text-[light-dark(oklch(0.59_0.2_304),oklch(0.71_0.2_304))]"]],
|
|
65780
|
+
["mp3", [Waveform, "text-[light-dark(oklch(0.53_0.159_165),#3CE6AC)]"]],
|
|
65781
|
+
["woff", [TextAa, DIM]]
|
|
65782
|
+
]);
|
|
65783
|
+
var ALIAS = new Map(
|
|
65784
|
+
Object.entries({
|
|
65785
|
+
mjs: "js",
|
|
65786
|
+
cjs: "js",
|
|
65787
|
+
mts: "ts",
|
|
65788
|
+
mdx: "md",
|
|
65789
|
+
jpeg: "jpg",
|
|
65790
|
+
gif: "webp",
|
|
65791
|
+
ico: "webp",
|
|
65792
|
+
webm: "mp4",
|
|
65793
|
+
mov: "mp4",
|
|
65794
|
+
wav: "mp3",
|
|
65795
|
+
ogg: "mp3",
|
|
65796
|
+
m4a: "mp3",
|
|
65797
|
+
woff2: "woff",
|
|
65798
|
+
ttf: "woff",
|
|
65799
|
+
otf: "woff"
|
|
65800
|
+
})
|
|
65801
|
+
);
|
|
65748
65802
|
function FileIcon({ path }) {
|
|
65749
65803
|
const ext2 = path.split(".").pop()?.toLowerCase() ?? "";
|
|
65750
|
-
const
|
|
65751
|
-
|
|
65752
|
-
if (ext2 === "css") return /* @__PURE__ */ jsx176(FileCss, { size: SZ, weight: W, color: "#264DE4", className: c });
|
|
65753
|
-
if (ext2 === "js" || ext2 === "mjs" || ext2 === "cjs")
|
|
65754
|
-
return /* @__PURE__ */ jsx176(FileJs, { size: SZ, weight: W, color: "#F0DB4F", className: c });
|
|
65755
|
-
if (ext2 === "jsx") return /* @__PURE__ */ jsx176(FileJsx, { size: SZ, weight: W, color: "#61DAFB", className: c });
|
|
65756
|
-
if (ext2 === "ts" || ext2 === "mts")
|
|
65757
|
-
return /* @__PURE__ */ jsx176(FileTs, { size: SZ, weight: W, color: "#3178C6", className: c });
|
|
65758
|
-
if (ext2 === "tsx") return /* @__PURE__ */ jsx176(FileTsx, { size: SZ, weight: W, color: "#3178C6", className: c });
|
|
65759
|
-
if (ext2 === "json") return /* @__PURE__ */ jsx176(FileCode, { size: SZ, weight: W, color: "#4ADE80", className: c });
|
|
65760
|
-
if (ext2 === "svg") return /* @__PURE__ */ jsx176(FileSvg, { size: SZ, weight: W, color: "#F97316", className: c });
|
|
65761
|
-
if (ext2 === "md" || ext2 === "mdx")
|
|
65762
|
-
return /* @__PURE__ */ jsx176(FileMd, { size: SZ, weight: W, color: "#9CA3AF", className: c });
|
|
65763
|
-
if (ext2 === "txt") return /* @__PURE__ */ jsx176(FileTxt, { size: SZ, weight: W, color: "#9CA3AF", className: c });
|
|
65764
|
-
if (ext2 === "png") return /* @__PURE__ */ jsx176(FilePng, { size: SZ, weight: W, color: "#22C55E", className: c });
|
|
65765
|
-
if (ext2 === "jpg" || ext2 === "jpeg")
|
|
65766
|
-
return /* @__PURE__ */ jsx176(FileJpg, { size: SZ, weight: W, color: "#22C55E", className: c });
|
|
65767
|
-
if (ext2 === "webp" || ext2 === "gif" || ext2 === "ico")
|
|
65768
|
-
return /* @__PURE__ */ jsx176(PhImage, { size: SZ, weight: W, color: "#22C55E", className: c });
|
|
65769
|
-
if (ext2 === "mp4" || ext2 === "webm" || ext2 === "mov")
|
|
65770
|
-
return /* @__PURE__ */ jsx176(FileVideo, { size: SZ, weight: W, color: "#A855F7", className: c });
|
|
65771
|
-
if (ext2 === "mp3" || ext2 === "wav" || ext2 === "ogg" || ext2 === "m4a")
|
|
65772
|
-
return /* @__PURE__ */ jsx176(Waveform, { size: SZ, weight: W, color: "#3CE6AC", className: c });
|
|
65773
|
-
if (ext2 === "woff" || ext2 === "woff2" || ext2 === "ttf" || ext2 === "otf")
|
|
65774
|
-
return /* @__PURE__ */ jsx176(TextAa, { size: SZ, weight: W, color: "#6B7280", className: c });
|
|
65775
|
-
return /* @__PURE__ */ jsx176(File2, { size: SZ, weight: W, color: "#6B7280", className: c });
|
|
65804
|
+
const [Glyph, color] = ICONS.get(ALIAS.get(ext2) ?? ext2) ?? [File2, DIM];
|
|
65805
|
+
return /* @__PURE__ */ jsx176(Glyph, { size: SZ, weight: W, className: `shrink-0 ${color}` });
|
|
65776
65806
|
}
|
|
65777
65807
|
function buildTree(files) {
|
|
65778
65808
|
const root = { name: "", fullPath: "", children: /* @__PURE__ */ new Map(), isFile: false };
|
|
@@ -65964,7 +65994,7 @@ function ContextMenu2({
|
|
|
65964
65994
|
"button",
|
|
65965
65995
|
{
|
|
65966
65996
|
role: "menuitem",
|
|
65967
|
-
className: "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-
|
|
65997
|
+
className: "w-full flex items-center gap-2 px-3 py-1.5 text-xs text-danger-ink hover:bg-danger/25 focus-visible:bg-danger/25 active:bg-danger/25 outline-hidden cursor-pointer text-left",
|
|
65968
65998
|
onClick: () => {
|
|
65969
65999
|
onDelete(state.targetPath);
|
|
65970
66000
|
onClose();
|
|
@@ -66041,7 +66071,7 @@ function InlineInput({
|
|
|
66041
66071
|
className: "flex items-center gap-2 py-0.5 min-h-7",
|
|
66042
66072
|
style: { paddingLeft: `${8 + depth * 12 + (isFolder ? 0 : 14)}px` },
|
|
66043
66073
|
children: [
|
|
66044
|
-
isFolder ? /* @__PURE__ */ jsx177(FolderSimple, { size: SZ_ICON, weight: "duotone",
|
|
66074
|
+
isFolder ? /* @__PURE__ */ jsx177(FolderSimple, { size: SZ_ICON, weight: "duotone", className: `shrink-0 ${DIM}` }) : /* @__PURE__ */ jsx177(FileIcon, { path: value }),
|
|
66045
66075
|
/* @__PURE__ */ jsxs137("div", { className: "flex-1 min-w-0", children: [
|
|
66046
66076
|
/* @__PURE__ */ jsx177(
|
|
66047
66077
|
"input",
|
|
@@ -66055,11 +66085,11 @@ function InlineInput({
|
|
|
66055
66085
|
onKeyDown: handleKeyDown,
|
|
66056
66086
|
onBlur: handleBlur,
|
|
66057
66087
|
"aria-invalid": error ? true : void 0,
|
|
66058
|
-
className: `w-full min-w-0 bg-neutral-800 text-neutral-200 text-xs px-1.5 py-0.5 rounded border outline-hidden ${error ? "border-
|
|
66088
|
+
className: `w-full min-w-0 bg-neutral-800 text-neutral-200 text-xs px-1.5 py-0.5 rounded border outline-hidden ${error ? "border-danger-ink" : "border-neutral-600 focus:border-accent-ink"}`,
|
|
66059
66089
|
spellCheck: false
|
|
66060
66090
|
}
|
|
66061
66091
|
),
|
|
66062
|
-
error && /* @__PURE__ */ jsx177("div", { className: "mt-0.5 text-[10px] text-
|
|
66092
|
+
error && /* @__PURE__ */ jsx177("div", { className: "mt-0.5 text-[10px] text-danger-ink", role: "alert", children: error })
|
|
66063
66093
|
] })
|
|
66064
66094
|
]
|
|
66065
66095
|
}
|
|
@@ -66106,7 +66136,7 @@ function DeleteConfirm({
|
|
|
66106
66136
|
"button",
|
|
66107
66137
|
{
|
|
66108
66138
|
onClick: onCancel,
|
|
66109
|
-
className: "flex-1 px-2 py-1 rounded-sm bg-
|
|
66139
|
+
className: "flex-1 px-2 py-1 rounded-sm bg-hover text-neutral-300 hover:bg-press transition-colors",
|
|
66110
66140
|
children: "Cancel"
|
|
66111
66141
|
}
|
|
66112
66142
|
),
|
|
@@ -66114,7 +66144,7 @@ function DeleteConfirm({
|
|
|
66114
66144
|
"button",
|
|
66115
66145
|
{
|
|
66116
66146
|
onClick: onConfirm,
|
|
66117
|
-
className: "flex-1 px-2 py-1 rounded-sm bg-
|
|
66147
|
+
className: "flex-1 px-2 py-1 rounded-sm bg-danger/15 text-danger-ink hover:bg-danger/25 transition-colors",
|
|
66118
66148
|
children: "Delete"
|
|
66119
66149
|
}
|
|
66120
66150
|
)
|
|
@@ -66169,7 +66199,7 @@ var TreeFile = memo37(function TreeFile2({
|
|
|
66169
66199
|
lintInfo && lintInfo.count > 0 && /* @__PURE__ */ jsx177(
|
|
66170
66200
|
"span",
|
|
66171
66201
|
{
|
|
66172
|
-
className: "shrink-0 min-w-[16px] rounded-full bg-amber-500/20 px-1 text-[8px] font-bold text-
|
|
66202
|
+
className: "shrink-0 min-w-[16px] rounded-full bg-amber-500/20 px-1 text-[8px] font-bold text-warning-ink text-center mr-1",
|
|
66173
66203
|
title: lintInfo.messages.join("\n"),
|
|
66174
66204
|
children: lintInfo.count
|
|
66175
66205
|
}
|
|
@@ -66237,7 +66267,7 @@ var TreeFolder = memo37(function TreeFolder2({
|
|
|
66237
66267
|
onDrop(e, node.fullPath);
|
|
66238
66268
|
},
|
|
66239
66269
|
onDragLeave,
|
|
66240
|
-
className: `w-full flex items-center gap-1.5 px-2.5 py-1 min-h-7 text-left text-xs text-neutral-400 hover:bg-neutral-800/30 hover:text-neutral-300 transition-colors ${isDragOver ? "bg-
|
|
66270
|
+
className: `w-full flex items-center gap-1.5 px-2.5 py-1 min-h-7 text-left text-xs text-neutral-400 hover:bg-neutral-800/30 hover:text-neutral-300 transition-colors ${isDragOver ? "bg-accent/10 outline-solid outline-1 outline-accent-ink -outline-offset-1" : ""}`,
|
|
66241
66271
|
style: { paddingLeft: `${8 + depth * 12}px` },
|
|
66242
66272
|
children: [
|
|
66243
66273
|
/* @__PURE__ */ jsx177(Chevron, { size: 10, className: "shrink-0 text-neutral-600" }),
|
|
@@ -66493,7 +66523,7 @@ var FileTree = memo38(function FileTree2({
|
|
|
66493
66523
|
/* @__PURE__ */ jsxs138(
|
|
66494
66524
|
"div",
|
|
66495
66525
|
{
|
|
66496
|
-
className: `flex-1 overflow-y-auto py-1 transition-colors ${dragOverFolder === "" ? "bg-
|
|
66526
|
+
className: `flex-1 overflow-y-auto py-1 transition-colors ${dragOverFolder === "" ? "bg-accent/5 outline-solid outline-1 outline-accent-ink -outline-offset-1" : ""}`,
|
|
66497
66527
|
onContextMenu: handleRootContextMenu,
|
|
66498
66528
|
onDragOver: (e) => {
|
|
66499
66529
|
e.preventDefault();
|
|
@@ -66594,7 +66624,7 @@ var FileTree = memo38(function FileTree2({
|
|
|
66594
66624
|
});
|
|
66595
66625
|
|
|
66596
66626
|
// src/App.tsx
|
|
66597
|
-
import { useState as useState149, useCallback as useCallback186, useRef as useRef181, useMemo as
|
|
66627
|
+
import { useState as useState149, useCallback as useCallback186, useRef as useRef181, useMemo as useMemo83, useLayoutEffect as useLayoutEffect14 } from "react";
|
|
66598
66628
|
|
|
66599
66629
|
// src/hooks/useRightPanelIntents.ts
|
|
66600
66630
|
import { useCallback as useCallback92, useEffect as useEffect99, useRef as useRef115 } from "react";
|
|
@@ -67328,7 +67358,7 @@ ${pathLine}${lines.join("\n\n")}`;
|
|
|
67328
67358
|
children: [
|
|
67329
67359
|
/* @__PURE__ */ jsxs139("div", { className: "flex items-center justify-between px-5 py-4 border-b border-neutral-800", children: [
|
|
67330
67360
|
/* @__PURE__ */ jsxs139("div", { className: "flex items-center gap-3", children: [
|
|
67331
|
-
hasIssues ? /* @__PURE__ */ jsx179("div", { className: "w-8 h-8 rounded-full bg-red-500/10 flex items-center justify-center", children: /* @__PURE__ */ jsx179(WarningIcon, { size: 18, className: "text-
|
|
67361
|
+
hasIssues ? /* @__PURE__ */ jsx179("div", { className: "w-8 h-8 rounded-full bg-red-500/10 flex items-center justify-center", children: /* @__PURE__ */ jsx179(WarningIcon, { size: 18, className: "text-danger-ink", weight: "fill" }) }) : /* @__PURE__ */ jsx179("div", { className: "w-8 h-8 rounded-full bg-studio-accent/10 flex items-center justify-center", children: /* @__PURE__ */ jsx179(CheckCircleIcon, { size: 18, className: "text-accent-ink", weight: "fill" }) }),
|
|
67332
67362
|
/* @__PURE__ */ jsxs139("div", { children: [
|
|
67333
67363
|
/* @__PURE__ */ jsx179("h2", { className: "text-sm font-semibold text-neutral-200", children: hasIssues ? `${errors.length} error${errors.length !== 1 ? "s" : ""}, ${warnings.length} warning${warnings.length !== 1 ? "s" : ""}` : "All checks passed" }),
|
|
67334
67364
|
/* @__PURE__ */ jsx179("p", { className: "text-xs text-neutral-500", children: title })
|
|
@@ -67348,34 +67378,14 @@ ${pathLine}${lines.join("\n\n")}`;
|
|
|
67348
67378
|
"button",
|
|
67349
67379
|
{
|
|
67350
67380
|
onClick: handleCopyToAgent,
|
|
67351
|
-
className: `px-3 py-1 text-xs font-medium rounded-lg transition-colors active:scale-[0.98] ${copied ? "bg-
|
|
67381
|
+
className: `px-3 py-1 text-xs font-medium rounded-lg transition-colors active:scale-[0.98] ${copied ? "bg-accent text-on-accent" : copyFailed ? "bg-danger text-on-danger" : "bg-accent hover:bg-accent-hover text-on-accent"}`,
|
|
67352
67382
|
children: copied ? "Copied!" : copyFailed ? "Copy failed \u2014 check permissions" : "Copy to Agent"
|
|
67353
67383
|
}
|
|
67354
67384
|
) }),
|
|
67355
67385
|
/* @__PURE__ */ jsxs139("div", { className: "flex-1 overflow-y-auto px-5 py-3", children: [
|
|
67356
67386
|
!hasIssues && /* @__PURE__ */ jsx179("div", { className: "py-8 text-center text-neutral-500 text-sm", children: "No errors or warnings found. Your composition looks good!" }),
|
|
67357
|
-
errors.map((f, i) => /* @__PURE__ */ jsx179(
|
|
67358
|
-
|
|
67359
|
-
/* @__PURE__ */ jsxs139("div", { className: "min-w-0", children: [
|
|
67360
|
-
/* @__PURE__ */ jsx179("p", { className: "text-sm text-neutral-200", children: f.message }),
|
|
67361
|
-
f.file && /* @__PURE__ */ jsx179("p", { className: "text-xs text-neutral-600 font-mono mt-0.5", children: f.file }),
|
|
67362
|
-
f.fixHint && /* @__PURE__ */ jsxs139("div", { className: "flex items-start gap-1 mt-1.5", children: [
|
|
67363
|
-
/* @__PURE__ */ jsx179(CaretRightIcon, { size: 10, className: "text-studio-accent shrink-0 mt-0.5" }),
|
|
67364
|
-
/* @__PURE__ */ jsx179("p", { className: "text-xs text-studio-accent", children: f.fixHint })
|
|
67365
|
-
] })
|
|
67366
|
-
] })
|
|
67367
|
-
] }) }, `e-${i}`)),
|
|
67368
|
-
warnings.map((f, i) => /* @__PURE__ */ jsx179("div", { className: "py-3 border-b border-neutral-800/50 last:border-0", children: /* @__PURE__ */ jsxs139("div", { className: "flex items-start gap-2", children: [
|
|
67369
|
-
/* @__PURE__ */ jsx179(WarningIcon, { size: 14, className: "text-amber-400 shrink-0 mt-0.5" }),
|
|
67370
|
-
/* @__PURE__ */ jsxs139("div", { className: "min-w-0", children: [
|
|
67371
|
-
/* @__PURE__ */ jsx179("p", { className: "text-sm text-neutral-300", children: f.message }),
|
|
67372
|
-
f.file && /* @__PURE__ */ jsx179("p", { className: "text-xs text-neutral-600 font-mono mt-0.5", children: f.file }),
|
|
67373
|
-
f.fixHint && /* @__PURE__ */ jsxs139("div", { className: "flex items-start gap-1 mt-1.5", children: [
|
|
67374
|
-
/* @__PURE__ */ jsx179(CaretRightIcon, { size: 10, className: "text-studio-accent shrink-0 mt-0.5" }),
|
|
67375
|
-
/* @__PURE__ */ jsx179("p", { className: "text-xs text-studio-accent", children: f.fixHint })
|
|
67376
|
-
] })
|
|
67377
|
-
] })
|
|
67378
|
-
] }) }, `w-${i}`))
|
|
67387
|
+
errors.map((f, i) => /* @__PURE__ */ jsx179(LintFindingRow, { finding: f, tone: "error" }, `e-${i}`)),
|
|
67388
|
+
warnings.map((f, i) => /* @__PURE__ */ jsx179(LintFindingRow, { finding: f, tone: "warning" }, `w-${i}`))
|
|
67379
67389
|
] })
|
|
67380
67390
|
]
|
|
67381
67391
|
}
|
|
@@ -67383,6 +67393,26 @@ ${pathLine}${lines.join("\n\n")}`;
|
|
|
67383
67393
|
}
|
|
67384
67394
|
);
|
|
67385
67395
|
}
|
|
67396
|
+
function LintFindingRow({ finding, tone }) {
|
|
67397
|
+
return /* @__PURE__ */ jsx179("div", { className: "py-3 border-b border-border last:border-0", children: /* @__PURE__ */ jsxs139("div", { className: "flex items-start gap-2", children: [
|
|
67398
|
+
/* @__PURE__ */ jsx179(
|
|
67399
|
+
WarningIcon,
|
|
67400
|
+
{
|
|
67401
|
+
size: 14,
|
|
67402
|
+
className: `${tone === "error" ? "text-danger-ink" : "text-warning-ink"} shrink-0 mt-0.5`,
|
|
67403
|
+
weight: tone === "error" ? "fill" : void 0
|
|
67404
|
+
}
|
|
67405
|
+
),
|
|
67406
|
+
/* @__PURE__ */ jsxs139("div", { className: "min-w-0", children: [
|
|
67407
|
+
/* @__PURE__ */ jsx179("p", { className: `text-sm ${tone === "error" ? "text-text-0" : "text-text-2"}`, children: finding.message }),
|
|
67408
|
+
finding.file && /* @__PURE__ */ jsx179("p", { className: "text-xs text-text-muted font-mono mt-0.5", children: finding.file }),
|
|
67409
|
+
finding.fixHint && /* @__PURE__ */ jsxs139("div", { className: "flex items-start gap-1 mt-1.5", children: [
|
|
67410
|
+
/* @__PURE__ */ jsx179(CaretRightIcon, { size: 10, className: "text-accent-ink shrink-0 mt-0.5" }),
|
|
67411
|
+
/* @__PURE__ */ jsx179("p", { className: "text-xs text-accent-ink", children: finding.fixHint })
|
|
67412
|
+
] })
|
|
67413
|
+
] })
|
|
67414
|
+
] }) });
|
|
67415
|
+
}
|
|
67386
67416
|
|
|
67387
67417
|
// src/components/AskAgentModal.tsx
|
|
67388
67418
|
import { useState as useState100, useRef as useRef120 } from "react";
|
|
@@ -67502,7 +67532,7 @@ function AskAgentModal({
|
|
|
67502
67532
|
/* @__PURE__ */ jsx180(
|
|
67503
67533
|
"button",
|
|
67504
67534
|
{
|
|
67505
|
-
className: "px-4 py-1.5 rounded-lg bg-
|
|
67535
|
+
className: "px-4 py-1.5 rounded-lg bg-accent text-xs font-medium text-on-accent hover:bg-accent-hover disabled:opacity-40 disabled:cursor-not-allowed",
|
|
67506
67536
|
disabled: !value.trim(),
|
|
67507
67537
|
onClick: handleSubmit,
|
|
67508
67538
|
children: "Copy prompt"
|
|
@@ -67528,23 +67558,12 @@ function StudioToast({ message, tone, leaving, onDismiss }) {
|
|
|
67528
67558
|
children: /* @__PURE__ */ jsxs141(
|
|
67529
67559
|
"div",
|
|
67530
67560
|
{
|
|
67531
|
-
className:
|
|
67532
|
-
style: {
|
|
67533
|
-
background: isError ? "linear-gradient(135deg, rgba(127,29,29,0.55), rgba(80,10,10,0.45))" : "linear-gradient(135deg, rgba(38,38,38,0.55), rgba(23,23,23,0.45))",
|
|
67534
|
-
backdropFilter: "blur(16px) saturate(1.6)",
|
|
67535
|
-
WebkitBackdropFilter: "blur(16px) saturate(1.6)",
|
|
67536
|
-
border: `1px solid ${isError ? "rgba(239,68,68,0.18)" : "rgba(255,255,255,0.08)"}`,
|
|
67537
|
-
boxShadow: [
|
|
67538
|
-
"0 8px 32px rgba(0,0,0,0.35)",
|
|
67539
|
-
`inset 0 1px 0 ${isError ? "rgba(239,68,68,0.12)" : "rgba(255,255,255,0.06)"}`,
|
|
67540
|
-
`inset 0 -1px 0 rgba(0,0,0,0.15)`
|
|
67541
|
-
].join(", ")
|
|
67542
|
-
},
|
|
67561
|
+
className: `relative flex max-w-[min(420px,calc(100vw-48px))] items-center gap-3 overflow-hidden rounded-2xl py-3 pl-4 pr-2 text-[12px] ${toastSurface(isError)}`,
|
|
67543
67562
|
children: [
|
|
67544
67563
|
/* @__PURE__ */ jsx181(
|
|
67545
67564
|
"span",
|
|
67546
67565
|
{
|
|
67547
|
-
className: `min-w-0 wrap-break-word leading-5 ${isError ? "text-
|
|
67566
|
+
className: `min-w-0 wrap-break-word leading-5 ${isError ? "text-danger-ink" : "text-text-0"}`,
|
|
67548
67567
|
children: message
|
|
67549
67568
|
}
|
|
67550
67569
|
),
|
|
@@ -67553,7 +67572,7 @@ function StudioToast({ message, tone, leaving, onDismiss }) {
|
|
|
67553
67572
|
{
|
|
67554
67573
|
type: "button",
|
|
67555
67574
|
onClick: onDismiss,
|
|
67556
|
-
className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-neutral-500 transition-colors hover:bg-
|
|
67575
|
+
className: "flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-neutral-500 transition-colors hover:bg-hover hover:text-neutral-300",
|
|
67557
67576
|
"aria-label": "Dismiss",
|
|
67558
67577
|
children: /* @__PURE__ */ jsx181(
|
|
67559
67578
|
"svg",
|
|
@@ -67575,6 +67594,9 @@ function StudioToast({ message, tone, leaving, onDismiss }) {
|
|
|
67575
67594
|
}
|
|
67576
67595
|
);
|
|
67577
67596
|
}
|
|
67597
|
+
function toastSurface(isError) {
|
|
67598
|
+
return `border shadow-popover backdrop-blur-md ${isError ? "border-danger/40 bg-raised" : "border-border bg-raised/95"}`;
|
|
67599
|
+
}
|
|
67578
67600
|
|
|
67579
67601
|
// src/components/feedback/StudioFeedbackCard.tsx
|
|
67580
67602
|
import { memo as memo39, useState as useState101, useCallback as useCallback96, useRef as useRef121, useEffect as useEffect103 } from "react";
|
|
@@ -67764,24 +67786,13 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67764
67786
|
children: /* @__PURE__ */ jsxs142(
|
|
67765
67787
|
"div",
|
|
67766
67788
|
{
|
|
67767
|
-
className:
|
|
67768
|
-
style: {
|
|
67769
|
-
background: failed2 ? "linear-gradient(135deg, rgba(127,29,29,0.55), rgba(80,10,10,0.45))" : "linear-gradient(135deg, rgba(38,38,38,0.55), rgba(23,23,23,0.45))",
|
|
67770
|
-
backdropFilter: "blur(16px) saturate(1.6)",
|
|
67771
|
-
WebkitBackdropFilter: "blur(16px) saturate(1.6)",
|
|
67772
|
-
border: `1px solid ${failed2 ? "rgba(239,68,68,0.18)" : "rgba(255,255,255,0.08)"}`,
|
|
67773
|
-
boxShadow: [
|
|
67774
|
-
"0 8px 32px rgba(0,0,0,0.35)",
|
|
67775
|
-
`inset 0 1px 0 ${failed2 ? "rgba(239,68,68,0.12)" : "rgba(255,255,255,0.06)"}`,
|
|
67776
|
-
"inset 0 -1px 0 rgba(0,0,0,0.15)"
|
|
67777
|
-
].join(", ")
|
|
67778
|
-
},
|
|
67789
|
+
className: `flex w-[min(340px,calc(100vw-48px))] flex-col gap-2.5 overflow-hidden rounded-2xl px-3.5 py-3 ${toastSurface(failed2)}`,
|
|
67779
67790
|
children: [
|
|
67780
67791
|
/* @__PURE__ */ jsxs142("div", { className: "flex items-start gap-3", children: [
|
|
67781
67792
|
/* @__PURE__ */ jsx182(
|
|
67782
67793
|
"p",
|
|
67783
67794
|
{
|
|
67784
|
-
className: `min-w-0 flex-1 text-[12px] leading-5 ${failed2 ? "text-
|
|
67795
|
+
className: `min-w-0 flex-1 text-[12px] leading-5 ${failed2 ? "text-danger-ink" : "text-text-0"}`,
|
|
67785
67796
|
children: step === "thanks" ? "Thanks, that helps." : title
|
|
67786
67797
|
}
|
|
67787
67798
|
),
|
|
@@ -67796,7 +67807,7 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67796
67807
|
if (req) trackStudioFeedbackInterviewClick({ reason: req.reason });
|
|
67797
67808
|
close("sent");
|
|
67798
67809
|
},
|
|
67799
|
-
className: "h-6 shrink-0 whitespace-nowrap rounded-full border border-
|
|
67810
|
+
className: "h-6 shrink-0 whitespace-nowrap rounded-full border border-border-strong bg-hover px-2.5 text-[11px] leading-6 text-neutral-100 transition-[background-color,border-color,transform] duration-150 ease-out hover:border-text-muted hover:bg-press active:scale-[0.97] motion-reduce:transition-none",
|
|
67800
67811
|
children: "Talk to us, 30 min"
|
|
67801
67812
|
}
|
|
67802
67813
|
),
|
|
@@ -67805,7 +67816,7 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67805
67816
|
{
|
|
67806
67817
|
type: "button",
|
|
67807
67818
|
onClick: () => close("close"),
|
|
67808
|
-
className: "-mr-1 -mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-neutral-500 transition-colors duration-150 hover:bg-
|
|
67819
|
+
className: "-mr-1 -mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-md text-neutral-500 transition-colors duration-150 hover:bg-press hover:text-neutral-200",
|
|
67809
67820
|
"aria-label": "Dismiss",
|
|
67810
67821
|
children: /* @__PURE__ */ jsx182(
|
|
67811
67822
|
"svg",
|
|
@@ -67822,14 +67833,14 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67822
67833
|
}
|
|
67823
67834
|
)
|
|
67824
67835
|
] }),
|
|
67825
|
-
failed2 && request.detail && step !== "thanks" && /* @__PURE__ */ jsx182("p", { className: "line-clamp-2 text-[11px] leading-4 text-
|
|
67836
|
+
failed2 && request.detail && step !== "thanks" && /* @__PURE__ */ jsx182("p", { className: "line-clamp-2 text-[11px] leading-4 text-danger-ink", children: request.detail }),
|
|
67826
67837
|
step === "rating" && /* @__PURE__ */ jsxs142(Fragment49, { children: [
|
|
67827
67838
|
/* @__PURE__ */ jsxs142("fieldset", { className: "grid grid-cols-11 gap-[3px]", children: [
|
|
67828
67839
|
/* @__PURE__ */ jsx182("legend", { className: "sr-only", children: "Rate this export from 0 to 10" }),
|
|
67829
67840
|
RATINGS.map((n) => /* @__PURE__ */ jsxs142(
|
|
67830
67841
|
"label",
|
|
67831
67842
|
{
|
|
67832
|
-
className: "flex h-7 cursor-pointer items-center justify-center rounded-md bg-
|
|
67843
|
+
className: "flex h-7 cursor-pointer items-center justify-center rounded-md bg-hover text-[11px] tabular-nums text-neutral-400 transition-[background-color,color,transform] duration-150 ease-out hover:bg-press hover:text-neutral-100 active:scale-[0.97] has-checked:bg-text-0 has-checked:text-bg-0 has-focus-visible:ring-1 has-focus-visible:ring-ring motion-reduce:transition-none",
|
|
67833
67844
|
children: [
|
|
67834
67845
|
/* @__PURE__ */ jsx182(
|
|
67835
67846
|
"input",
|
|
@@ -67864,7 +67875,7 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67864
67875
|
onFocus: () => setHint(preset.hint),
|
|
67865
67876
|
onBlur: () => setHint(null),
|
|
67866
67877
|
"aria-label": `${preset.label}. ${preset.hint}`,
|
|
67867
|
-
className: `h-6 rounded-full border px-2.5 text-[11px] transition-[background-color,border-color,color,transform] duration-150 ease-out active:scale-[0.97] motion-reduce:transition-none ${failed2 ? "border-
|
|
67878
|
+
className: `h-6 rounded-full border px-2.5 text-[11px] transition-[background-color,border-color,color,transform] duration-150 ease-out active:scale-[0.97] motion-reduce:transition-none ${failed2 ? "border-danger/30 bg-danger/10 text-danger-ink hover:border-danger/60 hover:bg-danger/20" : "border-border bg-hover text-neutral-300 hover:border-text-muted hover:bg-press hover:text-text-0"}`,
|
|
67868
67879
|
children: preset.label
|
|
67869
67880
|
},
|
|
67870
67881
|
preset.label
|
|
@@ -67884,7 +67895,7 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67884
67895
|
placeholder: followUp.placeholder,
|
|
67885
67896
|
"aria-label": followUp.prompt,
|
|
67886
67897
|
maxLength: 500,
|
|
67887
|
-
className: "h-7 min-w-0 flex-1 rounded-md border border-
|
|
67898
|
+
className: "h-7 min-w-0 flex-1 rounded-md border border-border bg-input px-2 text-[11px] text-neutral-100 outline-hidden transition-colors duration-150 placeholder:text-neutral-500 focus:border-ring"
|
|
67888
67899
|
}
|
|
67889
67900
|
),
|
|
67890
67901
|
/* @__PURE__ */ jsx182(
|
|
@@ -67892,7 +67903,7 @@ var StudioFeedbackCard = memo39(function StudioFeedbackCard2() {
|
|
|
67892
67903
|
{
|
|
67893
67904
|
type: "button",
|
|
67894
67905
|
onClick: () => submit(),
|
|
67895
|
-
className: "h-7 shrink-0 rounded-md bg-
|
|
67906
|
+
className: "h-7 shrink-0 rounded-md bg-press px-2.5 text-[11px] text-neutral-100 transition-[background-color,transform] duration-150 ease-out hover:bg-on active:scale-[0.97] motion-reduce:transition-none",
|
|
67896
67907
|
children: "Send"
|
|
67897
67908
|
}
|
|
67898
67909
|
)
|
|
@@ -74705,16 +74716,16 @@ function refuseGsapTakeover(el, showToast) {
|
|
|
74705
74716
|
}
|
|
74706
74717
|
var plainMoveCounter = 0;
|
|
74707
74718
|
function stagePlainTranslate(commitPositionPatchToHtml, selection, next, coalesceKey) {
|
|
74708
|
-
const
|
|
74709
|
-
const before =
|
|
74710
|
-
const
|
|
74711
|
-
style.
|
|
74719
|
+
const el = selection.element;
|
|
74720
|
+
const before = captureStudioPathOffset(el);
|
|
74721
|
+
const patches = writePlainMove(el, next);
|
|
74722
|
+
const written = el.style.getPropertyValue("translate");
|
|
74712
74723
|
const rollback = () => {
|
|
74713
|
-
if (style.getPropertyValue("translate") ===
|
|
74724
|
+
if (el.style.getPropertyValue("translate") === written) restoreStudioPathOffset(el, before);
|
|
74714
74725
|
};
|
|
74715
74726
|
const key2 = coalesceKey ?? `move:${++plainMoveCounter}`;
|
|
74716
74727
|
const options = { label: "Move layer", coalesceKey: key2, coalesceMs: Number.POSITIVE_INFINITY };
|
|
74717
|
-
const save = () => commitPositionPatchToHtml(selection,
|
|
74728
|
+
const save = () => commitPositionPatchToHtml(selection, patches, options).catch((error) => {
|
|
74718
74729
|
rollback();
|
|
74719
74730
|
throw error;
|
|
74720
74731
|
});
|
|
@@ -74773,64 +74784,8 @@ function savePlainRotation({ commitPositionPatchToHtml, readOnlyPreview }, selec
|
|
|
74773
74784
|
});
|
|
74774
74785
|
}
|
|
74775
74786
|
|
|
74776
|
-
// src/hooks/gsapTargetCache.ts
|
|
74777
|
-
var _gsapCachedTimelines;
|
|
74778
|
-
var _gsapTargetIds;
|
|
74779
|
-
var _gsapTargetNodes;
|
|
74780
|
-
function addTargetsFromTimeline(tl, ids, nodes) {
|
|
74781
|
-
const children = tl.getChildren?.(true);
|
|
74782
|
-
if (!children) return;
|
|
74783
|
-
for (const child of children) {
|
|
74784
|
-
const targets = child.targets?.();
|
|
74785
|
-
if (!targets) continue;
|
|
74786
|
-
for (const t of targets) {
|
|
74787
|
-
nodes.add(t);
|
|
74788
|
-
if (t.id) ids.add(t.id);
|
|
74789
|
-
}
|
|
74790
|
-
}
|
|
74791
|
-
}
|
|
74792
|
-
function collectGsapTargets(timelines) {
|
|
74793
|
-
const ids = /* @__PURE__ */ new Set();
|
|
74794
|
-
const nodes = /* @__PURE__ */ new WeakSet();
|
|
74795
|
-
for (const tl of Object.values(timelines)) {
|
|
74796
|
-
if (!tl) continue;
|
|
74797
|
-
try {
|
|
74798
|
-
addTargetsFromTimeline(tl, ids, nodes);
|
|
74799
|
-
} catch {
|
|
74800
|
-
}
|
|
74801
|
-
}
|
|
74802
|
-
return { ids, nodes };
|
|
74803
|
-
}
|
|
74804
|
-
function readTimelines(iframe) {
|
|
74805
|
-
if (!iframe?.contentWindow) return void 0;
|
|
74806
|
-
try {
|
|
74807
|
-
return iframe.contentWindow.__timelines;
|
|
74808
|
-
} catch {
|
|
74809
|
-
return void 0;
|
|
74810
|
-
}
|
|
74811
|
-
}
|
|
74812
|
-
function isElementGsapTargeted(iframe, element) {
|
|
74813
|
-
const timelines = readTimelines(iframe);
|
|
74814
|
-
if (!timelines) return false;
|
|
74815
|
-
if (timelines !== _gsapCachedTimelines) {
|
|
74816
|
-
const cache2 = collectGsapTargets(timelines);
|
|
74817
|
-
_gsapTargetIds = cache2.ids;
|
|
74818
|
-
_gsapTargetNodes = cache2.nodes;
|
|
74819
|
-
_gsapCachedTimelines = timelines;
|
|
74820
|
-
}
|
|
74821
|
-
return _gsapTargetNodes.has(element) || !!(element.id && _gsapTargetIds.has(element.id));
|
|
74822
|
-
}
|
|
74823
|
-
|
|
74824
74787
|
// src/hooks/useDomGeometryCommits.ts
|
|
74825
|
-
var GSAP_CSS_FALLBACK_BLOCKED_MESSAGE = "This element is GSAP-animated \u2014 dragging via CSS would corrupt keyframes";
|
|
74826
|
-
function rejectGsapCssFallback(selection, previewIframeRef, showToast) {
|
|
74827
|
-
if (!isElementGsapTargeted(previewIframeRef.current, selection.element)) return null;
|
|
74828
|
-
const error = new Error(GSAP_CSS_FALLBACK_BLOCKED_MESSAGE);
|
|
74829
|
-
showToast(error.message, "error");
|
|
74830
|
-
return Promise.reject(error);
|
|
74831
|
-
}
|
|
74832
74788
|
function useDomGeometryCommits({
|
|
74833
|
-
previewIframeRef,
|
|
74834
74789
|
showToast,
|
|
74835
74790
|
commitPositionPatchToHtml,
|
|
74836
74791
|
readOnlyPreview
|
|
@@ -74845,44 +74800,24 @@ function useDomGeometryCommits({
|
|
|
74845
74800
|
),
|
|
74846
74801
|
[commitPositionPatchToHtml, readOnlyPreview, showToast]
|
|
74847
74802
|
);
|
|
74848
|
-
const handleDomPathOffsetCommit = useCallback125(
|
|
74849
|
-
(selection, next) => {
|
|
74850
|
-
if (readOnlyPreview) return Promise.resolve();
|
|
74851
|
-
const gsapFallback = rejectGsapCssFallback(selection, previewIframeRef, showToast);
|
|
74852
|
-
if (gsapFallback) return gsapFallback;
|
|
74853
|
-
const before = captureStudioPathOffset(selection.element);
|
|
74854
|
-
applyStudioPathOffset(selection.element, next);
|
|
74855
|
-
return commitPositionPatchToHtml(selection, buildPathOffsetPatches(selection.element), {
|
|
74856
|
-
label: "Move layer",
|
|
74857
|
-
coalesceKey: `path-offset:${getDomEditTargetKey(selection)}`
|
|
74858
|
-
}).catch((error) => {
|
|
74859
|
-
restoreStudioPathOffset(selection.element, before);
|
|
74860
|
-
throw error;
|
|
74861
|
-
});
|
|
74862
|
-
},
|
|
74863
|
-
[commitPositionPatchToHtml, previewIframeRef, showToast, readOnlyPreview]
|
|
74864
|
-
);
|
|
74865
74803
|
const handleDomBoxSizeCommit = useCallback125(
|
|
74866
74804
|
(selection, next, offset, restore) => {
|
|
74867
74805
|
if (readOnlyPreview) return Promise.resolve();
|
|
74868
74806
|
const element = selection.element;
|
|
74869
74807
|
const beforeSize = captureStudioBoxSize(element);
|
|
74870
|
-
const
|
|
74808
|
+
const beforeOffset = captureStudioPathOffset(element);
|
|
74871
74809
|
const stageCrop = prepareCropResize(element);
|
|
74872
74810
|
applyStudioBoxSize(element, next);
|
|
74873
74811
|
const crop = stageCrop();
|
|
74874
74812
|
const patches = buildBoxSizePatches(element);
|
|
74875
74813
|
if (crop) patches.push(crop.patch);
|
|
74876
|
-
if (offset)
|
|
74877
|
-
writeTranslatePx(element, offset);
|
|
74878
|
-
patches.push(translatePatch(offset));
|
|
74879
|
-
}
|
|
74814
|
+
if (offset) patches.push(...writePlainMove(element, offset));
|
|
74880
74815
|
return commitPositionPatchToHtml(selection, patches, {
|
|
74881
74816
|
label: "Resize layer box",
|
|
74882
74817
|
coalesceKey: `box-size:${getDomEditTargetKey(selection)}`
|
|
74883
74818
|
}).catch((error) => {
|
|
74884
74819
|
restoreStudioBoxSize(element, beforeSize);
|
|
74885
|
-
if (offset) element
|
|
74820
|
+
if (offset) restoreStudioPathOffset(element, beforeOffset);
|
|
74886
74821
|
crop?.revert();
|
|
74887
74822
|
restore?.();
|
|
74888
74823
|
throw error;
|
|
@@ -74923,7 +74858,6 @@ function useDomGeometryCommits({
|
|
|
74923
74858
|
);
|
|
74924
74859
|
return {
|
|
74925
74860
|
stageElementPositionOffset,
|
|
74926
|
-
handleDomPathOffsetCommit,
|
|
74927
74861
|
handleDomBoxSizeCommit,
|
|
74928
74862
|
handleDomRotationCommit,
|
|
74929
74863
|
handleDomManualEditsReset
|
|
@@ -75102,12 +75036,10 @@ function useDomEditCommits({
|
|
|
75102
75036
|
});
|
|
75103
75037
|
const {
|
|
75104
75038
|
stageElementPositionOffset,
|
|
75105
|
-
handleDomPathOffsetCommit,
|
|
75106
75039
|
handleDomBoxSizeCommit,
|
|
75107
75040
|
handleDomRotationCommit,
|
|
75108
75041
|
handleDomManualEditsReset
|
|
75109
75042
|
} = useDomGeometryCommits({
|
|
75110
|
-
previewIframeRef,
|
|
75111
75043
|
showToast,
|
|
75112
75044
|
commitPositionPatchToHtml,
|
|
75113
75045
|
readOnlyPreview
|
|
@@ -75143,7 +75075,6 @@ function useDomEditCommits({
|
|
|
75143
75075
|
handleDomRemoveTextField,
|
|
75144
75076
|
stageElementPositionOffset,
|
|
75145
75077
|
commitPositionPatchToHtml,
|
|
75146
|
-
handleDomPathOffsetCommit,
|
|
75147
75078
|
handleDomBoxSizeCommit,
|
|
75148
75079
|
handleDomRotationCommit,
|
|
75149
75080
|
handleDomManualEditsReset,
|
|
@@ -81022,10 +80953,16 @@ function remintHfIds(html2, parser, taken) {
|
|
|
81022
80953
|
}
|
|
81023
80954
|
var HF_ID_ATTR_RE = /\bdata-hf-id\s*=\s*["']?([^"'\s>]+)/gi;
|
|
81024
80955
|
var hfIdsInFile = (content) => new Set(Array.from(content.matchAll(HF_ID_ATTR_RE), (match) => match[1]));
|
|
81025
|
-
function pasteElementHtml(content, payload) {
|
|
80956
|
+
function pasteElementHtml(content, payload, fromThisFile = false) {
|
|
81026
80957
|
const reminted = remintHfIds(payload.html, new DOMParser(), hfIdsInFile(content));
|
|
81027
80958
|
const deduped = deduplicateIds(reminted, collectHtmlIds(content));
|
|
81028
|
-
|
|
80959
|
+
const result = insertAsSibling(
|
|
80960
|
+
content,
|
|
80961
|
+
deduped,
|
|
80962
|
+
payload.originSelector,
|
|
80963
|
+
payload.originSelectorIndex
|
|
80964
|
+
);
|
|
80965
|
+
return fromThisFile ? carryLook(result, renamedIds(reminted, deduped), 0) : result;
|
|
81029
80966
|
}
|
|
81030
80967
|
function pasteTimelineClips(content, clips, anchorTime, liveElements, fromThisFile = false) {
|
|
81031
80968
|
const groupMinStart = Math.min(...clips.map((c) => c.start));
|
|
@@ -81154,6 +81091,7 @@ function useClipboard({
|
|
|
81154
81091
|
kind: "dom-element",
|
|
81155
81092
|
html: savedMarkupElseLive(parseSavedSource(content), live, sourceFile),
|
|
81156
81093
|
sourceFile,
|
|
81094
|
+
projectId: projectIdRef.current ?? void 0,
|
|
81157
81095
|
originSelector: domSelection.selector,
|
|
81158
81096
|
originSelectorIndex: domSelection.selectorIndex
|
|
81159
81097
|
};
|
|
@@ -81195,15 +81133,17 @@ function useClipboard({
|
|
|
81195
81133
|
const targetPath = activeCompPath || "index.html";
|
|
81196
81134
|
try {
|
|
81197
81135
|
let pastedIds = [];
|
|
81136
|
+
const fromThisFile = payload.sourceFile === targetPath && payload.projectId === pid;
|
|
81198
81137
|
const paste = (originalContent) => {
|
|
81199
|
-
if (payload.kind !== "timeline-clip")
|
|
81138
|
+
if (payload.kind !== "timeline-clip")
|
|
81139
|
+
return pasteElementHtml(originalContent, payload, fromThisFile);
|
|
81200
81140
|
const { currentTime, elements } = usePlayerStore.getState();
|
|
81201
81141
|
const pasted = pasteTimelineClips(
|
|
81202
81142
|
originalContent,
|
|
81203
81143
|
payload.clips,
|
|
81204
81144
|
currentTime,
|
|
81205
81145
|
elements,
|
|
81206
|
-
|
|
81146
|
+
fromThisFile
|
|
81207
81147
|
);
|
|
81208
81148
|
pastedIds = pasted.ids;
|
|
81209
81149
|
return extendRootDurationInSource(pasted.content, pasted.requiredEnd);
|
|
@@ -82588,7 +82528,7 @@ function StudioHeader({
|
|
|
82588
82528
|
"aria-pressed": inspectorButtonActive,
|
|
82589
82529
|
className: cn(
|
|
82590
82530
|
"h-full rounded-none",
|
|
82591
|
-
inspectorButtonActive && "bg-
|
|
82531
|
+
inspectorButtonActive && "bg-on text-accent-ink enabled:hover:bg-on-hover enabled:hover:text-accent-ink"
|
|
82592
82532
|
),
|
|
82593
82533
|
icon: /* @__PURE__ */ jsx190(InspectorIcon, { size: 16 }),
|
|
82594
82534
|
onClick: () => {
|
|
@@ -83878,7 +83818,7 @@ function ContextMenu3({
|
|
|
83878
83818
|
{
|
|
83879
83819
|
role: "menuitem",
|
|
83880
83820
|
onClick: () => setMode("confirm-delete"),
|
|
83881
|
-
className: `${itemCls} text-
|
|
83821
|
+
className: `${itemCls} text-danger-ink`,
|
|
83882
83822
|
children: "Delete"
|
|
83883
83823
|
}
|
|
83884
83824
|
)
|
|
@@ -83912,10 +83852,10 @@ function ContextMenu3({
|
|
|
83912
83852
|
}
|
|
83913
83853
|
},
|
|
83914
83854
|
"aria-label": `Rename ${filename(asset)}`,
|
|
83915
|
-
className: "w-full bg-neutral-800 border border-neutral-600 rounded-sm px-1.5 py-1 text-[11px] text-
|
|
83855
|
+
className: "w-full bg-neutral-800 border border-neutral-600 rounded-sm px-1.5 py-1 text-[11px] text-text-0 focus:border-studio-accent/60 focus:outline-hidden"
|
|
83916
83856
|
}
|
|
83917
83857
|
),
|
|
83918
|
-
renameError && /* @__PURE__ */ jsx194("span", { className: "text-[10px] text-
|
|
83858
|
+
renameError && /* @__PURE__ */ jsx194("span", { className: "text-[10px] text-danger-ink", children: renameError }),
|
|
83919
83859
|
/* @__PURE__ */ jsxs153("div", { className: "flex items-center justify-end gap-1", children: [
|
|
83920
83860
|
/* @__PURE__ */ jsx194(
|
|
83921
83861
|
"button",
|
|
@@ -83929,7 +83869,7 @@ function ContextMenu3({
|
|
|
83929
83869
|
"button",
|
|
83930
83870
|
{
|
|
83931
83871
|
onClick: commitRename,
|
|
83932
|
-
className: "px-2 py-0.5 text-[10px] rounded-sm bg-
|
|
83872
|
+
className: "px-2 py-0.5 text-[10px] rounded-sm bg-accent hover:bg-accent-hover text-on-accent transition-colors",
|
|
83933
83873
|
children: "Rename"
|
|
83934
83874
|
}
|
|
83935
83875
|
)
|
|
@@ -83946,8 +83886,8 @@ function DeleteConfirm2({
|
|
|
83946
83886
|
onConfirm,
|
|
83947
83887
|
onCancel
|
|
83948
83888
|
}) {
|
|
83949
|
-
return /* @__PURE__ */ jsxs153("div", { className: "px-2 py-1.5 bg-
|
|
83950
|
-
/* @__PURE__ */ jsxs153("span", { className: "text-[10px] text-
|
|
83889
|
+
return /* @__PURE__ */ jsxs153("div", { className: "px-2 py-1.5 bg-danger/15 border-l-2 border-red-500 flex items-center justify-between gap-2", children: [
|
|
83890
|
+
/* @__PURE__ */ jsxs153("span", { className: "text-[10px] text-danger-ink truncate", children: [
|
|
83951
83891
|
"Delete ",
|
|
83952
83892
|
name,
|
|
83953
83893
|
"?"
|
|
@@ -83957,7 +83897,7 @@ function DeleteConfirm2({
|
|
|
83957
83897
|
"button",
|
|
83958
83898
|
{
|
|
83959
83899
|
onClick: onConfirm,
|
|
83960
|
-
className: "px-2 py-0.5 text-[10px] rounded-sm bg-
|
|
83900
|
+
className: "px-2 py-0.5 text-[10px] rounded-sm bg-danger text-on-danger hover:brightness-95 active:brightness-90 transition-colors",
|
|
83961
83901
|
children: "Delete"
|
|
83962
83902
|
}
|
|
83963
83903
|
),
|
|
@@ -84183,7 +84123,7 @@ function AudioRow({
|
|
|
84183
84123
|
{
|
|
84184
84124
|
"aria-label": playing ? `Pause preview of ${name}` : `Play preview of ${name}`,
|
|
84185
84125
|
"aria-pressed": playing,
|
|
84186
|
-
className: `w-7 h-7 rounded-md shrink-0 flex items-center justify-center transition-colors active:scale-[0.95] ${playing ? "bg-panel-accent/15 text-
|
|
84126
|
+
className: `w-7 h-7 rounded-md shrink-0 flex items-center justify-center transition-colors active:scale-[0.95] ${playing ? "bg-panel-accent/15 text-accent-ink" : "text-panel-text-5 group-hover:text-panel-text-3"}`,
|
|
84187
84127
|
onClick: (e) => {
|
|
84188
84128
|
e.stopPropagation();
|
|
84189
84129
|
togglePlay();
|
|
@@ -84207,12 +84147,12 @@ function AudioRow({
|
|
|
84207
84147
|
meta?.duration ? `${meta.duration}s \xB7 ` : "",
|
|
84208
84148
|
subtype
|
|
84209
84149
|
] }),
|
|
84210
|
-
used && /* @__PURE__ */ jsx195("span", { className: "text-[9px] font-medium text-
|
|
84150
|
+
used && /* @__PURE__ */ jsx195("span", { className: "text-[9px] font-medium text-accent-ink bg-panel-accent/10 px-1.5 py-px rounded-sm shrink-0", children: "in use" }),
|
|
84211
84151
|
(isCopied || copyFailed) && /* @__PURE__ */ jsx195(
|
|
84212
84152
|
"span",
|
|
84213
84153
|
{
|
|
84214
84154
|
role: "status",
|
|
84215
|
-
className: `shrink-0 text-[9px] font-medium px-1.5 py-px rounded ${copyFailed ? "text-
|
|
84155
|
+
className: `shrink-0 text-[9px] font-medium px-1.5 py-px rounded ${copyFailed ? "text-danger-ink bg-red-500/10" : "text-accent-ink bg-panel-accent/10"}`,
|
|
84216
84156
|
children: copyFailed ? "Copy failed" : "Copied"
|
|
84217
84157
|
}
|
|
84218
84158
|
)
|
|
@@ -84376,7 +84316,7 @@ function CopyChip({ feedback, asset }) {
|
|
|
84376
84316
|
"span",
|
|
84377
84317
|
{
|
|
84378
84318
|
role: "status",
|
|
84379
|
-
className: `shrink-0 text-[9px] font-medium px-1.5 py-px rounded ${feedback.ok ? "text-
|
|
84319
|
+
className: `shrink-0 text-[9px] font-medium px-1.5 py-px rounded ${feedback.ok ? "text-accent-ink bg-panel-accent/10" : "text-danger-ink bg-red-500/10"}`,
|
|
84380
84320
|
children: feedback.ok ? "Copied" : "Copy failed"
|
|
84381
84321
|
}
|
|
84382
84322
|
);
|
|
@@ -84605,7 +84545,7 @@ function FontRow({
|
|
|
84605
84545
|
onContextMenu: (e) => openAssetContextMenu(e, setContextMenu),
|
|
84606
84546
|
className: `px-2.5 py-1.5 flex items-center gap-2.5 cursor-pointer transition-colors outline-hidden focus-visible:bg-neutral-800/60 ${isCopied ? "bg-studio-accent/10 border-l-2 border-studio-accent" : "border-l-2 border-transparent hover:bg-neutral-800/50"}`,
|
|
84607
84547
|
children: [
|
|
84608
|
-
/* @__PURE__ */ jsx198("div", { className: "w-[50px] h-[32px] rounded-sm overflow-hidden bg-neutral-900 shrink-0 flex items-center justify-center", children: /* @__PURE__ */ jsx198("span", { className: "text-[9px] font-medium text-
|
|
84548
|
+
/* @__PURE__ */ jsx198("div", { className: "w-[50px] h-[32px] rounded-sm overflow-hidden bg-neutral-900 shrink-0 flex items-center justify-center", children: /* @__PURE__ */ jsx198("span", { className: "text-[9px] font-medium text-text-muted", children: extension }) }),
|
|
84609
84549
|
/* @__PURE__ */ jsxs156("div", { className: "min-w-0 flex-1", children: [
|
|
84610
84550
|
/* @__PURE__ */ jsx198(
|
|
84611
84551
|
"span",
|
|
@@ -84616,7 +84556,7 @@ function FontRow({
|
|
|
84616
84556
|
),
|
|
84617
84557
|
/* @__PURE__ */ jsxs156("div", { className: "flex items-center gap-1.5", children: [
|
|
84618
84558
|
/* @__PURE__ */ jsx198("span", { className: "text-[10px] text-neutral-600 truncate", children: extension }),
|
|
84619
|
-
used && /* @__PURE__ */ jsx198("span", { className: "text-[9px] font-medium text-
|
|
84559
|
+
used && /* @__PURE__ */ jsx198("span", { className: "text-[9px] font-medium text-accent-ink bg-panel-accent/10 px-1.5 py-px rounded-sm", children: "in use" }),
|
|
84620
84560
|
/* @__PURE__ */ jsx198(CopyChip, { feedback: copyFeedback, asset })
|
|
84621
84561
|
] })
|
|
84622
84562
|
] })
|
|
@@ -84749,7 +84689,7 @@ function EmptyState({
|
|
|
84749
84689
|
fill: "none",
|
|
84750
84690
|
stroke: "currentColor",
|
|
84751
84691
|
strokeWidth: "1.5",
|
|
84752
|
-
className: "text-
|
|
84692
|
+
className: "text-text-off",
|
|
84753
84693
|
children: [
|
|
84754
84694
|
/* @__PURE__ */ jsx199(
|
|
84755
84695
|
"path",
|
|
@@ -84898,7 +84838,7 @@ var AssetsTab = memo41(function AssetsTab2({
|
|
|
84898
84838
|
"button",
|
|
84899
84839
|
{
|
|
84900
84840
|
onClick: () => setViewMode(m),
|
|
84901
|
-
className: `flex-1 px-2 py-1 text-[11px] font-medium rounded transition-colors ${viewMode === m ? "bg-panel-accent/15 text-
|
|
84841
|
+
className: `flex-1 px-2 py-1 text-[11px] font-medium rounded transition-colors ${viewMode === m ? "bg-panel-accent/15 text-accent-ink" : "text-panel-text-3 hover:text-panel-text-1"}`,
|
|
84902
84842
|
children: m === "local" ? "This project" : "All projects"
|
|
84903
84843
|
},
|
|
84904
84844
|
m
|
|
@@ -84938,7 +84878,7 @@ var AssetsTab = memo41(function AssetsTab2({
|
|
|
84938
84878
|
{
|
|
84939
84879
|
onClick: () => setActiveFilter("all"),
|
|
84940
84880
|
"aria-pressed": activeFilter === "all",
|
|
84941
|
-
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors active:scale-[0.98] ${activeFilter === "all" ? "bg-panel-accent/15 text-
|
|
84881
|
+
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors active:scale-[0.98] ${activeFilter === "all" ? "bg-panel-accent/15 text-accent-ink" : "bg-panel-input text-panel-text-3 hover:text-panel-text-1"}`,
|
|
84942
84882
|
children: [
|
|
84943
84883
|
"All ",
|
|
84944
84884
|
counts.all
|
|
@@ -84951,7 +84891,7 @@ var AssetsTab = memo41(function AssetsTab2({
|
|
|
84951
84891
|
{
|
|
84952
84892
|
onClick: () => setActiveFilter(activeFilter === cat ? "all" : cat),
|
|
84953
84893
|
"aria-pressed": activeFilter === cat,
|
|
84954
|
-
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors active:scale-[0.98] ${activeFilter === cat ? "bg-panel-accent/15 text-
|
|
84894
|
+
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors active:scale-[0.98] ${activeFilter === cat ? "bg-panel-accent/15 text-accent-ink" : "bg-panel-input text-panel-text-3 hover:text-panel-text-1"}`,
|
|
84955
84895
|
children: [
|
|
84956
84896
|
CATEGORY_LABELS[cat],
|
|
84957
84897
|
" ",
|
|
@@ -84967,7 +84907,7 @@ var AssetsTab = memo41(function AssetsTab2({
|
|
|
84967
84907
|
"button",
|
|
84968
84908
|
{
|
|
84969
84909
|
onClick: () => setUsageFilter(usageFilter === "used" ? "all" : "used"),
|
|
84970
|
-
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors ${usageFilter === "used" ? "bg-panel-accent/15 text-
|
|
84910
|
+
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors ${usageFilter === "used" ? "bg-panel-accent/15 text-accent-ink" : "bg-panel-input text-panel-text-3 hover:text-panel-text-1"}`,
|
|
84971
84911
|
children: [
|
|
84972
84912
|
"In use ",
|
|
84973
84913
|
usageCounts.used
|
|
@@ -84978,7 +84918,7 @@ var AssetsTab = memo41(function AssetsTab2({
|
|
|
84978
84918
|
"button",
|
|
84979
84919
|
{
|
|
84980
84920
|
onClick: () => setUsageFilter(usageFilter === "unused" ? "all" : "unused"),
|
|
84981
|
-
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors ${usageFilter === "unused" ? "bg-panel-accent/15 text-
|
|
84921
|
+
className: `px-2.5 py-1 text-[11px] font-medium rounded-md transition-colors ${usageFilter === "unused" ? "bg-panel-accent/15 text-accent-ink" : "bg-panel-input text-panel-text-3 hover:text-panel-text-1"}`,
|
|
84982
84922
|
children: [
|
|
84983
84923
|
"Unused ",
|
|
84984
84924
|
usageCounts.unused
|
|
@@ -85152,7 +85092,7 @@ function PromptPreviewModal({
|
|
|
85152
85092
|
/* @__PURE__ */ jsx200(
|
|
85153
85093
|
"button",
|
|
85154
85094
|
{
|
|
85155
|
-
className: `px-4 py-1.5 rounded-lg text-xs font-medium transition-colors active:scale-[0.97] ${copyState === "copied" ? "bg-
|
|
85095
|
+
className: `px-4 py-1.5 rounded-lg text-xs font-medium transition-colors active:scale-[0.97] ${copyState === "copied" ? "bg-accent text-on-accent" : copyState === "failed" ? "bg-danger text-on-danger" : "bg-accent text-on-accent hover:bg-accent-hover"}`,
|
|
85156
85096
|
onClick: handleCopy2,
|
|
85157
85097
|
children: copyState === "copied" ? "Copied!" : copyState === "failed" ? "Copy failed" : "Copy prompt"
|
|
85158
85098
|
}
|
|
@@ -85174,7 +85114,7 @@ var BlocksTab = memo42(function BlocksTab2({ onAddBlock, onPreviewBlock }) {
|
|
|
85174
85114
|
return /* @__PURE__ */ jsx201("div", { className: "flex flex-1 items-center justify-center text-neutral-600 text-xs", children: "Loading blocks\u2026" });
|
|
85175
85115
|
}
|
|
85176
85116
|
if (error) {
|
|
85177
|
-
return /* @__PURE__ */ jsx201("div", { className: "flex flex-1 items-center justify-center text-
|
|
85117
|
+
return /* @__PURE__ */ jsx201("div", { className: "flex flex-1 items-center justify-center text-danger-ink text-xs px-4 text-center", children: error });
|
|
85178
85118
|
}
|
|
85179
85119
|
return /* @__PURE__ */ jsxs159("div", { className: "flex flex-col flex-1 min-h-0", children: [
|
|
85180
85120
|
/* @__PURE__ */ jsx201("div", { className: "px-3 pt-2 pb-1 shrink-0", children: /* @__PURE__ */ jsx201(
|
|
@@ -85200,10 +85140,10 @@ var BlocksTab = memo42(function BlocksTab2({ onAddBlock, onPreviewBlock }) {
|
|
|
85200
85140
|
))
|
|
85201
85141
|
] }) }),
|
|
85202
85142
|
/* @__PURE__ */ jsxs159("div", { className: "flex-1 overflow-y-auto min-h-0 px-2 pb-2", children: [
|
|
85203
|
-
category === "vfx" && /* @__PURE__ */ jsxs159("div", { className: "mb-2 px-2 py-1.5 rounded-md bg-purple-500/10 border border-purple-500/20 text-[9px] text-
|
|
85143
|
+
category === "vfx" && /* @__PURE__ */ jsxs159("div", { className: "mb-2 px-2 py-1.5 rounded-md bg-purple-500/10 border border-purple-500/20 text-[9px] text-text-2 leading-relaxed", children: [
|
|
85204
85144
|
"VFX blocks use WebGL via HTML-in-Canvas. Enable",
|
|
85205
85145
|
" ",
|
|
85206
|
-
/* @__PURE__ */ jsx201("span", { className: "font-mono text-
|
|
85146
|
+
/* @__PURE__ */ jsx201("span", { className: "font-mono text-text-0", children: "chrome://flags/#html-in-canvas" }),
|
|
85207
85147
|
" for preview."
|
|
85208
85148
|
] }),
|
|
85209
85149
|
filteredBlocks.length === 0 ? /* @__PURE__ */ jsx201("div", { className: "flex items-center justify-center h-32 text-neutral-600 text-xs", children: "No blocks match your search" }) : /* @__PURE__ */ jsx201(
|
|
@@ -85467,7 +85407,7 @@ function BlockCard({
|
|
|
85467
85407
|
type: "button",
|
|
85468
85408
|
onClick: handleAdd,
|
|
85469
85409
|
title: "Add to composition at current time",
|
|
85470
|
-
className: `flex items-center gap-1 px-3 py-1.5 rounded-md text-[10px] font-semibold transition-colors active:scale-[0.97] ${addState === "failed" ? "bg-
|
|
85410
|
+
className: `flex items-center gap-1 px-3 py-1.5 rounded-md text-[10px] font-semibold transition-colors active:scale-[0.97] ${addState === "failed" ? "bg-danger text-on-danger" : "bg-white text-black hover:bg-white/85"}`,
|
|
85471
85411
|
children: [
|
|
85472
85412
|
/* @__PURE__ */ jsx201(
|
|
85473
85413
|
"svg",
|
|
@@ -85491,7 +85431,7 @@ function BlockCard({
|
|
|
85491
85431
|
type: "button",
|
|
85492
85432
|
onClick: handleShowPrompt,
|
|
85493
85433
|
title: "Generate a prompt to paste into your AI agent",
|
|
85494
|
-
className: `flex items-center gap-1.5 px-3 ${onAdd ? "py-1" : "py-1.5"} rounded-md transition-colors active:scale-[0.97] ${onAdd ? "bg-white/15 text-white/90 hover:bg-white/25 text-[9px]" : "bg-
|
|
85434
|
+
className: `flex items-center gap-1.5 px-3 ${onAdd ? "py-1" : "py-1.5"} rounded-md transition-colors active:scale-[0.97] ${onAdd ? "bg-white/15 text-white/90 hover:bg-white/25 text-[9px]" : "bg-text-0 text-bg-0 hover:bg-text-2 text-[10px] font-semibold"}`,
|
|
85495
85435
|
children: [
|
|
85496
85436
|
/* @__PURE__ */ jsxs159(
|
|
85497
85437
|
"svg",
|
|
@@ -85534,7 +85474,7 @@ function BlockCard({
|
|
|
85534
85474
|
}
|
|
85535
85475
|
|
|
85536
85476
|
// src/components/sidebar/CompositionsTab.tsx
|
|
85537
|
-
import { memo as memo43, useCallback as useCallback163, useEffect as useEffect136, useRef as useRef169, useState as useState132 } from "react";
|
|
85477
|
+
import { memo as memo43, useCallback as useCallback163, useEffect as useEffect136, useLayoutEffect as useLayoutEffect12, useMemo as useMemo80, useRef as useRef169, useState as useState132 } from "react";
|
|
85538
85478
|
import { jsx as jsx202, jsxs as jsxs160 } from "react/jsx-runtime";
|
|
85539
85479
|
var DEFAULT_PREVIEW_STAGE = { width: 1920, height: 1080 };
|
|
85540
85480
|
var CARD_W = 80;
|
|
@@ -85597,6 +85537,34 @@ function syncIframePlayback(iframe, shouldPlay) {
|
|
|
85597
85537
|
return false;
|
|
85598
85538
|
}
|
|
85599
85539
|
}
|
|
85540
|
+
var imageUrlOf = (snapshot3) => snapshot3.status === "ready" && snapshot3.value.kind === "image" ? snapshot3.value.url : null;
|
|
85541
|
+
function useLastFrame(request, snapshot3) {
|
|
85542
|
+
const current = imageUrlOf(snapshot3);
|
|
85543
|
+
const [kept, setKept] = useState132(null);
|
|
85544
|
+
if (request && current && kept?.request !== request) setKept({ request, url: current });
|
|
85545
|
+
useLayoutEffect12(() => {
|
|
85546
|
+
if (!kept || kept.request === request) return;
|
|
85547
|
+
const lease = thumbnailScheduler.acquire(kept.request, () => {
|
|
85548
|
+
});
|
|
85549
|
+
return () => lease.release();
|
|
85550
|
+
}, [kept, request]);
|
|
85551
|
+
return current ?? kept?.url ?? null;
|
|
85552
|
+
}
|
|
85553
|
+
function useNearViewport() {
|
|
85554
|
+
const [element, setElement] = useState132(null);
|
|
85555
|
+
const [near2, setNear] = useState132(false);
|
|
85556
|
+
useEffect136(() => {
|
|
85557
|
+
if (!element || near2) return;
|
|
85558
|
+
if (typeof IntersectionObserver === "undefined") return setNear(true);
|
|
85559
|
+
const observer = new IntersectionObserver(
|
|
85560
|
+
(entries) => entries.some((entry2) => entry2.isIntersecting) && setNear(true),
|
|
85561
|
+
{ root: element.closest("[data-composition-list]"), rootMargin: "200px" }
|
|
85562
|
+
);
|
|
85563
|
+
observer.observe(element);
|
|
85564
|
+
return () => observer.disconnect();
|
|
85565
|
+
}, [element, near2]);
|
|
85566
|
+
return [setElement, near2];
|
|
85567
|
+
}
|
|
85600
85568
|
function CompCard({
|
|
85601
85569
|
projectId,
|
|
85602
85570
|
comp,
|
|
@@ -85613,7 +85581,6 @@ function CompCard({
|
|
|
85613
85581
|
const [hovered, setHovered] = useState132(false);
|
|
85614
85582
|
const [stageSize, setStageSize] = useState132(DEFAULT_PREVIEW_STAGE);
|
|
85615
85583
|
const [livePreviewLoaded, setLivePreviewLoaded] = useState132(false);
|
|
85616
|
-
const [failedThumbnailUrl, setFailedThumbnailUrl] = useState132(null);
|
|
85617
85584
|
const iframeRef = useRef169(null);
|
|
85618
85585
|
const hoverTimer = useRef169(null);
|
|
85619
85586
|
const syncTimer = useRef169(null);
|
|
@@ -85647,7 +85614,18 @@ function CompCard({
|
|
|
85647
85614
|
const name = comp.replace(/^compositions\//, "").replace(/\.html$/, "");
|
|
85648
85615
|
const previewUrl = compositionPreviewUrl(projectId, comp);
|
|
85649
85616
|
const thumbnailUrl2 = compositionCardThumbnailUrl(projectId, comp, contentRevision);
|
|
85650
|
-
const
|
|
85617
|
+
const [thumbnailBox, nearViewport] = useNearViewport();
|
|
85618
|
+
const timelineSessionEpoch = usePlayerStore((state) => state.timelineSessionEpoch);
|
|
85619
|
+
const thumbnailRequest = useMemo80(
|
|
85620
|
+
() => previewBooted && nearViewport ? compositionThumbnailRequest(thumbnailUrl2, projectId, {
|
|
85621
|
+
sessionEpoch: timelineSessionEpoch,
|
|
85622
|
+
rich: true
|
|
85623
|
+
}) : null,
|
|
85624
|
+
[previewBooted, nearViewport, thumbnailUrl2, projectId, timelineSessionEpoch]
|
|
85625
|
+
);
|
|
85626
|
+
const thumbnail = useThumbnailLease(thumbnailRequest);
|
|
85627
|
+
const frameUrl = useLastFrame(thumbnailRequest, thumbnail);
|
|
85628
|
+
const thumbnailFailed = thumbnail.status === "error";
|
|
85651
85629
|
const previewScale = resolveCompositionPreviewScale({
|
|
85652
85630
|
cardWidth: CARD_W,
|
|
85653
85631
|
cardHeight: CARD_H,
|
|
@@ -85697,52 +85675,57 @@ function CompCard({
|
|
|
85697
85675
|
onPointerLeave: handleLeave,
|
|
85698
85676
|
className: `group/card w-full select-none text-left px-2 py-1.5 flex items-center gap-2.5 transition-colors cursor-grab active:cursor-grabbing outline-hidden focus-visible:bg-neutral-800/60 ${isActive ? "bg-studio-accent/10 border-l-2 border-studio-accent" : "border-l-2 border-transparent hover:bg-neutral-800/50"}`,
|
|
85699
85677
|
children: [
|
|
85700
|
-
/* @__PURE__ */ jsxs160(
|
|
85701
|
-
|
|
85702
|
-
|
|
85703
|
-
|
|
85704
|
-
|
|
85705
|
-
|
|
85706
|
-
|
|
85707
|
-
|
|
85708
|
-
|
|
85709
|
-
|
|
85710
|
-
|
|
85711
|
-
|
|
85712
|
-
|
|
85713
|
-
|
|
85714
|
-
"iframe",
|
|
85715
|
-
{
|
|
85716
|
-
ref: iframeRef,
|
|
85717
|
-
src: previewUrl,
|
|
85718
|
-
sandbox: "allow-scripts allow-same-origin",
|
|
85719
|
-
className: "absolute border-none pointer-events-none",
|
|
85720
|
-
style: {
|
|
85721
|
-
transformOrigin: "0 0",
|
|
85722
|
-
width: stageSize.width,
|
|
85723
|
-
height: stageSize.height,
|
|
85724
|
-
left: thumbnailOffsetX,
|
|
85725
|
-
top: thumbnailOffsetY,
|
|
85726
|
-
transform: `scale(${previewScale})`
|
|
85727
|
-
},
|
|
85728
|
-
onLoad: (e) => {
|
|
85729
|
-
try {
|
|
85730
|
-
const iframe = e.currentTarget;
|
|
85731
|
-
const root = iframe.contentDocument?.querySelector("[data-composition-id]");
|
|
85732
|
-
const width = Number(root?.getAttribute("data-width")) || DEFAULT_PREVIEW_STAGE.width;
|
|
85733
|
-
const height = Number(root?.getAttribute("data-height")) || DEFAULT_PREVIEW_STAGE.height;
|
|
85734
|
-
setStageSize({ width, height });
|
|
85735
|
-
setLivePreviewLoaded(true);
|
|
85736
|
-
requestIframePlaybackSync(true);
|
|
85737
|
-
} catch {
|
|
85738
|
-
setStageSize(DEFAULT_PREVIEW_STAGE);
|
|
85678
|
+
/* @__PURE__ */ jsxs160(
|
|
85679
|
+
"div",
|
|
85680
|
+
{
|
|
85681
|
+
ref: thumbnailBox,
|
|
85682
|
+
className: "w-20 h-[45px] rounded-sm overflow-hidden bg-neutral-900 shrink-0 relative",
|
|
85683
|
+
children: [
|
|
85684
|
+
thumbnailFailed ? /* @__PURE__ */ jsx202("div", { className: "absolute inset-0 flex items-center justify-center px-1 text-center text-[8px] leading-tight text-neutral-600", children: "Preview unavailable" }) : !frameUrl ? null : /* @__PURE__ */ jsx202(
|
|
85685
|
+
"img",
|
|
85686
|
+
{
|
|
85687
|
+
src: frameUrl,
|
|
85688
|
+
alt: "",
|
|
85689
|
+
draggable: false,
|
|
85690
|
+
decoding: "async",
|
|
85691
|
+
className: `absolute inset-0 h-full w-full object-contain transition-opacity ${livePreviewLoaded ? "opacity-0" : "opacity-100"}`
|
|
85739
85692
|
}
|
|
85740
|
-
|
|
85741
|
-
|
|
85742
|
-
|
|
85743
|
-
|
|
85744
|
-
|
|
85745
|
-
|
|
85693
|
+
),
|
|
85694
|
+
hovered && /* @__PURE__ */ jsx202(
|
|
85695
|
+
"iframe",
|
|
85696
|
+
{
|
|
85697
|
+
ref: iframeRef,
|
|
85698
|
+
src: previewUrl,
|
|
85699
|
+
sandbox: "allow-scripts allow-same-origin",
|
|
85700
|
+
className: "absolute border-none pointer-events-none",
|
|
85701
|
+
style: {
|
|
85702
|
+
transformOrigin: "0 0",
|
|
85703
|
+
width: stageSize.width,
|
|
85704
|
+
height: stageSize.height,
|
|
85705
|
+
left: thumbnailOffsetX,
|
|
85706
|
+
top: thumbnailOffsetY,
|
|
85707
|
+
transform: `scale(${previewScale})`
|
|
85708
|
+
},
|
|
85709
|
+
onLoad: (e) => {
|
|
85710
|
+
try {
|
|
85711
|
+
const iframe = e.currentTarget;
|
|
85712
|
+
const root = iframe.contentDocument?.querySelector("[data-composition-id]");
|
|
85713
|
+
const width = Number(root?.getAttribute("data-width")) || DEFAULT_PREVIEW_STAGE.width;
|
|
85714
|
+
const height = Number(root?.getAttribute("data-height")) || DEFAULT_PREVIEW_STAGE.height;
|
|
85715
|
+
setStageSize({ width, height });
|
|
85716
|
+
setLivePreviewLoaded(true);
|
|
85717
|
+
requestIframePlaybackSync(true);
|
|
85718
|
+
} catch {
|
|
85719
|
+
setStageSize(DEFAULT_PREVIEW_STAGE);
|
|
85720
|
+
}
|
|
85721
|
+
},
|
|
85722
|
+
title: `${name} preview`,
|
|
85723
|
+
tabIndex: -1
|
|
85724
|
+
}
|
|
85725
|
+
)
|
|
85726
|
+
]
|
|
85727
|
+
}
|
|
85728
|
+
),
|
|
85746
85729
|
/* @__PURE__ */ jsxs160(
|
|
85747
85730
|
"div",
|
|
85748
85731
|
{
|
|
@@ -85764,7 +85747,7 @@ function CompCard({
|
|
|
85764
85747
|
"span",
|
|
85765
85748
|
{
|
|
85766
85749
|
"aria-label": `${lintInfo.count} lint finding${lintInfo.count === 1 ? "" : "s"}`,
|
|
85767
|
-
className: "shrink-0 min-w-[16px] text-center rounded-full bg-amber-500/20 px-1 text-[8px] font-bold text-
|
|
85750
|
+
className: "shrink-0 min-w-[16px] text-center rounded-full bg-amber-500/20 px-1 text-[8px] font-bold text-warning-ink",
|
|
85768
85751
|
children: lintInfo.count
|
|
85769
85752
|
}
|
|
85770
85753
|
)
|
|
@@ -85783,7 +85766,7 @@ function CompCard({
|
|
|
85783
85766
|
event.stopPropagation();
|
|
85784
85767
|
onAddToTimeline();
|
|
85785
85768
|
},
|
|
85786
|
-
className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-sm text-neutral-600 opacity-0 transition-[color,background-color,opacity] hover:bg-neutral-800 hover:text-
|
|
85769
|
+
className: "flex h-8 w-8 shrink-0 items-center justify-center rounded-sm text-neutral-600 opacity-0 transition-[color,background-color,opacity] hover:bg-neutral-800 hover:text-accent-ink group-hover/card:opacity-100 group-focus-within/card:opacity-100 focus:opacity-100",
|
|
85787
85770
|
children: /* @__PURE__ */ jsx202("span", { "aria-hidden": "true", children: "+" })
|
|
85788
85771
|
}
|
|
85789
85772
|
),
|
|
@@ -85797,7 +85780,7 @@ function CompCard({
|
|
|
85797
85780
|
e.stopPropagation();
|
|
85798
85781
|
onRender();
|
|
85799
85782
|
},
|
|
85800
|
-
className: `flex h-6 w-6 shrink-0 items-center justify-center rounded transition-colors ${isRendering ? "text-neutral-600 cursor-not-allowed" : "text-neutral-600 hover:text-
|
|
85783
|
+
className: `flex h-6 w-6 shrink-0 items-center justify-center rounded transition-colors ${isRendering ? "text-neutral-600 cursor-not-allowed" : "text-neutral-600 hover:text-accent-ink hover:bg-neutral-800"}`,
|
|
85801
85784
|
children: /* @__PURE__ */ jsxs160(
|
|
85802
85785
|
"svg",
|
|
85803
85786
|
{
|
|
@@ -85839,7 +85822,7 @@ var CompositionsTab = memo43(function CompositionsTab2({
|
|
|
85839
85822
|
if (compositions.length === 0) {
|
|
85840
85823
|
return /* @__PURE__ */ jsx202("div", { className: "flex-1 flex items-center justify-center px-4", children: /* @__PURE__ */ jsx202("p", { className: "text-xs text-neutral-600 text-center", children: "No compositions found" }) });
|
|
85841
85824
|
}
|
|
85842
|
-
return /* @__PURE__ */ jsx202("div", { className: "flex-1 overflow-y-auto", children: compositions.map((comp) => /* @__PURE__ */ jsx202(
|
|
85825
|
+
return /* @__PURE__ */ jsx202("div", { className: "flex-1 overflow-y-auto", "data-composition-list": true, children: compositions.map((comp) => /* @__PURE__ */ jsx202(
|
|
85843
85826
|
CompCard,
|
|
85844
85827
|
{
|
|
85845
85828
|
projectId,
|
|
@@ -85885,7 +85868,7 @@ function SidebarLintButton({
|
|
|
85885
85868
|
type: "button",
|
|
85886
85869
|
onClick: onLint,
|
|
85887
85870
|
disabled: linting,
|
|
85888
|
-
className: "w-full flex items-center justify-center gap-1.5 px-2 py-1.5 rounded-md text-[11px] font-medium text-neutral-500 enabled:hover:text-
|
|
85871
|
+
className: "w-full flex items-center justify-center gap-1.5 px-2 py-1.5 rounded-md text-[11px] font-medium text-neutral-500 enabled:hover:text-warning-ink enabled:hover:bg-neutral-800 enabled:active:scale-[0.98] transition-colors disabled:opacity-40",
|
|
85889
85872
|
children: [
|
|
85890
85873
|
/* @__PURE__ */ jsxs161(
|
|
85891
85874
|
"svg",
|
|
@@ -85908,7 +85891,7 @@ function SidebarLintButton({
|
|
|
85908
85891
|
{
|
|
85909
85892
|
"data-lint-badge": hasError ? "error" : "warning",
|
|
85910
85893
|
style: hasError ? { animationIterationCount: ERROR_PULSES_BEFORE_IDLE } : void 0,
|
|
85911
|
-
className: hasError ? "ml-1 min-w-[16px] rounded-full bg-
|
|
85894
|
+
className: hasError ? "ml-1 min-w-[16px] rounded-full bg-danger px-1 text-[9px] font-bold text-on-danger animate-pulse motion-reduce:animate-none" : "ml-1 min-w-[16px] rounded-full bg-amber-500/20 px-1 text-[9px] font-bold text-warning-ink",
|
|
85912
85895
|
children: [
|
|
85913
85896
|
findingCount,
|
|
85914
85897
|
/* @__PURE__ */ jsx204("span", { className: "sr-only", children: hasError ? " lint findings, including errors" : " lint findings, warnings only" })
|
|
@@ -86646,7 +86629,7 @@ var LayersPanel = memo44(function LayersPanel2() {
|
|
|
86646
86629
|
handleSelectLayer(layer);
|
|
86647
86630
|
}
|
|
86648
86631
|
},
|
|
86649
|
-
className: `group flex w-full items-center gap-1.5 px-2 py-1 text-left transition-colors ${isDragged ? "opacity-40" : selected ? "bg-panel-accent/14 text-
|
|
86632
|
+
className: `group flex w-full items-center gap-1.5 px-2 py-1 text-left transition-colors ${isDragged ? "opacity-40" : selected ? "bg-panel-accent/14 text-accent-ink" : "text-panel-text-2 hover:bg-panel-hover/40 hover:text-panel-text-1"} ${dragKey ? "cursor-grabbing" : "cursor-pointer"}`,
|
|
86650
86633
|
style: { paddingLeft: 8 + layer.depth * 16 },
|
|
86651
86634
|
title: draggable ? layer.element.hasAttribute("data-hf-group") ? "Double-click to enter group" : void 0 : "This layer can't be reordered",
|
|
86652
86635
|
children: [
|
|
@@ -86674,7 +86657,7 @@ var LayersPanel = memo44(function LayersPanel2() {
|
|
|
86674
86657
|
/* @__PURE__ */ jsx206(
|
|
86675
86658
|
"span",
|
|
86676
86659
|
{
|
|
86677
|
-
className: `flex h-5 w-5 shrink-0 items-center justify-center rounded text-[8px] font-bold uppercase ${selected ? "bg-panel-accent/18 text-
|
|
86660
|
+
className: `flex h-5 w-5 shrink-0 items-center justify-center rounded text-[8px] font-bold uppercase ${selected ? "bg-panel-accent/18 text-accent-ink" : isCompHost ? "bg-on text-accent-ink" : "bg-panel-hover text-panel-text-4"}`,
|
|
86678
86661
|
children: getTagBadge(layer.tagName)
|
|
86679
86662
|
}
|
|
86680
86663
|
),
|
|
@@ -86955,7 +86938,7 @@ var CaptionAnimationPanel = memo45(function CaptionAnimationPanel2() {
|
|
|
86955
86938
|
}
|
|
86956
86939
|
const gated = !ANIMATION_PIPELINE_WIRED;
|
|
86957
86940
|
return /* @__PURE__ */ jsxs165("div", { className: "flex flex-col h-full min-h-0", children: [
|
|
86958
|
-
gated && /* @__PURE__ */ jsx208("div", { className: "shrink-0 mx-3 mt-2 px-2 py-1.5 rounded-sm border border-amber-500/30 bg-amber-500/10", children: /* @__PURE__ */ jsx208("p", { className: "text-2xs text-
|
|
86941
|
+
gated && /* @__PURE__ */ jsx208("div", { className: "shrink-0 mx-3 mt-2 px-2 py-1.5 rounded-sm border border-amber-500/30 bg-amber-500/10", children: /* @__PURE__ */ jsx208("p", { className: "text-2xs text-warning-ink leading-snug", children: "Animation editing isn't applied to playback or saved yet, so these controls are disabled." }) }),
|
|
86959
86942
|
/* @__PURE__ */ jsxs165("div", { className: "flex-1 overflow-y-auto px-3 py-2", children: [
|
|
86960
86943
|
/* @__PURE__ */ jsx208(
|
|
86961
86944
|
AnimationPhase,
|
|
@@ -86996,7 +86979,7 @@ var CaptionAnimationPanel = memo45(function CaptionAnimationPanel2() {
|
|
|
86996
86979
|
onClick: handleApplyToAll,
|
|
86997
86980
|
disabled: gated,
|
|
86998
86981
|
title: gated ? "Disabled until animation editing is applied to playback" : void 0,
|
|
86999
|
-
className: "w-full py-1.5 rounded-sm border border-neutral-700 text-2xs text-neutral-300 hover:border-studio-accent/50 hover:text-
|
|
86982
|
+
className: "w-full py-1.5 rounded-sm border border-neutral-700 text-2xs text-neutral-300 hover:border-studio-accent/50 hover:text-accent-ink transition-colors disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:border-neutral-700 disabled:hover:text-neutral-300",
|
|
87000
86983
|
children: "Apply to all groups"
|
|
87001
86984
|
}
|
|
87002
86985
|
) })
|
|
@@ -87157,7 +87140,7 @@ var CaptionPropertyPanel = memo46(function CaptionPropertyPanel2({
|
|
|
87157
87140
|
onClick: () => setActiveTab("style"),
|
|
87158
87141
|
className: [
|
|
87159
87142
|
"flex-1 py-0.5 rounded-sm text-2xs font-medium transition-colors",
|
|
87160
|
-
activeTab === "style" ? "bg-studio-accent/20 text-
|
|
87143
|
+
activeTab === "style" ? "bg-studio-accent/20 text-accent-ink border border-studio-accent/50" : "text-neutral-500 border border-neutral-800 hover:text-neutral-300 hover:border-neutral-600"
|
|
87161
87144
|
].join(" "),
|
|
87162
87145
|
children: "Style"
|
|
87163
87146
|
}
|
|
@@ -87171,7 +87154,7 @@ var CaptionPropertyPanel = memo46(function CaptionPropertyPanel2({
|
|
|
87171
87154
|
onClick: () => setActiveTab("animation"),
|
|
87172
87155
|
className: [
|
|
87173
87156
|
"flex-1 py-0.5 rounded-sm text-2xs font-medium transition-colors",
|
|
87174
|
-
activeTab === "animation" ? "bg-studio-accent/20 text-
|
|
87157
|
+
activeTab === "animation" ? "bg-studio-accent/20 text-accent-ink border border-studio-accent/50" : "text-neutral-500 border border-neutral-800 hover:text-neutral-300 hover:border-neutral-600"
|
|
87175
87158
|
].join(" "),
|
|
87176
87159
|
children: "Animation"
|
|
87177
87160
|
}
|
|
@@ -87362,7 +87345,7 @@ var BlockParamsPanel = memo47(function BlockParamsPanel2({
|
|
|
87362
87345
|
/* @__PURE__ */ jsxs167("div", { className: "flex-1 overflow-y-auto p-3 space-y-3", children: [
|
|
87363
87346
|
/* @__PURE__ */ jsx210("div", { className: "text-[9px] font-medium text-neutral-500 uppercase tracking-wider", children: "Parameters" }),
|
|
87364
87347
|
params.length === 0 && /* @__PURE__ */ jsx210("div", { className: "text-[10px] text-neutral-500", children: "This block has no editable parameters." }),
|
|
87365
|
-
!fileManager && params.length > 0 && /* @__PURE__ */ jsx210("div", { className: "text-[10px] text-
|
|
87348
|
+
!fileManager && params.length > 0 && /* @__PURE__ */ jsx210("div", { className: "text-[10px] text-warning-ink", children: "Block params can't be edited here \u2014 no project file access." }),
|
|
87366
87349
|
params.map((param) => /* @__PURE__ */ jsx210(
|
|
87367
87350
|
ParamControl,
|
|
87368
87351
|
{
|
|
@@ -87374,11 +87357,11 @@ var BlockParamsPanel = memo47(function BlockParamsPanel2({
|
|
|
87374
87357
|
param.key
|
|
87375
87358
|
)),
|
|
87376
87359
|
commitState.tone === "saving" && /* @__PURE__ */ jsx210("div", { className: "text-[10px] text-neutral-500", role: "status", children: "Saving\u2026" }),
|
|
87377
|
-
commitState.tone === "saved" && /* @__PURE__ */ jsxs167("div", { className: "text-[10px] text-
|
|
87360
|
+
commitState.tone === "saved" && /* @__PURE__ */ jsxs167("div", { className: "text-[10px] text-accent-ink", role: "status", children: [
|
|
87378
87361
|
"Saved to ",
|
|
87379
87362
|
compositionPath
|
|
87380
87363
|
] }),
|
|
87381
|
-
commitState.tone === "error" && /* @__PURE__ */ jsx210("div", { className: "text-[10px] text-
|
|
87364
|
+
commitState.tone === "error" && /* @__PURE__ */ jsx210("div", { className: "text-[10px] text-danger-ink", role: "alert", children: commitState.message })
|
|
87382
87365
|
] })
|
|
87383
87366
|
] });
|
|
87384
87367
|
});
|
|
@@ -87460,7 +87443,7 @@ function ParamControl({
|
|
|
87460
87443
|
import { memo as memo51 } from "react";
|
|
87461
87444
|
|
|
87462
87445
|
// src/components/renders/RenderQueue.tsx
|
|
87463
|
-
import { memo as memo50, useState as useState140, useRef as useRef175, useEffect as useEffect141, useLayoutEffect as
|
|
87446
|
+
import { memo as memo50, useState as useState140, useRef as useRef175, useEffect as useEffect141, useLayoutEffect as useLayoutEffect13, useId as useId5 } from "react";
|
|
87464
87447
|
import { createPortal as createPortal10 } from "react-dom";
|
|
87465
87448
|
import { CANVAS_DIMENSIONS } from "@hyperframes/parsers";
|
|
87466
87449
|
|
|
@@ -87552,7 +87535,7 @@ var RenderQueueItem = memo48(function RenderQueueItem2({
|
|
|
87552
87535
|
)
|
|
87553
87536
|
] }),
|
|
87554
87537
|
isRendering && /* @__PURE__ */ jsx211("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx211("div", { className: "w-2 h-2 rounded-full bg-accent animate-pulse motion-reduce:animate-none" }) }),
|
|
87555
|
-
job.status === "failed" && /* @__PURE__ */ jsx211("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx211("div", { className: "w-2 h-2 rounded-full bg-danger" }) }),
|
|
87538
|
+
job.status === "failed" && /* @__PURE__ */ jsx211("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx211("div", { className: "w-2 h-2 rounded-full bg-danger-ink" }) }),
|
|
87556
87539
|
job.status === "cancelled" && /* @__PURE__ */ jsx211("div", { className: "w-full h-full flex items-center justify-center", children: /* @__PURE__ */ jsx211("div", { className: "w-2 h-2 rounded-full bg-text-5" }) })
|
|
87557
87540
|
]
|
|
87558
87541
|
}
|
|
@@ -87565,7 +87548,7 @@ var RenderQueueItem = memo48(function RenderQueueItem2({
|
|
|
87565
87548
|
isRendering && /* @__PURE__ */ jsxs168("div", { className: "mt-1", children: [
|
|
87566
87549
|
/* @__PURE__ */ jsxs168("div", { className: "flex items-center justify-between mb-0.5", children: [
|
|
87567
87550
|
/* @__PURE__ */ jsx211("span", { className: "text-step-9 text-text-4", children: job.stage || "Rendering" }),
|
|
87568
|
-
/* @__PURE__ */ jsxs168("span", { className: "text-step-9 font-mono text-accent", children: [
|
|
87551
|
+
/* @__PURE__ */ jsxs168("span", { className: "text-step-9 font-mono text-accent-ink", children: [
|
|
87569
87552
|
job.progress,
|
|
87570
87553
|
"%"
|
|
87571
87554
|
] })
|
|
@@ -87589,7 +87572,7 @@ var RenderQueueItem = memo48(function RenderQueueItem2({
|
|
|
87589
87572
|
}
|
|
87590
87573
|
)
|
|
87591
87574
|
] }),
|
|
87592
|
-
job.status === "failed" && job.error && /* @__PURE__ */ jsx211("span", { className: "text-step-9 text-danger mt-0.5 block", children: job.error }),
|
|
87575
|
+
job.status === "failed" && job.error && /* @__PURE__ */ jsx211("span", { className: "text-step-9 text-danger-ink mt-0.5 block", children: job.error }),
|
|
87593
87576
|
job.status === "cancelled" && /* @__PURE__ */ jsx211("span", { className: "text-step-9 text-text-4 mt-0.5 block", children: "Cancelled" }),
|
|
87594
87577
|
!isRendering && /* @__PURE__ */ jsx211("span", { className: "text-step-9 text-text-5", children: formatTimeAgo(job.createdAt) })
|
|
87595
87578
|
] }),
|
|
@@ -87728,17 +87711,17 @@ var FfmpegRequiredNotice = memo49(function FfmpegRequiredNotice2({
|
|
|
87728
87711
|
className: "flex flex-col gap-2 rounded-xl border border-amber-500/30 bg-amber-500/10 p-2.5",
|
|
87729
87712
|
children: [
|
|
87730
87713
|
/* @__PURE__ */ jsxs169("div", { className: "flex flex-col gap-0.5", children: [
|
|
87731
|
-
/* @__PURE__ */ jsx212("span", { className: "text-[11px] font-semibold text-
|
|
87714
|
+
/* @__PURE__ */ jsx212("span", { className: "text-[11px] font-semibold text-warning-ink", children: status.title ?? "FFmpeg not found" }),
|
|
87732
87715
|
/* @__PURE__ */ jsx212("span", { className: "text-[10px] leading-snug text-pretty text-panel-text-2", children: status.detail ?? "FFmpeg is required to encode video." })
|
|
87733
87716
|
] }),
|
|
87734
87717
|
status.command ? /* @__PURE__ */ jsxs169("div", { className: "flex items-center gap-1.5", children: [
|
|
87735
|
-
/* @__PURE__ */ jsx212("code", { className: "flex-1 overflow-x-auto whitespace-nowrap rounded-xs bg-
|
|
87718
|
+
/* @__PURE__ */ jsx212("code", { className: "flex-1 overflow-x-auto whitespace-nowrap rounded-xs bg-input px-2 py-1 text-[10px] text-panel-text-2", children: status.command }),
|
|
87736
87719
|
/* @__PURE__ */ jsx212(
|
|
87737
87720
|
"button",
|
|
87738
87721
|
{
|
|
87739
87722
|
type: "button",
|
|
87740
87723
|
onClick: () => void copy(status.command ?? ""),
|
|
87741
|
-
className: `h-6 w-14 shrink-0 rounded-xs border border-amber-500/30 text-[10px] font-medium text-
|
|
87724
|
+
className: `h-6 w-14 shrink-0 rounded-xs border border-amber-500/30 text-[10px] font-medium text-warning-ink transition-colors hover:bg-amber-500/20 active:scale-[0.98] ${FOCUS_RING}`,
|
|
87742
87725
|
children: copied ? "Copied" : "Copy"
|
|
87743
87726
|
}
|
|
87744
87727
|
)
|
|
@@ -87750,7 +87733,7 @@ var FfmpegRequiredNotice = memo49(function FfmpegRequiredNotice2({
|
|
|
87750
87733
|
type: "button",
|
|
87751
87734
|
onClick: onRecheck,
|
|
87752
87735
|
disabled: checking,
|
|
87753
|
-
className: `rounded-xs py-0.5 text-[10px] font-medium text-
|
|
87736
|
+
className: `rounded-xs py-0.5 text-[10px] font-medium text-warning-ink underline-offset-2 transition-colors hover:underline disabled:opacity-50 ${FOCUS_RING}`,
|
|
87754
87737
|
children: checking ? "Checking\u2026" : "Recheck"
|
|
87755
87738
|
}
|
|
87756
87739
|
),
|
|
@@ -87845,7 +87828,7 @@ function FormatInfoTooltip({ format }) {
|
|
|
87845
87828
|
timeoutRef.current = setTimeout(() => setOpen(false), 120);
|
|
87846
87829
|
};
|
|
87847
87830
|
useEffect141(() => () => clearTimeout(timeoutRef.current), []);
|
|
87848
|
-
|
|
87831
|
+
useLayoutEffect13(() => {
|
|
87849
87832
|
if (!open) return;
|
|
87850
87833
|
const el = triggerRef.current;
|
|
87851
87834
|
if (!el) return;
|
|
@@ -88111,7 +88094,7 @@ var RenderQueue = memo50(function RenderQueue2({
|
|
|
88111
88094
|
role: "alert",
|
|
88112
88095
|
className: "flex items-start justify-between gap-2 px-3 py-2 border-b border-border bg-danger/10",
|
|
88113
88096
|
children: [
|
|
88114
|
-
/* @__PURE__ */ jsx213("span", { className: "text-step-10 text-danger", children: actionError }),
|
|
88097
|
+
/* @__PURE__ */ jsx213("span", { className: "text-step-10 text-danger-ink", children: actionError }),
|
|
88115
88098
|
onDismissActionError && /* @__PURE__ */ jsx213(
|
|
88116
88099
|
IconButton,
|
|
88117
88100
|
{
|
|
@@ -88139,7 +88122,7 @@ var RenderQueue = memo50(function RenderQueue2({
|
|
|
88139
88122
|
}
|
|
88140
88123
|
),
|
|
88141
88124
|
/* @__PURE__ */ jsx213("div", { ref: listRef, className: "flex-1 overflow-y-auto", children: loadError && jobs.length === 0 ? /* @__PURE__ */ jsxs170("div", { className: "flex flex-col items-center justify-center h-full px-4 gap-2", role: "alert", children: [
|
|
88142
|
-
/* @__PURE__ */ jsx213("p", { className: "text-step-10 text-danger text-center", children: loadError }),
|
|
88125
|
+
/* @__PURE__ */ jsx213("p", { className: "text-step-10 text-danger-ink text-center", children: loadError }),
|
|
88143
88126
|
onRetryLoad && /* @__PURE__ */ jsx213(Button, { size: "sm", variant: "secondary", onClick: onRetryLoad, children: "Retry" })
|
|
88144
88127
|
] }) : jobs.length === 0 ? /* @__PURE__ */ jsxs170("div", { className: "flex flex-col items-center justify-center h-full px-4 gap-2", children: [
|
|
88145
88128
|
/* @__PURE__ */ jsxs170(
|
|
@@ -88288,7 +88271,7 @@ function SlideList({
|
|
|
88288
88271
|
role: "button",
|
|
88289
88272
|
tabIndex: 0,
|
|
88290
88273
|
"aria-pressed": isSelected,
|
|
88291
|
-
className: `flex items-center gap-2 px-3 py-1.5 rounded cursor-pointer text-[11px] transition-colors ${isSelected ? "bg-
|
|
88274
|
+
className: `flex items-center gap-2 px-3 py-1.5 rounded cursor-pointer text-[11px] transition-colors ${isSelected ? "bg-on text-text-0" : "hover:bg-neutral-800/60 text-neutral-300"}`,
|
|
88292
88275
|
onClick: () => onSelect(scene.id),
|
|
88293
88276
|
onKeyDown: (e) => {
|
|
88294
88277
|
if (e.key === "Enter" || e.key === " ") {
|
|
@@ -88317,7 +88300,7 @@ function SlideList({
|
|
|
88317
88300
|
"aria-label": "Move slide up",
|
|
88318
88301
|
title: "Move up",
|
|
88319
88302
|
disabled: slideIndex <= 0,
|
|
88320
|
-
className: "px-1 py-0.5 text-[10px] text-neutral-400 enabled:hover:text-
|
|
88303
|
+
className: "px-1 py-0.5 text-[10px] text-neutral-400 enabled:hover:text-text-0 enabled:active:scale-[0.95] disabled:opacity-30 disabled:cursor-not-allowed",
|
|
88321
88304
|
onClick: (e) => {
|
|
88322
88305
|
e.stopPropagation();
|
|
88323
88306
|
onReorder(scene.id, "up");
|
|
@@ -88332,7 +88315,7 @@ function SlideList({
|
|
|
88332
88315
|
"aria-label": "Move slide down",
|
|
88333
88316
|
title: "Move down",
|
|
88334
88317
|
disabled: slideIndex === slides.length - 1,
|
|
88335
|
-
className: "px-1 py-0.5 text-[10px] text-neutral-400 enabled:hover:text-
|
|
88318
|
+
className: "px-1 py-0.5 text-[10px] text-neutral-400 enabled:hover:text-text-0 enabled:active:scale-[0.95] disabled:opacity-30 disabled:cursor-not-allowed",
|
|
88336
88319
|
onClick: (e) => {
|
|
88337
88320
|
e.stopPropagation();
|
|
88338
88321
|
onReorder(scene.id, "down");
|
|
@@ -88368,7 +88351,7 @@ function SlideInspector({
|
|
|
88368
88351
|
/* @__PURE__ */ jsx215(
|
|
88369
88352
|
"textarea",
|
|
88370
88353
|
{
|
|
88371
|
-
className: "bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1.5 text-[11px] text-
|
|
88354
|
+
className: "bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1.5 text-[11px] text-text-0 resize-none placeholder-neutral-600 focus:border-studio-accent/60 focus:outline-hidden",
|
|
88372
88355
|
rows: 3,
|
|
88373
88356
|
placeholder: "Speaker notes or script...",
|
|
88374
88357
|
value: slide?.notes ?? "",
|
|
@@ -88383,7 +88366,7 @@ function SlideInspector({
|
|
|
88383
88366
|
"button",
|
|
88384
88367
|
{
|
|
88385
88368
|
type: "button",
|
|
88386
|
-
className: "text-[10px] px-2 py-0.5 rounded-sm bg-
|
|
88369
|
+
className: "text-[10px] px-2 py-0.5 rounded-sm bg-hover hover:bg-press text-neutral-200 transition-colors",
|
|
88387
88370
|
onClick: onMarkFragment,
|
|
88388
88371
|
title: `Mark ${currentTime.toFixed(2)}s as hold-point`,
|
|
88389
88372
|
children: [
|
|
@@ -88406,7 +88389,7 @@ function SlideInspector({
|
|
|
88406
88389
|
{
|
|
88407
88390
|
type: "button",
|
|
88408
88391
|
"aria-label": `Remove fragment at ${t.toFixed(2)}s`,
|
|
88409
|
-
className: "text-neutral-400 hover:text-
|
|
88392
|
+
className: "text-neutral-400 hover:text-danger-ink transition-colors",
|
|
88410
88393
|
onClick: () => onRemoveFragment(t),
|
|
88411
88394
|
children: "\xD7"
|
|
88412
88395
|
}
|
|
@@ -88444,7 +88427,7 @@ function BranchTree({
|
|
|
88444
88427
|
{
|
|
88445
88428
|
id: inputId,
|
|
88446
88429
|
type: "text",
|
|
88447
|
-
className: "flex-1 bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1 text-[11px] text-
|
|
88430
|
+
className: "flex-1 bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1 text-[11px] text-text-0 placeholder-neutral-600 focus:border-studio-accent/60 focus:outline-hidden",
|
|
88448
88431
|
placeholder: "New branch name...",
|
|
88449
88432
|
value: newLabel,
|
|
88450
88433
|
onChange: (e) => setNewLabel(e.target.value),
|
|
@@ -88458,7 +88441,7 @@ function BranchTree({
|
|
|
88458
88441
|
"button",
|
|
88459
88442
|
{
|
|
88460
88443
|
type: "button",
|
|
88461
|
-
className: "px-2 py-1 rounded-sm bg-
|
|
88444
|
+
className: "px-2 py-1 rounded-sm bg-hover hover:bg-press text-[11px] text-neutral-200 transition-colors shrink-0",
|
|
88462
88445
|
onClick: handleCreate,
|
|
88463
88446
|
children: "Add"
|
|
88464
88447
|
}
|
|
@@ -88503,7 +88486,7 @@ function BranchItem({
|
|
|
88503
88486
|
editing ? /* @__PURE__ */ jsx215(
|
|
88504
88487
|
"input",
|
|
88505
88488
|
{
|
|
88506
|
-
className: "flex-1 bg-neutral-800 border border-neutral-600 rounded-sm px-1.5 py-0.5 text-[11px] text-
|
|
88489
|
+
className: "flex-1 bg-neutral-800 border border-neutral-600 rounded-sm px-1.5 py-0.5 text-[11px] text-text-0 focus:border-studio-accent/60 focus:outline-hidden",
|
|
88507
88490
|
value: draft,
|
|
88508
88491
|
autoFocus: true,
|
|
88509
88492
|
onChange: (e) => setDraft(e.target.value),
|
|
@@ -88519,7 +88502,7 @@ function BranchItem({
|
|
|
88519
88502
|
{
|
|
88520
88503
|
role: "button",
|
|
88521
88504
|
tabIndex: 0,
|
|
88522
|
-
className: "flex-1 text-[11px] text-
|
|
88505
|
+
className: "flex-1 text-[11px] text-text-0 font-medium truncate cursor-pointer hover:text-neutral-300",
|
|
88523
88506
|
title: "Click to rename",
|
|
88524
88507
|
onClick: () => setEditing(true),
|
|
88525
88508
|
onKeyDown: (e) => {
|
|
@@ -88536,14 +88519,14 @@ function BranchItem({
|
|
|
88536
88519
|
{
|
|
88537
88520
|
type: "button",
|
|
88538
88521
|
"aria-label": `Delete branch ${seq.label}`,
|
|
88539
|
-
className: "text-[10px] text-neutral-500 hover:text-
|
|
88522
|
+
className: "text-[10px] text-neutral-500 hover:text-danger-ink active:scale-[0.95] transition-colors px-1",
|
|
88540
88523
|
onClick: () => setConfirmingDelete(true),
|
|
88541
88524
|
children: "\u2715"
|
|
88542
88525
|
}
|
|
88543
88526
|
)
|
|
88544
88527
|
] }),
|
|
88545
|
-
confirmingDelete && /* @__PURE__ */ jsxs171("div", { className: "px-2 py-1.5 bg-
|
|
88546
|
-
/* @__PURE__ */ jsxs171("span", { className: "text-[10px] text-
|
|
88528
|
+
confirmingDelete && /* @__PURE__ */ jsxs171("div", { className: "px-2 py-1.5 bg-danger/15 border-l-2 border-red-500 flex flex-col gap-1 rounded-xs", children: [
|
|
88529
|
+
/* @__PURE__ */ jsxs171("span", { className: "text-[10px] text-danger-ink", children: [
|
|
88547
88530
|
"Delete branch \u201C",
|
|
88548
88531
|
seq.label,
|
|
88549
88532
|
"\u201D",
|
|
@@ -88559,7 +88542,7 @@ function BranchItem({
|
|
|
88559
88542
|
setConfirmingDelete(false);
|
|
88560
88543
|
onDelete(seq.id);
|
|
88561
88544
|
},
|
|
88562
|
-
className: "px-2 py-0.5 text-[10px] rounded-sm bg-
|
|
88545
|
+
className: "px-2 py-0.5 text-[10px] rounded-sm bg-danger text-on-danger hover:brightness-95 active:brightness-90 transition-colors",
|
|
88563
88546
|
children: "Delete"
|
|
88564
88547
|
}
|
|
88565
88548
|
),
|
|
@@ -88598,7 +88581,7 @@ function BranchItem({
|
|
|
88598
88581
|
{
|
|
88599
88582
|
type: "button",
|
|
88600
88583
|
"aria-pressed": isSelected,
|
|
88601
|
-
className: `flex-1 text-left truncate transition-colors hover:text-neutral-200 ${isSelected ? "text-
|
|
88584
|
+
className: `flex-1 text-left truncate transition-colors hover:text-neutral-200 ${isSelected ? "text-text-0" : "text-neutral-400"}`,
|
|
88602
88585
|
onClick: () => onSelectBranchSlide(seq.id, scene.id),
|
|
88603
88586
|
children: scene.label || scene.id
|
|
88604
88587
|
}
|
|
@@ -88650,7 +88633,7 @@ function HotspotTool({
|
|
|
88650
88633
|
"input",
|
|
88651
88634
|
{
|
|
88652
88635
|
type: "text",
|
|
88653
|
-
className: "bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1 text-[11px] text-
|
|
88636
|
+
className: "bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1 text-[11px] text-text-0 placeholder-neutral-600 focus:border-studio-accent/60 focus:outline-hidden",
|
|
88654
88637
|
placeholder: "Button label...",
|
|
88655
88638
|
value: hotspotLabel,
|
|
88656
88639
|
onChange: (e) => setHotspotLabel(e.target.value),
|
|
@@ -88661,7 +88644,7 @@ function HotspotTool({
|
|
|
88661
88644
|
/* @__PURE__ */ jsxs171(
|
|
88662
88645
|
"select",
|
|
88663
88646
|
{
|
|
88664
|
-
className: "bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1 text-[11px] text-
|
|
88647
|
+
className: "bg-neutral-800 border border-neutral-700 rounded-sm px-2 py-1 text-[11px] text-text-0 focus:border-studio-accent/60 focus:outline-hidden",
|
|
88665
88648
|
value: targetSequenceId,
|
|
88666
88649
|
onChange: (e) => setTargetSequenceId(e.target.value),
|
|
88667
88650
|
"aria-label": "Target branch sequence",
|
|
@@ -88677,7 +88660,7 @@ function HotspotTool({
|
|
|
88677
88660
|
type: "button",
|
|
88678
88661
|
disabled: !elementKey3 || !targetSequenceId,
|
|
88679
88662
|
title: !elementKey3 ? "Select an element on the canvas first" : !targetSequenceId ? "Choose a target branch first" : void 0,
|
|
88680
|
-
className: "px-3 py-1.5 rounded-sm bg-
|
|
88663
|
+
className: "px-3 py-1.5 rounded-sm bg-accent enabled:hover:bg-accent-hover enabled:active:scale-[0.98] text-on-accent text-[11px] font-medium transition-colors disabled:opacity-40 disabled:cursor-not-allowed",
|
|
88681
88664
|
onClick: handleMakeHotspot,
|
|
88682
88665
|
children: "Make hotspot"
|
|
88683
88666
|
}
|
|
@@ -88702,7 +88685,7 @@ function HotspotTool({
|
|
|
88702
88685
|
{
|
|
88703
88686
|
type: "button",
|
|
88704
88687
|
"aria-label": `Remove hotspot ${h.label}`,
|
|
88705
|
-
className: "text-[10px] text-neutral-500 hover:text-
|
|
88688
|
+
className: "text-[10px] text-neutral-500 hover:text-danger-ink transition-colors",
|
|
88706
88689
|
onClick: () => onRemoveHotspot(selectedSceneId, h.id),
|
|
88707
88690
|
children: "\u2715"
|
|
88708
88691
|
}
|
|
@@ -89114,7 +89097,7 @@ function SlideshowPanel({ scenes, onPersist, onPersistNotes }) {
|
|
|
89114
89097
|
return /* @__PURE__ */ jsxs172(
|
|
89115
89098
|
"div",
|
|
89116
89099
|
{
|
|
89117
|
-
className: "flex flex-col h-full overflow-y-auto text-
|
|
89100
|
+
className: "flex flex-col h-full overflow-y-auto text-text-0",
|
|
89118
89101
|
onKeyDown: (e) => {
|
|
89119
89102
|
if ((e.metaKey || e.ctrlKey) && !e.shiftKey && e.key.toLowerCase() === "z") {
|
|
89120
89103
|
const target = e.target instanceof HTMLElement ? e.target.tagName : "";
|
|
@@ -89129,16 +89112,16 @@ function SlideshowPanel({ scenes, onPersist, onPersistNotes }) {
|
|
|
89129
89112
|
"div",
|
|
89130
89113
|
{
|
|
89131
89114
|
role: "alert",
|
|
89132
|
-
className: "flex items-center justify-between gap-2 px-3 py-2 bg-
|
|
89115
|
+
className: "flex items-center justify-between gap-2 px-3 py-2 bg-danger/15 border-b border-red-500/40",
|
|
89133
89116
|
children: [
|
|
89134
|
-
/* @__PURE__ */ jsx216("span", { className: "text-[11px] text-
|
|
89117
|
+
/* @__PURE__ */ jsx216("span", { className: "text-[11px] text-danger-ink", children: "Changes not saved" }),
|
|
89135
89118
|
/* @__PURE__ */ jsx216(
|
|
89136
89119
|
"button",
|
|
89137
89120
|
{
|
|
89138
89121
|
type: "button",
|
|
89139
89122
|
disabled: retrying,
|
|
89140
89123
|
onClick: handleRetryPersist,
|
|
89141
|
-
className: "px-2 py-0.5 text-[10px] rounded-sm bg-
|
|
89124
|
+
className: "px-2 py-0.5 text-[10px] rounded-sm bg-danger text-on-danger enabled:hover:brightness-95 enabled:active:scale-[0.97] disabled:opacity-50 transition-colors",
|
|
89142
89125
|
children: retrying ? "Retrying\u2026" : "Retry"
|
|
89143
89126
|
}
|
|
89144
89127
|
)
|
|
@@ -89255,7 +89238,7 @@ function SlideshowPanel({ scenes, onPersist, onPersistNotes }) {
|
|
|
89255
89238
|
}
|
|
89256
89239
|
|
|
89257
89240
|
// src/components/panels/VariablesPanel.tsx
|
|
89258
|
-
import { memo as memo52, useCallback as useCallback176, useEffect as useEffect144, useMemo as
|
|
89241
|
+
import { memo as memo52, useCallback as useCallback176, useEffect as useEffect144, useMemo as useMemo81, useState as useState146 } from "react";
|
|
89259
89242
|
|
|
89260
89243
|
// src/hooks/useVariablesPersist.ts
|
|
89261
89244
|
import { useCallback as useCallback173 } from "react";
|
|
@@ -89600,7 +89583,7 @@ function DeclarationForm({
|
|
|
89600
89583
|
className: VARIABLES_INPUT_CLASS
|
|
89601
89584
|
}
|
|
89602
89585
|
) }),
|
|
89603
|
-
error && /* @__PURE__ */ jsx217("p", { className: "text-[10px] text-
|
|
89586
|
+
error && /* @__PURE__ */ jsx217("p", { className: "text-[10px] text-danger-ink", children: error }),
|
|
89604
89587
|
/* @__PURE__ */ jsxs173("div", { className: "flex items-center justify-end gap-2 pt-1", children: [
|
|
89605
89588
|
/* @__PURE__ */ jsx217(
|
|
89606
89589
|
"button",
|
|
@@ -89638,7 +89621,7 @@ function RowAction({
|
|
|
89638
89621
|
type: "button",
|
|
89639
89622
|
onClick,
|
|
89640
89623
|
title,
|
|
89641
|
-
className: `h-5 rounded px-1.5 text-[9px] text-neutral-500 hover:bg-neutral-800 ${danger ? "hover:text-
|
|
89624
|
+
className: `h-5 rounded px-1.5 text-[9px] text-neutral-500 hover:bg-neutral-800 ${danger ? "hover:text-danger-ink" : "hover:text-neutral-200"}`,
|
|
89642
89625
|
children: label
|
|
89643
89626
|
}
|
|
89644
89627
|
);
|
|
@@ -89782,7 +89765,7 @@ function formatIssue(issue) {
|
|
|
89782
89765
|
}
|
|
89783
89766
|
function ValidationStrip({ issues }) {
|
|
89784
89767
|
if (issues.length === 0) return null;
|
|
89785
|
-
return /* @__PURE__ */ jsx220("div", { className: "space-y-1 rounded-lg border border-
|
|
89768
|
+
return /* @__PURE__ */ jsx220("div", { className: "space-y-1 rounded-lg border border-danger/40 bg-danger/15 p-2", children: issues.map((issue) => /* @__PURE__ */ jsx220("p", { className: "text-[10px] text-danger-ink", children: formatIssue(issue) }, `${issue.kind}:${issue.variableId}`)) });
|
|
89786
89769
|
}
|
|
89787
89770
|
function VariableRow({
|
|
89788
89771
|
decl,
|
|
@@ -89803,7 +89786,7 @@ function VariableRow({
|
|
|
89803
89786
|
unused && /* @__PURE__ */ jsx220(
|
|
89804
89787
|
"span",
|
|
89805
89788
|
{
|
|
89806
|
-
className: "rounded-sm bg-amber-
|
|
89789
|
+
className: "rounded-sm bg-amber-500/15 px-1 py-px text-[8px] text-warning-ink",
|
|
89807
89790
|
title: "No script reads this variable",
|
|
89808
89791
|
children: "unused"
|
|
89809
89792
|
}
|
|
@@ -89865,7 +89848,7 @@ function PreviewModeHeader({
|
|
|
89865
89848
|
/* @__PURE__ */ jsx220(
|
|
89866
89849
|
"span",
|
|
89867
89850
|
{
|
|
89868
|
-
className: `rounded-full px-2 py-0.5 text-[9px] font-medium ${hasOverrides ? "bg-studio-accent/20 text-
|
|
89851
|
+
className: `rounded-full px-2 py-0.5 text-[9px] font-medium ${hasOverrides ? "bg-studio-accent/20 text-accent-ink" : "bg-neutral-800 text-neutral-500"}`,
|
|
89869
89852
|
children: hasOverrides ? `Previewing ${overrideCount} custom` : "Previewing defaults"
|
|
89870
89853
|
}
|
|
89871
89854
|
)
|
|
@@ -89951,22 +89934,22 @@ var VariablesPanel = memo52(function VariablesPanel2({
|
|
|
89951
89934
|
reloadPreview,
|
|
89952
89935
|
publishSdkSession
|
|
89953
89936
|
});
|
|
89954
|
-
const declarations =
|
|
89937
|
+
const declarations = useMemo81(
|
|
89955
89938
|
() => sdkSession?.getVariableDeclarations() ?? [],
|
|
89956
89939
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89957
89940
|
[sdkSession, refreshKey, revision]
|
|
89958
89941
|
);
|
|
89959
|
-
const usage =
|
|
89942
|
+
const usage = useMemo81(
|
|
89960
89943
|
() => sdkSession?.getVariableUsage() ?? null,
|
|
89961
89944
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89962
89945
|
[sdkSession, refreshKey, revision]
|
|
89963
89946
|
);
|
|
89964
|
-
const issues =
|
|
89947
|
+
const issues = useMemo81(
|
|
89965
89948
|
() => previewValues && sdkSession ? sdkSession.validateVariableValues(previewValues) : [],
|
|
89966
89949
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89967
89950
|
[sdkSession, previewValues, refreshKey, revision]
|
|
89968
89951
|
);
|
|
89969
|
-
const effectiveValues =
|
|
89952
|
+
const effectiveValues = useMemo81(
|
|
89970
89953
|
() => sdkSession?.getVariableValues(previewValues ?? void 0) ?? {},
|
|
89971
89954
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
89972
89955
|
[sdkSession, previewValues, refreshKey, revision]
|
|
@@ -90281,15 +90264,15 @@ function useSlideshowPersist({
|
|
|
90281
90264
|
}
|
|
90282
90265
|
|
|
90283
90266
|
// src/hooks/useSlideshowTabState.ts
|
|
90284
|
-
import { useMemo as
|
|
90267
|
+
import { useMemo as useMemo82 } from "react";
|
|
90285
90268
|
import { SLIDESHOW_ISLAND_TYPE as SLIDESHOW_ISLAND_TYPE2, slideshowIslandRegex as slideshowIslandRegex2 } from "@hyperframes/core/slideshow";
|
|
90286
90269
|
function useSlideshowTabState(params) {
|
|
90287
90270
|
const { editingFileContent, previewIframeRef, refreshKey, slideshowVisible } = params;
|
|
90288
|
-
const isSlideshowComposition =
|
|
90271
|
+
const isSlideshowComposition = useMemo82(() => {
|
|
90289
90272
|
if (!editingFileContent || !editingFileContent.includes(SLIDESHOW_ISLAND_TYPE2)) return false;
|
|
90290
90273
|
return slideshowIslandRegex2("i").test(editingFileContent);
|
|
90291
90274
|
}, [editingFileContent]);
|
|
90292
|
-
const slideshowScenes =
|
|
90275
|
+
const slideshowScenes = useMemo82(() => {
|
|
90293
90276
|
try {
|
|
90294
90277
|
const win = previewIframeRef.current?.contentWindow;
|
|
90295
90278
|
return (win?.__clipManifest?.scenes ?? []).map((s) => ({
|
|
@@ -91308,12 +91291,6 @@ function RippleEditIcon({ size = 16 }) {
|
|
|
91308
91291
|
);
|
|
91309
91292
|
}
|
|
91310
91293
|
|
|
91311
|
-
// src/components/timelineToolbarStyles.ts
|
|
91312
|
-
var flatBtn = "flex h-7 w-7 items-center justify-center rounded-md transition-colors";
|
|
91313
|
-
var flatIdle = `${flatBtn} text-neutral-400 hover:bg-white/6 hover:text-neutral-200 active:scale-[0.98]`;
|
|
91314
|
-
var flatActive = `${flatBtn} bg-white/8 text-neutral-100 active:scale-[0.98]`;
|
|
91315
|
-
var flatDisabled = `${flatBtn} text-neutral-700 cursor-not-allowed`;
|
|
91316
|
-
|
|
91317
91294
|
// src/components/TimelineHistoryButtons.tsx
|
|
91318
91295
|
import { Fragment as Fragment62, jsx as jsx225, jsxs as jsxs178 } from "react/jsx-runtime";
|
|
91319
91296
|
function HistoryButton({ action, can, label, onClick }) {
|
|
@@ -91426,7 +91403,7 @@ function TimelineToolPicker({ showSelectAroundPlayhead = true }) {
|
|
|
91426
91403
|
shortcut: row.shortcut,
|
|
91427
91404
|
onClick: row.run,
|
|
91428
91405
|
"data-active": row.active || void 0,
|
|
91429
|
-
className: row.active ? "bg-
|
|
91406
|
+
className: row.active ? "bg-press text-text-0" : void 0,
|
|
91430
91407
|
children: /* @__PURE__ */ jsxs179("span", { className: "flex items-center gap-2", children: [
|
|
91431
91408
|
row.icon,
|
|
91432
91409
|
row.label
|
|
@@ -91613,7 +91590,7 @@ function TimelineToolbar({
|
|
|
91613
91590
|
disabled: !onToggleKeyframe,
|
|
91614
91591
|
onClick: onToggleKeyframe,
|
|
91615
91592
|
"aria-label": keyframePathEndpoint ? "Motion path endpoint" : keyframeIsMotionPath ? keyframeState === "active" ? "Remove motion path waypoint" : keyframeWillExtend ? "Extend motion path to playhead" : "Add motion path waypoint" : keyframeState === "active" ? "Remove keyframe at playhead" : "Add keyframe at playhead",
|
|
91616
|
-
className: !onToggleKeyframe ? flatDisabled : `${flatBtn} active:scale-[0.98] hover:bg-
|
|
91593
|
+
className: !onToggleKeyframe ? flatDisabled : `${flatBtn} active:scale-[0.98] hover:bg-hover ${keyframeState === "active" ? "text-accent-ink" : keyframeState === "inactive" ? "text-neutral-400 hover:text-accent-ink" : "text-neutral-600 hover:text-neutral-400"}`,
|
|
91617
91594
|
children: /* @__PURE__ */ jsx227("svg", { width: "16", height: "16", viewBox: "0 0 10 10", fill: "currentColor", children: keyframeState === "active" ? /* @__PURE__ */ jsx227("path", { d: "M5 0.5L9.5 5L5 9.5L0.5 5Z" }) : /* @__PURE__ */ jsx227(
|
|
91618
91595
|
"path",
|
|
91619
91596
|
{
|
|
@@ -91638,7 +91615,7 @@ function TimelineToolbar({
|
|
|
91638
91615
|
onClick: () => setAutoKeyframeEnabled(!autoKeyframeEnabled),
|
|
91639
91616
|
"aria-label": "Auto-record manual edits as keyframes",
|
|
91640
91617
|
"aria-pressed": autoKeyframeEnabled,
|
|
91641
|
-
className: `${flatBtn} active:scale-[0.98] hover:bg-
|
|
91618
|
+
className: `${flatBtn} active:scale-[0.98] hover:bg-hover ${autoKeyframeEnabled ? "text-danger-ink" : "text-neutral-600 hover:text-neutral-400"}`,
|
|
91642
91619
|
children: /* @__PURE__ */ jsxs180("svg", { width: "16", height: "16", viewBox: "0 0 10 10", fill: "none", children: [
|
|
91643
91620
|
/* @__PURE__ */ jsx227("path", { d: "M5 0.7L9.3 5L5 9.3L0.7 5Z", stroke: "currentColor", strokeWidth: "1" }),
|
|
91644
91621
|
/* @__PURE__ */ jsx227(
|
|
@@ -91715,7 +91692,7 @@ function TimelineToolbar({
|
|
|
91715
91692
|
onClick: () => {
|
|
91716
91693
|
if (canAdd) addBeatAtCompositionTime(currentTime);
|
|
91717
91694
|
},
|
|
91718
|
-
className: canAdd ? `${flatBtn} text-
|
|
91695
|
+
className: canAdd ? `${flatBtn} text-text-2 hover:bg-hover hover:text-accent-ink active:scale-[0.98]` : flatDisabled,
|
|
91719
91696
|
children: /* @__PURE__ */ jsx227("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", children: /* @__PURE__ */ jsx227(
|
|
91720
91697
|
"path",
|
|
91721
91698
|
{
|
|
@@ -91744,7 +91721,7 @@ function TimelineToolbar({
|
|
|
91744
91721
|
"aria-label": thumbnailsVisible ? "Hide thumbnails \u2014 labels only" : "Show thumbnails \u2014 posters stay visible; richer previews appear on interaction",
|
|
91745
91722
|
"aria-pressed": thumbnailsVisible,
|
|
91746
91723
|
onClick: () => setThumbnailMode(thumbnailsVisible ? "hidden" : "adaptive"),
|
|
91747
|
-
className: `h-7 px-2 rounded-md text-[11px] font-medium transition-colors ${thumbnailsVisible ? "bg-studio-accent/10 text-
|
|
91724
|
+
className: `h-7 px-2 rounded-md text-[11px] font-medium transition-colors ${thumbnailsVisible ? "bg-studio-accent/10 text-accent-ink" : "text-neutral-400 hover:bg-hover hover:text-neutral-200"}`,
|
|
91748
91725
|
children: /* @__PURE__ */ jsx227(Image3, { size: 16, "aria-hidden": "true" })
|
|
91749
91726
|
}
|
|
91750
91727
|
)
|
|
@@ -91757,7 +91734,7 @@ function TimelineToolbar({
|
|
|
91757
91734
|
onClick: () => setZoomMode("fit"),
|
|
91758
91735
|
"aria-label": "Fit timeline to width",
|
|
91759
91736
|
"aria-pressed": zoomMode === "fit",
|
|
91760
|
-
className: `h-7 px-2 rounded-md text-[11px] font-medium transition-colors ${zoomMode === "fit" ? "bg-studio-accent/10 text-
|
|
91737
|
+
className: `h-7 px-2 rounded-md text-[11px] font-medium transition-colors ${zoomMode === "fit" ? "bg-studio-accent/10 text-accent-ink" : "text-neutral-400 hover:bg-hover hover:text-neutral-200"}`,
|
|
91761
91738
|
children: /* @__PURE__ */ jsx227(ArrowsOutLineHorizontal, { size: 16, "aria-hidden": "true" })
|
|
91762
91739
|
}
|
|
91763
91740
|
) }),
|
|
@@ -91791,7 +91768,7 @@ function TimelineToolbar({
|
|
|
91791
91768
|
timelineSliderToZoomPercent(Number(e.target.value), timelineFitPps)
|
|
91792
91769
|
);
|
|
91793
91770
|
},
|
|
91794
|
-
className: "mx-1 h-6 w-[96px] cursor-pointer appearance-none bg-transparent [&::-webkit-slider-runnable-track]:h-[2px] [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-neutral-700 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-
|
|
91771
|
+
className: "mx-1 h-6 w-[96px] cursor-pointer appearance-none bg-transparent [&::-webkit-slider-runnable-track]:h-[2px] [&::-webkit-slider-runnable-track]:rounded-full [&::-webkit-slider-runnable-track]:bg-neutral-700 [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:w-[10px] [&::-webkit-slider-thumb]:h-[10px] [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:bg-text-0 [&::-webkit-slider-thumb]:-mt-1 [&::-webkit-slider-thumb]:shadow-[0_0_0_2px_#0a0a0a,0_1px_3px_rgba(0,0,0,0.5)] [&::-webkit-slider-thumb]:cursor-grab [&::-webkit-slider-thumb:active]:cursor-grabbing"
|
|
91795
91772
|
}
|
|
91796
91773
|
),
|
|
91797
91774
|
/* @__PURE__ */ jsx227(Tooltip, { label: "Zoom in", children: /* @__PURE__ */ jsx227(
|
|
@@ -92142,7 +92119,7 @@ function StudioApp({ readOnlyPreview = false, readOnlyPreviewReason } = {}) {
|
|
|
92142
92119
|
recordEdit: editHistory.recordEdit,
|
|
92143
92120
|
setRefreshKey
|
|
92144
92121
|
});
|
|
92145
|
-
const masterCompPath =
|
|
92122
|
+
const masterCompPath = useMemo83(
|
|
92146
92123
|
() => resolveMasterCompositionPath(fileManager.compositions),
|
|
92147
92124
|
[fileManager.compositions]
|
|
92148
92125
|
);
|
|
@@ -92247,7 +92224,7 @@ function StudioApp({ readOnlyPreview = false, readOnlyPreviewReason } = {}) {
|
|
|
92247
92224
|
});
|
|
92248
92225
|
const dismissBlockParams = useCallback186(() => setActiveBlockParams(null), [setActiveBlockParams]);
|
|
92249
92226
|
const setRightPanelTab = useDismissingTabSetter(panelLayout.setRightPanelTab, dismissBlockParams);
|
|
92250
|
-
const layout =
|
|
92227
|
+
const layout = useMemo83(
|
|
92251
92228
|
() => ({ ...panelLayout, setRightPanelTab }),
|
|
92252
92229
|
[panelLayout, setRightPanelTab]
|
|
92253
92230
|
);
|
|
@@ -92399,7 +92376,7 @@ function StudioApp({ readOnlyPreview = false, readOnlyPreviewReason } = {}) {
|
|
|
92399
92376
|
});
|
|
92400
92377
|
handleToggleRecordingRef.current = handleToggleRecording;
|
|
92401
92378
|
const canvasRectRef = useRef181(null);
|
|
92402
|
-
|
|
92379
|
+
useLayoutEffect14(() => {
|
|
92403
92380
|
if (gestureState !== "recording" || !previewIframe) {
|
|
92404
92381
|
canvasRectRef.current = null;
|
|
92405
92382
|
return;
|
|
@@ -92466,7 +92443,7 @@ function StudioApp({ readOnlyPreview = false, readOnlyPreviewReason } = {}) {
|
|
|
92466
92443
|
handlePreviewIframeRef,
|
|
92467
92444
|
refreshPreviewDocumentVersion
|
|
92468
92445
|
});
|
|
92469
|
-
const timelineToolbar =
|
|
92446
|
+
const timelineToolbar = useMemo83(
|
|
92470
92447
|
() => /* @__PURE__ */ jsx229(
|
|
92471
92448
|
TimelineToolbar,
|
|
92472
92449
|
{
|
|
@@ -92983,7 +92960,7 @@ function findElementBlock(html2, elementId2) {
|
|
|
92983
92960
|
}
|
|
92984
92961
|
|
|
92985
92962
|
// src/hooks/useDomStyleCommit.ts
|
|
92986
|
-
import { useCallback as useCallback188, useMemo as
|
|
92963
|
+
import { useCallback as useCallback188, useMemo as useMemo84, useRef as useRef183, useState as useState151 } from "react";
|
|
92987
92964
|
var noop = () => {
|
|
92988
92965
|
};
|
|
92989
92966
|
function useDomStyleCommit({
|
|
@@ -92999,7 +92976,7 @@ function useDomStyleCommit({
|
|
|
92999
92976
|
const [queue2] = useState151(createDomEditSaveQueue);
|
|
93000
92977
|
useMountEffect(() => () => queue2.destroy());
|
|
93001
92978
|
const versions = useRef183(/* @__PURE__ */ new Map()).current;
|
|
93002
|
-
const editHistory =
|
|
92979
|
+
const editHistory = useMemo84(() => ({ recordEdit }), [recordEdit]);
|
|
93003
92980
|
const persistDomEditOperations = useDomEditPersist({
|
|
93004
92981
|
activeCompPath,
|
|
93005
92982
|
previewIframeRef: iframeRef,
|
|
@@ -93031,7 +93008,7 @@ function useDomStyleCommit({
|
|
|
93031
93008
|
}
|
|
93032
93009
|
|
|
93033
93010
|
// src/hooks/useDomGeometryCommit.ts
|
|
93034
|
-
import { useCallback as useCallback189, useMemo as
|
|
93011
|
+
import { useCallback as useCallback189, useMemo as useMemo85, useRef as useRef184, useState as useState152 } from "react";
|
|
93035
93012
|
var noop2 = () => {
|
|
93036
93013
|
};
|
|
93037
93014
|
var NO_SELECTED_ANIMATIONS = [];
|
|
@@ -93047,7 +93024,7 @@ function useDomGeometryCommit({
|
|
|
93047
93024
|
const projectIdRef = useRef184(projectId);
|
|
93048
93025
|
projectIdRef.current = projectId;
|
|
93049
93026
|
const pending2 = useRef184(/* @__PURE__ */ new Set()).current;
|
|
93050
|
-
const editHistory =
|
|
93027
|
+
const editHistory = useMemo85(() => ({ recordEdit }), [recordEdit]);
|
|
93051
93028
|
const reload = useCallback189(
|
|
93052
93029
|
() => reloadPreview ? reloadPreview() : iframeRef.current?.contentWindow?.location.reload(),
|
|
93053
93030
|
[reloadPreview, iframeRef]
|
|
@@ -93088,7 +93065,6 @@ function useDomGeometryCommit({
|
|
|
93088
93065
|
[commitPositionPatchToHtml, queue2]
|
|
93089
93066
|
);
|
|
93090
93067
|
const { stageElementPositionOffset, handleDomBoxSizeCommit, handleDomRotationCommit } = useDomGeometryCommits({
|
|
93091
|
-
previewIframeRef: iframeRef,
|
|
93092
93068
|
showToast,
|
|
93093
93069
|
commitPositionPatchToHtml: commitWithFreshQueue,
|
|
93094
93070
|
readOnlyPreview: false
|
|
@@ -93138,7 +93114,7 @@ function useDomGeometryCommit({
|
|
|
93138
93114
|
},
|
|
93139
93115
|
[pending2, showToast]
|
|
93140
93116
|
);
|
|
93141
|
-
return
|
|
93117
|
+
return useMemo85(
|
|
93142
93118
|
() => ({
|
|
93143
93119
|
commitPathOffset: (selection, next, modifiers) => saved2(() => handleGsapAwarePathOffsetCommit(selection, next, modifiers)),
|
|
93144
93120
|
commitGroupPathOffset: (updates) => saved2(() => handleGsapAwareGroupPathOffsetCommit(updates)),
|