cursedbelt 5.45.1 → 5.46.2

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 (32) hide show
  1. package/dist/react/charts/format.d.ts.map +1 -1
  2. package/dist/react/charts/format.js +2 -1
  3. package/dist/react/charts/format.js.map +1 -1
  4. package/dist/react/components/ListToolbar.d.ts +5 -0
  5. package/dist/react/components/ListToolbar.d.ts.map +1 -1
  6. package/dist/react/components/ListToolbar.js +14 -2
  7. package/dist/react/components/ListToolbar.js.map +1 -1
  8. package/dist/react/media/PlayerStrip.d.ts +9 -1
  9. package/dist/react/media/PlayerStrip.d.ts.map +1 -1
  10. package/dist/react/media/PlayerStrip.js +30 -6
  11. package/dist/react/media/PlayerStrip.js.map +1 -1
  12. package/dist/react/media/splitActions.d.ts +15 -0
  13. package/dist/react/media/splitActions.d.ts.map +1 -0
  14. package/dist/react/media/splitActions.js +16 -0
  15. package/dist/react/media/splitActions.js.map +1 -0
  16. package/dist/react/nav/TopBar.d.ts +1 -0
  17. package/dist/react/nav/TopBar.d.ts.map +1 -1
  18. package/dist/react/nav/TopBar.js +5 -1
  19. package/dist/react/nav/TopBar.js.map +1 -1
  20. package/dist/styles-areas/workbench.css +5 -5
  21. package/dist/styles-utilities.css +9 -0
  22. package/package.json +1 -1
  23. package/src/react/charts/capacityFormat.spec.ts +12 -0
  24. package/src/react/charts/format.ts +2 -1
  25. package/src/react/components/ListToolbar.tsx +20 -3
  26. package/src/react/media/PlayerStrip.tsx +53 -4
  27. package/src/react/media/playerStrip.spec.tsx +20 -0
  28. package/src/react/media/splitActions.ts +23 -0
  29. package/src/react/nav/TopBar.spec.tsx +8 -0
  30. package/src/react/nav/TopBar.tsx +5 -0
  31. package/src/styles-areas/workbench.css +5 -5
  32. package/src/styles-utilities.css +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/react/charts/format.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,KAAG,MAOxC,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAmBpC,CAAC;AAGF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,eAAU,KAAG,MAA4C,CAAC;AAGlG,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,eAAU,KAAG,MACoB,CAAC;AAU/E,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,eAAa,KAAG,MACQ,CAAC;AAG9D,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,MAQ5C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAC8B,CAAC;AAGrE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,EAAE,qBAAmB,KAAG,MAMhE,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAOxC,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,SAAQ,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,KAAG,MAIzF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACrB,QAAQ,MAAM,EACd,SAAQ,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,EAC5C,OAAM,KAAK,GAAG,MAAM,GAAG,MAAc,KACpC,MAKF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,MAO5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,KAAG,MAGvC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAU9C,CAAC"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/react/charts/format.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAEzD,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,KAAG,MAQxC,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,GAAG,MAAM,KAAG,MAmBpC,CAAC;AAGF,eAAO,MAAM,SAAS,GAAI,MAAM,MAAM,EAAE,eAAU,KAAG,MAA4C,CAAC;AAGlG,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,eAAU,KAAG,MACoB,CAAC;AAU/E,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,EAAE,eAAa,KAAG,MACQ,CAAC;AAG9D,eAAO,MAAM,gBAAgB,GAAI,GAAG,MAAM,KAAG,MAQ5C,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,GAAG,MAAM,KAAG,MAC8B,CAAC;AAGrE,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,EAAE,qBAAmB,KAAG,MAMhE,CAAC;AAGF,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,MAOxC,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,EAAE,SAAQ,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,KAAG,MAIzF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GACrB,QAAQ,MAAM,EACd,SAAQ,CAAC,CAAC,EAAE,MAAM,KAAK,MAAqB,EAC5C,OAAM,KAAK,GAAG,MAAM,GAAG,MAAc,KACpC,MAKF,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,KAAG,MAO5D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,WAAW,GAAI,GAAG,MAAM,KAAG,MAGvC,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,KAAG,MAU9C,CAAC"}
@@ -13,7 +13,8 @@ export const formatNumber = (n) => {
13
13
  return `${(n / 1_000_000).toFixed(1)}M`;
14
14
  if (abs >= 1_000)
15
15
  return `${(n / 1_000).toFixed(1)}k`;
16
- return Math.round(n).toString();
16
+ // A fraction keeps its digits: rounded, a count axis peaking at 1 ticks 0.5 as a second "1".
17
+ return Number(n.toFixed(abs < 10 ? 2 : abs < 100 ? 1 : 0)).toString();
17
18
  };
