hyperframes 0.8.4 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{g as P}from"./index-KH4Y5JCd.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-Cy6fGN1u.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};
@@ -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-KH4Y5JCd.js"></script>
8
+ <script type="module" crossorigin src="/assets/index-Cy6fGN1u.js"></script>
9
9
  <link rel="stylesheet" crossorigin href="/assets/index-DcF4s1PG.css">
10
10
  </head>
11
11
  <body>
@@ -4044,14 +4044,12 @@ function findActiveExpandableCompositionId(currentTime, manifest, parentMap) {
4044
4044
  }
4045
4045
  function resolveTimelineExpansionRawId({
4046
4046
  selectedElementId,
4047
- isPlaying,
4048
4047
  currentTime,
4049
4048
  manifest,
4050
4049
  parentMap
4051
4050
  }) {
4052
4051
  const selectedRawId = resolveRawId(selectedElementId, manifest, parentMap);
4053
4052
  if (selectedRawId) return selectedRawId;
4054
- if (isPlaying) return null;
4055
4053
  return findActiveExpandableCompositionId(currentTime, manifest, parentMap);
4056
4054
  }
4057
4055
  function filterToTopLevel(elements, parentMap) {
@@ -4198,7 +4196,6 @@ function useExpandedTimelineElements() {
4198
4196
  const clipParentMap = usePlayerStore((s) => s.clipParentMap);
4199
4197
  const domClipChildren = usePlayerStore((s) => s.domClipChildren);
4200
4198
  const selectedElementId = usePlayerStore((s) => s.selectedElementId);
4201
- const isPlaying = usePlayerStore((s) => s.isPlaying);
4202
4199
  const currentTime = usePlayerStore((s) => s.currentTime);
4203
4200
  const { rawId, selectedRawId } = useMemo3(() => {
4204
4201
  if (!clipManifest || clipManifest.length === 0 || clipParentMap.size === 0) {
@@ -4207,14 +4204,13 @@ function useExpandedTimelineElements() {
4207
4204
  return {
4208
4205
  rawId: resolveTimelineExpansionRawId({
4209
4206
  selectedElementId,
4210
- isPlaying,
4211
4207
  currentTime,
4212
4208
  manifest: clipManifest,
4213
4209
  parentMap: clipParentMap
4214
4210
  }),
4215
4211
  selectedRawId: resolveRawId(selectedElementId, clipManifest, clipParentMap)
4216
4212
  };
4217
- }, [clipManifest, clipParentMap, selectedElementId, isPlaying, currentTime]);
4213
+ }, [clipManifest, clipParentMap, selectedElementId, currentTime]);
4218
4214
  return useMemo3(() => {
4219
4215
  if (!clipManifest || clipManifest.length === 0 || clipParentMap.size === 0) {
4220
4216
  return elements;
@@ -21832,12 +21828,14 @@ function buildCompositionThumbnailUrl({
21832
21828
  duration = 5,
21833
21829
  selector,
21834
21830
  selectorIndex,
21835
- origin
21831
+ origin,
21832
+ output
21836
21833
  }) {
21837
21834
  const thumbnailBase = previewUrl.replace("/preview/comp/", "/thumbnail/").replace(/\/preview$/, "/thumbnail/index.html");
21838
21835
  const thumbnailUrl2 = new URL(thumbnailBase, origin);
21839
21836
  thumbnailUrl2.searchParams.set("t", (seekTime + duration / 2).toFixed(2));
21840
21837
  thumbnailUrl2.searchParams.set("v", THUMBNAIL_URL_VERSION);
21838
+ if (output) thumbnailUrl2.searchParams.set("output", output);
21841
21839
  if (selector) {
21842
21840
  thumbnailUrl2.searchParams.set("selector", selector);
21843
21841
  if (selectorIndex != null && selectorIndex > 0) {
@@ -81033,11 +81031,11 @@ function FramePoster({
81033
81031
  src,
81034
81032
  seconds,
81035
81033
  title,
81036
- fit = "cover",
81034
+ surface = "tile",
81037
81035
  posterVersion
81038
81036
  }) {
81039
81037
  const [failed2, setFailed] = useState140(false);
81040
- useEffect126(() => setFailed(false), [src, seconds, posterVersion]);
81038
+ useEffect126(() => setFailed(false), [src, seconds, posterVersion, surface]);
81041
81039
  if (failed2) {
81042
81040
  return /* @__PURE__ */ jsx195("div", { className: "flex h-full w-full items-center justify-center text-[11px] text-neutral-600", children: "Preview unavailable" });
81043
81041
  }
@@ -81045,7 +81043,11 @@ function FramePoster({
81045
81043
  previewUrl: `/api/projects/${projectId}/preview/comp/${src}`,
81046
81044
  seekTime: seconds,
81047
81045
  duration: 0,
81048
- origin: window.location.origin
81046
+ origin: window.location.origin,
81047
+ // The normal 240x135 preview is unreadable in the contact sheet, while source
81048
+ // density is unbounded across all tiles. Give tiles a capped review density
81049
+ // and reserve true source output for the single focus hero.
81050
+ output: surface === "hero" ? "source" : "storyboard"
81049
81051
  });
81050
81052
  if (posterVersion) {
81051
81053
  const withVersion = new URL(url, window.location.origin);
@@ -81060,7 +81062,7 @@ function FramePoster({
81060
81062
  draggable: false,
81061
81063
  loading: "lazy",
81062
81064
  onError: () => setFailed(true),
81063
- className: `h-full w-full ${fit === "contain" ? "object-contain" : "object-cover"}`
81065
+ className: `h-full w-full ${surface === "hero" ? "object-contain" : "object-cover"}`
81064
81066
  }
81065
81067
  );
81066
81068
  }
@@ -81581,7 +81583,7 @@ function StoryboardFrameFocus({
81581
81583
  src: frame.src,
81582
81584
  seconds: posterTime(frame),
81583
81585
  title,
81584
- fit: "contain",
81586
+ surface: "hero",
81585
81587
  posterVersion
81586
81588
  }
81587
81589
  ) : /* @__PURE__ */ jsx201(FramePlan, { frame }) }) }),