cursedbelt 3.0.2 → 4.0.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 (250) hide show
  1. package/dist/react/components/ListToolbar.d.ts +94 -0
  2. package/dist/react/components/ListToolbar.d.ts.map +1 -0
  3. package/dist/react/components/ListToolbar.js +66 -0
  4. package/dist/react/components/ListToolbar.js.map +1 -0
  5. package/dist/react/file-tree/FileTree.d.ts +282 -3
  6. package/dist/react/file-tree/FileTree.d.ts.map +1 -1
  7. package/dist/react/file-tree/FileTree.js +799 -131
  8. package/dist/react/file-tree/FileTree.js.map +1 -1
  9. package/dist/react/file-tree/fileTree.css +151 -0
  10. package/dist/react/file-tree/fileTreeSelection.d.ts +187 -0
  11. package/dist/react/file-tree/fileTreeSelection.d.ts.map +1 -0
  12. package/dist/react/file-tree/fileTreeSelection.js +264 -0
  13. package/dist/react/file-tree/fileTreeSelection.js.map +1 -0
  14. package/dist/react/file-tree/index.d.ts +1 -0
  15. package/dist/react/file-tree/index.d.ts.map +1 -1
  16. package/dist/react/file-tree/index.js +8 -0
  17. package/dist/react/file-tree/index.js.map +1 -1
  18. package/dist/react/index.d.ts +1 -0
  19. package/dist/react/index.d.ts.map +1 -1
  20. package/dist/react/index.js +1 -0
  21. package/dist/react/index.js.map +1 -1
  22. package/dist/react/lib/form.d.ts +3 -0
  23. package/dist/react/lib/form.d.ts.map +1 -1
  24. package/dist/react/lib/form.js +43 -5
  25. package/dist/react/lib/form.js.map +1 -1
  26. package/dist/react/media/DenseGalleryShell.d.ts +19 -3
  27. package/dist/react/media/DenseGalleryShell.d.ts.map +1 -1
  28. package/dist/react/media/DenseGalleryShell.js +55 -15
  29. package/dist/react/media/DenseGalleryShell.js.map +1 -1
  30. package/dist/react/media/FocusViewer.d.ts.map +1 -1
  31. package/dist/react/media/FocusViewer.js +14 -14
  32. package/dist/react/media/FocusViewer.js.map +1 -1
  33. package/dist/react/media/FrameGrabber.d.ts +23 -0
  34. package/dist/react/media/FrameGrabber.d.ts.map +1 -1
  35. package/dist/react/media/FrameGrabber.js +67 -1
  36. package/dist/react/media/FrameGrabber.js.map +1 -1
  37. package/dist/react/media/MediaResize.d.ts +51 -19
  38. package/dist/react/media/MediaResize.d.ts.map +1 -1
  39. package/dist/react/media/MediaResize.js +20 -13
  40. package/dist/react/media/MediaResize.js.map +1 -1
  41. package/dist/react/media/VideoChapterEditor.d.ts +67 -0
  42. package/dist/react/media/VideoChapterEditor.d.ts.map +1 -0
  43. package/dist/react/media/VideoChapterEditor.js +148 -0
  44. package/dist/react/media/VideoChapterEditor.js.map +1 -0
  45. package/dist/react/media/VideoPlayer.d.ts +46 -4
  46. package/dist/react/media/VideoPlayer.d.ts.map +1 -1
  47. package/dist/react/media/VideoPlayer.js +124 -11
  48. package/dist/react/media/VideoPlayer.js.map +1 -1
  49. package/dist/react/media/VideoTurner.d.ts +15 -2
  50. package/dist/react/media/VideoTurner.d.ts.map +1 -1
  51. package/dist/react/media/VideoTurner.js +29 -2
  52. package/dist/react/media/VideoTurner.js.map +1 -1
  53. package/dist/react/media/denseGallery.css +104 -46
  54. package/dist/react/media/hlsSource.d.ts +57 -0
  55. package/dist/react/media/hlsSource.d.ts.map +1 -1
  56. package/dist/react/media/hlsSource.js +177 -1
  57. package/dist/react/media/hlsSource.js.map +1 -1
  58. package/dist/react/media/index.d.ts +2 -0
  59. package/dist/react/media/index.d.ts.map +1 -1
  60. package/dist/react/media/index.js +6 -0
  61. package/dist/react/media/index.js.map +1 -1
  62. package/dist/react/media/mediaResize.css +127 -54
  63. package/dist/react/media/pictureEditor.css +52 -6
  64. package/dist/react/media/videoChapterEditor.css +203 -0
  65. package/dist/react/media/videoChapters.d.ts +117 -0
  66. package/dist/react/media/videoChapters.d.ts.map +1 -0
  67. package/dist/react/media/videoChapters.js +95 -0
  68. package/dist/react/media/videoChapters.js.map +1 -0
  69. package/dist/react/media-gallery/GalleryTable.d.ts +52 -1
  70. package/dist/react/media-gallery/GalleryTable.d.ts.map +1 -1
  71. package/dist/react/media-gallery/GalleryTable.js +40 -9
  72. package/dist/react/media-gallery/GalleryTable.js.map +1 -1
  73. package/dist/react/media-gallery/MediaGallery.d.ts +107 -4
  74. package/dist/react/media-gallery/MediaGallery.d.ts.map +1 -1
  75. package/dist/react/media-gallery/MediaGallery.js +484 -104
  76. package/dist/react/media-gallery/MediaGallery.js.map +1 -1
  77. package/dist/react/media-gallery/MediaMetaEditor.d.ts +48 -0
  78. package/dist/react/media-gallery/MediaMetaEditor.d.ts.map +1 -0
  79. package/dist/react/media-gallery/MediaMetaEditor.js +66 -0
  80. package/dist/react/media-gallery/MediaMetaEditor.js.map +1 -0
  81. package/dist/react/media-gallery/index.d.ts +2 -0
  82. package/dist/react/media-gallery/index.d.ts.map +1 -1
  83. package/dist/react/media-gallery/index.js +5 -0
  84. package/dist/react/media-gallery/index.js.map +1 -1
  85. package/dist/react/media-gallery/mediaGallery.css +180 -4
  86. package/dist/react/media-gallery/mediaMeta.d.ts +62 -0
  87. package/dist/react/media-gallery/mediaMeta.d.ts.map +1 -0
  88. package/dist/react/media-gallery/mediaMeta.js +56 -0
  89. package/dist/react/media-gallery/mediaMeta.js.map +1 -0
  90. package/dist/react/media-gallery/playbackPreferences.d.ts +77 -0
  91. package/dist/react/media-gallery/playbackPreferences.d.ts.map +1 -1
  92. package/dist/react/media-gallery/playbackPreferences.js +42 -0
  93. package/dist/react/media-gallery/playbackPreferences.js.map +1 -1
  94. package/dist/react/media-gallery/types.d.ts +34 -0
  95. package/dist/react/media-gallery/types.d.ts.map +1 -1
  96. package/dist/scripts/guardrailsEnforce.d.ts +29 -0
  97. package/dist/scripts/guardrailsEnforce.d.ts.map +1 -0
  98. package/dist/styles-areas/activity-bar.css +30 -0
  99. package/dist/styles-areas/analytics.css +672 -0
  100. package/dist/styles-areas/auth.css +154 -0
  101. package/dist/styles-areas/calendar.css +416 -0
  102. package/dist/styles-areas/chart-table.css +41 -0
  103. package/dist/styles-areas/charts.css +89 -0
  104. package/dist/styles-areas/chat.css +364 -0
  105. package/dist/styles-areas/clipboard.css +26 -0
  106. package/dist/styles-areas/code-editor.css +130 -0
  107. package/dist/styles-areas/companion-link.css +70 -0
  108. package/dist/styles-areas/core.css +2503 -0
  109. package/dist/styles-areas/dashboard-grid.css +84 -0
  110. package/dist/styles-areas/data-table.css +657 -0
  111. package/dist/styles-areas/deep-link.css +26 -0
  112. package/dist/styles-areas/diff-viewer.css +30 -0
  113. package/dist/styles-areas/disk-usage.css +262 -0
  114. package/dist/styles-areas/emoji.css +154 -0
  115. package/dist/styles-areas/fields.css +582 -0
  116. package/dist/styles-areas/file-tree.css +33 -0
  117. package/dist/styles-areas/filter-rail.css +235 -0
  118. package/dist/styles-areas/folder-tree.css +219 -0
  119. package/dist/styles-areas/keep-awake.css +26 -0
  120. package/dist/styles-areas/layout-engine.css +239 -0
  121. package/dist/styles-areas/markdown.css +87 -0
  122. package/dist/styles-areas/master-detail.css +239 -0
  123. package/dist/styles-areas/master-lock.css +26 -0
  124. package/dist/styles-areas/media-gallery.css +351 -0
  125. package/dist/styles-areas/media.css +658 -0
  126. package/dist/styles-areas/nav.css +488 -0
  127. package/dist/styles-areas/notifications.css +245 -0
  128. package/dist/styles-areas/overlays.css +133 -0
  129. package/dist/styles-areas/palette.css +140 -0
  130. package/dist/styles-areas/pdf-viewer.css +47 -0
  131. package/dist/styles-areas/problem-detail.css +97 -0
  132. package/dist/styles-areas/rich-text.css +167 -0
  133. package/dist/styles-areas/sharing.css +153 -0
  134. package/dist/styles-areas/spreadsheet.css +37 -0
  135. package/dist/styles-areas/stats.css +281 -0
  136. package/dist/styles-areas/test-report.css +133 -0
  137. package/dist/styles-areas/virtual.css +30 -0
  138. package/dist/styles-areas/wizard.css +381 -0
  139. package/dist/styles-areas/workbench.css +543 -0
  140. package/dist/styles-areas/workbook-viewer.css +44 -0
  141. package/dist/styles-static.css +34 -23
  142. package/dist/styles.css +34 -23
  143. package/package.json +111 -31
  144. package/scripts/checkDistExports.ts +67 -0
  145. package/scripts/cssRules.ts +125 -0
  146. package/scripts/fixtureAppCss.ts +344 -0
  147. package/scripts/generateAreaStyles.ts +253 -0
  148. package/scripts/guardrailsEnforce.spec.ts +62 -0
  149. package/scripts/guardrailsEnforce.ts +67 -3
  150. package/scripts/styleAreas.ts +585 -0
  151. package/scripts/verify.ts +5 -0
  152. package/src/barrelsReachNoOptionalPeer.spec.ts +117 -9
  153. package/src/docsMatchTheSplit.spec.ts +98 -0
  154. package/src/fixtureAppCss.spec.ts +177 -0
  155. package/src/namedSubpathsResolve.spec.ts +35 -0
  156. package/src/publishShape.spec.ts +67 -0
  157. package/src/react/components/ListToolbar.spec.tsx +172 -0
  158. package/src/react/components/ListToolbar.tsx +151 -0
  159. package/src/react/file-tree/FileTree.spec.tsx +1009 -0
  160. package/src/react/file-tree/FileTree.tsx +1459 -309
  161. package/src/react/file-tree/fileTree.css +151 -0
  162. package/src/react/file-tree/fileTreeSelection.spec.ts +327 -0
  163. package/src/react/file-tree/fileTreeSelection.ts +321 -0
  164. package/src/react/file-tree/index.ts +21 -0
  165. package/src/react/index.ts +1 -0
  166. package/src/react/lib/form.ts +51 -8
  167. package/src/react/media/DenseGalleryShell.tsx +108 -36
  168. package/src/react/media/FocusViewer.tsx +15 -8
  169. package/src/react/media/FrameGrabber.spec.tsx +175 -0
  170. package/src/react/media/FrameGrabber.tsx +67 -0
  171. package/src/react/media/MediaResize.spec.tsx +84 -14
  172. package/src/react/media/MediaResize.tsx +51 -19
  173. package/src/react/media/VideoChapterEditor.tsx +428 -0
  174. package/src/react/media/VideoPlayer.spec.tsx +111 -1
  175. package/src/react/media/VideoPlayer.tsx +158 -11
  176. package/src/react/media/VideoTurner.spec.tsx +67 -0
  177. package/src/react/media/VideoTurner.tsx +70 -15
  178. package/src/react/media/denseGallery.css +104 -46
  179. package/src/react/media/hlsSource.recovery.spec.ts +213 -0
  180. package/src/react/media/hlsSource.spec.ts +8 -0
  181. package/src/react/media/hlsSource.ts +189 -1
  182. package/src/react/media/index.ts +14 -0
  183. package/src/react/media/mediaResize.css +127 -54
  184. package/src/react/media/pictureEditor.css +52 -6
  185. package/src/react/media/videoChapterEditor.css +203 -0
  186. package/src/react/media/videoChapters.spec.ts +176 -0
  187. package/src/react/media/videoChapters.ts +181 -0
  188. package/src/react/media-gallery/GalleryTable.tsx +93 -3
  189. package/src/react/media-gallery/MediaGallery.spec.tsx +1156 -10
  190. package/src/react/media-gallery/MediaGallery.tsx +813 -95
  191. package/src/react/media-gallery/MediaMetaEditor.tsx +237 -0
  192. package/src/react/media-gallery/galleryTable.spec.ts +41 -1
  193. package/src/react/media-gallery/index.ts +7 -0
  194. package/src/react/media-gallery/mediaGallery.css +180 -4
  195. package/src/react/media-gallery/mediaMeta.spec.ts +95 -0
  196. package/src/react/media-gallery/mediaMeta.ts +101 -0
  197. package/src/react/media-gallery/playbackPreferences.spec.ts +172 -0
  198. package/src/react/media-gallery/playbackPreferences.ts +100 -0
  199. package/src/react/media-gallery/types.ts +34 -0
  200. package/src/shippedFilesAreTracked.spec.ts +69 -0
  201. package/src/styles-areas/activity-bar.css +30 -0
  202. package/src/styles-areas/analytics.css +672 -0
  203. package/src/styles-areas/auth.css +154 -0
  204. package/src/styles-areas/calendar.css +416 -0
  205. package/src/styles-areas/chart-table.css +41 -0
  206. package/src/styles-areas/charts.css +89 -0
  207. package/src/styles-areas/chat.css +364 -0
  208. package/src/styles-areas/clipboard.css +26 -0
  209. package/src/styles-areas/code-editor.css +130 -0
  210. package/src/styles-areas/companion-link.css +70 -0
  211. package/src/styles-areas/core.css +2503 -0
  212. package/src/styles-areas/dashboard-grid.css +84 -0
  213. package/src/styles-areas/data-table.css +657 -0
  214. package/src/styles-areas/deep-link.css +26 -0
  215. package/src/styles-areas/diff-viewer.css +30 -0
  216. package/src/styles-areas/disk-usage.css +262 -0
  217. package/src/styles-areas/emoji.css +154 -0
  218. package/src/styles-areas/fields.css +582 -0
  219. package/src/styles-areas/file-tree.css +33 -0
  220. package/src/styles-areas/filter-rail.css +235 -0
  221. package/src/styles-areas/folder-tree.css +219 -0
  222. package/src/styles-areas/keep-awake.css +26 -0
  223. package/src/styles-areas/layout-engine.css +239 -0
  224. package/src/styles-areas/markdown.css +87 -0
  225. package/src/styles-areas/master-detail.css +239 -0
  226. package/src/styles-areas/master-lock.css +26 -0
  227. package/src/styles-areas/media-gallery.css +351 -0
  228. package/src/styles-areas/media.css +658 -0
  229. package/src/styles-areas/nav.css +488 -0
  230. package/src/styles-areas/notifications.css +245 -0
  231. package/src/styles-areas/overlays.css +133 -0
  232. package/src/styles-areas/palette.css +140 -0
  233. package/src/styles-areas/pdf-viewer.css +47 -0
  234. package/src/styles-areas/problem-detail.css +97 -0
  235. package/src/styles-areas/rich-text.css +167 -0
  236. package/src/styles-areas/sharing.css +153 -0
  237. package/src/styles-areas/spreadsheet.css +37 -0
  238. package/src/styles-areas/stats.css +281 -0
  239. package/src/styles-areas/test-report.css +133 -0
  240. package/src/styles-areas/virtual.css +30 -0
  241. package/src/styles-areas/wizard.css +381 -0
  242. package/src/styles-areas/workbench.css +543 -0
  243. package/src/styles-areas/workbook-viewer.css +44 -0
  244. package/src/styles-static.css +34 -23
  245. package/src/styles.css +34 -23
  246. package/src/stylesAreas.spec.ts +247 -0
  247. package/src/stylesUtilitiesMatches.spec.ts +6 -77
  248. package/src/testFilesRunInParallel.spec.ts +79 -0
  249. package/src/typecheckCachesAreSeparate.spec.ts +128 -0
  250. package/src/verifyGraph.spec.ts +6 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoChapters.d.ts","sourceRoot":"","sources":["../../../src/react/media/videoChapters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAE3D,0FAA0F;AAC1F,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,yFAAyF;IACzF,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,wFAAwF;AACxF,MAAM,WAAW,WAAY,SAAQ,YAAY;IAC/C,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;;OAMG;IACH,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;GAQG;AACH,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG;IAAE,QAAQ,CAAC,EAAE,YAAY,EAAE,CAAA;CAAE,CAAC;AAK3E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,QAAQ,EAAE,MAAM,GACf,YAAY,EAAE,CAsBhB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,YAAY,EACnB,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,IAAI,CAef;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,SAAS,YAAY,EAAE,EACjC,QAAQ,EAAE,MAAM,GACf,WAAW,EAAE,CAUf"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * The shortest section worth naming, in seconds — and therefore how far apart two chapters
