hyperframes 0.8.77 → 0.8.79

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.
Files changed (40) hide show
  1. package/dist/cli.js +2942 -1786
  2. package/dist/fontLocalizeCli.js +99 -33
  3. package/dist/hyperframe-runtime.js +54 -54
  4. package/dist/hyperframe.manifest.json +1 -1
  5. package/dist/hyperframe.runtime.iife.js +54 -54
  6. package/dist/hyperframes-player.global.js +3 -3
  7. package/dist/registry/localSemantic.js +20 -1
  8. package/dist/skills/hyperframes/SKILL.md +6 -0
  9. package/dist/skills/hyperframes-cli/SKILL.md +14 -1
  10. package/dist/skills/media-use/registry/localSemantic.js +20 -1
  11. package/dist/skills/media-use/scripts/compatibility.test.mjs +2 -0
  12. package/dist/skills/media-use/scripts/lib/cache.mjs +6 -8
  13. package/dist/skills/media-use/scripts/lib/candidates.test.mjs +2 -2
  14. package/dist/skills/media-use/scripts/lib/manifest.test.mjs +2 -0
  15. package/dist/skills/media-use/scripts/lib/media-home.mjs +20 -0
  16. package/dist/skills/media-use/scripts/lib/media-home.test.mjs +61 -0
  17. package/dist/skills/media-use/scripts/lib/misses.mjs +6 -6
  18. package/dist/skills/media-use/scripts/lib/misses.test.mjs +12 -1
  19. package/dist/skills/media-use/scripts/lib/prefs-store.mjs +2 -2
  20. package/dist/skills/media-use/scripts/lib/prefs-store.test.mjs +1 -1
  21. package/dist/skills/media-use/scripts/lib/recipe-store.mjs +2 -2
  22. package/dist/skills/media-use/scripts/lib/recipe-store.test.mjs +1 -1
  23. package/dist/skills/media-use/scripts/lib/stats.test.mjs +1 -1
  24. package/dist/skills/media-use/scripts/lib/telemetry.mjs +2 -1
  25. package/dist/skills/media-use/scripts/lib/telemetry.test.mjs +1 -0
  26. package/dist/skills/registry/localSemantic.js +20 -1
  27. package/dist/studio/assets/hyperframes-player-Bx_Kw4Ey.js +464 -0
  28. package/dist/studio/assets/{index-DcxWQ7Za.js → index-CJP92F4-.js} +1 -1
  29. package/dist/studio/assets/{index-2GgHjQq-.js → index-DBKySIo7.js} +187 -187
  30. package/dist/studio/assets/{index-CsFCRdMo.js → index-ORZXYB0k.js} +1 -1
  31. package/dist/studio/{chunk-5VANA2TG.js → chunk-I7XNAIOF.js} +2 -1
  32. package/dist/studio/{domEditingLayers-IGPLTI5E.js → domEditingLayers-MHFDKAQ7.js} +2 -2
  33. package/dist/studio/index.d.ts +23 -15
  34. package/dist/studio/index.html +1 -1
  35. package/dist/studio/index.js +459 -257
  36. package/dist/studio/index.js.map +1 -1
  37. package/package.json +1 -1
  38. package/dist/studio/assets/hyperframes-player-BSDTJ9EF.js +0 -464
  39. /package/dist/studio/{chunk-5VANA2TG.js.map → chunk-I7XNAIOF.js.map} +0 -0
  40. /package/dist/studio/{domEditingLayers-IGPLTI5E.js.map → domEditingLayers-MHFDKAQ7.js.map} +0 -0
