cursedbelt 5.97.0 → 5.98.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 (81) hide show
  1. package/dist/react/media/FocusViewer.d.ts.map +1 -1
  2. package/dist/react/media/FocusViewer.js +3 -2
  3. package/dist/react/media/FocusViewer.js.map +1 -1
  4. package/dist/react/media/ImageOriginalToggle.d.ts +20 -0
  5. package/dist/react/media/ImageOriginalToggle.d.ts.map +1 -0
  6. package/dist/react/media/ImageOriginalToggle.js +16 -0
  7. package/dist/react/media/ImageOriginalToggle.js.map +1 -0
  8. package/dist/react/media/VideoPlayer.d.ts.map +1 -1
  9. package/dist/react/media/VideoPlayer.js +9 -3
  10. package/dist/react/media/VideoPlayer.js.map +1 -1
  11. package/dist/react/media/VideoQualitySelect.d.ts +24 -0
  12. package/dist/react/media/VideoQualitySelect.d.ts.map +1 -0
  13. package/dist/react/media/VideoQualitySelect.js +34 -0
  14. package/dist/react/media/VideoQualitySelect.js.map +1 -0
  15. package/dist/react/media/hlsSource.d.ts +14 -2
  16. package/dist/react/media/hlsSource.d.ts.map +1 -1
  17. package/dist/react/media/hlsSource.js +27 -6
  18. package/dist/react/media/hlsSource.js.map +1 -1
  19. package/dist/react/media/imageOriginal.d.ts +69 -0
  20. package/dist/react/media/imageOriginal.d.ts.map +1 -0
  21. package/dist/react/media/imageOriginal.js +98 -0
  22. package/dist/react/media/imageOriginal.js.map +1 -0
  23. package/dist/react/media/imageOriginalEntry.d.ts +9 -0
  24. package/dist/react/media/imageOriginalEntry.d.ts.map +1 -0
  25. package/dist/react/media/imageOriginalEntry.js +9 -0
  26. package/dist/react/media/imageOriginalEntry.js.map +1 -0
  27. package/dist/react/media/index.d.ts +5 -0
  28. package/dist/react/media/index.d.ts.map +1 -1
  29. package/dist/react/media/index.js +6 -0
  30. package/dist/react/media/index.js.map +1 -1
  31. package/dist/react/media/useImageOriginal.d.ts +21 -0
  32. package/dist/react/media/useImageOriginal.d.ts.map +1 -0
  33. package/dist/react/media/useImageOriginal.js +63 -0
  34. package/dist/react/media/useImageOriginal.js.map +1 -0
  35. package/dist/react/media/videoPlayer.css +23 -0
  36. package/dist/react/media/videoQuality.d.ts +113 -0
  37. package/dist/react/media/videoQuality.d.ts.map +1 -0
  38. package/dist/react/media/videoQuality.js +185 -0
  39. package/dist/react/media/videoQuality.js.map +1 -0
  40. package/dist/react/media/vidstackQuality.d.ts +27 -0
  41. package/dist/react/media/vidstackQuality.d.ts.map +1 -0
  42. package/dist/react/media/vidstackQuality.js +51 -0
  43. package/dist/react/media/vidstackQuality.js.map +1 -0
  44. package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
  45. package/dist/react/media-gallery/MediaGallery.js +42 -10
  46. package/dist/react/media-gallery/MediaGallery.js.map +1 -1
  47. package/dist/react/media-gallery/mediaGallery.css +42 -0
  48. package/dist/react/media-gallery/mediaGalleryModel.d.ts.map +1 -1
  49. package/dist/react/media-gallery/mediaGalleryModel.js +5 -2
  50. package/dist/react/media-gallery/mediaGalleryModel.js.map +1 -1
  51. package/dist/react/media-gallery/types.d.ts +10 -0
  52. package/dist/react/media-gallery/types.d.ts.map +1 -1
  53. package/dist/react/sharing/SharePanel.d.ts.map +1 -1
  54. package/dist/react/sharing/SharePanel.js +2 -1
  55. package/dist/react/sharing/SharePanel.js.map +1 -1
  56. package/package.json +8 -2
  57. package/scripts/paths.ts +1 -1
  58. package/scripts/styleAreas.ts +2 -1
  59. package/src/react/media/FocusViewer.tsx +9 -1
  60. package/src/react/media/ImageOriginalToggle.tsx +49 -0
  61. package/src/react/media/VideoPlayer.spec.tsx +44 -1
  62. package/src/react/media/VideoPlayer.tsx +17 -3
  63. package/src/react/media/VideoQualitySelect.spec.tsx +47 -0
  64. package/src/react/media/VideoQualitySelect.tsx +81 -0
  65. package/src/react/media/hlsSource.spec.ts +10 -0
  66. package/src/react/media/hlsSource.ts +41 -7
  67. package/src/react/media/imageOriginal.spec.tsx +177 -0
  68. package/src/react/media/imageOriginal.ts +114 -0
  69. package/src/react/media/imageOriginalEntry.ts +8 -0
  70. package/src/react/media/index.ts +9 -0
  71. package/src/react/media/useImageOriginal.ts +97 -0
  72. package/src/react/media/videoPlayer.css +23 -0
  73. package/src/react/media/videoQuality.spec.ts +135 -0
  74. package/src/react/media/videoQuality.ts +248 -0
  75. package/src/react/media/vidstackQuality.tsx +65 -0
  76. package/src/react/media-gallery/MediaGallery.spec.tsx +26 -0
  77. package/src/react/media-gallery/MediaGallery.tsx +57 -17
  78. package/src/react/media-gallery/mediaGallery.css +42 -0
  79. package/src/react/media-gallery/mediaGalleryModel.ts +4 -2
  80. package/src/react/media-gallery/types.ts +10 -0
  81. package/src/react/sharing/SharePanel.tsx +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"hlsSource.js","sourceRoot":"","sources":["../../../src/react/media/hlsSource.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoFG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAoB,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AA4C7F;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,EAAoB;IACrD,OAAO,OAAO,EAAE,CAAC,WAAW,KAAK,UAAU,IAAI,EAAE,CAAC,WAAW,CAAC,+BAA+B,CAAC,KAAK,EAAE,CAAC;AACxG,CAAC;AAED;;;;;GAKG;AACH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC;AAEjC,kFAAkF;AAClF,MAAM,mBAAmB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,YAAY,EAAE,IAAI;IAClB;;;;;;;;;OASG;IACH,eAAe,EAAE,EAAE;IACnB,2EAA2E;IAC3E,kBAAkB,EAAE,GAAG;IACvB,uFAAuF;IACvF,aAAa,EAAE,GAAG,GAAG,IAAI,GAAG,IAAI;IAChC;;;;;;;OAOG;IACH,gBAAgB,EAAE,EAAE;IACpB;;;;;;;OAOG;IACH,sBAAsB,EAAE,SAAS;IACjC;;;;;;;;OAQG;IACH,oBAAoB,EAAE,IAAI;IAC1B;oFACgF;IAChF,kBAAkB,EAAE,MAAM;IAC1B,sBAAsB,EAAE,MAAM;IAC9B,mBAAmB,EAAE,MAAM;CACnB,CAAC;AAEX,MAAM,UAAU,eAAe,CAC7B,EAAoB,EACpB,IAAmB,EACnB,QAAwB,EAAE;IAE1B,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,MAAM,GAAmC,IAAI,CAAC;IAClD,IAAI,YAAY,GAAyC,IAAI,CAAC;IAC9D;;;;OAIG;IACH,IAAI,QAAQ,GAAkB,QAAQ,CAAC;IACvC,6FAA6F;IAC7F,IAAI,QAAQ,GAAG,KAAK,CAAC;IAErB;;;;;;;OAOG;IACH,MAAM,qBAAqB,GAAG,GAAS,EAAE;QACvC,IAAI,SAAS,IAAI,QAAQ;YAAE,OAAO;QAClC,QAAQ,GAAG,IAAI,CAAC;QAChB,QAAQ,GAAG,QAAQ,CAAC;QACpB,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC;QAC9B,MAAM,EAAE,OAAO,EAAE,CAAC;QAClB,MAAM,GAAG,IAAI,CAAC;QACd,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QACxB,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YACX,oFAAoF;YACpF,+CAA+C;YAC/C,EAAE,CAAC,gBAAgB,CACjB,gBAAgB,EAChB,GAAG,EAAE;gBACH,IAAI,CAAC;oBACH,EAAE,CAAC,WAAW,GAAG,EAAE,CAAC;gBACtB,CAAC;gBAAC,MAAM,CAAC;oBACP,gEAAgE;gBAClE,CAAC;gBACD,IAAI,UAAU;oBAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACnD,CAAC,EACD,EAAE,IAAI,EAAE,IAAI,EAAE,CACf,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;IAEF;;;OAGG;IACH,MAAM,cAAc,GAAG,GAAS,EAAE;QAChC,IAAI,SAAS;YAAE,OAAO;QACtB;;;;;;;WAOG;QACH,IAAI,MAAM;YAAE,OAAO;QACnB,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;YAC1B,mFAAmF;YACnF,4EAA4E;YAC5E,qBAAqB,EAAE,CAAC;YACxB,OAAO;QACT,CAAC;QACD,0FAA0F;QAC1F,qFAAqF;QACrF,EAAE;QACF,yFAAyF;QACzF,yFAAyF;QACzF,uFAAuF;QACvF,IAAI,CAAC,KAAK,CAAC,OAAO;YAAE,OAAO;QAC3B,KAAK,gBAAgB,CAAC,EAAE,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YACpE,IAAI,CAAC,SAAS;gBAAE,KAAK,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IAE7C,IAAI,IAAI,CAAC,MAAM,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,QAAQ,GAAG,QAAQ,CAAC;QACpB,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,wFAAwF;QACxF,oCAAoC;QACpC,MAAM,CAAC,QAAQ,CAAC;aACb,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE;YACzB,IAAI,SAAS;gBAAE,OAAO;YACtB,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;gBACxB,OAAO;YACT,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,CAAC;YACb,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,MAAe,EAAE,IAAkB,EAAE,EAAE;gBAC/D,oFAAoF;gBACpF,8CAA8C;gBAC9C,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,KAAK;oBAAE,OAAO;gBACtC;;;;;;;mBAOG;gBACH,MAAM,QAAQ,GACZ,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,KAAK,QAAQ;oBACrC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBAC3C,CAAC,CAAC,IAAI,CAAC;gBACX,IAAI,QAAQ,EAAE,CAAC;oBACb,qBAAqB,EAAE,CAAC;oBACxB,OAAO;gBACT,CAAC;gBACD,IAAI,KAAK,IAAI,eAAe,EAAE,CAAC;oBAC7B,qBAAqB,EAAE,CAAC;oBACxB,OAAO;gBACT,CAAC;gBACD,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;gBACxB,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;oBAC7C,gFAAgF;oBAChF,4EAA4E;oBAC5E,kFAAkF;oBAClF,IAAI,OAAO,KAAK,CAAC;wBAAE,GAAG,CAAC,iBAAiB,EAAE,CAAC;yBACtC,CAAC;wBACJ,GAAG,CAAC,cAAc,EAAE,EAAE,CAAC;wBACvB,GAAG,CAAC,iBAAiB,EAAE,CAAC;oBAC1B,CAAC;oBACD,OAAO;gBACT,CAAC;gBACD,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;oBAC/C,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;oBAC1F,0EAA0E;oBAC1E,iFAAiF;oBACjF,kEAAkE;oBAClE,EAAE;oBACF,gFAAgF;oBAChF,8EAA8E;oBAC9E,+EAA+E;oBAC/E,8CAA8C;oBAC9C,IAAI,YAAY;wBAAE,YAAY,CAAC,YAAY,CAAC,CAAC;oBAC7C,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;wBAC7B,YAAY,GAAG,IAAI,CAAC;wBACpB,IAAI,SAAS;4BAAE,OAAO;wBACtB,IAAI,CAAC;4BACH,GAAG,CAAC,SAAS,EAAE,CAAC;wBAClB,CAAC;wBAAC,MAAM,CAAC;4BACP,qBAAqB,EAAE,CAAC;wBAC1B,CAAC;oBACH,CAAC,EAAE,KAAK,CAAC,CAAC;oBACV,oFAAoF;oBACnF,YAAuC,CAAC,KAAK,EAAE,EAAE,CAAC;oBACnD,OAAO;gBACT,CAAC;gBACD,+EAA+E;gBAC/E,mEAAmE;gBACnE,qBAAqB,EAAE,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAC;YACtC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACtB,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,+DAA+D;YAC/D,IAAI,CAAC,SAAS;gBAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1C,CAAC,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAED,OAAO,GAAG,EAAE;QACV,SAAS,GAAG,IAAI,CAAC;QACjB,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;QAChD,IAAI,YAAY;YAAE,YAAY,CAAC,YAAY,CAAC,CAAC;QAC7C,YAAY,GAAG,IAAI,CAAC;QACpB,MAAM,EAAE,OAAO,EAAE,CAAC;QAClB,MAAM,GAAG,IAAI,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAC1B,GAAyC,EACzC,IAAmB,EACnB,QAAwB,EAAE;IAE1B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC;IACnC,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAC1B,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IACjC,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;IAC7B,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACd,uFAAuF;IACvF,2DAA2D;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACnC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,OAAO,eAAe,CACpB,EAAE,EACF,EAAE,MAAM,EAAE,SAAS,EAAE,EACrB,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CACnF,CAAC;QACF,qFAAqF;IACvF,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAyC,EACzC,IAAkD,EAClD,KAAc;IAEd,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAC7B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;QACvB,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;YAAE,OAAO;QACrC,OAAO,eAAe,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;IAC9B,OAAO;QACL,GAAG,EAAE,MAAM,IAAI,GAAG;QAClB,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG;QAC7B,SAAS,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,WAAW,CAAC,GAAG,CAAC;KAClE,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,GAAW;IAC9B,IAAI,CAAC;QACH,OAAO,IAAI,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,CAAC;IACb,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"hlsSource.js","sourceRoot":"","sources":["../../../src/react/media/hlsSource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * A picture's ORIGINAL, reached past its web copy — the image half of "Max" (forge task 3873).
3
+ *
4
+ * ── Why (forge task 3868, the owner's ruling of 2026-10-28) ─────────────────────────────
5
+ * binary-server keeps every image original now, but the web copy every viewer draws is a JPEG
6
+ * capped at 2560 px on its longest edge (`DEFAULT_IMAGE_SIZES`). A 48 MP photograph zoomed to
7
+ * read a face was still the 2560-px JPEG, and the original was reachable only as a download.
8
+ * The video player's answer was a menu (Auto · Max · each rung); a picture has two copies, so
9
+ * its answer is two choices:
10
+ *
11
+ * | choice | what the viewer draws |
12
+ * |---|---|
13
+ * | auto (the default) | the web copy, and the original the moment the picture is drawn with more device pixels than the web copy has — a zoom, or a 5K screen |
14
+ * | original | the original, always |
15
+ *
16
+ * ── 🔴 The web copy stays on screen until the original has DECODED ──────────────────────
17
+ * A 48 MP JPEG is 10–20 MB and a second or more to decode. Pointing the `<img>` at it at once
18
+ * blanks the picture, mid-zoom, for that long. `useImageOriginal` decodes it off-screen
19
+ * (`HTMLImageElement.decode()`) and swaps only then, so the swap is one frame.
20
+ *
21
+ * ── 🔴 Only a type the browser can draw ─────────────────────────────────────────────────
22
+ * A DNG, a HEIC or a TIFF original is exactly what the web copy exists FOR. The control stays
23
+ * visible and disabled with that reason (the fleet's one-UI rule), and the viewer keeps the
24
+ * JPEG.
25
+ *
26
+ * ── Remembered per VIEWER, in `localStorage` ────────────────────────────────────────────
27
+ * The same reasoning as `cb.video-quality` (`videoQuality.ts`): a phone on cellular and the
28
+ * desk's 5K screen want different answers, and every image viewer reads the one key.
29
+ */
30
+ /** The one key every image viewer reads and writes: `'original'`, or absent for auto. */
31
+ export declare const IMAGE_ORIGINAL_KEY = "cb.image-quality";
32
+ /**
33
+ * Drawn with this many more device pixels than the web copy holds before the original is
34
+ * fetched. A hair over 1: a picture filling a 2560-px screen exactly gains nothing from 20 MB.
35
+ */
36
+ export declare const ORIGINAL_NEED_RATIO = 1.1;
37
+ export declare const ORIGINAL_FAILED_REASON = "The original did not load \u2014 the web copy is showing";
38
+ /**
39
+ * Why no browser can draw this original, or null when one can.
40
+ *
41
+ * 🔴 The mime list mirrors cursedbelt-server's `isUnviewableStill`
42
+ * (`src/server/storage/derivatives.ts`) and binary-server's `isUnviewableOriginal` — the
43
+ * stills bs makes a web copy for no matter how small, because nothing else can show them —
44
+ * and adds the camera RAWs bs never draws either. The NAME is read too: a `.DNG` or a `.HEIC`
45
+ * is often cataloged as `application/octet-stream`, for the reason that file gives.
46
+ */
47
+ export declare function originalUndrawableReason(mime: string | null | undefined, name?: string | null): string | null;
48
+ /**
49
+ * Does a picture drawn `drawnWidth` CSS pixels wide (zoom included) need more than a web copy
50
+ * `webWidth` pixels wide holds, on a screen of `devicePixelRatio`?
51
+ */
52
+ export declare function originalNeeded(drawnWidth: number, webWidth: number, devicePixelRatio?: number): boolean;
53
+ /** True when this viewer chose "always the original". */
54
+ export declare function readImageOriginalPinned(): boolean;
55
+ export declare function writeImageOriginalPinned(pinned: boolean): void;
56
+ /** What a viewer's control shows, and the one way to change it. */
57
+ export interface ImageOriginalControl {
58
+ /** The remembered "always the original". */
59
+ pinned: boolean;
60
+ /** The original is the picture on screen right now. */
61
+ showing: boolean;
62
+ /** The original is being fetched and decoded; the web copy is still on screen. */
63
+ loading: boolean;
64
+ /** Why the original cannot be drawn here, or null when it can. */
65
+ unavailable: string | null;
66
+ /** Flip the remembered choice, and apply it. */
67
+ toggle: () => void;
68
+ }
69
+ //# sourceMappingURL=imageOriginal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageOriginal.d.ts","sourceRoot":"","sources":["../../../src/react/media/imageOriginal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,yFAAyF;AACzF,eAAO,MAAM,kBAAkB,qBAAqB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,mBAAmB,MAAM,CAAC;AAEvC,eAAO,MAAM,sBAAsB,6DAAwD,CAAC;AAE5F;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAW7G;AAID;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,SAAI,GAAG,OAAO,CAGlG;AAWD,yDAAyD;AACzD,wBAAgB,uBAAuB,IAAI,OAAO,CAMjD;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,CAO9D;AAED,mEAAmE;AACnE,MAAM,WAAW,oBAAoB;IACnC,4CAA4C;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,uDAAuD;IACvD,OAAO,EAAE,OAAO,CAAC;IACjB,kFAAkF;IAClF,OAAO,EAAE,OAAO,CAAC;IACjB,kEAAkE;IAClE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,gDAAgD;IAChD,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB"}
@@ -0,0 +1,98 @@
1
+ /**
2
+ * A picture's ORIGINAL, reached past its web copy — the image half of "Max" (forge task 3873).
3
+ *
4
+ * ── Why (forge task 3868, the owner's ruling of 2026-10-28) ─────────────────────────────
5
+ * binary-server keeps every image original now, but the web copy every viewer draws is a JPEG
6
+ * capped at 2560 px on its longest edge (`DEFAULT_IMAGE_SIZES`). A 48 MP photograph zoomed to
7
+ * read a face was still the 2560-px JPEG, and the original was reachable only as a download.
8
+ * The video player's answer was a menu (Auto · Max · each rung); a picture has two copies, so
9
+ * its answer is two choices:
10
+ *
11
+ * | choice | what the viewer draws |
12
+ * |---|---|
13
+ * | auto (the default) | the web copy, and the original the moment the picture is drawn with more device pixels than the web copy has — a zoom, or a 5K screen |
14
+ * | original | the original, always |
15
+ *
16
+ * ── 🔴 The web copy stays on screen until the original has DECODED ──────────────────────
17
+ * A 48 MP JPEG is 10–20 MB and a second or more to decode. Pointing the `<img>` at it at once
18
+ * blanks the picture, mid-zoom, for that long. `useImageOriginal` decodes it off-screen
19
+ * (`HTMLImageElement.decode()`) and swaps only then, so the swap is one frame.
20
+ *
21
+ * ── 🔴 Only a type the browser can draw ─────────────────────────────────────────────────
22
+ * A DNG, a HEIC or a TIFF original is exactly what the web copy exists FOR. The control stays
23
+ * visible and disabled with that reason (the fleet's one-UI rule), and the viewer keeps the
24
+ * JPEG.
25
+ *
26
+ * ── Remembered per VIEWER, in `localStorage` ────────────────────────────────────────────
27
+ * The same reasoning as `cb.video-quality` (`videoQuality.ts`): a phone on cellular and the
28
+ * desk's 5K screen want different answers, and every image viewer reads the one key.
29
+ */
30
+ /** The one key every image viewer reads and writes: `'original'`, or absent for auto. */
31
+ export const IMAGE_ORIGINAL_KEY = 'cb.image-quality';
32
+ /**
33
+ * Drawn with this many more device pixels than the web copy holds before the original is
34
+ * fetched. A hair over 1: a picture filling a 2560-px screen exactly gains nothing from 20 MB.
35
+ */
36
+ export const ORIGINAL_NEED_RATIO = 1.1;
37
+ export const ORIGINAL_FAILED_REASON = 'The original did not load — the web copy is showing';
38
+ /**
39
+ * Why no browser can draw this original, or null when one can.
40
+ *
41
+ * 🔴 The mime list mirrors cursedbelt-server's `isUnviewableStill`
42
+ * (`src/server/storage/derivatives.ts`) and binary-server's `isUnviewableOriginal` — the
43
+ * stills bs makes a web copy for no matter how small, because nothing else can show them —
44
+ * and adds the camera RAWs bs never draws either. The NAME is read too: a `.DNG` or a `.HEIC`
45
+ * is often cataloged as `application/octet-stream`, for the reason that file gives.
46
+ */
47
+ export function originalUndrawableReason(mime, name) {
48
+ const bare = (mime ?? '').split(';')[0]?.trim().toLowerCase() ?? '';
49
+ const extension = (name ?? '').toLowerCase().match(/\.([a-z0-9]+)$/)?.[1] ?? '';
50
+ const kind = /^image\/(heic|heif)(-sequence)?$/.test(bare) || ['heic', 'heif'].includes(extension)
51
+ ? 'HEIC'
52
+ : bare === 'image/tiff' || ['tif', 'tiff'].includes(extension)
53
+ ? 'TIFF'
54
+ : bare === 'image/x-adobe-dng' || RAW_EXTENSIONS.includes(extension)
55
+ ? 'camera RAW'
56
+ : null;
57
+ return kind ? `The original is a ${kind}, which this browser cannot draw — Download has it` : null;
58
+ }
59
+ const RAW_EXTENSIONS = ['dng', 'cr2', 'cr3', 'nef', 'arw', 'raf', 'orf', 'rw2', 'pef', 'srw'];
60
+ /**
61
+ * Does a picture drawn `drawnWidth` CSS pixels wide (zoom included) need more than a web copy
62
+ * `webWidth` pixels wide holds, on a screen of `devicePixelRatio`?
63
+ */
64
+ export function originalNeeded(drawnWidth, webWidth, devicePixelRatio = 1) {
65
+ if (!(drawnWidth > 0) || !(webWidth > 0))
66
+ return false;
67
+ return drawnWidth * Math.max(1, devicePixelRatio) > webWidth * ORIGINAL_NEED_RATIO;
68
+ }
69
+ /** Guarded: storage throws in a private window, and is absent in a worker or on the server. */
70
+ function store() {
71
+ try {
72
+ return globalThis.localStorage ?? null;
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ /** True when this viewer chose "always the original". */
79
+ export function readImageOriginalPinned() {
80
+ try {
81
+ return store()?.getItem(IMAGE_ORIGINAL_KEY) === 'original';
82
+ }
83
+ catch {
84
+ return false;
85
+ }
86
+ }
87
+ export function writeImageOriginalPinned(pinned) {
88
+ try {
89
+ if (pinned)
90
+ store()?.setItem(IMAGE_ORIGINAL_KEY, 'original');
91
+ else
92
+ store()?.removeItem(IMAGE_ORIGINAL_KEY);
93
+ }
94
+ catch {
95
+ /* a full or refused store only means the choice lasts this picture */
96
+ }
97
+ }
98
+ //# sourceMappingURL=imageOriginal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageOriginal.js","sourceRoot":"","sources":["../../../src/react/media/imageOriginal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,yFAAyF;AACzF,MAAM,CAAC,MAAM,kBAAkB,GAAG,kBAAkB,CAAC;AAErD;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAEvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,qDAAqD,CAAC;AAE5F;;;;;;;;GAQG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAA+B,EAAE,IAAoB;IAC5F,MAAM,IAAI,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC;IACpE,MAAM,SAAS,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAChF,MAAM,IAAI,GAAG,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;QAChG,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,IAAI,KAAK,YAAY,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC5D,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,IAAI,KAAK,mBAAmB,IAAI,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;gBAClE,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,IAAI,CAAC;IACb,OAAO,IAAI,CAAC,CAAC,CAAC,qBAAqB,IAAI,oDAAoD,CAAC,CAAC,CAAC,IAAI,CAAC;AACrG,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAE9F;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,UAAkB,EAAE,QAAgB,EAAE,gBAAgB,GAAG,CAAC;IACvF,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACvD,OAAO,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AACrF,CAAC;AAED,+FAA+F;AAC/F,SAAS,KAAK;IACZ,IAAI,CAAC;QACH,OAAO,UAAU,CAAC,YAAY,IAAI,IAAI,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,uBAAuB;IACrC,IAAI,CAAC;QACH,OAAO,KAAK,EAAE,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAAK,UAAU,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAAe;IACtD,IAAI,CAAC;QACH,IAAI,MAAM;YAAE,KAAK,EAAE,EAAE,OAAO,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;;YACxD,KAAK,EAAE,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAC;IAC/C,CAAC;IAAC,MAAM,CAAC;QACP,sEAAsE;IACxE,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `cursedbelt/react/media/image-original` — a picture's original past its web copy (forge task
3
+ * 3873), for an app that draws its own `<img>` and must not bundle the media barrel's optional
4
+ * peers (photos' zoomable asset page). The gallery stage uses the same three modules.
5
+ */
6
+ export { type ImageOriginalControl, originalUndrawableReason } from './imageOriginal.js';
7
+ export { ImageOriginalToggle, type ImageOriginalToggleProps } from './ImageOriginalToggle.js';
8
+ export { type ImageOriginal, type UseImageOriginalOptions, useImageOriginal } from './useImageOriginal.js';
9
+ //# sourceMappingURL=imageOriginalEntry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageOriginalEntry.d.ts","sourceRoot":"","sources":["../../../src/react/media/imageOriginalEntry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAE,KAAK,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * `cursedbelt/react/media/image-original` — a picture's original past its web copy (forge task
3
+ * 3873), for an app that draws its own `<img>` and must not bundle the media barrel's optional
4
+ * peers (photos' zoomable asset page). The gallery stage uses the same three modules.
5
+ */
6
+ export { originalUndrawableReason } from './imageOriginal.js';
7
+ export { ImageOriginalToggle } from './ImageOriginalToggle.js';
8
+ export { useImageOriginal } from './useImageOriginal.js';
9
+ //# sourceMappingURL=imageOriginalEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imageOriginalEntry.js","sourceRoot":"","sources":["../../../src/react/media/imageOriginalEntry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAA6B,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACzF,OAAO,EAAE,mBAAmB,EAAiC,MAAM,0BAA0B,CAAC;AAC9F,OAAO,EAAoD,gBAAgB,EAAE,MAAM,uBAAuB,CAAC"}
@@ -25,6 +25,11 @@ export { useIntersectionObserver } from './useIntersectionObserver.js';
25
25
  export { useObjectUrl } from './useObjectUrl.js';
26
26
  export { attachHlsSource, canPlayHlsNatively, type HlsSourceUrls, useHlsSource } from './hlsSource.js';
27
27
  export { PLAYBACK_RATES, preferBundledHls, VideoPlayer, type VideoPlayerProps } from './VideoPlayer.js';
28
+ export type { VideoQualityControl } from './videoQuality.js';
29
+ export { VideoQualitySelect, type VideoQualitySelectProps } from './VideoQualitySelect.js';
30
+ export { type ImageOriginalControl, originalUndrawableReason } from './imageOriginal.js';
31
+ export { ImageOriginalToggle, type ImageOriginalToggleProps } from './ImageOriginalToggle.js';
32
+ export { type ImageOriginal, type UseImageOriginalOptions, useImageOriginal } from './useImageOriginal.js';
28
33
  export { FocusViewer, type FocusSaveResult, type FocusSnapshot, type FocusViewerProps, } from './FocusViewer.js';
29
34
  export { PictureControls, type PictureControlsProps } from './PictureControls.js';
30
35
  export { composeSelection, FULL_REGION, fitBox, isFullRegion, MAX_ZOOM, normalizeRect, panRegion, type Region, regionAtZoom, regionLayout, regionPixels, regionZoom, stageAspectFor, zoomRegion, } from './videoRegion.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/media/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/media/index.ts"],"names":[],"mappings":"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"}
@@ -55,6 +55,12 @@ export { useObjectUrl } from './useObjectUrl.js';
55
55
  // element rather than Vidstack and each was carrying its own copy of the decision.
56
56
  export { attachHlsSource, canPlayHlsNatively, useHlsSource } from './hlsSource.js';
57
57
  export { PLAYBACK_RATES, preferBundledHls, VideoPlayer } from './VideoPlayer.js';
58
+ export { VideoQualitySelect } from './VideoQualitySelect.js';
59
+ // The image half of it — the web copy, and the original past it, remembered per viewer
60
+ // (forge task 3873); an image viewer draws the `src` the hook answers and hands it the toggle.
61
+ export { originalUndrawableReason } from './imageOriginal.js';
62
+ export { ImageOriginalToggle } from './ImageOriginalToggle.js';
63
+ export { useImageOriginal } from './useImageOriginal.js';
58
64
  // The focus viewer — look closely at PART of a video, and keep what you find. Lifted out
59
65
  // of apps/collections in unit 15 so binary-server's inspector can mount the same one.
60
66
  export { FocusViewer, } from './FocusViewer.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/media/index.ts"],"names":[],"mappings":"AAAA,qFAAqF;AACrF,gFAAgF;AAChF,+EAA+E;AAC/E,oFAAoF;AACpF,uFAAuF;AACvF,yEAAyE;AACzE,EAAE;AACF,2GAA2G;AAE3G,OAAO,EAEL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAA4B,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EACL,kBAAkB,EAIlB,iBAAiB,EAEjB,mBAAmB,GAEpB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,cAAc,EAEd,iBAAiB,EAGjB,cAAc,GAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,sBAAsB,EAMtB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,sBAAsB,GAKvB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,oBAAoB,GAErB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C;;;;;;;;GAQG;AACH,OAAO,EAAE,aAAa,EAAmD,MAAM,oBAAoB,CAAC;AACpG;;;;GAIG;AACH,OAAO,EACL,WAAW,GAIZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,gBAAgB,EAGhB,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAC7B;;;;;GAKG;AACH,OAAO,EAEL,WAAW,GAEZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,WAAW,EACX,WAAW,EACX,YAAY,EAEZ,YAAY,EACZ,SAAS,EACT,IAAI,EACJ,QAAQ,EACR,UAAU,EACV,eAAe,EACf,WAAW,EACX,WAAW,EACX,OAAO,EACP,QAAQ,EACR,UAAU,EAGV,gBAAgB,EAEhB,MAAM,EACN,SAAS,GACV,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EACL,UAAU,EAGV,cAAc,EACd,YAAY,GACb,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,kBAAkB,GAEnB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAGL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAEL,kBAAkB,EAClB,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,iBAAiB,CAAC;AAYzB,OAAO,EAA6B,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,0FAA0F;AAC1F,uFAAuF;AACvF,mFAAmF;AACnF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAsB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAyB,MAAM,kBAAkB,CAAC;AACxG,yFAAyF;AACzF,sFAAsF;AACtF,OAAO,EACL,WAAW,GAIZ,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,eAAe,EAA6B,MAAM,sBAAsB,CAAC;AAClF,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,SAAS,EAET,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,cAAc,EACd,UAAU,GACX,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,aAAa,EAEb,UAAU,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,8FAA8F;AAC9F,6FAA6F;AAC7F,oFAAoF;AACpF,4CAA4C;AAC5C,OAAO,EAAE,cAAc,EAA4B,MAAM,qBAAqB,CAAC;AAC/E,8FAA8F;AAC9F,+FAA+F;AAC/F,0FAA0F;AAC1F,0DAA0D;AAC1D,OAAO,EAAE,kBAAkB,EAAgC,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAGL,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,GAElB,MAAM,oBAAoB,CAAC;AAC5B,yFAAyF;AACzF,wDAAwD;AACxD,OAAO,EACL,cAAc,EACd,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,eAAe,EACf,aAAa,GAEd,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAA8B,MAAM,uBAAuB,CAAC;AACrF,OAAO,EAEL,kBAAkB,EAElB,aAAa,EACb,oBAAoB,EAEpB,UAAU,EACV,UAAU,GAEX,MAAM,kBAAkB,CAAC;AAC1B,6FAA6F;AAC7F,+EAA+E;AAC/E,wFAAwF;AACxF,4DAA4D;AAC5D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,aAAa,EACb,gBAAgB,EAEhB,YAAY,EAEZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,sBAAsB,EAAyB,MAAM,uBAAuB,CAAC;AACtF,OAAO,EAAE,aAAa,EAA2B,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/media/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type ImageOriginalControl } from './imageOriginal.js';
2
+ export interface UseImageOriginalOptions {
3
+ /** The web copy — what is drawn until the original is wanted AND decoded. */
4
+ src: string;
5
+ /** The original, signed for inline viewing. Absent: there is no original to reach, and no control. */
6
+ originalSrc?: string | null | undefined;
7
+ mime?: string | null | undefined;
8
+ name?: string | null | undefined;
9
+ /** The picture's width on screen in CSS pixels, zoom included; 0 while unknown. */
10
+ drawnWidth: number;
11
+ /** The web copy's own pixel width (`naturalWidth`); 0 while unknown. */
12
+ webWidth: number;
13
+ }
14
+ export interface ImageOriginal {
15
+ /** The URL to draw. */
16
+ src: string;
17
+ /** Null when the item carries no original. */
18
+ control: ImageOriginalControl | null;
19
+ }
20
+ export declare function useImageOriginal({ src, originalSrc, mime, name, drawnWidth, webWidth }: UseImageOriginalOptions): ImageOriginal;
21
+ //# sourceMappingURL=useImageOriginal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useImageOriginal.d.ts","sourceRoot":"","sources":["../../../src/react/media/useImageOriginal.ts"],"names":[],"mappings":"AASA,OAAO,EACL,KAAK,oBAAoB,EAM1B,MAAM,oBAAoB,CAAC;AAE5B,MAAM,WAAW,uBAAuB;IACtC,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,sGAAsG;IACtG,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACjC,mFAAmF;IACnF,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,uBAAuB;IACvB,GAAG,EAAE,MAAM,CAAC;IACZ,8CAA8C;IAC9C,OAAO,EAAE,oBAAoB,GAAG,IAAI,CAAC;CACtC;AAUD,wBAAgB,gBAAgB,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,uBAAuB,GAAG,aAAa,CAkD/H"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The web copy, and the original past it — `imageOriginal.ts` says what the choices mean.
3
+ *
4
+ * A viewer hands this what it already knows — the two URLs, the picture's type, how wide it is
5
+ * DRAWN right now (zoom included), and how wide the web copy is — and draws the `src` it
6
+ * answers. Nothing here measures the DOM: the gallery stage measures its `<img>`, photos' zoom
7
+ * multiplies its fit by its scale, and either way the decision is the same pure comparison.
8
+ */
9
+ import { useCallback, useEffect, useState } from 'react';
10
+ import { ORIGINAL_FAILED_REASON, originalNeeded, originalUndrawableReason, readImageOriginalPinned, writeImageOriginalPinned, } from './imageOriginal.js';
11
+ /** Off-screen fetch AND decode, so the swap is one frame. The browser's cache serves the `<img>` after. */
12
+ function decodeOff(url) {
13
+ const image = new Image();
14
+ image.decoding = 'async';
15
+ image.src = url;
16
+ return image.decode();
17
+ }
18
+ export function useImageOriginal({ src, originalSrc, mime, name, drawnWidth, webWidth }) {
19
+ const [pinned, setPinned] = useState(readImageOriginalPinned);
20
+ /** The original that has decoded and may be drawn — keyed by URL, so a new picture starts over. */
21
+ const [ready, setReady] = useState(null);
22
+ const [failed, setFailed] = useState(null);
23
+ /**
24
+ * 🔴 Latched per original: once a zoom has fetched it, zooming back out keeps it. The bytes
25
+ * are already here, and swapping back to the web copy would only flicker.
26
+ */
27
+ const [reached, setReached] = useState(null);
28
+ const original = originalSrc || null;
29
+ const undrawable = original ? originalUndrawableReason(mime, name) : null;
30
+ const unavailable = undrawable ?? (original && failed === original ? ORIGINAL_FAILED_REASON : null);
31
+ const ratio = typeof window === 'undefined' ? 1 : window.devicePixelRatio || 1;
32
+ const needed = originalNeeded(drawnWidth, webWidth, ratio);
33
+ const wanted = Boolean(original) && !unavailable && (pinned || needed || reached === original);
34
+ useEffect(() => {
35
+ if (wanted && original && reached !== original)
36
+ setReached(original);
37
+ }, [wanted, original, reached]);
38
+ useEffect(() => {
39
+ if (!wanted || !original || ready === original)
40
+ return;
41
+ let live = true;
42
+ decodeOff(original).then(() => live && setReady(original), () => live && setFailed(original));
43
+ return () => {
44
+ live = false;
45
+ };
46
+ }, [wanted, original, ready]);
47
+ const toggle = useCallback(() => {
48
+ setPinned((was) => {
49
+ writeImageOriginalPinned(!was);
50
+ return !was;
51
+ });
52
+ // Un-pinning returns to the web copy unless the zoom still needs the original.
53
+ setReached(null);
54
+ }, []);
55
+ const showing = Boolean(original) && wanted && ready === original;
56
+ return {
57
+ src: showing && original ? original : src,
58
+ control: original
59
+ ? { pinned, showing, loading: wanted && !showing, unavailable, toggle }
60
+ : null,
61
+ };
62
+ }
63
+ //# sourceMappingURL=useImageOriginal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useImageOriginal.js","sourceRoot":"","sources":["../../../src/react/media/useImageOriginal.ts"],"names":[],"mappings":"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"}
@@ -70,3 +70,26 @@
70
70
  --media-sm-fullscreen-button-size: 44px;
71
71
  }
72
72
  }
73
+
74
+ /*
75
+ * ── The quality menu (forge task 3868) ────────────────────────────────────────────────
76
+ * cursedbelt's own (`VideoQualitySelect`, in the bar beside the cog) REPLACES Vidstack's
77
+ * quality submenu: that one offers no Max and remembers nothing, and two menus choosing the
78
+ * same thing would disagree. This stylesheet ships only with `VideoPlayer`, which always
79
+ * draws the replacement, so hiding Vidstack's here cannot leave a player with neither.
80
+ */
81
+ .vds-quality-menu {
82
+ display: none;
83
+ }
84
+ .cbvp-quality {
85
+ align-self: center;
86
+ color: inherit;
87
+ font-size: 13px;
88
+ }
89
+ /* The trigger is as tall as the bar's own buttons — 44px on a finger (the coarse block above
90
+ sets `--media-button-size`), so the chip clears the same tap floor they do. */
91
+ .cbvp-quality button {
92
+ min-height: var(--media-button-size, 40px);
93
+ min-width: 44px;
94
+ padding-inline: 6px;
95
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * A video's quality choice — YouTube's menu: Auto · Max · each rung — remembered per viewer.
3
+ *
4
+ * ── Why the choice exists (forge task 3868, the owner's ruling of 2026-10-28) ─────────────
5
+ * A ladder's top rung is now the ORIGINAL's own stream wherever the browser can play it
6
+ * (binary-server's `planLadder`: an `o<height>` rung is a stream copy, no loss). hls.js was
7
+ * capped to the player's size (`capLevelToPlayerSize`, task 3219 — *"lower bandwidth usage"*),
8
+ * so a windowed player played 480/720 on any connection, which is the blur the owner kept
9
+ * seeing. Both wishes stand, so they became two choices instead of one setting:
10
+ *
11
+ * | choice | what hls.js does |
12
+ * |---|---|
13
+ * | `auto` | adapts to bandwidth, never above what the player can show (the cap ON) |
14
+ * | `max` | adapts to bandwidth, up to the original, whatever the player's size (the cap OFF) |
15
+ * | a height | that rung, fixed — the nearest rung at or below it on a film without it |
16
+ *
17
+ * ── 🔴 Remembered as a HEIGHT, never as a level index ──────────────────────────────────
18
+ * Every film has its own ladder: index 3 is 1080p on one and the 2160 original on the next.
19
+ * A height means the same thing on every film, and a film whose ladder has no such rung takes
20
+ * the nearest one below it (`levelIndexFor`) — "1080p" on a 720p film is its 720p, not
21
+ * nothing.
22
+ *
23
+ * ── 🔴 Per VIEWER, so `localStorage` ───────────────────────────────────────────────────
24
+ * A phone on cellular and the TV want different answers, and a viewer's device is where the
25
+ * answer belongs; a server-side preference would hand the TV's "Max" to the phone. Every
26
+ * surface reads the one key, so a choice made in the gallery stage carries into the focus
27
+ * viewer and the next film.
28
+ *
29
+ * ── Native HLS cannot choose ────────────────────────────────────────────────────────────
30
+ * Safari and every iPhone play the ladder with no library, and a page has no API to pick a
31
+ * rung there — the browser adapts by itself. The control stays VISIBLE and disabled, with the
32
+ * reason (`NATIVE_HLS_REASON`), per the fleet's one-UI rule.
33
+ */
34
+ /** `auto`, `max`, or a rung's height in pixels. */
35
+ export type VideoQualityChoice = 'auto' | 'max' | number;
36
+ /** The one key every player reads and writes. */
37
+ export declare const VIDEO_QUALITY_KEY = "cb.video-quality";
38
+ export declare const NATIVE_HLS_REASON = "This browser plays the stream itself and picks the quality on its own \u2014 Safari and iPhone let a page choose nothing";
39
+ export declare const NO_LADDER_REASON = "This video has one quality: it is playing the file itself, not a ladder";
40
+ /** The stored string back into a choice. Anything unreadable is `auto`, the safe default. */
41
+ export declare function parseVideoQuality(raw: string | null | undefined): VideoQualityChoice;
42
+ export declare function serializeVideoQuality(choice: VideoQualityChoice): string;
43
+ export declare function readVideoQuality(): VideoQualityChoice;
44
+ export declare function writeVideoQuality(choice: VideoQualityChoice): void;
45
+ /** One rung, as a menu offers it. */
46
+ export interface VideoQualityLevel {
47
+ height: number;
48
+ /** The original's own stream (binary-server's `o<height>` rung), not an encode. */
49
+ original: boolean;
50
+ }
51
+ /** The fields this module reads off an hls.js `Level` — declared here so hls.js stays a lazy chunk. */
52
+ export interface HlsLevelLike {
53
+ height?: number;
54
+ uri?: string;
55
+ url?: readonly string[];
56
+ }
57
+ /** The ladder's rungs, tallest first, one per height. */
58
+ export declare function rungLevels(levels: readonly HlsLevelLike[]): VideoQualityLevel[];
59
+ /**
60
+ * The hls.js level a choice plays: `-1` (adaptive) for `auto` and `max`, else the rung of that
61
+ * height — or the tallest below it, or the shortest when every rung is taller.
62
+ */
63
+ export declare function levelIndexFor(levels: readonly HlsLevelLike[], choice: VideoQualityChoice): number;
64
+ /** What a player surface shows, and the one way to change it. */
65
+ export interface VideoQualityControl {
66
+ /** The ladder's rungs, tallest first. Empty when nothing can be chosen. */
67
+ levels: VideoQualityLevel[];
68
+ choice: VideoQualityChoice;
69
+ /** The rung on screen right now, when known — what "Auto" is showing. */
70
+ playingHeight: number | null;
71
+ /** Why nothing can be chosen here, or null when the menu works. */
72
+ unavailable: string | null;
73
+ /** Apply AND remember. */
74
+ select: (choice: VideoQualityChoice) => void;
75
+ }
76
+ /** A control that can choose nothing, with the reason. */
77
+ export declare function unavailableQuality(reason: string): VideoQualityControl;
78
+ /** The slice of an hls.js instance this module drives. */
79
+ export interface HlsQualityEngine {
80
+ levels: readonly HlsLevelLike[] | undefined;
81
+ currentLevel: number;
82
+ nextLevel: number;
83
+ capLevelToPlayerSize: boolean;
84
+ on: (event: string, listener: (...args: never[]) => void) => void;
85
+ off: (event: string, listener: (...args: never[]) => void) => void;
86
+ }
87
+ /**
88
+ * Drive `hls` by the viewer's remembered choice, and report it.
89
+ *
90
+ * The cap is set before the first fragment (a `max` viewer never loads a capped first rung),
91
+ * and a fixed rung is applied when the manifest is parsed — the first moment the levels exist.
92
+ * A later choice switches with `nextLevel`: the next fragment plays the new rung, and what is
93
+ * already buffered still plays, so changing quality never stalls the picture.
94
+ *
95
+ * Returns the unbind. `engine.destroy()` drops the listeners too; the unbind is for a surface
96
+ * that keeps the engine.
97
+ */
98
+ export declare function bindHlsQuality(hls: HlsQualityEngine, onChange: (control: VideoQualityControl) => void): () => void;
99
+ /** A rung's menu label: `2160p · Original`, `720p`. */
100
+ export declare function rungLabel(level: VideoQualityLevel): string;
101
+ /**
102
+ * A quality control held OUTSIDE React state, for a surface whose menu lives in a slot it must
103
+ * not rebuild: Vidstack's layout remounts whenever its `slots` object changes (`VideoPlayer`'s
104
+ * memo says why), and the control changes on every rung switch. The slot reads this store with
105
+ * `useSyncExternalStore`, so a switch re-renders the menu and nothing else.
106
+ */
107
+ export interface VideoQualityStore {
108
+ get: () => VideoQualityControl | null;
109
+ set: (control: VideoQualityControl | null) => void;
110
+ subscribe: (listener: () => void) => () => void;
111
+ }
112
+ export declare function createVideoQualityStore(): VideoQualityStore;
113
+ //# sourceMappingURL=videoQuality.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoQuality.d.ts","sourceRoot":"","sources":["../../../src/react/media/videoQuality.ts"],"names":[],"mappings":"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"}