3
+ * have to be to be two chapters.
4
+ *
5
+ * 🔴 It is the anti-duplicate rule and the anti-sliver rule at once, which is why there is one
6
+ * number rather than an equality test plus a floor. Two chapters at the same instant make a
7
+ * section of zero length: it is unreachable from the chapters menu, it renders as a divider
8
+ * with no room between it and the next, and on the scrub bar the two dividers land on the same
9
+ * pixel — so the list says two sections and the player can only ever show one. A second is
10
+ * generous (YouTube's own floor is ten) and still far below anything a person marks on purpose.
11
+ */
12
+ export const MIN_CHAPTER_SECONDS = 1;
13
+ /** Whitespace off, and a non-string (an app's row with a null in it) reads as empty. */
14
+ const cleanTitle = (title) => (typeof title === 'string' ? title.trim() : '');
15
+ /**
16
+ * Put a raw list into the one canonical form everything downstream may assume: inside the
17
+ * clip, ordered, named, and never two chapters closer than a section.
18
+ *
19
+ * Invalid entries are DROPPED rather than reported — this is the read path, and a list that
20
+ * came back from a store against a slightly different duration must still play. The editor
21
+ * refuses the same things out loud through {@link chapterProblem}, so nothing a person types
22
+ * is silently discarded; the two agree because the second is written in terms of the first.
23
+ *
24
+ * A non-finite start (the usual source is a playhead read from a `<video>` whose metadata has
25
+ * not loaded, which reports `NaN`) drops its chapter instead of poisoning the sort: every
26
+ * comparison against `NaN` is false, which produces an array `sort` calls sorted and is not,
27
+ * and then the de-duplication pass below compares against the wrong neighbour.
28
+ */
29
+ export function normalizeChapters(chapters, duration) {
30
+ if (!Number.isFinite(duration) || duration <= 0)
31
+ return [];
32
+ const clean = chapters
33
+ .map((chapter) => ({ startSeconds: chapter.startSeconds, title: cleanTitle(chapter.title) }))
34
+ .filter((chapter) => chapter.title.length > 0 &&
35
+ Number.isFinite(chapter.startSeconds) &&
36
+ chapter.startSeconds >= 0 &&
37
+ chapter.startSeconds <= duration - MIN_CHAPTER_SECONDS)
38
+ .sort((a, b) => a.startSeconds - b.startSeconds);
39
+ const out = [];
40
+ for (const chapter of clean) {
41
+ const last = out[out.length - 1];
42
+ // First one wins. The alternative — last one wins — makes a marker somebody placed
43
+ // deliberately disappear when a later, sloppier one lands next to it.
44
+ if (last && chapter.startSeconds - last.startSeconds < MIN_CHAPTER_SECONDS)
45
+ continue;
46
+ out.push(chapter);
47
+ }
48
+ return out;
49
+ }
50
+ /**
51
+ * Why this chapter cannot be placed, or `null` when it can.
52
+ *
53
+ * 🔴 A SENTENCE, not a boolean, and the same sentence in the editor and in whatever route ends
54
+ * up storing one. All four refusals are reachable in a few seconds of marking, and each names
55
+ * the thing to do about it rather than the rule it broke.
56
+ */
57
+ export function chapterProblem(draft, existing, duration) {
58
+ if (!Number.isFinite(duration) || duration <= 0)
59
+ return "This video's length is not known yet, so a chapter cannot be placed in it.";
60
+ if (cleanTitle(draft.title).length === 0)
61
+ return 'Name the section first — a chapter with no title is a mark nobody can read.';
62
+ const at = draft.startSeconds;
63
+ if (!Number.isFinite(at) || at < 0)
64
+ return 'A chapter starts at a point in the video, not before it.';
65
+ if (at > duration - MIN_CHAPTER_SECONDS)
66
+ return 'That is at the very end of the clip — a section needs at least a second of video after it.';
67
+ const clash = normalizeChapters(existing, duration).find((chapter) => Math.abs(chapter.startSeconds - at) < MIN_CHAPTER_SECONDS);
68
+ if (clash)
69
+ return `There is already a chapter within a second of there — "${clash.title}".`;
70
+ return null;
71
+ }
72
+ /**
73
+ * The sections themselves: every chapter runs until the next one begins, and the last runs to
74
+ * the end of the clip.
75
+ *
76
+ * This is what both surfaces read — the editor's strip and the player's chapters track — from
77
+ * one function, because the alternative is two independent readings of "where does this
78
+ * section end" and a scrub bar whose dividers disagree with the list beside it.
79
+ *
80
+ * The clip before the FIRST chapter is deliberately not a span. A video whose first mark is at
81
+ * 2:00 has an unnamed opening, and inventing a section called nothing for it would put a row
82
+ * in the chapters menu that says less than no row at all.
83
+ */
84
+ export function chapterSpans(chapters, duration) {
85
+ const ordered = normalizeChapters(chapters, duration);
86
+ return ordered.map((chapter, index) => {
87
+ const next = ordered[index + 1];
88
+ return {
89
+ ...chapter,
90
+ endSeconds: next ? next.startSeconds : duration,
91
+ key: chapter.startSeconds.toFixed(3),
92
+ };
93
+ });
94
+ }
95
+ //# sourceMappingURL=videoChapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"videoChapters.js","sourceRoot":"","sources":["../../../src/react/media/videoChapters.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,30 @@ import type { MediaGalleryItem, MediaGalleryOrder } from './types';
8
8
  * against `mediaGallery.css` by this module's spec, so the two cannot drift.
9
9
  */
10
10
  export declare const GALLERY_TABLE_ROW_HEIGHT = 52;
11
+ /**
12
+ * "1,402,653,184" — the size as the EXACT integer it is, grouped.
13
+ *
14
+ * ── 🔴 Why a second size column exists at all ──────────────────────────────────────────
15
+ * Owner, `ideas/collections-09-14.md`: *"In collections I want to see the exact file size in
16
+ * bytes as a column option so I can easily tell if two files are the exact same byte size to
17
+ * help me know if they are duplicates or not."*
18
+ *
19
+ * `formatBytes` — the Size column beside this one — rounds to one decimal, so two files that
20
+ * differ by 400 MB read `1.4 GB` and `1.4 GB`, and two that differ by a single byte are
21
+ * indistinguishable at every scale above a kilobyte. That is not a display preference: the
22
+ * rounded column cannot do the one job he named for it, and no amount of squinting at it will
23
+ * ever separate a duplicate from a near-duplicate. So the exact count is offered BESIDE the
24
+ * rounded one ("as a column option", his words) rather than replacing it — `1.4 GB` is still
25
+ * the faster read for "is this big", and both questions are real.
26
+ *
27
+ * Grouped rather than a bare run of digits, because `1402653184` and `1402653284` are the same
28
+ * ten characters to a reader scanning a column, which is the failure this exists to fix. The
29
+ * separator is the reader's LOCALE's, exactly as `createdLabel` takes its month name from the
30
+ * locale — the digits are the fact, the grouping is typography.
31
+ *
32
+ * Null for a row with no size, so the cell shows `—` like every other absent measurement.
33
+ */
34
+ export declare function exactBytesLabel(bytes: number | undefined): string | null;
11
35
  /** "1:04:12" / "3:07" — a duration a person reads, never a raw seconds count. */
12
36
  export declare function durationLabel(seconds: number | undefined): string | null;
13
37
  /**
@@ -51,6 +75,33 @@ export interface GalleryTableProps {
51
75
  * which view is on screen, so the button was present, lit, and had nothing wired to it here.
52
76
  */
53
77
  autoPreview?: boolean;
78
+ /**
79
+ * The row the STAGE is showing, and what to call it — `'Now playing'` on a film, `'On
80
+ * screen'` on a still. Absent in the browse view, where nothing is on a stage.
81
+ *
82
+ * 🔴 The detail view's related list is this same table over the same items the grid shows,
83
+ * and since 2026-09-16 that list INCLUDES the open one (see `MediaGallery`'s strip). A row
84
+ * that is in the list and unmarked is the list lying about which file you are looking at,
85
+ * so the two views of the strip mark it the same way or they are two different features.
86
+ */
87
+ playing?: {
88
+ id: string;
89
+ label: string;
90
+ };
91
+ /**
92
+ * Offer the EXACT byte count as its own column, beside the rounded Size one.
93
+ *
94
+ * Off by default, so every consumer that passes nothing renders the six columns it already
95
+ * had. See {@link exactBytesLabel} for what the column is for and why it is an addition
96
+ * rather than a replacement.
97
+ *
98
+ * 🔴 It is deliberately NOT a sort header, though it is a number. It holds the same value
99
+ * `size` already sorts on, so a second sortable header would put two `aria-sort` states on
100
+ * one ordering — a table where clicking Size and clicking Bytes are the same act, announced
101
+ * as two. Sort by Size and the exact counts land in the same order; that is what brings two
102
+ * candidates for a duplicate next to each other.
103
+ */
104
+ exactBytes?: boolean;
54
105
  }