18
19
  export const formatMs = (n) => {
19
20
  if (!Number.isFinite(n))
@@ -1 +1 @@
1
- {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/react/charts/format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"format.js","sourceRoot":"","sources":["../../../src/react/charts/format.ts"],"names":[],"mappings":"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"}
@@ -73,6 +73,11 @@ export interface ListToolbarProps {
73
73
  * keeps the controls right when everything fits on one line and lets them ride down as
74
74
  * a group when it does not.
75
75
  *
76
+ * Except with chips, from `sm:`: a strip sized to its content took the whole row and wrapped the
77
+ * controls under it (18 genres in flix, at 1440 AND 2560 — forge task 2560), breaking the one
78
+ * line this component exists for. There the row stops wrapping and the strip becomes a scroll
79
+ * lane (`flex-1`, `min-w-0` from its own root) between a fixed search box and fixed controls.
80
+ *
76
81
  * No `role='toolbar'`: that role promises arrow-key roving focus between its controls,
77
82
  * which would take the arrow keys away from the text box and the native `<select>`
78
83
  * that live on this line. Tab order is the correct affordance here.
@@ -1 +1 @@
1
- {"version":3,"file":"ListToolbar.d.ts","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,YAAY,EACZ,UAAkB,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,+BA0ClB"}
1
+ {"version":3,"file":"ListToolbar.d.ts","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAmB,KAAK,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGxE,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,sFAAsF;IACtF,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,KAAK,IAAI,CAAC;IACzD,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,kFAAkF;IAClF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,wFAAwF;IACxF,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,mDAAmD;IACnD,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,wBAAgB,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAgB,EAChB,YAAY,EACZ,UAAkB,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACV,EAAE,gBAAgB,+BAsDlB"}
@@ -36,6 +36,11 @@ import { SearchInput } from './SearchInput.js';
36
36
  * keeps the controls right when everything fits on one line and lets them ride down as
37
37
  * a group when it does not.
38
38
  *
39
+ * Except with chips, from `sm:`: a strip sized to its content took the whole row and wrapped the
40
+ * controls under it (18 genres in flix, at 1440 AND 2560 — forge task 2560), breaking the one
41
+ * line this component exists for. There the row stops wrapping and the strip becomes a scroll
42
+ * lane (`flex-1`, `min-w-0` from its own root) between a fixed search box and fixed controls.
43
+ *
39
44
  * No `role='toolbar'`: that role promises arrow-key roving focus between its controls,
40
45
  * which would take the arrow keys away from the text box and the native `<select>`
41
46
  * that live on this line. Tab order is the correct affordance here.
@@ -57,10 +62,17 @@ export function ListToolbar({ search, onSearchChange, searchPlaceholder, searchL
57
62
  const showSearch = search !== undefined && onSearchChange !== undefined;
58
63
  const showChips = chips !== undefined && chips.length > 0 && onChipChange !== undefined;
59
64
  const showRight = Boolean(sort) || Boolean(view) || Boolean(actions);
60
- return (_jsxs("div", { className: cn('flex flex-wrap items-center gap-x-3 gap-y-2', className), children: [showSearch ? (_jsx(SearchInput, { syntax: false, value: search, onChange: onSearchChange, placeholder: searchPlaceholder ?? 'Search', "aria-label": searchLabel ?? searchPlaceholder ?? 'Search',
65
+ return (_jsxs("div", { className: cn('flex flex-wrap items-center gap-x-3 gap-y-2',
66
+ // From `sm:` a row WITH chips never wraps: the chips are the one item that can give way
67
+ // (a scroll lane), so they take what the search box and the controls leave. Without
68
+ // chips nothing on the line can scroll, so it keeps wrapping rather than overflow.
69
+ showChips && 'sm:flex-nowrap', className), children: [showSearch ? (_jsx(SearchInput, { syntax: false, value: search, onChange: onSearchChange, placeholder: searchPlaceholder ?? 'Search', "aria-label": searchLabel ?? searchPlaceholder ?? 'Search',
61
70
  // Full width on a phone (the chips then wrap beneath it, still tappable);
62
71
  // a fixed, modest column from `sm:` so the chips share the line rather than
63
72
  // being pushed off it by a box that grows with the container.
64
- className: 'w-full min-w-40 sm:w-56' })) : null, showChips ? (_jsx(ChipFilterStrip, { options: [...chips], value: chipValue, onChange: onChipChange, multi: multiChips, ...(chipsAllLabel === undefined ? {} : { allLabel: chipsAllLabel }) })) : null, filters, showRight ? (_jsxs("span", { className: 'ml-auto flex flex-wrap items-center gap-2', children: [sort, view, actions] })) : null] }));
73
+ className: 'w-full min-w-40 sm:w-56 sm:shrink-0' })) : null, showChips ? (_jsx(ChipFilterStrip, { options: [...chips], value: chipValue, onChange: onChipChange, multi: multiChips, ...(chipsAllLabel === undefined ? {} : { allLabel: chipsAllLabel }),
74
+ // The scroll lane. Sized to its CONTENT, twenty chips took the whole row and pushed
75
+ // sort/view onto a second line at 1440 and 2560 (forge task 2560, flix's genres).
76
+ className: 'sm:flex-1' })) : null, filters, showRight ? (_jsxs("span", { className: cn('ml-auto flex flex-wrap items-center gap-2', showChips && 'sm:shrink-0 sm:flex-nowrap'), children: [sort, view, actions] })) : null] }));
65
77
  }
66
78
  //# sourceMappingURL=ListToolbar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ListToolbar.js","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA0C/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,YAAY,EACZ,UAAU,GAAG,KAAK,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,CAAC;IACxE,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,SAAS,CAAC;IACxF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE,OAAO,CACL,eAAK,SAAS,EAAE,EAAE,CAAC,6CAA6C,EAAE,SAAS,CAAC,aACzE,UAAU,CAAC,CAAC,CAAC,CAIZ,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,iBAAiB,IAAI,QAAQ,gBAC9B,WAAW,IAAI,iBAAiB,IAAI,QAAQ;gBACxD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,8DAA8D;gBAC9D,SAAS,EAAC,yBAAyB,GACnC,CACH,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,eAAe,IACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,EACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,UAAU,KACb,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,GACpE,CACH,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,EACP,SAAS,CAAC,CAAC,CAAC,CACX,gBAAM,SAAS,EAAC,2CAA2C,aACxD,IAAI,EACJ,IAAI,EACJ,OAAO,IACH,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"ListToolbar.js","sourceRoot":"","sources":["../../../src/react/components/ListToolbar.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAClC,OAAO,EAAE,eAAe,EAAmB,MAAM,sBAAsB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AA0C/C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAuDG;AACH,MAAM,UAAU,WAAW,CAAC,EAC1B,MAAM,EACN,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,KAAK,EACL,SAAS,GAAG,IAAI,EAChB,YAAY,EACZ,UAAU,GAAG,KAAK,EAClB,aAAa,EACb,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,OAAO,EACP,SAAS,GACQ;IACjB,MAAM,UAAU,GAAG,MAAM,KAAK,SAAS,IAAI,cAAc,KAAK,SAAS,CAAC;IACxE,MAAM,SAAS,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,YAAY,KAAK,SAAS,CAAC;IACxF,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAErE,OAAO,CACL,eACE,SAAS,EAAE,EAAE,CACX,6CAA6C;QAC7C,wFAAwF;QACxF,oFAAoF;QACpF,mFAAmF;QACnF,SAAS,IAAI,gBAAgB,EAC7B,SAAS,CACV,aAEA,UAAU,CAAC,CAAC,CAAC,CAIZ,KAAC,WAAW,IACV,MAAM,EAAE,KAAK,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,cAAc,EACxB,WAAW,EAAE,iBAAiB,IAAI,QAAQ,gBAC9B,WAAW,IAAI,iBAAiB,IAAI,QAAQ;gBACxD,0EAA0E;gBAC1E,4EAA4E;gBAC5E,8DAA8D;gBAC9D,SAAS,EAAC,qCAAqC,GAC/C,CACH,CAAC,CAAC,CAAC,IAAI,EACP,SAAS,CAAC,CAAC,CAAC,CACX,KAAC,eAAe,IACd,OAAO,EAAE,CAAC,GAAG,KAAK,CAAC,EACnB,KAAK,EAAE,SAAS,EAChB,QAAQ,EAAE,YAAY,EACtB,KAAK,EAAE,UAAU,KACb,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;gBACpE,oFAAoF;gBACpF,kFAAkF;gBAClF,SAAS,EAAC,WAAW,GACrB,CACH,CAAC,CAAC,CAAC,IAAI,EACP,OAAO,EACP,SAAS,CAAC,CAAC,CAAC,CACX,gBAAM,SAAS,EAAE,EAAE,CAAC,2CAA2C,EAAE,SAAS,IAAI,4BAA4B,CAAC,aACxG,IAAI,EACJ,IAAI,EACJ,OAAO,IACH,CACR,CAAC,CAAC,CAAC,IAAI,IACJ,CACP,CAAC;AACJ,CAAC"}
@@ -60,6 +60,14 @@ export interface PlayerStripProps {
60
60
  onMutedChange?: (muted: boolean) => void;
61
61
  /** Actions on the TRACK — they sit beside its name, because that is what they act on. */
62
62
  trackActions?: PlayerStripAction[];
63
+ /**
64
+ * How many track actions stand as buttons; the rest go behind one `⋯` menu (DAT-5). An
65
+ * action with a `popover` always stands, since a menu item cannot hold a panel. Default:
66
+ * all of them. Six 44px buttons beside the title left it four letters wide at 1440
67
+ * (music, forge task 2475) — the metadata column is a fixed share of a strip whose centre
68
+ * is pinned to the window, so every standing button is taken from the title.
69
+ */
70
+ inlineActions?: number;
63
71
  /** Actions on the PLAYER — queue, lyrics. They sit on the right, beside the volume. */
64
72
  utilityActions?: PlayerStripAction[];
65
73
  /**
@@ -106,5 +114,5 @@ export interface PlayerStripProps {
106
114
  */
107
115
  rootRef?: React.Ref<HTMLElement>;
108
116
  }
109
- export declare function PlayerStrip({ art, title, subtitle, onReveal, revealLabel, revealBusy, playing, positionMs, durationMs, onToggle, onSeek, onNext, onPrevious, shuffle, onShuffleChange, repeat, onRepeatChange, volume, muted, onVolumeChange, onMutedChange, trackActions, utilityActions, seekLine, empty, error, errorTone, formatTime, className, rootRef, }: PlayerStripProps): React.ReactNode;
117
+ export declare function PlayerStrip({ art, title, subtitle, onReveal, revealLabel, revealBusy, playing, positionMs, durationMs, onToggle, onSeek, onNext, onPrevious, shuffle, onShuffleChange, repeat, onRepeatChange, volume, muted, onVolumeChange, onMutedChange, trackActions, inlineActions, utilityActions, seekLine, empty, error, errorTone, formatTime, className, rootRef, }: PlayerStripProps): React.ReactNode;
110
118
  //# sourceMappingURL=PlayerStrip.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerStrip.d.ts","sourceRoot":"","sources":["../../../src/react/media/PlayerStrip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlayerStrip.d.ts","sourceRoot":"","sources":["../../../src/react/media/PlayerStrip.tsx"],"names":[],"mappings":"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"}
@@ -37,11 +37,12 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
37
37
  * glyph rather than a big painted button.
38
38
  */
39
39
  import { useEffect, useId, useState } from "react";
40
- import { Pause, Play, Repeat, Repeat1, Shuffle, SkipBack, SkipForward, Volume1, Volume2, VolumeX, } from "lucide-react";
40
+ import { MoreHorizontal, Pause, Play, Repeat, Repeat1, Shuffle, SkipBack, SkipForward, Volume1, Volume2, VolumeX, } from "lucide-react";
41
41
  import { IconButton } from "../components/IconButton.js";
42
42
  import { lazyPart } from "../components/DataTable/lazyPart.js";
43
43
  import { Tooltip } from "../components/Tooltip.js";
44
44
  import { cn } from "../lib/cn.js";
45
+ import { splitActions } from "./splitActions.js";
45
46
  import "./playerStrip.css";
46
47
  /**
47
48
  * How far along a slider is, as a custom property the stylesheet paints the filled half
@@ -86,17 +87,40 @@ const NEXT_REPEAT = {
86
87
  * starts. A strip with no popover action never fetches it.
87
88
  */
88
89
  const LazyPopover = lazyPart(() => import("../components/Popover.js").then((m) => m.Popover));
90
+ /** The `⋯` menu, lazy for the same reason: Radix's menu is ~27 kB gzip a player strip must not carry eagerly. */
91
+ const LazyMenu = lazyPart(() => import("../components/DropdownMenu.js").then((m) => m.DropdownMenu));
89
92
  /** The app's actions, drawn identically wherever they sit. */
90
- function ActionButtons({ actions }) {
93
+ function ActionButtons({ actions, inline }) {
91
94
  const hasPopover = actions.some((action) => action.popover);
95
+ const { standing, overflow } = splitActions(actions, inline);
96
+ const hasMenu = overflow.length > 0;
92
97
  // Fetched as soon as the strip draws one, so it is in memory long before a thumb reaches it.
93
98
  useEffect(() => {
94
99
  if (hasPopover)
95
100
  void LazyPopover.preload();
96
- }, [hasPopover]);
101
+ if (hasMenu)
102
+ void LazyMenu.preload();
103
+ }, [hasPopover, hasMenu]);
97
104
  if (actions.length === 0)
98
105
  return null;
99
- return (_jsx("div", { className: "cbps__actions", children: actions.map((action) => action.popover ? _jsx(PopoverAction, { action: action }, action.key) : _jsx(ActionButton, { action: action }, action.key)) }));
106
+ return (_jsxs("div", { className: "cbps__actions", children: [standing.map((action) => action.popover ? _jsx(PopoverAction, { action: action }, action.key) : _jsx(ActionButton, { action: action }, action.key)), _jsx(OverflowMenu, { actions: overflow })] }));
107
+ }
108
+ /** The `⋯` beside the standing actions. Controlled, like {@link PopoverAction}: a press before the chunk lands opens it. */
109
+ function OverflowMenu({ actions }) {
110
+ const [open, setOpen] = useState(false);
111
+ if (actions.length === 0)
112
+ return null;
113
+ const trigger = (onClick) => (_jsx(IconButton, { className: "cbps__icon", label: "More actions for this track", onClick: onClick, size: "lg", children: _jsx(MoreHorizontal, {}) }));
114
+ return (_jsx(LazyMenu, { align: "end", fallback: trigger(() => setOpen(true)), onOpenChange: setOpen, open: open, items: actions.map((action) => ({
115
+ key: action.key,
116
+ label: action.label,
117
+ icon: action.icon,
118
+ destructive: action.danger ?? false,
119
+ disabled: action.disabled ?? false,
120
+ ...(action.hint ? { description: action.hint } : {}),
121
+ ...(action.active !== undefined ? { checked: action.active } : {}),
122
+ ...(action.onClick ? { onClick: action.onClick } : {}),
123
+ })), side: "top", trigger: trigger() }));
100
124
  }
101
125
  function ActionButton({ action, onClick }) {
102
126
  return (_jsx(IconButton
@@ -111,7 +135,7 @@ function PopoverAction({ action }) {
111
135
  const [open, setOpen] = useState(false);
112
136
  return (_jsx(LazyPopover, { align: "center", fallback: _jsx(ActionButton, { action: action, onClick: () => setOpen(true) }), onOpenChange: setOpen, open: open, side: "top", trigger: _jsx(ActionButton, { action: action }), children: action.popover }));
113
137
  }
114
- export function PlayerStrip({ art, title, subtitle, onReveal, revealLabel = "Show this track in the list", revealBusy = false, playing, positionMs, durationMs, onToggle, onSeek, onNext, onPrevious, shuffle, onShuffleChange, repeat, onRepeatChange, volume = 1, muted = false, onVolumeChange, onMutedChange, trackActions = [], utilityActions = [], seekLine = true, empty, error = null, errorTone = "danger", formatTime = defaultFormatTime, className, rootRef, }) {
138
+ export function PlayerStrip({ art, title, subtitle, onReveal, revealLabel = "Show this track in the list", revealBusy = false, playing, positionMs, durationMs, onToggle, onSeek, onNext, onPrevious, shuffle, onShuffleChange, repeat, onRepeatChange, volume = 1, muted = false, onVolumeChange, onMutedChange, trackActions = [], inlineActions, utilityActions = [], seekLine = true, empty, error = null, errorTone = "danger", formatTime = defaultFormatTime, className, rootRef, }) {
115
139
  const scrubberId = useId();
116
140
  if (empty !== undefined && empty !== null)
117
141
  return (_jsx("footer", { ref: rootRef, className: cn("cbps cbps--empty", className), children: _jsx("div", { className: "cbps__empty", children: empty }) }));
@@ -124,6 +148,6 @@ export function PlayerStrip({ art, title, subtitle, onReveal, revealLabel = "Sho
124
148
  // list to this track and mutates nothing. cursedbelt's Button cannot carry a
125
149
  // two-line block of cover art plus title plus artist without becoming a
126
150
  // layout component, and this block being the target is the whole gesture.
127
- className: "cbps__now cbps__now--reveal", disabled: revealBusy, onClick: onReveal, type: "button", children: metadata }) })) : (_jsx("div", { className: "cbps__now", children: metadata })), _jsx(ActionButtons, { actions: trackActions })] }), _jsxs("div", { className: "cbps__centre", children: [_jsxs("div", { className: "cbps__transport", children: [onShuffleChange ? (_jsx(IconButton, { "aria-pressed": shuffle === true, className: cn("cbps__icon", shuffle ? "is-active" : ""), label: "Shuffle", onClick: () => onShuffleChange(!shuffle), size: "lg", tooltip: shuffle ? "Shuffle is on" : "Shuffle is off", children: _jsx(Shuffle, {}) })) : null, onPrevious ? (_jsx(IconButton, { className: "cbps__icon", label: "Previous track", onClick: onPrevious, size: "lg", children: _jsx(SkipBack, {}) })) : null, _jsx(IconButton, { className: "cbps__icon cbps__play", label: playing ? "Pause" : "Play", onClick: onToggle, size: "lg", children: playing ? _jsx(Pause, {}) : _jsx(Play, {}) }), onNext ? (_jsx(IconButton, { className: "cbps__icon", label: "Next track", onClick: onNext, size: "lg", children: _jsx(SkipForward, {}) })) : null, onRepeatChange && repeat ? (_jsx(IconButton, { "aria-pressed": repeat !== "off", className: cn("cbps__icon", repeat !== "off" ? "is-active" : ""), label: REPEAT_LABEL[repeat], onClick: () => onRepeatChange(NEXT_REPEAT[repeat]), size: "lg", children: repeat === "one" ? _jsx(Repeat1, {}) : _jsx(Repeat, {}) })) : null] }), _jsxs("div", { className: "cbps__timeline", children: [_jsx("span", { className: "cbps__time", id: `${scrubberId}-at`, children: formatTime(positionMs) }), _jsx("input", { "aria-label": "Seek \u2014 drag to move through the track", "aria-valuetext": `${formatTime(positionMs)} of ${formatTime(durationMs)}`, className: "cbps__scrubber", max: Math.max(durationMs, 1), min: 0, onChange: (event) => onSeek(Number(event.target.value)), step: 1000, style: progressStyle(progress), type: "range", value: Math.min(positionMs, Math.max(durationMs, 1)) }), _jsx("span", { className: "cbps__time cbps__time--total", children: formatTime(durationMs) })] })] }), _jsxs("div", { className: "cbps__aside", children: [_jsx(ActionButtons, { actions: utilityActions }), onVolumeChange || onMutedChange ? (_jsxs("div", { className: "cbps__volume", children: [_jsx(IconButton, { className: cn("cbps__icon", muted ? "is-active" : ""), disabled: !onMutedChange, label: muted ? "Unmute" : "Mute", onClick: () => onMutedChange?.(!muted), size: "lg", children: _jsx(VolumeIcon, {}) }), _jsx("input", { "aria-label": "Volume", className: "cbps__scrubber cbps__scrubber--volume", max: 1, min: 0, onChange: (event) => onVolumeChange?.(Number(event.target.value)), step: 0.01, style: progressStyle(effectiveVolume), type: "range", value: effectiveVolume })] })) : null] }), error ? (_jsx("p", { className: `cbps__error${errorTone === "notice" ? " cbps__error--notice" : ""}`, role: "status", children: error })) : null] }));
151
+ className: "cbps__now cbps__now--reveal", disabled: revealBusy, onClick: onReveal, type: "button", children: metadata }) })) : (_jsx("div", { className: "cbps__now", children: metadata })), _jsx(ActionButtons, { actions: trackActions, inline: inlineActions })] }), _jsxs("div", { className: "cbps__centre", children: [_jsxs("div", { className: "cbps__transport", children: [onShuffleChange ? (_jsx(IconButton, { "aria-pressed": shuffle === true, className: cn("cbps__icon", shuffle ? "is-active" : ""), label: "Shuffle", onClick: () => onShuffleChange(!shuffle), size: "lg", tooltip: shuffle ? "Shuffle is on" : "Shuffle is off", children: _jsx(Shuffle, {}) })) : null, onPrevious ? (_jsx(IconButton, { className: "cbps__icon", label: "Previous track", onClick: onPrevious, size: "lg", children: _jsx(SkipBack, {}) })) : null, _jsx(IconButton, { className: "cbps__icon cbps__play", label: playing ? "Pause" : "Play", onClick: onToggle, size: "lg", children: playing ? _jsx(Pause, {}) : _jsx(Play, {}) }), onNext ? (_jsx(IconButton, { className: "cbps__icon", label: "Next track", onClick: onNext, size: "lg", children: _jsx(SkipForward, {}) })) : null, onRepeatChange && repeat ? (_jsx(IconButton, { "aria-pressed": repeat !== "off", className: cn("cbps__icon", repeat !== "off" ? "is-active" : ""), label: REPEAT_LABEL[repeat], onClick: () => onRepeatChange(NEXT_REPEAT[repeat]), size: "lg", children: repeat === "one" ? _jsx(Repeat1, {}) : _jsx(Repeat, {}) })) : null] }), _jsxs("div", { className: "cbps__timeline", children: [_jsx("span", { className: "cbps__time", id: `${scrubberId}-at`, children: formatTime(positionMs) }), _jsx("input", { "aria-label": "Seek \u2014 drag to move through the track", "aria-valuetext": `${formatTime(positionMs)} of ${formatTime(durationMs)}`, className: "cbps__scrubber", max: Math.max(durationMs, 1), min: 0, onChange: (event) => onSeek(Number(event.target.value)), step: 1000, style: progressStyle(progress), type: "range", value: Math.min(positionMs, Math.max(durationMs, 1)) }), _jsx("span", { className: "cbps__time cbps__time--total", children: formatTime(durationMs) })] })] }), _jsxs("div", { className: "cbps__aside", children: [_jsx(ActionButtons, { actions: utilityActions }), onVolumeChange || onMutedChange ? (_jsxs("div", { className: "cbps__volume", children: [_jsx(IconButton, { className: cn("cbps__icon", muted ? "is-active" : ""), disabled: !onMutedChange, label: muted ? "Unmute" : "Mute", onClick: () => onMutedChange?.(!muted), size: "lg", children: _jsx(VolumeIcon, {}) }), _jsx("input", { "aria-label": "Volume", className: "cbps__scrubber cbps__scrubber--volume", max: 1, min: 0, onChange: (event) => onVolumeChange?.(Number(event.target.value)), step: 0.01, style: progressStyle(effectiveVolume), type: "range", value: effectiveVolume })] })) : null] }), error ? (_jsx("p", { className: `cbps__error${errorTone === "notice" ? " cbps__error--notice" : ""}`, role: "status", children: error })) : null] }));
128
152
  }