@@ -1 +1 @@
1
- import{g as P}from"./index-2GgHjQq-.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
1
+ import{g as P}from"./index-DBKySIo7.js";function j(c,d){for(var s=0;s<d.length;s++){const a=d[s];if(typeof a!="string"&&!Array.isArray(a)){for(const i in a)if(i!=="default"&&!(i in c)){const l=Object.getOwnPropertyDescriptor(a,i);l&&Object.defineProperty(c,i,l.get?l:{enumerable:!0,get:()=>a[i]})}}}return Object.freeze(Object.defineProperty(c,Symbol.toStringTag,{value:"Module"}))}var v={},w;function k(){if(w)return v;w=1,Object.defineProperty(v,"__esModule",{value:!0}),v.default=d;var c=window.OfflineAudioContext||window.webkitOfflineAudioContext;function d(e){var r=a(e);return r.start(0),[i,y,O(e.sampleRate),s].reduce(function(t,o){return o(t)},r.buffer.getChannelData(0))}function s(e){return e.sort(function(r,t){return t.count-r.count}).splice(0,5)[0].tempo}function a(e){var r=e.length,t=e.numberOfChannels,o=e.sampleRate,n=new c(t,r,o),u=n.createBufferSource();u.buffer=e;var f=n.createBiquadFilter();return f.type="lowpass",u.connect(f),f.connect(n.destination),u}function i(e){for(var r=[],t=.9,o=.3,n=15;r.length<n&&t>=o;)r=l(e,t),t-=.05;if(r.length<n)throw new Error("Could not find enough samples for a reliable detection.");return r}function l(e,r){for(var t=[],o=0,n=e.length;o<n;o+=1)e[o]>r&&(t.push(o),o+=1e4);return t}function y(e){var r=[];return e.forEach(function(t,o){for(var n=function(x){var g=e[o+x]-t,_=r.some(function(h){if(h.interval===g)return h.count+=1});_||r.push({interval:g,count:1})},u=0;u<10;u+=1)n(u)}),r}function O(e){return function(r){var t=[];return r.forEach(function(o){if(o.interval!==0){for(var n=60/(o.interval/e);n<90;)n*=2;for(;n>180;)n/=2;n=Math.round(n);var u=t.some(function(f){if(f.tempo===n)return f.count+=o.count});u||t.push({tempo:n,count:o.count})}}),t}}return v}var p,b;function q(){return b||(b=1,p=k().default),p}var m=q();const A=P(m),D=j({__proto__:null,default:A},[m]);export{D as i};
@@ -1115,6 +1115,7 @@ export {
1115
1115
  isHtmlElement,
1116
1116
  isElementVisibleThroughAncestors,
1117
1117
  setCompositionSourceMap,
1118
+ getSourceFileForElement,
1118
1119
  escapeCssString,
1119
1120
  buildStableSelector,
1120
1121
  getSelectorIndex,
@@ -1149,4 +1150,4 @@ export {
1149
1150
  readHfId,
1150
1151
  buildDomEditPatchTarget
1151
1152
  };
1152
- //# sourceMappingURL=chunk-5VANA2TG.js.map
1153
+ //# sourceMappingURL=chunk-I7XNAIOF.js.map
@@ -20,7 +20,7 @@ import {
20
20
  resolveDomEditCapabilities,
21
21
  resolveDomEditSelection,
22
22
  serializeDomEditTextFields
23
- } from "./chunk-5VANA2TG.js";
23
+ } from "./chunk-I7XNAIOF.js";
24
24
  import "./chunk-PZ5AY32C.js";
