cursedbelt 5.76.0 → 5.78.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/dist/react/canvas-hud/CanvasToolbar.d.ts +1 -1
  2. package/dist/react/components/BuildFreshness.d.ts +2 -1
  3. package/dist/react/components/BuildFreshness.d.ts.map +1 -1
  4. package/dist/react/components/BuildFreshness.js +11 -4
  5. package/dist/react/components/BuildFreshness.js.map +1 -1
  6. package/dist/react/components/DataTable/TableFilterBuilder.d.ts.map +1 -1
  7. package/dist/react/components/DataTable/TableFilterBuilder.js +2 -2
  8. package/dist/react/components/DataTable/TableFilterBuilder.js.map +1 -1
  9. package/dist/react/components/ListToolbar.d.ts +2 -2
  10. package/dist/react/components/ListToolbar.d.ts.map +1 -1
  11. package/dist/react/components/ListToolbar.js +1 -1
  12. package/dist/react/hooks/useOutsidePress.d.ts.map +1 -1
  13. package/dist/react/hooks/useOutsidePress.js +18 -3
  14. package/dist/react/hooks/useOutsidePress.js.map +1 -1
  15. package/dist/react/hooks/useScrollMemory.d.ts +4 -3
  16. package/dist/react/hooks/useScrollMemory.d.ts.map +1 -1
  17. package/dist/react/hooks/useScrollMemory.js +16 -2
  18. package/dist/react/hooks/useScrollMemory.js.map +1 -1
  19. package/dist/react/media/FocusViewer.d.ts +8 -1
  20. package/dist/react/media/FocusViewer.d.ts.map +1 -1
  21. package/dist/react/media/FocusViewer.js +174 -10
  22. package/dist/react/media/FocusViewer.js.map +1 -1
  23. package/dist/react/media/focusViewer.css +31 -0
  24. package/dist/react/media/gifClip.d.ts +46 -0
  25. package/dist/react/media/gifClip.d.ts.map +1 -0
  26. package/dist/react/media/gifClip.js +74 -0
  27. package/dist/react/media/gifClip.js.map +1 -0
  28. package/dist/react/media/gifEncode.d.ts +46 -0
  29. package/dist/react/media/gifEncode.d.ts.map +1 -0
  30. package/dist/react/media/gifEncode.js +288 -0
  31. package/dist/react/media/gifEncode.js.map +1 -0
  32. package/dist/react/media/gifRecord.d.ts +26 -0
  33. package/dist/react/media/gifRecord.d.ts.map +1 -0
  34. package/dist/react/media/gifRecord.js +93 -0
  35. package/dist/react/media/gifRecord.js.map +1 -0
  36. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -1
  37. package/dist/styles-areas/analytics.css +9 -9
  38. package/dist/styles-areas/data-table.css +10 -10
  39. package/dist/styles-areas/media.css +2 -2
  40. package/package.json +3 -3
  41. package/scripts/guardrailsEnforce.spec.ts +10 -0
  42. package/scripts/guardrailsEnforce.ts +4 -1
  43. package/scripts/styleAreas.ts +3 -1
  44. package/src/react/canvas-hud/CanvasToolbar.tsx +1 -1
  45. package/src/react/components/BuildFreshness.spec.tsx +10 -0
  46. package/src/react/components/BuildFreshness.tsx +13 -4
  47. package/src/react/components/DataTable/TableFilterBuilder.tsx +9 -13
  48. package/src/react/components/DataTable/tableSystem.spec.tsx +15 -7
  49. package/src/react/components/ListToolbar.tsx +2 -2
  50. package/src/react/hooks/useOutsidePress.spec.tsx +20 -0
  51. package/src/react/hooks/useOutsidePress.ts +17 -2
  52. package/src/react/hooks/useScrollMemory.spec.tsx +45 -2
  53. package/src/react/hooks/useScrollMemory.ts +20 -5
  54. package/src/react/media/FocusViewer.tsx +322 -25
  55. package/src/react/media/focusViewer.css +31 -0
  56. package/src/react/media/gifClip.ts +90 -0
  57. package/src/react/media/gifEncode.spec.ts +213 -0
  58. package/src/react/media/gifEncode.ts +298 -0
  59. package/src/react/media/gifRecord.ts +103 -0
  60. package/src/styles-areas/analytics.css +9 -9
  61. package/src/styles-areas/data-table.css +10 -10
  62. package/src/styles-areas/media.css +2 -2
