@joewinke/jatui 0.62.0 → 0.63.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.
@@ -25,12 +25,18 @@
25
25
  * - A playing (or paused) scape shows a now-playing block above the
26
26
  * volume row (jatui-153tz): for a playlist — the track title, its
27
27
  * composer · license attribution, an elapsed/total progress bar and a
28
- * prev / play-pause / next transport (prev restarts the track when more
29
- * than 3 s are in, else goes back one; play-pause freezes the station
30
- * without closing the menu; next skips). Generative scapes (noise /
31
- * focus) get the play/pause control only. The transport joins the
32
- * menu's roving order; a paused row stays visible (its play button is
33
- * the resume) and a stopped one hides.
28
+ * shuffle / prev / play-pause / next transport (shuffle is an
29
+ * aria-pressed IconButton, persisted per station and fresh-shuffled
30
+ * per session with no-repeat — jatui-plbzq; prev restarts the track
31
+ * when more than 3 s are in, else goes back one; play-pause freezes
32
+ * the station without closing the menu; next skips). Generative
33
+ * scapes (noise / focus) get the play/pause control only. A radio
34
+ * station registered with a public `streamUrl` (jatui-plbzq) gets the
35
+ * station name, a `Open station site` attribution link and
36
+ * play/pause — the stream is fetched by the browser from the station
37
+ * itself, never relayed. The transport joins the menu's roving order;
38
+ * a paused row stays visible (its play button is the resume) and a
39
+ * stopped one hides.
34
40
  * - Playlists whose licence permits redistribution (jatui-0vxcu: CC0,
35
41
  * public domain, CC-BY, CC-BY-SA — never NC/ND unless the manifest
36
42
  * marks the track `downloadable: true`) also get a Download button
@@ -78,6 +84,11 @@ export type AmbienceScapeGroup = AmbienceSection;
78
84
  export declare function groupScapes(items: AmbienceItem[], groups?: ReadonlyArray<ScapeGroup | AmbienceGroupDef>): AmbienceScapeGroup[];
79
85
  /** "Gymnopédie No. 1 — Erik Satie · Public domain": a playing track's line. */
80
86
  export declare function nowPlayingLine(track: PlaylistTrack | null | undefined): string;
87
+ /** The radio row's attribution href (jatui-plbzq): the scape's site url
88
+ * re-validated with `safeAmbienceHref` — the registry could be hostile
89
+ * on a remote tab too, and the leader is another tab, not a source of
90
+ * trust. Null hides the 'Open station site' link. */
91
+ export declare function radioSite(scape: RadioStreamScape | null | undefined): string | null;
81
92
  /** "3:07" — m:ss for the now-playing row's elapsed/total (jatui-153tz). */
82
93
  export declare function formatTrackTime(seconds: number | null | undefined): string;
83
94
  /** The now-playing progress fill, 0–100, clamped; 0 without a duration. */