55
- export declare function GalleryTable({ items, cache, order, onOrderChange, onOpen, onNearEnd, loading, empty, selection, drag, autoPreview, }: GalleryTableProps): import("react").JSX.Element;
106
+ export declare function GalleryTable({ items, cache, order, onOrderChange, onOpen, onNearEnd, loading, empty, selection, drag, autoPreview, playing, exactBytes, }: GalleryTableProps): import("react").JSX.Element;
56
107
  //# sourceMappingURL=GalleryTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GalleryTable.d.ts","sourceRoot":"","sources":["../../../src/react/media-gallery/GalleryTable.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAIjF,OAAO,EAAgB,KAAK,UAAU,EAA0B,MAAM,oBAAoB,CAAC;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AA4C3C,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQxE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,SAAS,SAA2B,GACnC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQhC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAClG,yFAAyF;IACzF,IAAI,CAAC,EAAE,CACL,IAAI,EAAE,gBAAgB,KACnB;QAAE,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IAClG;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,KAAK,EACL,aAAa,EACb,MAAM,EACN,SAAS,EACT,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,EACJ,WAAW,GACZ,EAAE,iBAAiB,+BAkHnB"}
1
+ {"version":3,"file":"GalleryTable.d.ts","sourceRoot":"","sources":["../../../src/react/media-gallery/GalleryTable.tsx"],"names":[],"mappings":"AAkCA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,KAAK,SAAS,EAA4C,MAAM,OAAO,CAAC;AAIjF,OAAO,EAAgB,KAAK,UAAU,EAA0B,MAAM,oBAAoB,CAAC;AAE3F,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,KAAK,CAAC;AA4C3C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAGxE;AAED,iFAAiF;AACjF,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAQxE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,SAAS,SAA2B,GACnC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAQhC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,gBAAgB,EAAE,CAAC;IAC1B,KAAK,EAAE,UAAU,CAAC;IAClB,KAAK,EAAE,iBAAiB,CAAC;IACzB,aAAa,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAClD,MAAM,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK,IAAI,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,gBAAgB,KAAK;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IAClG,yFAAyF;IACzF,IAAI,CAAC,EAAE,CACL,IAAI,EAAE,gBAAgB,KACnB;QAAE,WAAW,EAAE,CAAC,KAAK,EAAE,SAAS,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;IAClG;;;;;;;;;;OAUG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC;;;;;;;;;;;;OAYG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,KAAK,EACL,KAAK,EACL,aAAa,EACb,MAAM,EACN,SAAS,EACT,OAAO,EACP,KAAK,EACL,SAAS,EACT,IAAI,EACJ,WAAW,EACX,OAAO,EACP,UAAkB,GACnB,EAAE,iBAAiB,+BA+HnB"}
@@ -84,6 +84,34 @@ function nextOrderFor(column, order) {
84
84
  return column === 'name' ? pair.asc : pair.desc;
85
85
  return current === 'asc' ? pair.desc : pair.asc;
86
86
  }