@@ -1,4 +1,4 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import "./focusViewer.css";
3
3
  /**
4
4
  * The focus viewer — look closely at PART of a video, and keep what you find.
@@ -18,6 +18,10 @@ import "./focusViewer.css";
18
18
  * which is the correct surface for a host with nowhere to put one.
19
19
  * · `destination` — an arbitrary node in the action row, for a host that wants to choose
20
20
  * WHERE (collections offers its folder picker there; binary-server offers nothing).
21
+ * · `onSaveGif` — where a looping GIF of a section goes. Unlike a snapshot, a GIF is
22
+ * offered to EVERY host: without a store it downloads to the device (owner, 2026-10-11:
23
+ * *"In collections and the cb media player in general allow making a looping gif out of a
24
+ * section of a video"* — "in general" is binary-server too, which keeps no stills).
21
25
  * Everything else — geometry, gestures, keyboard, the canvas capture — is the same code for
22
26
  * every consumer, which is the entire point of the lift.
23
27
  *
@@ -51,7 +55,7 @@ import "./focusViewer.css";
51
55
  import { useCallback, useEffect, useRef, useState } from "react";
52
56
  import { Alert } from "../components/Alert.js";
53
57
  import { Button } from "../components/Button.js";
54
- import { NativeSelect } from "../components/NativeSelect.js";
58
+ import { SelectField } from "../components/SelectField.js";
55
59
  import { Tooltip } from "../components/Tooltip.js";
56
60
  import { MediaResizeBar, MediaResizeCorner, useMediaResize } from "./MediaResize.js";
57
61
  import { FOCUS_HEIGHT_KEY } from "./stageResize.js";
@@ -59,9 +63,23 @@ import { PictureControls } from "./PictureControls.js";
59
63
  import { handOffPlayhead } from "./playheadHandoff.js";
60
64
  import { isPlayPauseSpace } from "./playerSpaceKey.js";
61
65
  import { PLAYBACK_RATES } from "./VideoPlayer.js";
66
+ import { clampGifSection, formatGifBytes, formatGifTime, GIF_FRAME_RATES, GIF_WIDTHS, gifFileName, gifSectionAt, MAX_GIF_SECONDS, } from "./gifClip.js";
62
67
  import { FULL_REGION, MAX_ZOOM, composeSelection, fillRegion, fitBox, isFullRegion, normalizeRect, panRegion, regionAtZoom, regionLayout, regionPixels, regionZoom, stageAspectFor, zoomRegion, } from "./videoRegion.js";
63
68
  import { NO_ENHANCE, UPSCALE_FACTORS, filterString, isEnhanced, readEnhance, snapshotSize, writeEnhance, } from "./videoEnhance.js";
64
69
  import { cn, RAW_BUTTON } from '../lib/cn.js';
70
+ /**
71
+ * The GIF recorder and its encoder, fetched the first time the GIF panel opens — they are this
72
+ * feature's bytes, and a gallery that never makes a GIF should not carry them. Kept once
73
+ * fetched; a failed fetch is forgotten so the next press asks again.
74
+ */
75
+ let gifRecorder = null;
76
+ function loadGifRecorder() {
77
+ gifRecorder ??= import("./gifRecord.js").catch((error) => {
78
+ gifRecorder = null;
79
+ throw error;
80
+ });
81
+ return gifRecorder;
82
+ }
65
83
  /** `m:ss`, or `h:mm:ss` past the hour. Local so this module has no app dependency. */