@@ -151,6 +162,7 @@ export declare function wheelVolumeSteps(acc: {
151
162
  * slider itself would produce for the same value.
152
163
  */
153
164
  export declare function volumeAfterSteps(volume: number, steps: number, stepPct?: number): number;
165
+ import { type RadioStreamScape } from '../ambience/scapes/radio';
154
166
  import type { SharedAmbience } from '../ambience/shared';
155
167
  import type { Ambience } from '../ambience/types';
156
168
  type $$ComponentProps = {
package/dist/index.d.ts CHANGED
@@ -417,8 +417,8 @@ export { default as ImageReveal } from './components/ImageReveal.svelte';
417
417
  export { imageRevealPhase, imageRevealBusy, imageRevealInitials, imageRevealSize, imageRevealTone, IMAGE_REVEAL_SIZES, IMAGE_REVEAL_RADIUS } from './components/imageReveal';
418
418
  export type { ImageRevealPhase, ImageRevealShape, ImageRevealSizeName, ImageRevealToneName, ImageRevealState } from './components/imageReveal';
419
419
  export { default as AmbienceToggle, AMBIENCE_GROUP_ORDER } from './components/AmbienceToggle.svelte';
420
- export { createAmbience, createAmbienceLocal, createSharedAmbience, AMBIENCE_CHANNEL, AMBIENCE_LOCK, createDefaultAmbience, DEFAULT_SCAPES, BreathClock, BREATHS_PER_MINUTE, MASTER, ScapeRegistry, hibiscusScape, focusScape, noiseScapes, brownNoiseScape, pinkNoiseScape, whiteNoiseScape, rain, waves, AMBIENCE_DEFAULT_GROUP_ORDER, AMBIENCE_DEFAULT_GROUP_LABELS, groupAmbienceItems, ambienceGroupLabel, isAmbienceLink, normalizeAmbienceGroups, radioStation, safeAmbienceHref } from './ambience';
421
- export type { DefaultAmbienceOptions, AmbienceSection } from './ambience';
420
+ export { createAmbience, createAmbienceLocal, createSharedAmbience, AMBIENCE_CHANNEL, AMBIENCE_LOCK, createDefaultAmbience, DEFAULT_SCAPES, BreathClock, BREATHS_PER_MINUTE, MASTER, ScapeRegistry, hibiscusScape, focusScape, noiseScapes, brownNoiseScape, pinkNoiseScape, whiteNoiseScape, rain, waves, AMBIENCE_DEFAULT_GROUP_ORDER, AMBIENCE_DEFAULT_GROUP_LABELS, groupAmbienceItems, ambienceGroupLabel, isAmbienceLink, normalizeAmbienceGroups, radioStation, createRadioStreamScape, isRadioScape, safeAmbienceHref } from './ambience';
421
+ export type { DefaultAmbienceOptions, AmbienceSection, RadioStreamScape, RadioStreamState, RadioStreamScapeOptions, RadioStreamStatus } from './ambience';
422
422
  export type { SharedAmbience, SharedAmbienceState, SharedAmbienceOptions } from './ambience';
423
423
  export type { Ambience, AmbienceGroupDef, AmbienceItem, AmbienceLink, AmbienceOptions, AmbienceState, BreathState, Scape, ScapeContext, ScapeGroup, ScapeInstance } from './ambience';
424
424
  export { createPlaylistScape } from './ambience';
package/dist/index.js CHANGED
@@ -464,7 +464,7 @@ export { imageRevealPhase, imageRevealBusy, imageRevealInitials, imageRevealSize
464
464
  // navigation; createDefaultAmbience() pre-registers every shipped scape
465
465
  // (hibiscus, focus, brown/pink/white noise, rain, waves).
466
466
  export { default as AmbienceToggle, AMBIENCE_GROUP_ORDER } from './components/AmbienceToggle.svelte';
467
- export { createAmbience, createAmbienceLocal, createSharedAmbience, AMBIENCE_CHANNEL, AMBIENCE_LOCK, createDefaultAmbience, DEFAULT_SCAPES, BreathClock, BREATHS_PER_MINUTE, MASTER, ScapeRegistry, hibiscusScape, focusScape, noiseScapes, brownNoiseScape, pinkNoiseScape, whiteNoiseScape, rain, waves, AMBIENCE_DEFAULT_GROUP_ORDER, AMBIENCE_DEFAULT_GROUP_LABELS, groupAmbienceItems, ambienceGroupLabel, isAmbienceLink, normalizeAmbienceGroups, radioStation, safeAmbienceHref } from './ambience';
467
+ export { createAmbience, createAmbienceLocal, createSharedAmbience, AMBIENCE_CHANNEL, AMBIENCE_LOCK, createDefaultAmbience, DEFAULT_SCAPES, BreathClock, BREATHS_PER_MINUTE, MASTER, ScapeRegistry, hibiscusScape, focusScape, noiseScapes, brownNoiseScape, pinkNoiseScape, whiteNoiseScape, rain, waves, AMBIENCE_DEFAULT_GROUP_ORDER, AMBIENCE_DEFAULT_GROUP_LABELS, groupAmbienceItems, ambienceGroupLabel, isAmbienceLink, normalizeAmbienceGroups, radioStation, createRadioStreamScape, isRadioScape, safeAmbienceHref } from './ambience';
468
468
  // Playlist scape (phase 2) — per-host, never in DEFAULT_SCAPES: build with
469
469
  // createPlaylistScape() and register on the engine yourself.
470
470
  export { createPlaylistScape } from './ambience';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joewinke/jatui",
3
- "version": "0.62.0",
3
+ "version": "0.63.0",
4
4
  "private": false,
5
5
  "description": "Shared Svelte 5 component library for JAT projects",
6
6
  "type": "module",