129
153
  //# sourceMappingURL=PlayerStrip.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"PlayerStrip.js","sourceRoot":"","sources":["../../../src/react/media/PlayerStrip.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"PlayerStrip.js","sourceRoot":"","sources":["../../../src/react/media/PlayerStrip.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The player strip's `inlineActions` split (forge task 2475), in its own module so it is not
3
+ * public surface: `media/index.ts` does not re-export it, and the spec imports it from here.
4
+ */
5
+ import type { PlayerStripAction } from "./PlayerStrip.js";
6
+ /**
7
+ * Which actions stand as buttons and which go behind `⋯`. The first `inline` stand, and so does
8
+ * every action with a popover wherever it is (a menu item cannot hold a panel); the rest overflow,
9
+ * in their order. One left over is not worth a menu — it stands too.
10
+ */
11
+ export declare function splitActions(actions: readonly PlayerStripAction[], inline: number | undefined): {
12
+ standing: PlayerStripAction[];
13
+ overflow: PlayerStripAction[];
14
+ };
15
+ //# sourceMappingURL=splitActions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitActions.d.ts","sourceRoot":"","sources":["../../../src/react/media/splitActions.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAE1D;;;;GAIG;AACH,wBAAgB,YAAY,CAC3B,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,MAAM,EAAE,MAAM,GAAG,SAAS,GACxB;IAAE,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAA;CAAE,CAQlE"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Which actions stand as buttons and which go behind `⋯`. The first `inline` stand, and so does
3
+ * every action with a popover wherever it is (a menu item cannot hold a panel); the rest overflow,
4
+ * in their order. One left over is not worth a menu — it stands too.
5
+ */
6
+ export function splitActions(actions, inline) {
7
+ if (inline === undefined || actions.length <= inline + 1)
8
+ return { standing: [...actions], overflow: [] };
9
+ const standing = [];
10
+ const overflow = [];
11
+ actions.forEach((action, index) => {
12
+ (index < inline || action.popover ? standing : overflow).push(action);
13
+ });
14
+ return overflow.length > 1 ? { standing, overflow } : { standing: [...actions], overflow: [] };
15
+ }
16
+ //# sourceMappingURL=splitActions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"splitActions.js","sourceRoot":"","sources":["../../../src/react/media/splitActions.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,UAAU,YAAY,CAC3B,OAAqC,EACrC,MAA0B;IAE1B,IAAI,MAAM,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAC1G,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAwB,EAAE,CAAC;IACzC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACjC,CAAC,KAAK,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAChG,CAAC"}
@@ -44,6 +44,7 @@ export interface TopBarProps {
44
44
  * One control BEFORE the brand — a phone's way into the app's sidebar drawer (the owner's
45
45
  * music report, 2026-09-28: *"there is a large horizontal scrolling header row and no sidebar
46
46
  * popout"*). Top-left is where Gmail, Linear and Slack put it on a phone. Never shrinks.
47
+ * Below md the brand yields to it, as Gmail's does: the places keep the room.
47
48
  */
48
49
  leading?: ReactNode;
49
50
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TopBar.d.ts","sourceRoot":"","sources":["../../../src/react/nav/TopBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ1E,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,+FAA+F;AAC/F,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CACjD,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,IAAI,EAAE,SAAS,CAAC;IAChB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,+FAA+F;IAC/F,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;IACrF,mGAAmG;IACnG,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;OAIG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,+FAA+F;IAC/F,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,OAAO,EACP,QAAgB,EAChB,WAAqB,EACrB,aAAa,EACb,QAAmB,EACnB,SAAS,GACV,EAAE,WAAW,+BAqEb;AAKD,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;CAAG;AAEnG;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAgB,EAChB,WAAqB,EACrB,aAAa,EACb,QAAmB,GACpB,EAAE,iBAAiB,+BAsCnB"}
1
+ {"version":3,"file":"TopBar.d.ts","sourceRoot":"","sources":["../../../src/react/nav/TopBar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQ1E,OAAO,EAAkB,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnE,+FAA+F;AAC/F,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,UAAU,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,CACjD,CAAC;AAEF,MAAM,WAAW,UAAU;IACzB,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,gGAAgG;IAChG,KAAK,EAAE,MAAM,CAAC;IACd,sGAAsG;IACtG,IAAI,EAAE,SAAS,CAAC;IAChB,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,oEAAoE;IACpE,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,WAAW;IAC1B,+FAA+F;IAC/F,KAAK,EAAE;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,eAAe,CAAA;KAAE,CAAC;IACrF,mGAAmG;IACnG,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IAC7B,4FAA4F;IAC5F,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB;;;;;OAKG;IACH,OAAO,CAAC,EAAE,SAAS,CAAC;IACpB;;;OAGG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAC/B,+FAA+F;IAC/F,aAAa,CAAC,EAAE,WAAW,CAAC;IAC5B,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,MAAM,CAAC,EACrB,KAAK,EACL,KAAK,EACL,QAAQ,EACR,OAAO,EACP,MAAM,EACN,OAAO,EACP,QAAgB,EAChB,WAAqB,EACrB,aAAa,EACb,QAAmB,EACnB,SAAS,GACV,EAAE,WAAW,+BAyEb;AAKD,MAAM,WAAW,iBACf,SAAQ,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,GAAG,UAAU,CAAC;CAAG;AAEnG;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAC3B,KAAK,EACL,QAAgB,EAChB,WAAqB,EACrB,aAAa,EACb,QAAmB,GACpB,EAAE,iBAAiB,+BAsCnB"}
@@ -38,7 +38,11 @@ export function TopBar({ brand, items, trailing, leading, center, density, iconO
38
38
  ? 'h-[var(--header-h-dense)]'
39
39
  : density === 'roomy'
40
40
  ? 'h-[var(--header-h-roomy)]'
41
- : 'h-[var(--header-h)]', className), children: [_jsxs("div", { "data-cb-topbar-zone": 'left', className: 'flex shrink-0 items-center gap-2', children: [leading ? _jsx("div", { className: 'flex shrink-0 items-center', children: leading }) : null, _jsxs("a", { ...brand.linkProps, href: brand.href, "aria-label": brand.label, "data-cb-topbar-brand": '', className: cn('flex shrink-0 items-center gap-2 rounded-md px-1.5 py-1 font-semibold text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', TAP_TARGET_SQUARE, 'md:pointer-coarse:w-auto'), children: [_jsx("span", { "aria-hidden": 'true', className: 'grid size-6 place-items-center [&_svg]:size-5', children: brand.icon }), _jsx("span", { "aria-hidden": 'true', className: 'hidden md:inline', children: brand.label })] })] }), _jsxs("div", { "data-cb-topbar-zone": 'center', className: 'flex h-full min-w-0 flex-1 items-center justify-center gap-3', children: [hasPlaces ? (_jsx(TopBarPlaces, { items: items, iconOnly: iconOnly, phonePlaces: phonePlaces, linkComponent: linkComponent, navLabel: navLabel })) : null, center ? _jsx("div", { className: 'flex min-w-0 flex-1 items-center justify-center', children: center }) : null] }), trailing ? (_jsx("div", { "data-cb-topbar-zone": 'right', className: 'flex shrink-0 items-center gap-1', children: trailing })) : null] }));
41
+ : 'h-[var(--header-h)]', className), children: [_jsxs("div", { "data-cb-topbar-zone": 'left', className: 'flex shrink-0 items-center gap-2', children: [leading ? _jsx("div", { className: 'flex shrink-0 items-center', children: leading }) : null, _jsxs("a", { ...brand.linkProps, href: brand.href, "aria-label": brand.label, "data-cb-topbar-brand": '', className: cn('flex shrink-0 items-center gap-2 rounded-md px-1.5 py-1 font-semibold text-foreground', 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring', TAP_TARGET_SQUARE, 'md:pointer-coarse:w-auto',
42
+ // Below md a `leading` drawer button holds the top-left, and the brand — a home link
43
+ // that repeats the first place — yields its 52px to the places. At 390 music's five
44
+ // icons overflowed by 34px behind both (forge task 2475, NAV-14).
45
+ leading ? 'max-md:hidden' : ''), children: [_jsx("span", { "aria-hidden": 'true', className: 'grid size-6 place-items-center [&_svg]:size-5', children: brand.icon }), _jsx("span", { "aria-hidden": 'true', className: 'hidden md:inline', children: brand.label })] })] }), _jsxs("div", { "data-cb-topbar-zone": 'center', className: 'flex h-full min-w-0 flex-1 items-center justify-center gap-3', children: [hasPlaces ? (_jsx(TopBarPlaces, { items: items, iconOnly: iconOnly, phonePlaces: phonePlaces, linkComponent: linkComponent, navLabel: navLabel })) : null, center ? _jsx("div", { className: 'flex min-w-0 flex-1 items-center justify-center', children: center }) : null] }), trailing ? (_jsx("div", { "data-cb-topbar-zone": 'right', className: 'flex shrink-0 items-center gap-1', children: trailing })) : null] }));
42
46
  }