66
84
  function formatDuration(seconds) {
67
85
  if (!Number.isFinite(seconds) || seconds < 0)
@@ -77,7 +95,7 @@ function formatDuration(seconds) {
77
95
  const ZOOM_STEP = 1.25;
78
96
  /** One frame at 30 fps — see `stepFrame` for why this is a constant and not measured. */
79
97
  const FRAME_STEP_SECONDS = 1 / 30;
80
- export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, snapshots = [], onSaveSnapshot, destination, matchHeight, videoId, onClose, }) {
98
+ export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, snapshots = [], onSaveSnapshot, destination, onSaveGif, matchHeight, videoId, onClose, }) {
81
99
  const videoRef = useRef(null);
82
100
  const viewportRef = useRef(null);
83
101
  /*
@@ -122,6 +140,19 @@ export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, sna
122
140
  const [busy, setBusy] = useState(false);
123
141
  const [error, setError] = useState(null);
124
142
  const [note, setNote] = useState(null);
143
+ /*
144
+ * ── A section, as a looping GIF ────────────────────────────────────────────────────
145
+ * Null while the GIF panel is shut. Open, it is the section the GIF will hold, and while
146
+ * `loopSection` is on the picture plays only that section, round and round — the preview
147
+ * IS the GIF, before a frame is encoded.
148
+ */
149
+ const [gif, setGif] = useState(null);
150
+ const [loopSection, setLoopSection] = useState(true);
151
+ const [gifFps, setGifFps] = useState(15);
152
+ const [gifWidth, setGifWidth] = useState(480);
153
+ /** `[done, total]` frames while one is being made. */
154
+ const [gifProgress, setGifProgress] = useState(null);
155
+ const gifAbort = useRef(null);
125
156
  /**
126
157
  * Keep the measured viewport current.
127
158
  *
@@ -252,6 +283,111 @@ export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, sna
252
283
  if (wasPlaying)
253
284
  void video.play().catch(() => undefined);
254
285
  }, []);
286
+ /**
287
+ * Play the GIF's section on a loop while it is being chosen.
288
+ *
289
+ * Checked every animation frame rather than on `timeupdate`, which fires about four times
290
+ * a second and would let the picture run a quarter-second past the end before snapping
291
+ * back — a preview that shows frames the GIF will not have. Only while PLAYING: a paused
292
+ * scrub or frame-step outside the section is the person looking for a new end, and must not
293
+ * be yanked back. Stands down while a GIF is being made, whose seeks are its own.
294
+ */
295
+ useEffect(() => {
296
+ if (!gif || !loopSection || gifProgress)
297
+ return;
298
+ let raf = 0;
299
+ const check = () => {
300
+ const video = videoRef.current;
301
+ if (video && !video.paused && !scrubbing.current) {
302
+ const t = video.currentTime;
303
+ if (t >= gif.endSeconds || t < gif.startSeconds - 0.05)
304
+ video.currentTime = gif.startSeconds;
305
+ }
306
+ raf = requestAnimationFrame(check);
307
+ };
308
+ raf = requestAnimationFrame(check);
309
+ return () => cancelAnimationFrame(raf);
310
+ }, [gif, loopSection, gifProgress]);
311
+ /** Close the GIF panel, stopping a GIF still being made. */
312
+ const closeGif = () => {
313
+ gifAbort.current?.abort();
314
+ setGif(null);
315
+ };
316
+ /** Mark where the GIF starts or ends at the playhead — the `I` and `O` keys, as in an editor. */
317
+ const markGif = (end) => {
318
+ const at = videoRef.current?.currentTime ?? position;
319
+ const total = duration || videoRef.current?.duration || 0;
320
+ // Fetched while the section is chosen, so "Save GIF" does not wait on the network.
321
+ void loadGifRecorder().catch(() => undefined);
322
+ setGif((current) => {
323
+ if (!current)
324
+ return gifSectionAt(at, total);
325
+ const length = current.endSeconds - current.startSeconds;
326
+ return end === "start"
327
+ ? // A start past the old end keeps the section's length rather than collapsing it.
328
+ clampGifSection({ startSeconds: at, endSeconds: at >= current.endSeconds ? at + length : current.endSeconds }, total, "start")
329
+ : clampGifSection({ startSeconds: current.startSeconds, endSeconds: at }, total, "end");
330
+ });
331
+ };
332
+ /**
333
+ * Make the GIF: seek through the section, encode what is ON SCREEN — the zoomed area and
334
+ * the picture adjustments, exactly as a snapshot takes them — and save or download it.
335
+ */
336
+ const makeGif = async (how) => {
337
+ const video = videoRef.current;
338
+ if (!video || !gif)
339
+ return;
340
+ const abort = new AbortController();
341
+ gifAbort.current = abort;
342
+ setError(null);
343
+ setNote(null);
344
+ setGifProgress([0, 1]);
345
+ try {
346
+ const crop = regionPixels(shown, { width: video.videoWidth, height: video.videoHeight });
347
+ if (!crop)
348
+ throw new Error("The video has not decoded a frame yet.");
349
+ // 🔴 A failed fetch here is almost always a deploy since this page opened — the chunk
350
+ // was renamed — and says so, rather than reloading away the section being made.
351
+ const { recordGifClip } = await loadGifRecorder().catch(() => {
352
+ throw new Error("This app was updated since the page opened — reload it to make a GIF.");
353
+ });
354
+ const blob = await recordGifClip(video, {
355
+ ...gif,
356
+ fps: gifFps,
357
+ width: gifWidth,
358
+ crop,
359
+ ...(isEnhanced(enhance) ? { filter: filterString(enhance) } : {}),
360
+ onProgress: (done, total) => setGifProgress([done, total]),
361
+ signal: abort.signal,
362
+ });
363
+ const weight = formatGifBytes(blob.size);
364
+ if (how === "save" && onSaveGif) {
365
+ const saved = (await onSaveGif(blob, gif)) ?? {};
366
+ setNote(saved.message
367
+ ? `${saved.message} (${weight} GIF)`
368
+ : saved.duplicate
369
+ ? "That exact GIF was already saved — nothing added."
370
+ : `GIF saved — ${weight}.`);
371
+ }
372
+ else {
373
+ downloadBlob(blob, gifFileName(title, gif.startSeconds));
374
+ setNote(`GIF downloaded — ${weight}.`);
375
+ }
376
+ }
377
+ catch (err) {
378
+ if (err instanceof DOMException && err.name === "AbortError")
379
+ setNote("GIF cancelled.");
380
+ else
381
+ setError(err instanceof Error ? err.message : "The GIF could not be made.");
382
+ }
383
+ finally {
384
+ if (gifAbort.current === abort)
385
+ gifAbort.current = null;
386
+ setGifProgress(null);
387
+ }
388
+ };
389
+ // A GIF still being made is stopped when the viewer goes.
390
+ useEffect(() => () => gifAbort.current?.abort(), []);
255
391
  /**
256
392
  * Drag the timeline to skip around LIVE.
257
393
  *
@@ -496,7 +632,11 @@ export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, sna
496
632
  event.altKey ||
497
633
  event.shiftKey)
498
634
  return;
499
- if (event.key === "ArrowRight") {
635
+ if (gif && !gifProgress && (event.key === "i" || event.key === "o")) {
636
+ event.preventDefault();
637
+ markGif(event.key === "i" ? "start" : "end");
638
+ }
639
+ else if (event.key === "ArrowRight") {
500
640
  event.preventDefault();
501
641
  stepFrame(1);
502
642
  }
@@ -587,12 +727,12 @@ export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, sna
587
727
  }, onKeyDown: beginScrub, onKeyUp: endScrub,
588
728
  // Pause for the duration of a drag — see `beginScrub` for why playback and a
589
729
  // drag otherwise fight over `currentTime`.
590
- onPointerDown: beginScrub, step: 0.02, type: "range", value: position }), _jsxs("span", { className: "inspector__time", children: [formatDuration(position) || "0:00", " / ", formatDuration(duration) || "0:00"] }), _jsxs("label", { className: "inspector__speed", htmlFor: "inspector-speed", children: [_jsx("span", { className: "sr-only", children: "Playback speed" }), _jsx(NativeSelect, { id: "inspector-speed", className: "w-auto", onChange: (event) => {
591
- const next = Number(event.target.value);
730
+ onPointerDown: beginScrub, step: 0.02, type: "range", value: position }), _jsxs("span", { className: "inspector__time", children: [formatDuration(position) || "0:00", " / ", formatDuration(duration) || "0:00"] }), _jsxs("label", { className: "inspector__speed", htmlFor: "inspector-speed", children: [_jsx("span", { className: "sr-only", children: "Playback speed" }), _jsx(SelectField, { id: "inspector-speed", className: "w-auto", onValueChange: (value) => {
731
+ const next = Number(value);
592
732
  setRate(next);
593
733
  if (videoRef.current)
594
734
  videoRef.current.playbackRate = next;
595
- }, size: "sm", value: rate, children: PLAYBACK_RATES.map((option) => (_jsxs("option", { value: option, children: [option, "\u00D7"] }, option))) })] })] }), _jsxs("div", { className: "inspector__tools", children: [_jsx(Button, { onClick: () => setRegion((current) => zoomRegion(current, 1 / ZOOM_STEP)), tooltip: "Wider", variant: "secondary", children: "\uFF0D" }), _jsxs("label", { className: "inspector__zoom", children: [_jsx("span", { className: "sr-only", children: "Zoom" }), _jsx(Tooltip, { content: "How close in you are looking", children: _jsx("input", {
735
+ }, options: PLAYBACK_RATES.map((option) => ({ value: String(option), label: `${option}×` })), size: "sm", value: String(rate) })] })] }), _jsxs("div", { className: "inspector__tools", children: [_jsx(Button, { onClick: () => setRegion((current) => zoomRegion(current, 1 / ZOOM_STEP)), tooltip: "Wider", variant: "secondary", children: "\uFF0D" }), _jsxs("label", { className: "inspector__zoom", children: [_jsx("span", { className: "sr-only", children: "Zoom" }), _jsx(Tooltip, { content: "How close in you are looking", children: _jsx("input", {
596
736
  // guardrails-ignore no-raw-inputs: sibling of the transport — see above
597
737
  max: MAX_ZOOM, min: 1, onChange: (event) => setRegion((current) => regionAtZoom(current, Number(event.target.value))), step: 0.1, type: "range", value: Math.min(zoom, MAX_ZOOM), "aria-label": "How close in you are looking" }) }), _jsxs("span", { className: "inspector__time", children: [zoom.toFixed(1), "\u00D7"] })] }), _jsx(Button, { onClick: () => setRegion((current) => zoomRegion(current, ZOOM_STEP)), tooltip: "Closer, on the middle of what you are looking at", variant: "secondary", children: "\uFF0B" }), _jsx(Button, { onClick: () => setSelecting((on) => !on), tooltip: selecting
598
738
  ? "Stop selecting — a drag pans instead"
@@ -605,9 +745,20 @@ export function FocusViewer({ videoUrl, title, startAt = 0, durationSeconds, sna
605
745
  // Upscale is this surface's own concern, which is why Reset is overridden
606
746
  // here rather than the control being taught about it.
607
747
  setUpscale(1);
608
- }, resettable: isEnhanced(enhance) || upscale !== 1, value: enhance, children: onSaveSnapshot ? (_jsxs("label", { className: "picture__slider", htmlFor: "inspector-upscale", children: [_jsx("span", { children: "Save at" }), _jsx(NativeSelect, { id: "inspector-upscale", className: "w-auto", onChange: (event) => setUpscale(Number(event.target.value)), size: "sm", value: upscale, children: UPSCALE_FACTORS.map((factor) => (_jsxs("option", { value: factor, children: [factor, "\u00D7 ", factor === 1 ? "(as-is)" : "upscaled"] }, factor))) })] })) : null }), onSaveSnapshot ? (_jsxs("div", { className: "inspector__save", children: [_jsx(Button, { disabled: busy, onClick: () => void takeSnapshot(false), tooltip: isFullRegion(region)
609
- ? "Save this frame as a picture"
610
- : "Save just the part you are looking at", variant: "primary", children: isFullRegion(region) ? "Snapshot this frame" : "Snapshot this area" }), isFullRegion(region) ? null : (_jsx(Button, { disabled: busy, onClick: () => void takeSnapshot(true), tooltip: "Save the whole frame, ignoring the area you selected", variant: "secondary", children: "Snapshot whole frame" })), destination] })) : null, error ? _jsx(Alert, { tone: "error", children: error }) : null, note && !error ? _jsx(Alert, { tone: "success", children: note }) : null, snapshots.length > 0 ? (_jsxs("div", { className: "inspector__strip", children: [_jsx("p", { className: "inspector__striphead", children: "Stills from this video \u2014 click one to jump to that moment" }), _jsx("ul", { className: "inspector__stills", children: snapshots.map((still) => (_jsx("li", { children: _jsx(SnapshotChip, { onJump: () => seekTo(still.atSeconds ?? 0), still: still }) }, still.id))) })] })) : null] }));
748
+ }, resettable: isEnhanced(enhance) || upscale !== 1, value: enhance, children: onSaveSnapshot ? (_jsxs("label", { className: "picture__slider", htmlFor: "inspector-upscale", children: [_jsx("span", { children: "Save at" }), _jsx(SelectField, { id: "inspector-upscale", className: "w-auto", onValueChange: (value) => setUpscale(Number(value)), options: UPSCALE_FACTORS.map((factor) => ({
749
+ value: String(factor),
750
+ label: `${factor}× ${factor === 1 ? "(as-is)" : "upscaled"}`,
751
+ })), size: "sm", value: String(upscale) })] })) : null }), _jsxs("div", { className: "inspector__save", children: [onSaveSnapshot ? (_jsxs(_Fragment, { children: [_jsx(Button, { disabled: busy, onClick: () => void takeSnapshot(false), tooltip: isFullRegion(region)
752
+ ? "Save this frame as a picture"
753
+ : "Save just the part you are looking at", variant: "primary", children: isFullRegion(region) ? "Snapshot this frame" : "Snapshot this area" }), isFullRegion(region) ? null : (_jsx(Button, { disabled: busy, onClick: () => void takeSnapshot(true), tooltip: "Save the whole frame, ignoring the area you selected", variant: "secondary", children: "Snapshot whole frame" }))] })) : null, _jsx(Button, { "aria-expanded": gif !== null, disabled: gifProgress !== null, onClick: () => (gif ? closeGif() : markGif("start")), tooltip: gif
754
+ ? "Put the GIF away"
755
+ : "Turn a few seconds of this video into a looping GIF, starting here", variant: gif ? "primary" : "secondary", children: "Make a GIF" }), onSaveSnapshot || onSaveGif ? destination : null] }), gif ? (_jsxs("section", { "aria-label": "Make a GIF", className: "inspector__gif", children: [_jsxs("div", { className: "inspector__gifrange", children: [_jsx(Button, { disabled: gifProgress !== null, onClick: () => markGif("start"), tooltip: "Start the GIF at the playhead (I)", variant: "secondary", children: "Start here" }), _jsxs("span", { className: "inspector__gifspan", children: [_jsx("span", { children: formatGifTime(gif.startSeconds) }), _jsx("span", { "aria-hidden": "true", children: "\u2013" }), _jsx("span", { children: formatGifTime(gif.endSeconds) }), _jsxs("span", { className: "inspector__time", children: [(gif.endSeconds - gif.startSeconds).toFixed(1), " s", gif.endSeconds - gif.startSeconds >= MAX_GIF_SECONDS - 0.05 ? " · the longest a GIF can be" : ""] })] }), _jsx(Button, { disabled: gifProgress !== null, onClick: () => markGif("end"), tooltip: `End the GIF at the playhead (O) — up to ${MAX_GIF_SECONDS} s`, variant: "secondary", children: "End here" }), _jsx(Button, { "aria-pressed": loopSection, disabled: gifProgress !== null, onClick: () => setLoopSection((on) => !on), tooltip: loopSection
756
+ ? "Playing only the section, on a loop — press to play the whole video again"
757
+ : "Play only the section, on a loop, the way the GIF will", variant: loopSection ? "primary" : "ghost", children: "Loop section" })] }), _jsxs("div", { className: "inspector__gifout", children: [_jsxs("label", { className: "picture__slider", htmlFor: "inspector-gif-fps", children: [_jsx("span", { children: "Smoothness" }), _jsx(SelectField, { id: "inspector-gif-fps", className: "w-auto", disabled: gifProgress !== null, onValueChange: (value) => setGifFps(Number(value)), options: GIF_FRAME_RATES.map((fps) => ({ value: String(fps), label: `${fps} fps` })), size: "sm", value: String(gifFps) })] }), _jsxs("label", { className: "picture__slider", htmlFor: "inspector-gif-width", children: [_jsx("span", { children: "Width" }), _jsx(SelectField, { id: "inspector-gif-width", className: "w-auto", disabled: gifProgress !== null, onValueChange: (value) => setGifWidth(Number(value)), options: GIF_WIDTHS.map((width) => ({ value: String(width), label: `${width} px` })), size: "sm", value: String(gifWidth) })] }), gifProgress ? (_jsxs(_Fragment, { children: [_jsxs("span", { "aria-live": "polite", className: "inspector__time", children: ["Making the GIF \u2014 frame ", gifProgress[0], " of ", gifProgress[1]] }), _jsx(Button, { onClick: () => gifAbort.current?.abort(), tooltip: "Stop making this GIF", variant: "ghost", children: "Cancel" })] })) : (_jsxs(_Fragment, { children: [onSaveGif ? (_jsx(Button, { onClick: () => void makeGif("save"), tooltip: isFullRegion(region)
758
+ ? "Save the section as a looping GIF beside this video"
759
+ : "Save the section as a looping GIF — just the part you are looking at", variant: "primary", children: "Save GIF" })) : null, _jsx(Button, { onClick: () => void makeGif("download"), tooltip: isFullRegion(region)
760
+ ? "Download the section as a looping GIF"
761
+ : "Download the section as a looping GIF — just the part you are looking at", variant: onSaveGif ? "secondary" : "primary", children: onSaveGif ? "Download" : "Download GIF" })] }))] })] })) : null, error ? _jsx(Alert, { tone: "error", children: error }) : null, note && !error ? _jsx(Alert, { tone: "success", children: note }) : null, snapshots.length > 0 ? (_jsxs("div", { className: "inspector__strip", children: [_jsx("p", { className: "inspector__striphead", children: "Stills from this video \u2014 click one to jump to that moment" }), _jsx("ul", { className: "inspector__stills", children: snapshots.map((still) => (_jsx("li", { children: _jsx(SnapshotChip, { onJump: () => seekTo(still.atSeconds ?? 0), still: still }) }, still.id))) })] })) : null] }));
611
762
  }
612
763
  /**
613
764
  * One still in the strip. Its thumbnail is fetched lazily and per item, exactly like a
@@ -646,4 +797,17 @@ function marqueeStyle(rect) {
646
797
  height: `${box.h * 100}%`,
647
798
  };
648
799
  }
800
+ /** Hand a made file to the browser's own download — the GIF of a host with no store. */
801
+ function downloadBlob(blob, name) {
802
+ const url = URL.createObjectURL(blob);
803
+ const link = document.createElement("a");
804
+ link.href = url;
805
+ link.download = name;
806
+ link.rel = "noopener";
807
+ document.body.append(link);
808
+ link.click();
809
+ link.remove();
810
+ // After the click has been handed to the browser; revoking at once cancels it in Safari.
811
+ setTimeout(() => URL.revokeObjectURL(url), 30_000);
812
+ }
649
813
  //# sourceMappingURL=FocusViewer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FocusViewer.js","sourceRoot":"","sources":["../../../src/react/media/FocusViewer.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FocusViewer.js","sourceRoot":"","sources":["../../../src/react/media/FocusViewer.tsx"],"names":[],"mappings":"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"}
@@ -246,3 +246,34 @@
246
246
  max-inline-size: none;
247
247
  max-block-size: none;
248
248
  }