87
+ /**
88
+ * "1,402,653,184" — the size as the EXACT integer it is, grouped.
89
+ *
90
+ * ── 🔴 Why a second size column exists at all ──────────────────────────────────────────
91
+ * Owner, `ideas/collections-09-14.md`: *"In collections I want to see the exact file size in
92
+ * bytes as a column option so I can easily tell if two files are the exact same byte size to
93
+ * help me know if they are duplicates or not."*
94
+ *
95
+ * `formatBytes` — the Size column beside this one — rounds to one decimal, so two files that
96
+ * differ by 400 MB read `1.4 GB` and `1.4 GB`, and two that differ by a single byte are
97
+ * indistinguishable at every scale above a kilobyte. That is not a display preference: the
98
+ * rounded column cannot do the one job he named for it, and no amount of squinting at it will
99
+ * ever separate a duplicate from a near-duplicate. So the exact count is offered BESIDE the
100
+ * rounded one ("as a column option", his words) rather than replacing it — `1.4 GB` is still
101
+ * the faster read for "is this big", and both questions are real.
102
+ *
103
+ * Grouped rather than a bare run of digits, because `1402653184` and `1402653284` are the same
104
+ * ten characters to a reader scanning a column, which is the failure this exists to fix. The
105
+ * separator is the reader's LOCALE's, exactly as `createdLabel` takes its month name from the
106
+ * locale — the digits are the fact, the grouping is typography.
107
+ *
108
+ * Null for a row with no size, so the cell shows `—` like every other absent measurement.
109
+ */
110
+ export function exactBytesLabel(bytes) {
111
+ if (bytes == null || !Number.isFinite(bytes))
112
+ return null;
113
+ return Math.round(bytes).toLocaleString();
114
+ }
87
115
  /** "1:04:12" / "3:07" — a duration a person reads, never a raw seconds count. */