25
25
  export {
26
26
  buildDefaultDomEditTextField,
@@ -45,4 +45,4 @@ export {
45
45
  resolveDomEditSelection,
46
46
  serializeDomEditTextFields
47
47
  };
48
- //# sourceMappingURL=domEditingLayers-IGPLTI5E.js.map
48
+ //# sourceMappingURL=domEditingLayers-MHFDKAQ7.js.map
@@ -14,6 +14,7 @@ import { StoreApi } from 'zustand';
14
14
  import { GsapAnimation as GsapAnimation$1, ArcPathSegment } from '@hyperframes/parsers/gsap-parser';
15
15
  import { CanvasResolution } from '@hyperframes/parsers';
16
16
  import { Composition } from '@hyperframes/sdk';
17
+ export { SeamTransitionFrameSource, SeamTransitionLoopHandle, SeamTransitionLoopOptions, playSeamTransitionLoop } from '@hyperframes/shader-transitions';
17
18
 
18
19
  type ButtonVariant = "primary" | "secondary" | "danger" | "ghost";
19
20
  type ButtonSize = "sm" | "md" | "lg";
@@ -1093,13 +1094,6 @@ interface DomEditPatchBatchesResult {
1093
1094
  changed: boolean;
1094
1095
  }
1095
1096
 
1096
- /** A host's verdict on one element: editable, or blocked with a reason to show. */
1097
- type TimelineEditPermission = true | {
1098
- blocked: true;
1099
- reason: string;
1100
- };
1101
- type CanEditTimelineElement = (element: TimelineElement) => TimelineEditPermission;
1102
-
1103
1097
  interface RecordEditInput$1 {
1104
1098
  label: string;
1105
1099
  coalesceKey?: string;
@@ -1253,7 +1247,7 @@ interface TimelineEditCallbacks {
1253
1247
  /** B7's bus strip: live-write the group's own attribute while dragging. */
1254
1248
  onSetAudioGroupAttributeLive?: (groupId: string, attr: string, value: string | null) => void;
1255
1249
  /** ...and persist one undo entry on release. */
1256
- onSetAudioGroupAttributeQuiet?: (groupId: string, attr: string, value: string | null, label: string) => Promise<void>;
1250
+ onSetAudioGroupAttributeQuiet?: (groupId: string, attr: string, value: string | null, label: string) => Promise<TimelineEditOutcome | void>;
1257
1251
  /** C1's ungrouped-track FX pointer: "Group these clips" — write
1258
1252
  * `data-audio-group` on every one of them, atomically. Same shape B6's
1259
1253
  * carve auto-grouping uses. */
@@ -1261,7 +1255,7 @@ interface TimelineEditCallbacks {
1261
1255
  /** C1's single-clip FX write: addressed by the clip itself rather than the
1262
1256
  * current selection, mirroring `onSetAudioGroupAttributeLive/Quiet`. */
1263
1257
  onSetElementAttributeLive?: (element: TimelineElement, attr: string, value: string | null) => void;
1264
- onSetElementAttributeQuiet?: (element: TimelineElement, attr: string, value: string | null, label: string) => Promise<void>;
1258
+ onSetElementAttributeQuiet?: (element: TimelineElement, attr: string, value: string | null, label: string) => Promise<TimelineEditOutcome | void>;
1265
1259
  onBlockedEditAttempt?: (element: TimelineElement, intent: BlockedTimelineEditIntent) => void;
1266
1260
  onSplitElement?: (element: TimelineElement, splitTime: number) => Promise<void> | void;
1267
1261
  onRazorSplit?: (element: TimelineElement, splitTime: number) => Promise<void> | void;
@@ -2008,6 +2002,20 @@ declare function usePlayerHandle(): PlayerHandle;
2008
2002
 
2009
2003
  declare function formatTime(time: number): string;
2010
2004
 
2005
+ /** A host's verdict on one element: editable, or blocked with a reason to show. */
2006
+ type TimelineEditPermission = true | {
2007
+ blocked: true;
2008
+ reason: string;
2009
+ };
2010
+ type CanEditTimelineElement = (element: TimelineElement) => TimelineEditPermission;
2011
+ /** What an effect save did: landed, refused before writing, or failed while writing. */
2012
+ type TimelineEditOutcome = {
2013
+ status: "saved";
2014
+ } | {
2015
+ status: "refused" | "failed";
2016
+ reason: string;
2017
+ };
2018
+
2011
2019
  interface TimelineEditCallbackDeps {
2012
2020
  handleTimelineElementMove: (element: TimelineElement, updates: Pick<TimelineElement, "start" | "track">) => Promise<void> | void;
2013
2021
  handleTimelineElementsMove: (edits: Array<{
@@ -2019,7 +2027,7 @@ interface TimelineEditCallbackDeps {
2019
2027
  handleToggleTrackHidden: (track: number, hidden: boolean) => Promise<void> | void;
2020
2028
  setAudioGroupAttribute: {
2021
2029
  setLive: (groupId: string, attr: string, value: string | null) => void;
2022
- setQuiet: (groupId: string, attr: string, value: string | null, label: string) => Promise<void>;
2030
+ setQuiet: (groupId: string, attr: string, value: string | null, label: string) => Promise<TimelineEditOutcome | void>;
2023
2031
  };
2024
2032
  handleBlockedTimelineEdit: (element: TimelineElement, intent: BlockedTimelineEditIntent) => void;
2025
2033
  handleTimelineElementSplit: (element: TimelineElement, splitTime: number) => Promise<void> | void;
@@ -2030,7 +2038,7 @@ interface TimelineEditCallbackDeps {
2030
2038
  /** C1's single-clip FX write, addressed by the clip itself. */
2031
2039
  setElementFxAttribute?: {
2032
2040
  setLive: (element: TimelineElement, attr: string, value: string | null) => void;
2033
- setQuiet: (element: TimelineElement, attr: string, value: string | null, label: string) => Promise<void>;
2041
+ setQuiet: (element: TimelineElement, attr: string, value: string | null, label: string) => Promise<TimelineEditOutcome | void>;
2034
2042
  };
2035
2043
  }
2036
2044
 
@@ -2665,7 +2673,7 @@ interface ApplyResult {
2665
2673
  paths?: string[];
2666
2674
  files?: Record<string, ApplyRestoredFile>;
2667
2675
  }
2668
- /** Studio's undo over the server's project history: an edit claims what it wrote; Cmd+Z steps every writer's. */
2676
+ /** Studio's undo over the server's project history: an edit claims what it wrote; Cmd+Z steps the person's. */
2669
2677
  declare function usePersistentEditHistory({ projectId }: UsePersistentEditHistoryOptions): {
2670
2678
  loaded: boolean;
2671
2679
  canUndo: boolean;
@@ -2694,11 +2702,11 @@ declare function useTimelineEditing({ projectId, activeCompPath, timelineElement
2694
2702
  handleToggleElementHidden: (elementKey: string | readonly string[], hidden: boolean) => Promise<void>;
2695
2703
  handleAutoGroupCarveSources: (clipIds: readonly string[], groupId: string, groupLabel?: string | undefined) => Promise<void>;
2696
2704
  setAudioGroupAttribute: {
2697
- setQuiet: (groupId: string, attr: string, value: string | null, label: string) => Promise<void>;
2705
+ setQuiet: (groupId: string, attr: string, value: string | null, label: string) => Promise<TimelineEditOutcome>;
2698
2706
  setLive: (groupId: string, attr: string, value: string | null) => void;
2699
2707
  };
2700
2708
  setElementFxAttribute: {
2701
- setQuiet: (element: TimelineElement, attr: string, value: string | null, label: string) => Promise<void>;
2709
+ setQuiet: (element: TimelineElement, attr: string, value: string | null, label: string) => Promise<TimelineEditOutcome>;
2702
2710
  setLive: (element: TimelineElement, attr: string, value: string | null) => void;
2703
2711
  };
2704
2712
  handleTimelineElementDelete: (element: TimelineElement) => Promise<void>;
@@ -2865,4 +2873,4 @@ declare function TimelineEditProvider({ value, children, }: {
2865
2873
  children: ReactNode;
2866
2874
  }): react_jsx_runtime.JSX.Element;
2867
2875
 
2868
- export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, Button, type ButtonSize, type ButtonVariant, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ContextMenu, DEFAULT_SHORTCUT_SECTIONS, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, GridOverlay, HyperframesLoader, type HyperframesLoaderProps, HyperframesLogo, IconButton, ImageThumbnail, type ImageThumbnailProps, Input, type InputProps, Menu, MenuItem, type MenuItemTone, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuShortcut, NLEPreview, NumberField, type NumberFieldProps, type PatchOperation, type PersistedRenderSettings, type PickedElement, Player, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, Popover, type PopupPreviewState, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, type PreviewSnapPreferences, type PreviewState, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, Select, type SelectOption, type SelectProps, type ShortcutHint, type ShortcutSection, Slider, type SliderProps, SnapToolbar, SourceEditor, type StartRenderOptions, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, Tab, TabPanel, Tabs, TabsList, type ThumbnailPriority, Timeline, TimelineClipMenu, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, Toggle, type ToggleProps, Tooltip, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildPickerAgentContextPreview, buildPickerAgentPrompt, buttonBase, buttonSizes, buttonVariants, cn, fieldBase, fieldText, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, popupSurface, resolveIframe, resolveSourceFile, useEditHistoryActions, useElementPicker, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewOverlayContext, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
2876
+ export { type AgentModalAnchorPoint, type AgentPromptElementInfo, AskAgentModal, type AskAgentModalProps, AudioWaveform, type AudioWaveformProps, type BlockedTimelineEditIntent, Button, type ButtonSize, type ButtonVariant, type CanEditTimelineElement, CompositionBreadcrumb, type CompositionDimensions, type CompositionLevel, CompositionThumbnail, ContextMenu, DEFAULT_SHORTCUT_SECTIONS, type EditHistoryHandle, EditorShell, type EditorShellProps, type ExternalFileChangeBlockedState, type ExternalFileChangeCoordinatorHandle, ExternalFileConflictBanner, type FfmpegStatus, FileTree, GridOverlay, HyperframesLoader, type HyperframesLoaderProps, HyperframesLogo, IconButton, ImageThumbnail, type ImageThumbnailProps, Input, type InputProps, Menu, MenuItem, type MenuItemTone, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuShortcut, NLEPreview, NumberField, type NumberFieldProps, type PatchOperation, type PersistedRenderSettings, type PickedElement, Player, PlayerControls, type PlayerHandle, type PlayerHandleElement, type PlayerHandleListener, type PlayerHandleTimeListener, Popover, type PopupPreviewState, type DomEditCompositionRect as PreviewCompositionRect, PreviewGuides, PreviewOverlayProvider, type PreviewOverlayProviderProps, type PreviewSnapPreferences, type PreviewState, PropertyPanel, type RenderJob, RenderQueue, type RenderQueueProps, type ResolutionPreset, Select, type SelectOption, type SelectProps, type ShortcutHint, type ShortcutSection, Slider, type SliderProps, SnapToolbar, SourceEditor, type StartRenderOptions, StudioApp, StudioFileConflictError, type StudioPendingEditsDrainResult, Tab, TabPanel, Tabs, TabsList, type ThumbnailPriority, Timeline, TimelineClipMenu, type TimelineClipRenderContext, type TimelineEditCallbacks, type TimelineEditOutcome, type TimelineEditPermission, TimelineEditPopover, TimelineEditProvider, type TimelineElement, TimelineEmptyStatePart, TimelineFrame, TimelineGapMenu, TimelineKeyframeMenu, TimelineLanes, TimelineOverlays, TimelinePane, type TimelinePaneProps, TimelinePlayhead, TimelineProvider, TimelineRazorGuide, TimelineRuler, TimelineShortcutHint, type TimelineTheme, type TimelineTimeRange$1 as TimelineTimeRange, Toggle, type ToggleProps, Tooltip, type UseEditHistoryActionsOptions, type UsePersistentEditHistoryOptions, type UseProjectFileWriterOptions, type UseRenderClipContentOptions, type UseTimelineEditingOptions, VideoThumbnail, applyPatch, buildPickerAgentContextPreview, buildPickerAgentPrompt, buttonBase, buttonSizes, buttonVariants, cn, fieldBase, fieldText, findElementBlock, flushStudioPendingEdits, formatTime, getPersistedRenderSettings, liveTime, mergeStyleIntoTag, parseStyleString, persistRenderSettings, popupSurface, resolveIframe, resolveSourceFile, useEditHistoryActions, useElementPicker, usePersistentEditHistory, usePlayerHandle, usePlayerStore, usePreviewCompositionRect, usePreviewGuidesStore, usePreviewOverlayContext, useProjectFileWriter, useRenderClipContent, useRenderQueue, useTimelineContext, useTimelineEditing, useTimelinePlayer };
@@ -5,7 +5,7 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
6
6
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />
7
7
  <title>HyperFrames Studio</title>
8
- <script type="module" crossorigin src="/assets/index-2GgHjQq-.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-DBKySIo7.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-BWJqxeaH.css">
10
10
  </head>
11
11
  <body>