43
47
  /** NAV-2's line: from here up a router's places show their words. */
44
48
  const WIDE_QUERY = '(min-width: 768px)';
@@ -1 +1 @@
1
- {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../../src/react/nav/TopBar.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"TopBar.js","sourceRoot":"","sources":["../../../src/react/nav/TopBar.tsx"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 103 candidate(s).
21
+ * 106 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -40,7 +40,7 @@
40
40
  @source inline("pointer-coarse:h-12 pointer-coarse:w-12 pr-16 pr-9 resize-none right-4 ring-1 ring-4");
41
41
  @source inline("ring-accent/20 ring-accent/30 ring-accent/40 ring-border ring-inset ring-ring rotate-90");
42
42
  @source inline("rounded-[var(--radius-device)] rounded-l-xl rounded-r-xl rounded-t-xl scale-[1.01] self-center");
43
- @source inline("self-stretch shrink-[2] sm:w-56 text-muted-foreground/60 text-tone-amber-ink text-tone-cyan-ink");
44
- @source inline("text-tone-emerald-ink text-tone-orange-ink text-tone-purple-ink text-tone-rose-ink");
45
- @source inline("text-tone-sky-ink text-tone-slate-ink text-xl transition-[opacity,transform] translate-y-0");
46
- @source inline("translate-y-2 w-3.5 w-88");
43
+ @source inline("self-stretch shrink-[2] sm:flex-1 sm:flex-nowrap sm:shrink-0 sm:w-56 text-muted-foreground/60");
44
+ @source inline("text-tone-amber-ink text-tone-cyan-ink text-tone-emerald-ink text-tone-orange-ink");
45
+ @source inline("text-tone-purple-ink text-tone-rose-ink text-tone-sky-ink text-tone-slate-ink text-xl");
46
+ @source inline("transition-[opacity,transform] translate-y-0 translate-y-2 w-3.5 w-88");
@@ -4311,6 +4311,12 @@
4311
4311
  .sm\:max-w-\[var\(--modal-w-sm\)\] {
4312
4312
  max-width: var(--modal-w-sm);
4313
4313
  }
4314
+ .sm\:flex-1 {
4315
+ flex: 1;
4316
+ }
4317
+ .sm\:shrink-0 {
4318
+ flex-shrink: 0;
4319
+ }
4314
4320
  .sm\:-translate-x-1\/2 {
4315
4321
  --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
4316
4322
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -4334,6 +4340,9 @@
4334
4340
  .sm\:flex-row {
4335
4341
  flex-direction: row;
4336
4342
  }
4343
+ .sm\:flex-nowrap {
4344
+ flex-wrap: nowrap;
4345
+ }
4337
4346
  .sm\:items-center {
4338
4347
  align-items: center;
4339
4348
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cursedbelt",
3
- "version": "5.45.1",
3
+ "version": "5.46.2",
4
4
  "license": "ISC",
5
5
  "type": "module",
6
6
  "description": "The React design system of the cursedbelt split — components, styles, theme. cursedbelt-core below it; server tier in cursedbelt-server.",
@@ -1,6 +1,18 @@
1
1
  import { describe, expect, test } from 'bun:test';
2
2
  import { formatBytes, formatCount, formatDays, formatDelta, formatNumber, formatRate } from './format.js';
3
3
 
4
+ describe('formatNumber', () => {
5
+ test('never rounds two axis ticks to one label', () => {
6
+ // A phone chart of small counts (max 1) ticks 0, 0.25, 0.5, 0.75, 1 — rounded, three read "1".
7
+ const ticks = [0, 0.25, 0.5, 0.75, 1].map(formatNumber);
8
+ expect(new Set(ticks).size).toBe(ticks.length);
9
+ expect(formatNumber(0.5)).toBe('0.5');
10
+ expect(formatNumber(12.5)).toBe('12.5');
11
+ expect(formatNumber(7)).toBe('7');
12
+ expect(formatNumber(1_500)).toBe('1.5k');
13
+ });
14
+ });
15
+
4
16
  describe('formatDelta', () => {
5
17
  test('signs the magnitude with the caller’s formatter', () => {
6
18
  expect(formatDelta(1_048_576, formatBytes)).toStartWith('+');
@@ -11,7 +11,8 @@ export const formatNumber = (n: number): string => {
11
11
  if (abs >= 1_000_000_000) return `${(n / 1_000_000_000).toFixed(1)}B`;
12
12
  if (abs >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}M`;
13
13
  if (abs >= 1_000) return `${(n / 1_000).toFixed(1)}k`;
14
- return Math.round(n).toString();
14
+ // A fraction keeps its digits: rounded, a count axis peaking at 1 ticks 0.5 as a second "1".
15
+ return Number(n.toFixed(abs < 10 ? 2 : abs < 100 ? 1 : 0)).toString();
15
16
  };
16
17
 
17
18
  export const formatMs = (n: number): string => {
@@ -77,6 +77,11 @@ export interface ListToolbarProps {
77
77
  * keeps the controls right when everything fits on one line and lets them ride down as
78
78
  * a group when it does not.
79
79
  *
80
+ * Except with chips, from `sm:`: a strip sized to its content took the whole row and wrapped the
81
+ * controls under it (18 genres in flix, at 1440 AND 2560 — forge task 2560), breaking the one
82
+ * line this component exists for. There the row stops wrapping and the strip becomes a scroll
83
+ * lane (`flex-1`, `min-w-0` from its own root) between a fixed search box and fixed controls.
84
+ *
80
85
  * No `role='toolbar'`: that role promises arrow-key roving focus between its controls,
81
86
  * which would take the arrow keys away from the text box and the native `<select>`
82
87
  * that live on this line. Tab order is the correct affordance here.
@@ -115,7 +120,16 @@ export function ListToolbar({
115
120
  const showRight = Boolean(sort) || Boolean(view) || Boolean(actions);
116
121
 
117
122
  return (
118
- <div className={cn('flex flex-wrap items-center gap-x-3 gap-y-2', className)}>
123
+ <div
124
+ className={cn(
125
+ 'flex flex-wrap items-center gap-x-3 gap-y-2',
126
+ // From `sm:` a row WITH chips never wraps: the chips are the one item that can give way
127
+ // (a scroll lane), so they take what the search box and the controls leave. Without
128
+ // chips nothing on the line can scroll, so it keeps wrapping rather than overflow.
129
+ showChips && 'sm:flex-nowrap',
130
+ className,
131
+ )}
132
+ >
119
133
  {showSearch ? (
120
134
  // The one search box (magnifier + themed Input). A bare Input drew an empty, unmarked
121
135
  // rectangle whenever a caller passed no placeholder (forge task 2514). `syntax={false}`:
@@ -129,7 +143,7 @@ export function ListToolbar({
129
143
  // Full width on a phone (the chips then wrap beneath it, still tappable);
130
144
  // a fixed, modest column from `sm:` so the chips share the line rather than
131
145
  // being pushed off it by a box that grows with the container.
132
- className='w-full min-w-40 sm:w-56'
146
+ className='w-full min-w-40 sm:w-56 sm:shrink-0'
133
147
  />
134
148
  ) : null}
135
149
  {showChips ? (
@@ -139,11 +153,14 @@ export function ListToolbar({
139
153
  onChange={onChipChange}
140
154
  multi={multiChips}
141
155
  {...(chipsAllLabel === undefined ? {} : { allLabel: chipsAllLabel })}
156
+ // The scroll lane. Sized to its CONTENT, twenty chips took the whole row and pushed
157
+ // sort/view onto a second line at 1440 and 2560 (forge task 2560, flix's genres).
158
+ className='sm:flex-1'
142
159
  />
143
160
  ) : null}
144
161
  {filters}
145
162
  {showRight ? (
146
- <span className='ml-auto flex flex-wrap items-center gap-2'>
163
+ <span className={cn('ml-auto flex flex-wrap items-center gap-2', showChips && 'sm:shrink-0 sm:flex-nowrap')}>
147
164
  {sort}
148
165
  {view}
149
166
  {actions}
@@ -37,6 +37,7 @@
37
37
  */
38
38
  import { useEffect, useId, useState } from "react";
39
39
  import {
40
+ MoreHorizontal,
40
41
  Pause,
41
42
  Play,
42
43
  Repeat,
@@ -48,11 +49,13 @@ import {
48
49
  Volume2,
49
50
  VolumeX,
50
51
  } from "lucide-react";
52
+ import type { DropdownMenuProps } from "../components/DropdownMenu.js";
51
53
  import { IconButton } from "../components/IconButton.js";
52
54
  import { lazyPart } from "../components/DataTable/lazyPart.js";
53
55
  import type { PopoverProps } from "../components/Popover.js";
54
56
  import { Tooltip } from "../components/Tooltip.js";
55
57
  import { cn } from "../lib/cn.js";
58
+ import { splitActions } from "./splitActions.js";
56
59
  import "./playerStrip.css";
57
60
 
58
61
  export type PlayerStripRepeat = "off" | "one" | "all";
@@ -122,6 +125,14 @@ export interface PlayerStripProps {
122
125
 
123
126
  /** Actions on the TRACK — they sit beside its name, because that is what they act on. */
124
127
  trackActions?: PlayerStripAction[];
128
+ /**
129
+ * How many track actions stand as buttons; the rest go behind one `⋯` menu (DAT-5). An
130
+ * action with a `popover` always stands, since a menu item cannot hold a panel. Default:
131
+ * all of them. Six 44px buttons beside the title left it four letters wide at 1440
132
+ * (music, forge task 2475) — the metadata column is a fixed share of a strip whose centre
133
+ * is pinned to the window, so every standing button is taken from the title.
134
+ */
135
+ inlineActions?: number;
125
136
  /** Actions on the PLAYER — queue, lyrics. They sit on the right, beside the volume. */
126
137
  utilityActions?: PlayerStripAction[];
127
138
 
@@ -216,24 +227,61 @@ const NEXT_REPEAT: Record<PlayerStripRepeat, PlayerStripRepeat> = {
216
227
  * starts. A strip with no popover action never fetches it.
217
228
  */
218
229
  const LazyPopover = lazyPart<PopoverProps>(() => import("../components/Popover.js").then((m) => m.Popover));
230
+ /** The `⋯` menu, lazy for the same reason: Radix's menu is ~27 kB gzip a player strip must not carry eagerly. */
231
+ const LazyMenu = lazyPart<DropdownMenuProps>(() => import("../components/DropdownMenu.js").then((m) => m.DropdownMenu));
219
232
 
220
233
  /** The app's actions, drawn identically wherever they sit. */
221
- function ActionButtons({ actions }: { actions: PlayerStripAction[] }): React.ReactNode {
234
+ function ActionButtons({ actions, inline }: { actions: PlayerStripAction[]; inline?: number | undefined }): React.ReactNode {
222
235
  const hasPopover = actions.some((action) => action.popover);
236
+ const { standing, overflow } = splitActions(actions, inline);
237
+ const hasMenu = overflow.length > 0;
223
238
  // Fetched as soon as the strip draws one, so it is in memory long before a thumb reaches it.
224
239
  useEffect(() => {
225
240
  if (hasPopover) void LazyPopover.preload();
226
- }, [hasPopover]);
241
+ if (hasMenu) void LazyMenu.preload();
242
+ }, [hasPopover, hasMenu]);
227
243
  if (actions.length === 0) return null;
228
244
  return (
229
245
  <div className="cbps__actions">
230
- {actions.map((action) =>
246
+ {standing.map((action) =>
231
247
  action.popover ? <PopoverAction action={action} key={action.key} /> : <ActionButton action={action} key={action.key} />,
232
248
  )}
249
+ <OverflowMenu actions={overflow} />
233
250
  </div>
234
251
  );
235
252
  }
236
253
 
254
+ /** The `⋯` beside the standing actions. Controlled, like {@link PopoverAction}: a press before the chunk lands opens it. */
255
+ function OverflowMenu({ actions }: { actions: PlayerStripAction[] }): React.ReactNode {
256
+ const [open, setOpen] = useState(false);
257
+ if (actions.length === 0) return null;
258
+ const trigger = (onClick?: () => void) => (
259
+ <IconButton className="cbps__icon" label="More actions for this track" onClick={onClick} size="lg">
260
+ <MoreHorizontal />
261
+ </IconButton>
262
+ );
263
+ return (
264
+ <LazyMenu
265
+ align="end"
266
+ fallback={trigger(() => setOpen(true))}
267
+ onOpenChange={setOpen}
268
+ open={open}
269
+ items={actions.map((action) => ({
270
+ key: action.key,
271
+ label: action.label,
272
+ icon: action.icon,
273
+ destructive: action.danger ?? false,
274
+ disabled: action.disabled ?? false,
275
+ ...(action.hint ? { description: action.hint } : {}),
276
+ ...(action.active !== undefined ? { checked: action.active } : {}),
277
+ ...(action.onClick ? { onClick: action.onClick } : {}),
278
+ }))}
279
+ side="top"
280
+ trigger={trigger()}
281
+ />
282
+ );
283
+ }
284
+
237
285
  function ActionButton({ action, onClick }: { action: PlayerStripAction; onClick?: () => void }): React.ReactNode {
238
286
  return (
239
287
  <IconButton
@@ -294,6 +342,7 @@ export function PlayerStrip({
294
342
  onVolumeChange,
295
343
  onMutedChange,
296
344
  trackActions = [],
345
+ inlineActions,
297
346
  utilityActions = [],
298
347
  seekLine = true,
299
348
  empty,
@@ -389,7 +438,7 @@ export function PlayerStrip({
389
438
  ) : (
390
439
  <div className="cbps__now">{metadata}</div>
391
440
  )}
392
- <ActionButtons actions={trackActions} />
441
+ <ActionButtons actions={trackActions} inline={inlineActions} />
393
442
  </div>
394
443
 
395
444
  {/* ── Centre: the controls, over the timeline ────────────────────────────────── */}
@@ -12,6 +12,7 @@ import { readFileSync } from "node:fs";
12
12
  import { join } from "node:path";
13
13
  import { cleanup, fireEvent, render, screen } from "@testing-library/react";
14
14
  import { PlayerStrip } from "./PlayerStrip.js";
15
+ import { splitActions } from "./splitActions.js";
15
16
 
16
17
  afterEach(cleanup);
17
18
 
@@ -164,6 +165,25 @@ describe("PlayerStrip — the app's own actions", () => {
164
165
  expect(container.querySelector(".cbps__now--reveal")).not.toBeNull();
165
166
  });
166
167
 
168
+ test("`inlineActions` stands the first N and puts the rest behind one ⋯ (forge task 2475)", () => {
169
+ const six = ["share", "keep", "rate", "fav", "tag", "del"].map((key) => action({ key, label: key }));
170
+ render(<PlayerStrip {...base} inlineActions={2} trackActions={six} />);
171
+ expect(screen.getByRole("button", { name: "share" })).toBeDefined();
172
+ expect(screen.getByRole("button", { name: "keep" })).toBeDefined();
173
+ expect(screen.queryByRole("button", { name: "del" })).toBeNull();
174
+ expect(screen.getByRole("button", { name: "More actions for this track" })).toBeDefined();
175
+ });
176
+
177
+ test("splitActions — a popover action always stands; one left over is not worth a menu", () => {
178
+ const a = (key: string, popover?: boolean) => ({ key, label: key, icon: null, ...(popover ? { popover: "p" } : {}) });
179
+ const keys = (list: { key: string }[]) => list.map((x) => x.key);
180
+ const split = splitActions([a("1"), a("2"), a("3", true), a("4"), a("5")], 1);
181
+ expect(keys(split.standing)).toEqual(["1", "3"]);
182
+ expect(keys(split.overflow)).toEqual(["2", "4", "5"]);
183
+ expect(keys(splitActions([a("1"), a("2"), a("3")], 2).standing)).toEqual(["1", "2", "3"]);
184
+ expect(keys(splitActions([a("1"), a("2"), a("3")], undefined).overflow)).toEqual([]);
185
+ });
186
+
167
187
  test("nothing loaded renders the empty message and no transport", () => {
168
188
  render(<PlayerStrip {...base} empty={<span>Nothing playing.</span>} />);
169
189
  expect(screen.getByText("Nothing playing.")).toBeDefined();
@@ -0,0 +1,23 @@
1
+ /**
2
+ * The player strip's `inlineActions` split (forge task 2475), in its own module so it is not
3
+ * public surface: `media/index.ts` does not re-export it, and the spec imports it from here.
4
+ */
5
+ import type { PlayerStripAction } from "./PlayerStrip.js";
6
+
7
+ /**
8
+ * Which actions stand as buttons and which go behind `⋯`. The first `inline` stand, and so does
9
+ * every action with a popover wherever it is (a menu item cannot hold a panel); the rest overflow,
10
+ * in their order. One left over is not worth a menu — it stands too.
11
+ */
12
+ export function splitActions(
13
+ actions: readonly PlayerStripAction[],
14
+ inline: number | undefined,
15
+ ): { standing: PlayerStripAction[]; overflow: PlayerStripAction[] } {
16
+ if (inline === undefined || actions.length <= inline + 1) return { standing: [...actions], overflow: [] };
17
+ const standing: PlayerStripAction[] = [];
18
+ const overflow: PlayerStripAction[] = [];
19
+ actions.forEach((action, index) => {
20
+ (index < inline || action.popover ? standing : overflow).push(action);
21
+ });
22
+ return overflow.length > 1 ? { standing, overflow } : { standing: [...actions], overflow: [] };
23
+ }
@@ -126,6 +126,14 @@ describe('TopBar — destinations have words (NAV-2, owner review 2026-10-01)',
126
126
  expect(first.nextElementSibling?.hasAttribute('data-cb-topbar-brand')).toBe(true);
127
127
  });
128
128
 
129
+ test('below md the brand yields to a leading control — the places keep its room (NAV-14)', () => {
130
+ const { container, rerender } = render(<TopBar brand={brand} items={items} leading={<span>☰</span>} />);
131
+ const brandLink = () => container.querySelector('[data-cb-topbar-brand]') as HTMLElement;
132
+ expect(brandLink().className).toContain('max-md:hidden');
133
+ rerender(<TopBar brand={brand} items={items} />);
134
+ expect(brandLink().className).not.toContain('max-md:hidden');
135
+ });
136
+
129
137
  test('the brand is a link named by its label; its word is painted only from md up', () => {
130
138
  const { getByRole } = render(<TopBar brand={brand} items={items} />);
131
139
  const link = getByRole('link', { name: 'Music' });
@@ -52,6 +52,7 @@ export interface TopBarProps {
52
52
  * One control BEFORE the brand — a phone's way into the app's sidebar drawer (the owner's
53
53
  * music report, 2026-09-28: *"there is a large horizontal scrolling header row and no sidebar
54
54
  * popout"*). Top-left is where Gmail, Linear and Slack put it on a phone. Never shrinks.
55
+ * Below md the brand yields to it, as Gmail's does: the places keep the room.
55
56
  */
56
57
  leading?: ReactNode;
57
58
  /**
@@ -152,6 +153,10 @@ export function TopBar({
152
153
  'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',
153
154
  TAP_TARGET_SQUARE,
154
155
  'md:pointer-coarse:w-auto',
156
+ // Below md a `leading` drawer button holds the top-left, and the brand — a home link
157
+ // that repeats the first place — yields its 52px to the places. At 390 music's five
158
+ // icons overflowed by 34px behind both (forge task 2475, NAV-14).
159
+ leading ? 'max-md:hidden' : '',
155
160
  )}
156
161
  >
157
162
  <span aria-hidden='true' className='grid size-6 place-items-center [&_svg]:size-5'>
@@ -18,7 +18,7 @@
18
18
  * after an app's responsive variant (task 2124). An app that imports every area gets exactly
19
19
  * what `cursedbelt/styles-utilities.css` emits — proved rule by rule in
20
20
  * src/stylesAreas.spec.ts, which is also what fails when this file is stale.
21
- * 103 candidate(s).
21
+ * 106 candidate(s).
22
22
  *
23
23
  * Written by scripts/generateAreaStyles.ts (`bun run styles:areas`), which
24
24
  * `bun run build` runs. The map of what is in which area, and why the areas are
@@ -40,7 +40,7 @@
40
40
  @source inline("pointer-coarse:h-12 pointer-coarse:w-12 pr-16 pr-9 resize-none right-4 ring-1 ring-4");
41
41
  @source inline("ring-accent/20 ring-accent/30 ring-accent/40 ring-border ring-inset ring-ring rotate-90");
42
42
  @source inline("rounded-[var(--radius-device)] rounded-l-xl rounded-r-xl rounded-t-xl scale-[1.01] self-center");
43
- @source inline("self-stretch shrink-[2] sm:w-56 text-muted-foreground/60 text-tone-amber-ink text-tone-cyan-ink");
44
- @source inline("text-tone-emerald-ink text-tone-orange-ink text-tone-purple-ink text-tone-rose-ink");
45
- @source inline("text-tone-sky-ink text-tone-slate-ink text-xl transition-[opacity,transform] translate-y-0");
46
- @source inline("translate-y-2 w-3.5 w-88");
43
+ @source inline("self-stretch shrink-[2] sm:flex-1 sm:flex-nowrap sm:shrink-0 sm:w-56 text-muted-foreground/60");
44
+ @source inline("text-tone-amber-ink text-tone-cyan-ink text-tone-emerald-ink text-tone-orange-ink");
45
+ @source inline("text-tone-purple-ink text-tone-rose-ink text-tone-sky-ink text-tone-slate-ink text-xl");
46
+ @source inline("transition-[opacity,transform] translate-y-0 translate-y-2 w-3.5 w-88");
@@ -4311,6 +4311,12 @@
4311
4311
  .sm\:max-w-\[var\(--modal-w-sm\)\] {
4312
4312
  max-width: var(--modal-w-sm);
4313
4313
  }
4314
+ .sm\:flex-1 {
4315
+ flex: 1;
4316
+ }
4317
+ .sm\:shrink-0 {
4318
+ flex-shrink: 0;
4319
+ }
4314
4320
  .sm\:-translate-x-1\/2 {
4315
4321
  --tw-translate-x: calc(calc(1 / 2 * 100%) * -1);
4316
4322
  translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -4334,6 +4340,9 @@
4334
4340
  .sm\:flex-row {
4335
4341
  flex-direction: row;
4336
4342
  }
4343
+ .sm\:flex-nowrap {
4344
+ flex-wrap: nowrap;
4345
+ }
4337
4346
  .sm\:items-center {
4338
4347
  align-items: center;
4339
4348
  }