88
116
  export function durationLabel(seconds) {
89
117
  if (seconds == null || !Number.isFinite(seconds) || seconds <= 0)
@@ -111,7 +139,7 @@ export function visibleWindow(count, scrollTop, viewportHeight, rowHeight = GALL
111
139
  const end = Math.min(count, Math.ceil((scrollTop + height) / rowHeight) + OVERSCAN);
112
140
  return { start, end };
113
141
  }
114
- export function GalleryTable({ items, cache, order, onOrderChange, onOpen, onNearEnd, loading, empty, selection, drag, autoPreview, }) {
142
+ export function GalleryTable({ items, cache, order, onOrderChange, onOpen, onNearEnd, loading, empty, selection, drag, autoPreview, playing, exactBytes = false, }) {
115
143
  const viewportRef = useRef(null);
116
144
  const [scrollTop, setScrollTop] = useState(0);
117
145
  const [viewportHeight, setViewportHeight] = useState(0);
@@ -128,11 +156,13 @@ export function GalleryTable({ items, cache, order, onOrderChange, onOpen, onNea
128
156
  const onScroll = useCallback((event) => {
129
157
  setScrollTop(event.currentTarget.scrollTop);
130
158
  }, []);
131
- // check? + thumb + name + kind + size + length + date
132
- const columnCount = selection ? 7 : 6;
159
+ // check? + thumb + name + kind + size + bytes? + length + date. 🔴 The spacer rows span
160
+ // this, so a column added without it is a virtualized table whose geometry is one cell
161
+ // narrower than its data — see the spacer rows below.
162
+ const columnCount = 6 + (selection ? 1 : 0) + (exactBytes ? 1 : 0);
133
163
  const above = start * GALLERY_TABLE_ROW_HEIGHT;
134
164
  const below = Math.max(0, (items.length - end) * GALLERY_TABLE_ROW_HEIGHT);
135
- return (_jsxs("div", { className: `cbgt-root${selection ? ' has-check' : ''}`, ref: viewportRef, onScroll: onScroll, children: [_jsxs("table", { className: 'cbgt-table', children: [_jsx("thead", { className: 'cbgt-head', children: _jsxs("tr", { children: [selection ? (_jsx("th", { className: 'cbgt-cell--check', scope: 'col', children: _jsx("span", { className: 'cbgd-sr-only', children: "Selected" }) })) : null, _jsx("th", { className: 'cbgt-cell--thumb', scope: 'col', children: _jsx("span", { className: 'cbgd-sr-only', children: "Preview" }) }), _jsx(SortHeader, { column: 'name', label: 'Name', order: order, onOrderChange: onOrderChange, className: 'cbgt-cell--name' }), _jsx("th", { className: 'cbgt-cell--kind', scope: 'col', children: "Kind" }), _jsx(SortHeader, { column: 'size', label: 'Size', order: order, onOrderChange: onOrderChange, className: 'cbgt-cell--num' }), _jsx("th", { className: 'cbgt-cell--num cbgt-cell--length', scope: 'col', children: "Length" }), _jsx(SortHeader, { column: 'date', label: 'Date', order: order, onOrderChange: onOrderChange, className: 'cbgt-cell--num cbgt-cell--date' })] }) }), _jsxs("tbody", { children: [above > 0 ? _jsx("tr", { className: 'cbgt-spacer', style: { height: above }, children: _jsx("td", { colSpan: columnCount }) }) : null, items.slice(start, end).map((item) => (_jsx(GalleryTableRow, { item: item, cache: cache, onOpen: () => onOpen(item), hasCheck: selection !== undefined, selection: selection?.(item), drag: drag?.(item), autoPreview: autoPreview === true }, item.id))), below > 0 ? _jsx("tr", { className: 'cbgt-spacer', style: { height: below }, children: _jsx("td", { colSpan: columnCount }) }) : null] })] }), items.length === 0 && !loading ? (_jsx("div", { className: 'cbgt-empty', children: empty ?? _jsx("div", { className: 'cbgd-empty', children: "No files yet." }) })) : null, loading ? _jsx("div", { className: 'cbgd-loading', children: "Loading\u2026" }) : null] }));
165
+ return (_jsxs("div", { className: `cbgt-root${selection ? ' has-check' : ''}`, ref: viewportRef, onScroll: onScroll, children: [_jsxs("table", { className: 'cbgt-table', children: [_jsx("thead", { className: 'cbgt-head', children: _jsxs("tr", { children: [selection ? (_jsx("th", { className: 'cbgt-cell--check', scope: 'col', children: _jsx("span", { className: 'cbgd-sr-only', children: "Selected" }) })) : null, _jsx("th", { className: 'cbgt-cell--thumb', scope: 'col', children: _jsx("span", { className: 'cbgd-sr-only', children: "Preview" }) }), _jsx(SortHeader, { column: 'name', label: 'Name', order: order, onOrderChange: onOrderChange, className: 'cbgt-cell--name' }), _jsx("th", { className: 'cbgt-cell--kind', scope: 'col', children: "Kind" }), _jsx(SortHeader, { column: 'size', label: 'Size', order: order, onOrderChange: onOrderChange, className: 'cbgt-cell--num' }), exactBytes ? (_jsx("th", { className: 'cbgt-cell--num cbgt-cell--bytes', scope: 'col', children: "Bytes" })) : null, _jsx("th", { className: 'cbgt-cell--num cbgt-cell--length', scope: 'col', children: "Length" }), _jsx(SortHeader, { column: 'date', label: 'Date', order: order, onOrderChange: onOrderChange, className: 'cbgt-cell--num cbgt-cell--date' })] }) }), _jsxs("tbody", { children: [above > 0 ? _jsx("tr", { className: 'cbgt-spacer', style: { height: above }, children: _jsx("td", { colSpan: columnCount }) }) : null, items.slice(start, end).map((item) => (_jsx(GalleryTableRow, { item: item, cache: cache, onOpen: () => onOpen(item), hasCheck: selection !== undefined, selection: selection?.(item), drag: drag?.(item), autoPreview: autoPreview === true, exactBytes: exactBytes, ...(playing?.id === item.id ? { stageMark: playing.label } : {}) }, item.id))), below > 0 ? _jsx("tr", { className: 'cbgt-spacer', style: { height: below }, children: _jsx("td", { colSpan: columnCount }) }) : null] })] }), items.length === 0 && !loading ? (_jsx("div", { className: 'cbgt-empty', children: empty ?? _jsx("div", { className: 'cbgd-empty', children: "No files yet." }) })) : null, loading ? _jsx("div", { className: 'cbgd-loading', children: "Loading\u2026" }) : null] }));
136
166
  }
137
167
  function SortHeader({ column, label, order, onOrderChange, className, }) {
138
168
  const direction = directionOf(column, order);
@@ -165,11 +195,12 @@ function TableVideoPreview({ item, src, poster, active, }) {
165
195
  // the item id, not a video URL.
166
196
  draggable: false }));
167
197
  }
168
- function GalleryTableRow({ item, cache, onOpen, hasCheck, selection, drag, autoPreview, }) {
198
+ function GalleryTableRow({ item, cache, onOpen, hasCheck, selection, drag, autoPreview, exactBytes, stageMark, }) {
169
199
  const { media } = useItemMedia(item, cache);
170
200
  const category = galleryItemCategory(item);
171
201
  const thumb = media.thumbnailUrl ?? media.posterUrl ?? (category === 'image' ? media.url : undefined);
172
202
  const size = item.sizeBytes != null ? formatBytes(item.sizeBytes) : null;
203
+ const bytes = exactBytesLabel(item.sizeBytes);
173
204
  const length = durationLabel(item.durationSeconds);
174
205
  const date = createdLabel(item.createdAt);
175
206
  /*
@@ -184,7 +215,7 @@ function GalleryTableRow({ item, cache, onOpen, hasCheck, selection, drag, autoP
184
215
  // `autoPreview` is suppressed on a coarse pointer exactly as the grid tile suppresses it, so
185
216
  // a phone never opens forty video connections under a finger. A deliberate hover still does.
186
217
  const previewing = previewSrc != null && ((autoPreview && canHover) || hovering);
187
- return (_jsxs("tr", { className: `cbgt-row${selection?.selected ? ' is-selected' : ''}`, ...(previewSrc
218
+ return (_jsxs("tr", { className: `cbgt-row${selection?.selected ? ' is-selected' : ''}${stageMark ? ' is-playing' : ''}`, "data-playing": stageMark ? 'true' : undefined, "aria-current": stageMark ? 'true' : undefined, ...(previewSrc
188
219
  ? {
189
220
  onMouseEnter: () => setHovering(true),
190
221
  onMouseLeave: () => setHovering(false),
@@ -196,8 +227,8 @@ function GalleryTableRow({ item, cache, onOpen, hasCheck, selection, drag, autoP
196
227
  // is plain-CSS for the same reason the rest of this module is.
197
228
  type: 'checkbox', checked: selection.selected, "aria-label": `Select ${item.name}`, onChange: (event) => selection.onToggle(event.nativeEvent.shiftKey === true) })) : null })) : null, _jsx("td", { className: 'cbgt-cell--thumb', children: _jsxs("button", {
198
229
  // guardrails-ignore no-raw-action-button: the row's own open affordance; see above.
199
- type: 'button', className: 'cbgt-open cbgt-open--thumb', onClick: onOpen, "aria-label": `Open ${item.name}`, children: [previewing && previewSrc ? (_jsx(TableVideoPreview, { item: item, src: previewSrc, poster: media.posterUrl ?? media.thumbnailUrl, active: previewing })) : thumb ? (_jsx(ThumbImg, { src: thumb, fallbackSrc: media.url, alt: '', draggable: false })) : (_jsx("span", { className: 'cbgt-thumb-blank', "aria-hidden": 'true' })), previewSrc && !previewing ? (_jsx("span", { "aria-hidden": 'true', className: 'cbgt-play', children: "\u25B6" })) : null] }) }), _jsx("td", { className: 'cbgt-cell--name', children: _jsx("button", {
200
- // guardrails-ignore no-raw-action-button: see above.
201
- type: 'button', className: 'cbgt-open cbgt-open--name', onClick: onOpen, children: item.name }) }), _jsx("td", { className: 'cbgt-cell--kind', children: _jsx("span", { className: 'cbgt-kind', children: CATEGORY_LABEL[category] }) }), _jsx("td", { className: 'cbgt-cell--num', children: size ?? '—' }), _jsx("td", { className: 'cbgt-cell--num cbgt-cell--length', children: length ?? '—' }), _jsx("td", { className: 'cbgt-cell--num cbgt-cell--date', children: date ?? '—' })] }));
230
+ type: 'button', className: 'cbgt-open cbgt-open--thumb', onClick: onOpen, "aria-label": `Open ${item.name}`, children: [previewing && previewSrc ? (_jsx(TableVideoPreview, { item: item, src: previewSrc, poster: media.posterUrl ?? media.thumbnailUrl, active: previewing })) : thumb ? (_jsx(ThumbImg, { src: thumb, fallbackSrc: media.url, alt: '', draggable: false })) : (_jsx("span", { className: 'cbgt-thumb-blank', "aria-hidden": 'true' })), previewSrc && !previewing ? (_jsx("span", { "aria-hidden": 'true', className: 'cbgt-play', children: "\u25B6" })) : null] }) }), _jsxs("td", { className: 'cbgt-cell--name', children: [_jsx("button", {
231
+ // guardrails-ignore no-raw-action-button: see above.
232
+ type: 'button', className: 'cbgt-open cbgt-open--name', onClick: onOpen, children: item.name }), stageMark ? _jsx("span", { className: 'cbgd-sr-only', children: stageMark }) : null] }), _jsx("td", { className: 'cbgt-cell--kind', children: _jsx("span", { className: 'cbgt-kind', children: CATEGORY_LABEL[category] }) }), _jsx("td", { className: 'cbgt-cell--num', children: size ?? '—' }), exactBytes ? _jsx("td", { className: 'cbgt-cell--num cbgt-cell--bytes', children: bytes ?? '—' }) : null, _jsx("td", { className: 'cbgt-cell--num cbgt-cell--length', children: length ?? '—' }), _jsx("td", { className: 'cbgt-cell--num cbgt-cell--date', children: date ?? '—' })] }));
202
233
  }
203
234
  //# sourceMappingURL=GalleryTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GalleryTable.js","sourceRoot":"","sources":["../../../src/react/media-gallery/GalleryTable.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GalleryTable.js","sourceRoot":"","sources":["../../../src/react/media-gallery/GalleryTable.tsx"],"names":[],"mappings":"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"}
@@ -1,11 +1,39 @@
1
1
  import './mediaGallery.css';
2
2
  import React, { type DragEvent, type ReactNode } from 'react';
3
- import type { PlayableVideo } from 'cursedbelt-core/media';
4
3
  import type { PictureEditResult } from '../media/PictureEditor';
5
4
  import type { MediaOrientation } from '../media/VideoTurner';
5
+ import type { ChapteredVideo, VideoChapter } from '../media/videoChapters';
6
6
  import type { VideoCut } from 'cursedbelt-core/media/video-cuts';
7
7
  import { type GalleryViewMode } from './playbackPreferences';
8
+ import type { MediaMetaChange } from './mediaMeta';
8
9
  import type { MediaGalleryItem, MediaGalleryItemMedia, MediaGalleryOrder } from './types';
10
+ /**
11
+ * The one meta line under a tile's picture — its tags, its measurement, or both.
12
+ *
13
+ * ── 🔴 What `measure` turns on, and why it is not the default ──────────────────────────
14
+ * Owner, `ideas/collections-09-14.md`: *"in the grid view show the video length instead of
15
+ * the size"*, and `ideas/binary-server-09-15.md`: *"show the video length on thumbnail
16
+ * components … show the file size on thumbnail components (maybe controlled through param on
17
+ * media gallery in cb)"*. He guessed the right home for it: ONE param on this gallery, so an
18
+ * app that asks for nothing renders the line it already had, byte for byte.
19
+ *
20
+ * With it on, the measurement a tile leads with is the one that means something for its kind
21
+ * — a film and a track show their RUNNING TIME, everything else its size. A clip whose
22
+ * duration nobody measured falls back to its size rather than to a blank caption, and a file
23
+ * with neither shows `—`, the same mark the table's columns use for an absent measurement.
24
+ *
25
+ * 🔴 Tags and the measurement share this line rather than taking one each. The caption block
26
+ * is a fixed 65px — title, this line, the date — pinned to `CBGD_META_HEIGHT` because a
27
+ * caption whose height varied per tile is what made rows lap one another across the fleet
28
+ * (see `denseGallery.css`). A fourth line is not available at any price, so a tagged video
29
+ * reads `holiday · beach · 3:07`.
30
+ *
31
+ * Exported for its own spec: the branch table here is wider than the tile is, and a rendered
32
+ * assertion can only reach the combinations a fixture happens to contain.
33
+ */
34
+ export declare function galleryTileLine(item: MediaGalleryItem, options?: {
35
+ measure?: boolean;
36
+ }): string | null;
9
37
  /**
10
38
  * What the stage hands the shared `<VideoPlayer>` — every URL the player can use, and
11
39
  * nothing it cannot.
@@ -17,7 +45,7 @@ import type { MediaGalleryItem, MediaGalleryItemMedia, MediaGalleryOrder } from
17
45
  * pure function so a test can read it directly; the rendered player is a Vidstack custom
18
46
  * element that happy-dom never brings to life, so no DOM assertion can see any of this.
19
47
  */
20
- export declare function stagePlayableVideo(item: MediaGalleryItem, media: MediaGalleryItemMedia, streamUrl: string): PlayableVideo;
48
+ export declare function stagePlayableVideo(item: MediaGalleryItem, media: MediaGalleryItemMedia, streamUrl: string): ChapteredVideo;
21
49
  export interface MediaGalleryProps {
22
50
  items: MediaGalleryItem[];
23
51
  /** Header title. */
@@ -198,6 +226,54 @@ export interface MediaGalleryProps {
198
226
  * somebody the minutes of scrubbing that produced the list.
199
227
  */
200
228
  onTrimVideo?: (item: MediaGalleryItem, cuts: VideoCut[]) => void | Promise<void>;
229
+ /**
230
+ * Store the named sections of a video — YouTube chapters.
231
+ *
232
+ * The owner's ask, 2026-09-15: *"allow putting markers on videos at points in time and giving
233
+ * them a title for the section for knowing what that part of the video is about, like youtube
234
+ * chapters."* So this is a SAVE, not a request: the list applies the moment it comes back on
235
+ * {@link MediaGalleryItem.chapters}, costs no encode, and touches no byte of the file.
236
+ *
237
+ * 🔴 Passing this is what turns authoring on, per app — the same rule as `onTrimVideo`, and
238
+ * for a different reason worth stating: chapters have somewhere to GO only in an app that
239
+ * keeps a row per file it can write to. An app that merely lists someone else's videos must
240
+ * not offer a control that saves into nothing, and because the editor is lazily imported, an
241
+ * app that does not pass this does not ship the dialog either.
242
+ *
243
+ * 🔴 READING chapters needs nothing: an item that carries `chapters` shows them on the scrub
244
+ * bar whether or not this is passed. The capability being gated is writing them.
245
+ *
246
+ * An EMPTY list is how every section is removed. Rejecting keeps the dialog open with the
247
+ * names intact, because a failed request must not cost somebody the minutes of scrubbing and
248
+ * naming that produced them.
249
+ */
250
+ onSaveChapters?: (item: MediaGalleryItem, chapters: VideoChapter[]) => void | Promise<void>;
251
+ /**
252
+ * Store TAGS and a DESCRIPTION — on the open file, or on everything that is ticked.
253
+ *
254
+ * The owner's ask, `ideas/collections-09-14.md`, 2026-09-14: *"In media galleries have an
255
+ * option for apps to tag media and aadd descriptions to media. In collections allow these
256
+ * features so I can tag and add descriptions to its media."* The gallery could already READ
257
+ * `tags` — the tile prints the first three and the chips filter on them — and had no way to
258
+ * write one and no `description` field at all, so an app could display a vocabulary it
259
+ * already had and nothing in here could create a word of it.
260
+ *
261
+ * 🔴 Passing this is what turns authoring on, per app — the same rule as `onTrimVideo`, and
262
+ * for the same two reasons: an app that cannot persist a tag must not offer a control that
263
+ * saves into nothing, and because the editor is lazily imported, an app that does not pass
264
+ * this does not ship the dialog either. READING needs nothing, exactly as chapters do.
265
+ *
266
+ * 🔴 The first argument is a LIST, always — one item is `[item]`. Tagging forty holiday
267
+ * photographs at once is the case he will actually hit, and a plural verb that a consumer
268
+ * can only implement by looping the singular is the shape `tasks/Completed/240-*.md`
269
+ * refuses in as many words: *"One request for N ids, not N requests."* The change arrives
270
+ * as `addTags`/`removeTags` rather than as a new list for exactly this reason — forty items
271
+ * do not share one tag list, so "the new tags" would wipe thirty-nine nobody looked at.
272
+ * `applyMetaChange` (exported from this subpath) is the merge, so no app writes it twice.
273
+ *
274
+ * Rejecting keeps the dialog open with the draft intact.
275
+ */
276
+ onSaveMeta?: (items: MediaGalleryItem[], change: MediaMetaChange) => void | Promise<void>;
201
277
  /**
202
278
  * What happens after a trim is queued, in the app's own words — rendered under the strip.
203
279
  * Apps differ: one runs it on the spot, another drains a queue on a schedule, and "when
@@ -211,7 +287,7 @@ export interface MediaGalleryProps {
211
287
  */
212
288
  allowPictureReplace?: boolean;
213
289
  /**
214
- * The ☀ Picture control — brightness, contrast and colour for what is on the stage. On by
290
+ * The Picture control — brightness, contrast and colour for what is on the stage. On by
215
291
  * default, because it needs nothing from the app: it is a CSS filter over the stage and
216
292
  * nothing is saved, so there is no capability to be missing.
217
293
  *
@@ -220,10 +296,37 @@ export interface MediaGalleryProps {
220
296
  * deep. Pass `false` in an app where adjusting the picture is meaningless.
221
297
  */
222
298
  pictureControls?: boolean;
299
+ /**
300
+ * What the tiles and the table say about SIZE and LENGTH — the one param he guessed at.
301
+ *
302
+ * 🔴 Two asks, one prop, because they are one surface. `ideas/collections-09-14.md`, twice:
303
+ * *"In collections I want to see the exact file size in bytes as a column option so I can
304
+ * easily tell if two files are the exact same byte size to help me know if they are
305
+ * duplicates or not"* and *"in the grid view show the video length instead of the size."*
306
+ * Then `ideas/binary-server-09-15.md` asked for both facts on the same tiles and named the
307
+ * right home: *"maybe controlled through param on media gallery in cb."*
308
+ *
309
+ * 🔴 Everything here is OFF by default, so a consumer that passes nothing renders exactly
310
+ * what it renders today — the compatibility rule every other prop on this component holds.
311
+ */
312
+ meta?: {
313
+ /**
314
+ * A tile's caption leads with the measurement that means something for its kind: the
315
+ * RUNNING TIME on a film or a track, the size on everything else. Tags keep the line
316
+ * they had and the measurement joins them on it — see {@link galleryTileLine}.
317
+ */
318
+ tileMeasure?: boolean;
319
+ /**
320
+ * The table offers the exact byte count as its own column, beside the rounded Size one
321
+ * rather than instead of it — see `exactBytesLabel` in `GalleryTable.tsx`. A rounded size cannot answer
322
+ * *"are these two the same file"*, which is the job he named for it.
323
+ */
324
+ exactBytes?: boolean;
325
+ };
223
326
  }
224
327
  /**
225
328
  * The fleet's shared media gallery. Feed it `MediaGalleryItem`s (any binary kind); it
226
329
  * renders the dense browse grid and the in-page detail view with the right viewer.
227
330
  */
228
- export declare function MediaGallery({ items, title, loading, onNearEnd, initialOrder, detailActions, onDelete, headerExtra, chrome, previewAll, onPreviewAllChange, onPreviewableChange, viewMode: controlledViewMode, onViewModeChange, query: controlledQuery, onQueryChange, onSelectedChange, selectedId: controlledSelectedId, loadBytes, empty, emptyAction, minColumnWidth, nativeVideoStage, searchPlaceholder, selectable, selectionReveal, onBulkDelete, bulkActions, onSelectionChange, onItemDragStart, onItemDragEnd, onRename, onSaveThumbnail, onSaveSnapshot, onSaveEdit, onSaveOrientation, allowPictureReplace, pictureControls, onTrimVideo, trimNote, }: MediaGalleryProps): React.JSX.Element;
331
+ export declare function MediaGallery({ items, title, loading, onNearEnd, initialOrder, detailActions, onDelete, headerExtra, chrome, previewAll, onPreviewAllChange, onPreviewableChange, viewMode: controlledViewMode, onViewModeChange, query: controlledQuery, onQueryChange, onSelectedChange, selectedId: controlledSelectedId, loadBytes, empty, emptyAction, minColumnWidth, nativeVideoStage, searchPlaceholder, selectable, selectionReveal, onBulkDelete, bulkActions, onSelectionChange, onItemDragStart, onItemDragEnd, onRename, onSaveThumbnail, onSaveSnapshot, onSaveEdit, onSaveOrientation, allowPictureReplace, pictureControls, onTrimVideo, onSaveChapters, onSaveMeta, trimNote, meta, }: MediaGalleryProps): React.JSX.Element;
229
332
  //# sourceMappingURL=MediaGallery.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"MediaGallery.d.ts","sourceRoot":"","sources":["../../../src/react/media-gallery/MediaGallery.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MediaGallery.d.ts","sourceRoot":"","sources":["../../../src/react/media-gallery/MediaGallery.tsx"],"names":[],"mappings":"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"}