249
+
250
+ /*
251
+ * The GIF panel — a section of the video, as a looping GIF (owner, 2026-10-11). Two rows that
252
+ * wrap like the tools above them: WHAT (the section and its loop) and HOW (rate, width, make).
253
+ */
254
+ .inspector__gif {
255
+ display: flex;
256
+ flex-direction: column;
257
+ gap: 0.5rem;
258
+ padding: 0.625rem 0.75rem;
259
+ border: 1px solid var(--border);
260
+ border-radius: var(--radius-md, 0.5rem);
261
+ background: var(--surface-raised, transparent);
262
+ }
263
+
264
+ .inspector__gifrange,
265
+ .inspector__gifout {
266
+ display: flex;
267
+ align-items: center;
268
+ gap: 0.5rem;
269
+ flex-wrap: wrap;
270
+ }
271
+
272
+ .inspector__gifspan {
273
+ display: inline-flex;
274
+ align-items: baseline;
275
+ gap: 0.4rem;
276
+ padding-inline: 0.25rem;
277
+ font-variant-numeric: tabular-nums;
278
+ color: var(--text);
279
+ }
@@ -0,0 +1,46 @@
1
+ /** Longest section a GIF may be. Past this a GIF is a worse video: tens of MB, and slow to open. */
2
+ export declare const MAX_GIF_SECONDS = 15;
3
+ /** Shortest section worth looping — two frames at the lowest rate. */
4
+ export declare const MIN_GIF_SECONDS = 0.2;
5
+ /** What a new section spans from the playhead, before either end is moved. */
6
+ export declare const DEFAULT_GIF_SECONDS = 3;
7
+ /** The frame rates offered. A GIF's delay is in hundredths of a second, so 20 is near the top of what plays evenly. */
8
+ export declare const GIF_FRAME_RATES: readonly [10, 15, 20];
9
+ /** Output widths offered, in pixels — the height follows the picture's shape. */
10
+ export declare const GIF_WIDTHS: readonly [320, 480, 640];
11
+ export interface GifSection {
12
+ startSeconds: number;
13
+ endSeconds: number;
14
+ }
15
+ /**
16
+ * A section made sensible: inside the video, start before end, no shorter than
17
+ * {@link MIN_GIF_SECONDS} and no longer than {@link MAX_GIF_SECONDS}. When an edit would break
18
+ * a rule, the END that was not just moved gives way — `moved` says which end the hand is on,
19
+ * so marking a new start past the end drags the end along instead of refusing the start.
20
+ */
21
+ export declare function clampGifSection(section: GifSection, durationSeconds: number, moved?: "start" | "end"): GifSection;
22
+ /** The new section a "Make a GIF" press opens with: from the playhead, {@link DEFAULT_GIF_SECONDS} long. */
23
+ export declare function gifSectionAt(playheadSeconds: number, durationSeconds: number): GifSection;
24
+ /**
25
+ * The moments a section is sampled at: one every `1/fps` seconds from the start, the last
26
+ * strictly before the end — so a loop never shows the start frame twice in a row.
27
+ */
28
+ export declare function gifFrameTimes(section: GifSection, fps: number): number[];
29
+ /**
30
+ * The GIF's pixel size for a crop of `crop` source pixels at a requested `width` — never
31
+ * wider than the crop itself (upscaling a GIF only adds bytes) and never below 2×2.
32
+ */
33
+ export declare function gifSize(crop: {
34
+ sw: number;
35
+ sh: number;
36
+ }, width: number): {
37
+ width: number;
38
+ height: number;
39
+ };
40
+ /** `0:12.4` — tenths, because a GIF section is set to the frame, not to the second. */
41
+ export declare function formatGifTime(seconds: number): string;
42
+ /** `2.4 MB` / `840 KB` — what a saved GIF weighs, said after it is made. */
43
+ export declare function formatGifBytes(bytes: number): string;
44
+ /** A file name for a downloaded GIF: the video's name without its extension, and where it starts. */
45
+ export declare function gifFileName(title: string | undefined, startSeconds: number): string;
46
+ //# sourceMappingURL=gifClip.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gifClip.d.ts","sourceRoot":"","sources":["../../../src/react/media/gifClip.ts"],"names":[],"mappings":"AAQA,oGAAoG;AACpG,eAAO,MAAM,eAAe,KAAK,CAAC;AAClC,sEAAsE;AACtE,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,8EAA8E;AAC9E,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,uHAAuH;AACvH,eAAO,MAAM,eAAe,uBAAwB,CAAC;AACrD,iFAAiF;AACjF,eAAO,MAAM,UAAU,0BAA2B,CAAC;AAEnD,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,KAAK,GAAE,OAAO,GAAG,KAAa,GAAG,UAAU,CAWxH;AAED,4GAA4G;AAC5G,wBAAgB,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,UAAU,CAMzF;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAIxE;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,EAAE,KAAK,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAG1G;AAED,uFAAuF;AACvF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAMrD;AAED,4EAA4E;AAC5E,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,qGAAqG;AACrG,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAGnF"}
@@ -0,0 +1,74 @@
1
+ // ── A section of a video, as a looping GIF ───────────────────────────────────────────
2
+ // The capture half of the owner's 2026-10-11 ask (*"allow making a looping gif out of a
3
+ // section of a video"*): the section's rules and words, which the focus viewer's panel draws
4
+ // from. The capture is `gifRecord.ts` and the encoding `gifEncode.ts` — both loaded only when a
5
+ // GIF is made, so a gallery that never makes one carries neither.
6
+ // Not on the media entry's export list yet: a second player that wants them adds the line and
7
+ // its `publicSurface.baseline` entry together.
8
+ /** Longest section a GIF may be. Past this a GIF is a worse video: tens of MB, and slow to open. */
9
+ export const MAX_GIF_SECONDS = 15;
10
+ /** Shortest section worth looping — two frames at the lowest rate. */
11
+ export const MIN_GIF_SECONDS = 0.2;
12
+ /** What a new section spans from the playhead, before either end is moved. */
13
+ export const DEFAULT_GIF_SECONDS = 3;
14
+ /** The frame rates offered. A GIF's delay is in hundredths of a second, so 20 is near the top of what plays evenly. */
15
+ export const GIF_FRAME_RATES = [10, 15, 20];
16
+ /** Output widths offered, in pixels — the height follows the picture's shape. */
17
+ export const GIF_WIDTHS = [320, 480, 640];
18
+ /**
19
+ * A section made sensible: inside the video, start before end, no shorter than
20
+ * {@link MIN_GIF_SECONDS} and no longer than {@link MAX_GIF_SECONDS}. When an edit would break
21
+ * a rule, the END that was not just moved gives way — `moved` says which end the hand is on,
22
+ * so marking a new start past the end drags the end along instead of refusing the start.
23
+ */
24
+ export function clampGifSection(section, durationSeconds, moved = "end") {
25
+ const duration = Number.isFinite(durationSeconds) && durationSeconds > 0 ? durationSeconds : Number.POSITIVE_INFINITY;
26
+ const span = (s) => Math.min(MAX_GIF_SECONDS, Math.max(MIN_GIF_SECONDS, s));
27
+ if (moved === "start") {
28
+ const start = Math.min(Math.max(0, section.startSeconds), Math.max(0, duration - MIN_GIF_SECONDS));
29
+ const length = span(section.endSeconds - start);
30
+ return { startSeconds: start, endSeconds: Math.min(duration, start + length) };
31
+ }
32
+ const end = Math.max(Math.min(duration, section.endSeconds), Math.min(duration, MIN_GIF_SECONDS));
33
+ const length = span(end - section.startSeconds);
34
+ return { startSeconds: Math.max(0, end - length), endSeconds: end };
35
+ }
36
+ /** The new section a "Make a GIF" press opens with: from the playhead, {@link DEFAULT_GIF_SECONDS} long. */
37
+ export function gifSectionAt(playheadSeconds, durationSeconds) {
38
+ return clampGifSection({ startSeconds: playheadSeconds, endSeconds: playheadSeconds + DEFAULT_GIF_SECONDS }, durationSeconds, "start");
39
+ }
40
+ /**
41
+ * The moments a section is sampled at: one every `1/fps` seconds from the start, the last
42
+ * strictly before the end — so a loop never shows the start frame twice in a row.
43
+ */
44
+ export function gifFrameTimes(section, fps) {
45
+ const length = section.endSeconds - section.startSeconds;
46
+ const count = Math.max(1, Math.round(length * fps));
47
+ return Array.from({ length: count }, (_, i) => section.startSeconds + i / fps);
48
+ }
49
+ /**
50
+ * The GIF's pixel size for a crop of `crop` source pixels at a requested `width` — never
51
+ * wider than the crop itself (upscaling a GIF only adds bytes) and never below 2×2.
52
+ */
53
+ export function gifSize(crop, width) {
54
+ const w = Math.max(2, Math.round(Math.min(width, crop.sw)));
55
+ return { width: w, height: Math.max(2, Math.round((w * crop.sh) / crop.sw)) };
56
+ }
57
+ /** `0:12.4` — tenths, because a GIF section is set to the frame, not to the second. */
58
+ export function formatGifTime(seconds) {
59
+ const safe = Math.max(0, Number.isFinite(seconds) ? seconds : 0);
60
+ const tenths = Math.round(safe * 10);
61
+ const m = Math.floor(tenths / 600);
62
+ const s = (tenths % 600) / 10;
63
+ return `${m}:${s.toFixed(1).padStart(4, "0")}`;
64
+ }
65
+ /** `2.4 MB` / `840 KB` — what a saved GIF weighs, said after it is made. */
66
+ export function formatGifBytes(bytes) {
67
+ return bytes >= 1024 * 1024 ? `${(bytes / (1024 * 1024)).toFixed(1)} MB` : `${Math.max(1, Math.round(bytes / 1024))} KB`;
68
+ }
69
+ /** A file name for a downloaded GIF: the video's name without its extension, and where it starts. */
70
+ export function gifFileName(title, startSeconds) {
71
+ const base = (title ?? "").replace(/\.[^./\\]+$/, "").replace(/[\\/:*?"<>|]+/g, " ").trim() || "clip";
72
+ return `${base} @ ${formatGifTime(startSeconds).replace(":", "-")}.gif`;
73
+ }
74
+ //# sourceMappingURL=gifClip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gifClip.js","sourceRoot":"","sources":["../../../src/react/media/gifClip.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ /** The colours one frame is reduced to, and each pixel's index into them. */
2
+ export interface QuantizedFrame {
3
+ /** `r,g,b` triples — at most 256 of them. */
4
+ palette: Uint8Array;
5
+ indices: Uint8Array;
6
+ }
7
+ /**
8
+ * Median-cut an RGBA frame to at most `maxColors` colours.
9
+ *
10
+ * Pixels are first counted into 32,768 bins (5 bits a channel) holding their true 8-bit
11
+ * sums, so a palette entry is the real average of what it stands for rather than a bin's
12
+ * corner. The box split is the one with the most pixels × widest channel, at its weighted
13
+ * median — the textbook cut, which keeps a big flat sky from eating every entry. A frame with
14
+ * no more than `maxColors` distinct binned colours keeps them all.
15
+ */
16
+ export declare function quantizeFrame(rgba: Uint8Array | Uint8ClampedArray, maxColors?: number): QuantizedFrame;
17
+ /**
18
+ * GIF's variable-width LZW over 8-bit indices, as the bytes between the minimum code size and
19
+ * the block terminator (before they are cut into 255-byte sub-blocks).
20
+ *
21
+ * 🔴 The code width grows when the NEXT code to be assigned reaches `1 << width`, and only
22
+ * then — the decoder learns each entry one code later than the encoder makes it, and growing
23
+ * a code early or late desynchronises every code after it into noise.
24
+ */
25
+ export declare function lzwEncode(indices: Uint8Array, minCodeSize?: number): Uint8Array;
26
+ /** A GIF built a frame at a time. `finish()` closes it and hands back the file. */
27
+ export declare class GifWriter {
28
+ readonly width: number;
29
+ readonly height: number;
30
+ private readonly parts;
31
+ /** Centiseconds owed to the next frame — see {@link addFrame}. */
32
+ private carry;
33
+ constructor(width: number, height: number,
34
+ /** 0 loops forever, which is what a GIF made from a clip is for. */
35
+ loop?: number);
36
+ /**
37
+ * One frame of `width × height` RGBA, shown for `delayMs`.
38
+ *
39
+ * GIF counts delay in hundredths of a second, so 15 fps (6.67 cs) cannot be written
40
+ * exactly. The remainder is carried into the next frame rather than rounded away, so a
41
+ * 3-second clip plays for 3 seconds instead of drifting to 2.7 or 3.5.
42
+ */
43
+ addFrame(rgba: Uint8Array | Uint8ClampedArray, delayMs: number): void;
44
+ finish(): Uint8Array;
45
+ }
46
+ //# sourceMappingURL=gifEncode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gifEncode.d.ts","sourceRoot":"","sources":["../../../src/react/media/gifEncode.ts"],"names":[],"mappings":"AAgBA,6EAA6E;AAC7E,MAAM,WAAW,cAAc;IAC7B,6CAA6C;IAC7C,OAAO,EAAE,UAAU,CAAC;IACpB,OAAO,EAAE,UAAU,CAAC;CACrB;AAMD;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,EAAE,SAAS,SAAM,GAAG,cAAc,CA6GnG;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,SAAI,GAAG,UAAU,CAiD1E;AAED,mFAAmF;AACnF,qBAAa,SAAS;IAMlB,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IANzB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoB;IAC1C,kEAAkE;IAClE,OAAO,CAAC,KAAK,CAAK;gBAGP,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;IACvB,oEAAoE;IACpE,IAAI,SAAI;IAgBV;;;;;;OAMG;IACH,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,iBAAiB,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAsCrE,MAAM,IAAI,UAAU;CAWrB"}