ambient-display 1.1.0 → 1.1.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 (162) hide show
  1. package/build/client/_app/immutable/assets/0.Dl9__I4E.css +1 -0
  2. package/build/client/_app/immutable/assets/0.Dl9__I4E.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.Dl9__I4E.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/2.BtzFOBtk.css +1 -0
  5. package/build/client/_app/immutable/assets/2.BtzFOBtk.css.br +0 -0
  6. package/build/client/_app/immutable/assets/2.BtzFOBtk.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/3.BvcZlbFP.css +1 -0
  8. package/build/client/_app/immutable/assets/3.BvcZlbFP.css.br +0 -0
  9. package/build/client/_app/immutable/assets/3.BvcZlbFP.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/LoadingIndicator.D0m6rSKQ.css +1 -0
  11. package/build/client/_app/immutable/assets/LoadingIndicator.D0m6rSKQ.css.br +0 -0
  12. package/build/client/_app/immutable/assets/LoadingIndicator.D0m6rSKQ.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/PlayingTracker.9uM5nyWg.css +1 -0
  14. package/build/client/_app/immutable/assets/PlayingTracker.9uM5nyWg.css.br +0 -0
  15. package/build/client/_app/immutable/assets/PlayingTracker.9uM5nyWg.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/_layout.Dl9__I4E.css +1 -0
  17. package/build/client/_app/immutable/assets/_layout.Dl9__I4E.css.br +0 -0
  18. package/build/client/_app/immutable/assets/_layout.Dl9__I4E.css.gz +0 -0
  19. package/build/client/_app/immutable/assets/_page.BtzFOBtk.css +1 -0
  20. package/build/client/_app/immutable/assets/_page.BtzFOBtk.css.br +0 -0
  21. package/build/client/_app/immutable/assets/_page.BtzFOBtk.css.gz +0 -0
  22. package/build/client/_app/immutable/assets/_page.BvcZlbFP.css +1 -0
  23. package/build/client/_app/immutable/assets/_page.BvcZlbFP.css.br +0 -0
  24. package/build/client/_app/immutable/assets/_page.BvcZlbFP.css.gz +0 -0
  25. package/build/client/_app/immutable/chunks/LoadingIndicator.COVTk436.js +1 -0
  26. package/build/client/_app/immutable/chunks/LoadingIndicator.COVTk436.js.br +0 -0
  27. package/build/client/_app/immutable/chunks/LoadingIndicator.COVTk436.js.gz +0 -0
  28. package/build/client/_app/immutable/chunks/PlayingTracker.Cymhk9j5.js +5 -0
  29. package/build/client/_app/immutable/chunks/PlayingTracker.Cymhk9j5.js.br +0 -0
  30. package/build/client/_app/immutable/chunks/PlayingTracker.Cymhk9j5.js.gz +0 -0
  31. package/build/client/_app/immutable/chunks/disclose-version.N57b1q78.js +1 -0
  32. package/build/client/_app/immutable/chunks/disclose-version.N57b1q78.js.br +0 -0
  33. package/build/client/_app/immutable/chunks/disclose-version.N57b1q78.js.gz +0 -0
  34. package/build/client/_app/immutable/chunks/entry.CTcSu7Oh.js +3 -0
  35. package/build/client/_app/immutable/chunks/entry.CTcSu7Oh.js.br +0 -0
  36. package/build/client/_app/immutable/chunks/entry.CTcSu7Oh.js.gz +0 -0
  37. package/build/client/_app/immutable/chunks/index-client.DV07uIiZ.js +1 -0
  38. package/build/client/_app/immutable/chunks/index-client.DV07uIiZ.js.br +0 -0
  39. package/build/client/_app/immutable/chunks/index-client.DV07uIiZ.js.gz +0 -0
  40. package/build/client/_app/immutable/chunks/index.DFULH2AN.js +1 -0
  41. package/build/client/_app/immutable/chunks/index.DFULH2AN.js.br +0 -0
  42. package/build/client/_app/immutable/chunks/index.DFULH2AN.js.gz +0 -0
  43. package/build/client/_app/immutable/chunks/index.DLR8Bvs6.js +4 -0
  44. package/build/client/_app/immutable/chunks/index.DLR8Bvs6.js.br +0 -0
  45. package/build/client/_app/immutable/chunks/index.DLR8Bvs6.js.gz +0 -0
  46. package/build/client/_app/immutable/chunks/legacy.DZgMwYuQ.js +1 -0
  47. package/build/client/_app/immutable/chunks/legacy.DZgMwYuQ.js.br +0 -0
  48. package/build/client/_app/immutable/chunks/legacy.DZgMwYuQ.js.gz +0 -0
  49. package/build/client/_app/immutable/chunks/props.DYfFZGja.js +1 -0
  50. package/build/client/_app/immutable/chunks/props.DYfFZGja.js.br +0 -0
  51. package/build/client/_app/immutable/chunks/props.DYfFZGja.js.gz +0 -0
  52. package/build/client/_app/immutable/chunks/snippet.BVSCguOu.js +1 -0
  53. package/build/client/_app/immutable/chunks/snippet.BVSCguOu.js.br +0 -0
  54. package/build/client/_app/immutable/chunks/snippet.BVSCguOu.js.gz +0 -0
  55. package/build/client/_app/immutable/chunks/this.EZLWgc5v.js +1 -0
  56. package/build/client/_app/immutable/chunks/this.EZLWgc5v.js.br +0 -0
  57. package/build/client/_app/immutable/chunks/this.EZLWgc5v.js.gz +0 -0
  58. package/build/client/_app/immutable/chunks/utils.BXcQV2KO.js +1 -0
  59. package/build/client/_app/immutable/chunks/utils.BXcQV2KO.js.br +0 -0
  60. package/build/client/_app/immutable/chunks/utils.BXcQV2KO.js.gz +0 -0
  61. package/build/client/_app/immutable/entry/app.DHMJZPqS.js +2 -0
  62. package/build/client/_app/immutable/entry/app.DHMJZPqS.js.br +0 -0
  63. package/build/client/_app/immutable/entry/app.DHMJZPqS.js.gz +0 -0
  64. package/build/client/_app/immutable/entry/start.BGJKS9mR.js +1 -0
  65. package/build/client/_app/immutable/entry/start.BGJKS9mR.js.br +2 -0
  66. package/build/client/_app/immutable/entry/start.BGJKS9mR.js.gz +0 -0
  67. package/build/client/_app/immutable/nodes/0.DaJoi3FK.js +2 -0
  68. package/build/client/_app/immutable/nodes/0.DaJoi3FK.js.br +0 -0
  69. package/build/client/_app/immutable/nodes/0.DaJoi3FK.js.gz +0 -0
  70. package/build/client/_app/immutable/nodes/1.0EwG4xPT.js +1 -0
  71. package/build/client/_app/immutable/nodes/1.0EwG4xPT.js.br +0 -0
  72. package/build/client/_app/immutable/nodes/1.0EwG4xPT.js.gz +0 -0
  73. package/build/client/_app/immutable/nodes/2.CIcrK0Mf.js +1 -0
  74. package/build/client/_app/immutable/nodes/2.CIcrK0Mf.js.br +0 -0
  75. package/build/client/_app/immutable/nodes/2.CIcrK0Mf.js.gz +0 -0
  76. package/build/client/_app/immutable/nodes/3.vzk8SJSG.js +1 -0
  77. package/build/client/_app/immutable/nodes/3.vzk8SJSG.js.br +0 -0
  78. package/build/client/_app/immutable/nodes/3.vzk8SJSG.js.gz +0 -0
  79. package/build/client/_app/version.json +1 -0
  80. package/build/client/_app/version.json.br +0 -0
  81. package/build/client/_app/version.json.gz +0 -0
  82. package/build/client/manifest.json.br +0 -0
  83. package/build/client/manifest.json.gz +0 -0
  84. package/build/env.js +45 -0
  85. package/build/handler.js +1375 -0
  86. package/build/index.js +334 -0
  87. package/build/server/chunks/0-D_yciAvo.js +91 -0
  88. package/build/server/chunks/0-D_yciAvo.js.map +1 -0
  89. package/build/server/chunks/1-BA-qTHOy.js +9 -0
  90. package/build/server/chunks/1-BA-qTHOy.js.map +1 -0
  91. package/build/server/chunks/2-DPsIhdeI.js +9 -0
  92. package/build/server/chunks/2-DPsIhdeI.js.map +1 -0
  93. package/build/server/chunks/3-CZREXwZu.js +9 -0
  94. package/build/server/chunks/3-CZREXwZu.js.map +1 -0
  95. package/build/server/chunks/LoadingIndicator-CTUFEPkL.js +10 -0
  96. package/build/server/chunks/LoadingIndicator-CTUFEPkL.js.map +1 -0
  97. package/build/server/chunks/LoadingIndicator.svelte_svelte_type_style_lang-CVdBHA1v.js +172 -0
  98. package/build/server/chunks/LoadingIndicator.svelte_svelte_type_style_lang-CVdBHA1v.js.map +1 -0
  99. package/build/server/chunks/PlayingTracker-BIq1bdv_.js +18 -0
  100. package/build/server/chunks/PlayingTracker-BIq1bdv_.js.map +1 -0
  101. package/build/server/chunks/_layout.svelte-BoFI04Ng.js +24 -0
  102. package/build/server/chunks/_layout.svelte-BoFI04Ng.js.map +1 -0
  103. package/build/server/chunks/_page.svelte-C3Mw7ZhL.js +115 -0
  104. package/build/server/chunks/_page.svelte-C3Mw7ZhL.js.map +1 -0
  105. package/build/server/chunks/_page.svelte-CzGyTA7b.js +368 -0
  106. package/build/server/chunks/_page.svelte-CzGyTA7b.js.map +1 -0
  107. package/build/server/chunks/error.svelte-BZE1ioPX.js +116 -0
  108. package/build/server/chunks/error.svelte-BZE1ioPX.js.map +1 -0
  109. package/build/server/chunks/exports-DAjI6ZSp.js +125 -0
  110. package/build/server/chunks/exports-DAjI6ZSp.js.map +1 -0
  111. package/build/server/chunks/index2-BA59f76P.js +1214 -0
  112. package/build/server/chunks/index2-BA59f76P.js.map +1 -0
  113. package/build/server/index.js +4868 -0
  114. package/build/server/index.js.map +1 -0
  115. package/build/server/manifest.js +50 -0
  116. package/build/server/manifest.js.map +1 -0
  117. package/build/shims.js +32 -0
  118. package/package.json +9 -2
  119. package/server/index.js +4 -0
  120. package/server/spotify_auth.json +1 -0
  121. package/.prettierignore +0 -4
  122. package/.prettierrc +0 -17
  123. package/CHANGELOG.md +0 -34
  124. package/env.template +0 -2
  125. package/eslint.config.js +0 -24
  126. package/jsconfig.json +0 -19
  127. package/screenshot.png +0 -0
  128. package/src/app.d.ts +0 -13
  129. package/src/app.html +0 -12
  130. package/src/lib/actions/qr.svelte.js +0 -23
  131. package/src/lib/comms.js +0 -25
  132. package/src/lib/components/AuthenticateTrigger.svelte +0 -74
  133. package/src/lib/components/Controls.svelte +0 -91
  134. package/src/lib/components/ImageLoad.svelte +0 -79
  135. package/src/lib/components/LoadingIndicator.svelte +0 -75
  136. package/src/lib/components/MediaItem.svelte +0 -75
  137. package/src/lib/components/PlayingTracker.svelte +0 -94
  138. package/src/lib/components/ResultsList.svelte +0 -80
  139. package/src/lib/components/Toast/Item.svelte +0 -71
  140. package/src/lib/components/Toast/Manager.svelte +0 -34
  141. package/src/lib/icons/disc.svg +0 -1
  142. package/src/lib/index.js +0 -1
  143. package/src/lib/store.js +0 -146
  144. package/src/lib/styles.scss +0 -166
  145. package/src/lib/toast.js +0 -57
  146. package/src/lib/utils.js +0 -723
  147. package/src/routes/+layout.server.js +0 -25
  148. package/src/routes/+layout.svelte +0 -72
  149. package/src/routes/+page.svelte +0 -381
  150. package/src/routes/player/+page.svelte +0 -294
  151. package/svelte.config.js +0 -19
  152. package/tools/BuildManifest.js +0 -87
  153. package/vite.config.js +0 -46
  154. /package/{static → build/client}/favicon.ico +0 -0
  155. /package/{static → build/client}/favicon.png +0 -0
  156. /package/{static → build/client}/icons/144.favicon.png +0 -0
  157. /package/{static → build/client}/icons/168.favicon.png +0 -0
  158. /package/{static → build/client}/icons/192.favicon.png +0 -0
  159. /package/{static → build/client}/icons/48.favicon.png +0 -0
  160. /package/{static → build/client}/icons/72.favicon.png +0 -0
  161. /package/{static → build/client}/icons/96.favicon.png +0 -0
  162. /package/{static → build/client}/manifest.json +0 -0
@@ -1,25 +0,0 @@
1
- import { OPTIONS } from '$server/config.js';
2
-
3
- const testServer = async (fetch) => {
4
- try {
5
- const { success } = await fetch({ path: '/api/health', protocol: 'http' }).then((resp) =>
6
- resp.json()
7
- );
8
-
9
- return success;
10
- } catch {
11
- return false;
12
- }
13
- };
14
-
15
- /** @type {import('./$types').LayoutServerLoad} */
16
- export async function load({ fetch }) {
17
- const server = await testServer(fetch);
18
-
19
- const { plugins, ...config } = OPTIONS;
20
-
21
- return {
22
- live: !!server,
23
- config
24
- };
25
- }
@@ -1,72 +0,0 @@
1
- <script>
2
- import 'normalize.css';
3
- import '$lib/styles.scss';
4
- import { api, authenticated, config, liveData, settled } from '$lib/store';
5
- import { socket } from '$lib/comms';
6
-
7
- import AuthenticateTrigger from '$lib/components/AuthenticateTrigger.svelte';
8
- import { address } from '$lib/store';
9
- import ToastManager from '$lib/components/Toast/Manager.svelte';
10
- import { toastItems } from '$lib/toast';
11
- import LoadingIndicator from '$lib/components/LoadingIndicator.svelte';
12
-
13
- /** @type {{ data: import('./$types').LayoutData, children: import('svelte').Snippet }} */
14
- let { data, children } = $props();
15
-
16
- let loading = $state(true);
17
-
18
- async function determineAppState() {
19
- const { authenticated: serverAuthenticated = false } = await $api.health();
20
-
21
- authenticated.set(serverAuthenticated);
22
- }
23
-
24
- $effect(() => {
25
- $socket?.on('message', (item) => {
26
- toastItems.addItem(item);
27
- });
28
- $socket?.on('reload', (item) => {
29
- window.location.reload();
30
- });
31
- });
32
-
33
- $effect(() => {
34
- config.set(data.config);
35
- liveData.set(data.live);
36
- settled.set(true);
37
-
38
- determineAppState();
39
-
40
- loading = false;
41
- });
42
- </script>
43
-
44
- <svelte:head>
45
- <title>Spotify Party</title>
46
- <meta name="description" content="A frontend for social spotify-ing" />
47
-
48
- <meta property="og:title" content="Spotify Party" />
49
- <meta property="og:description" content="A frontend for social spotify-ing" />
50
- <meta property="og:type" content="website" />
51
- <meta property="og:url" content={$address.get('/')} />
52
- <meta property="og:image" content={$address.get('/social.jpg')} />
53
- <meta name="twitter:card" content="summary_large_image" />
54
- <meta name="twitter:title" content="Spotify Party" />
55
- <meta property="twitter:url" content={$address.get('/')} />
56
- <meta name="twitter:description" content="A frontend for social spotify-ing" />
57
- <meta name="twitter:image" content={$address.get('/social.jpg')} />
58
-
59
- <meta name="theme-color" content="#0000000" />
60
-
61
- <link rel="icon" href="/favicon.ico" />
62
- <link rel="manifest" href="/manifest.json" />
63
- </svelte:head>
64
-
65
- {#if loading}
66
- <LoadingIndicator floating />
67
- {:else if !$authenticated}
68
- <AuthenticateTrigger />
69
- {:else}
70
- <ToastManager />
71
- {@render children()}
72
- {/if}
@@ -1,381 +0,0 @@
1
- <script>
2
- import Controls from '$lib/components/Controls.svelte';
3
- import LoadingIndicator from '$lib/components/LoadingIndicator.svelte';
4
- import MediaItem from '$lib/components/MediaItem.svelte';
5
- import PlayingTracker from '$lib/components/PlayingTracker.svelte';
6
- import ResultsList from '$lib/components/ResultsList.svelte';
7
- import { api, config } from '$lib/store';
8
- import { toastItems } from '$lib/toast';
9
- import * as DataTypes from '$server/types/data.js';
10
- import { CaretBack, Sparkles } from 'svelte-ionicons';
11
-
12
- /** @type {DataTypes.ApiSearchResponse | null}*/
13
- let items = $state(null);
14
- let loading = $state(false);
15
-
16
- /** @type {'tracks' | 'artists' | 'albums'}*/
17
- let expanded = $state('tracks');
18
-
19
- /** @type {DataTypes.ApiNormalisedItem | null} */
20
- let contextHeader = $state(null);
21
-
22
- /** @type {DataTypes.ApiInfoResponse | null} */
23
- let playing = $state(null);
24
-
25
- /**
26
- *
27
- * @param {() => Promise<DataTypes.ApiSearchResponse>} requestPromise
28
- */
29
- async function onRequest(requestPromise) {
30
- try {
31
- loading = true;
32
- items = null;
33
-
34
- const { tracks, artists, albums } = await requestPromise();
35
-
36
- items = {
37
- tracks,
38
- artists,
39
- albums
40
- };
41
- } catch (e) {
42
- console.error(e);
43
- toastItems.addItem({
44
- message: 'There was an error - Try refreshing',
45
- type: 'error'
46
- });
47
- } finally {
48
- loading = false;
49
- }
50
- }
51
-
52
- /** @type {HTMLFormElement | null} */
53
- let searchForm = $state(null);
54
- async function onSearch(e) {
55
- e.preventDefault();
56
-
57
- if (!searchForm) {
58
- return;
59
- }
60
-
61
- const fd = new FormData(searchForm);
62
-
63
- const q = fd.get('q')?.toString();
64
-
65
- if (q) {
66
- contextHeader = null;
67
- onRequest(() => $api.search(q));
68
- }
69
- }
70
-
71
- /**
72
- *
73
- * @param {string} uri
74
- * @param {string} name
75
- */
76
- async function addTrack(uri, name) {
77
- try {
78
- loading = true;
79
- await $api.addTrack(uri, name);
80
- } catch (e) {
81
- console.error(e);
82
- } finally {
83
- loading = false;
84
- }
85
- }
86
-
87
- /**
88
- *
89
- * @param {DataTypes.ApiNormalisedItem} item
90
- */
91
- async function searchAlbum(item) {
92
- contextHeader = item;
93
- onRequest(() => $api.album(item.id));
94
- expanded = 'tracks';
95
- }
96
-
97
- /**
98
- *
99
- * @param {DataTypes.ApiNormalisedItem} item
100
- */
101
- async function searchArtist(item) {
102
- contextHeader = item;
103
- onRequest(() => $api.artist(item.id));
104
- expanded = 'tracks';
105
- }
106
- </script>
107
-
108
- <PlayingTracker bind:playing />
109
-
110
- <div class="page bg-color-bg" class:loading>
111
- {#if playing && !('noTrack' in playing)}
112
- <Controls
113
- playing={playing.isPlaying}
114
- title={[playing.track.normalised.title, playing.track.normalised.subtitle].join(' - ')}
115
- canControl={$config.api?.canControl}
116
- />
117
- {/if}
118
-
119
- {#if $config?.api?.canAdd}
120
- <div class="page-content bg-color-3">
121
- <form bind:this={searchForm} class="page-content-top" onsubmit={onSearch}>
122
- <label>
123
- <input
124
- class="color-bg"
125
- type="search"
126
- placeholder="URL, Track, Album, Artist..."
127
- name="q"
128
- disabled={loading}
129
- />
130
- </label>
131
- <button class="btn-reset" disabled={loading}>Search</button>
132
- </form>
133
-
134
- <div class="page-content-results">
135
- {#if loading}
136
- <LoadingIndicator floating />
137
- {/if}
138
-
139
- {#if contextHeader}
140
- <div class="context-header">
141
- <button onclick={onSearch} class="context-header-action btn-reset">
142
- <CaretBack size="28" />
143
- </button>
144
-
145
- <div class="context-header-item">
146
- <MediaItem {...contextHeader} />
147
- </div>
148
- </div>
149
- {/if}
150
-
151
- {#if items?.tracks}
152
- <ResultsList
153
- title="Tracks"
154
- onActivate={() => (expanded = 'tracks')}
155
- expanded={expanded === 'tracks'}
156
- items={items.tracks}
157
- >
158
- {#snippet action(item)}
159
- <button
160
- disabled={loading}
161
- onclick={() => addTrack(item.uri, item.title)}
162
- class="btn-reset select-track size-small-1">Add Track</button
163
- >
164
- {/snippet}
165
- </ResultsList>
166
- {/if}
167
-
168
- {#if items?.albums}
169
- <ResultsList
170
- title="Albums"
171
- onActivate={() => (expanded = 'albums')}
172
- expanded={expanded === 'albums'}
173
- items={items.albums}
174
- >
175
- {#snippet action(item)}
176
- <button
177
- onclick={() => searchAlbum(item)}
178
- disabled={loading}
179
- class="btn-reset select-track size-small-1">View Album</button
180
- >
181
- {/snippet}
182
- </ResultsList>
183
- {/if}
184
-
185
- {#if items?.artists}
186
- <ResultsList
187
- title="Artists"
188
- onActivate={() => (expanded = 'artists')}
189
- expanded={expanded === 'artists'}
190
- items={items.artists}
191
- >
192
- {#snippet action(item)}
193
- <button
194
- onclick={() => searchArtist(item)}
195
- disabled={loading}
196
- class="btn-reset select-track size-small-1">View Artist</button
197
- >
198
- {/snippet}
199
- </ResultsList>
200
- {/if}
201
-
202
- {#if !items}
203
- <div class="initial color-1">Search for a track to add</div>
204
- {/if}
205
- </div>
206
- </div>
207
- {:else}
208
- <div class="warning">
209
- <Sparkles />
210
- <p>Host has disabled adding for this party</p>
211
- </div>
212
- {/if}
213
-
214
- <div class="outlink size-small-2 color-2">
215
- <a href="/player">View player</a>
216
- </div>
217
- </div>
218
-
219
- <style lang="scss">
220
- .page {
221
- padding: var(--spacing-large);
222
-
223
- width: 100vw;
224
- height: 100dvh;
225
-
226
- display: flex;
227
-
228
- flex-direction: column;
229
-
230
- justify-content: stretch;
231
- align-items: center;
232
- gap: var(--spacing-large);
233
-
234
- transition: {
235
- duration: 0.5s;
236
- property: background-color;
237
- }
238
-
239
- &-content {
240
- flex: 1;
241
-
242
- border-radius: var(--border-radius-large);
243
- overflow: hidden;
244
- isolation: isolate;
245
-
246
- max-width: 400px;
247
-
248
- display: grid;
249
-
250
- grid-template-rows: auto 1fr;
251
- }
252
- }
253
-
254
- .page-content-top {
255
- display: flex;
256
-
257
- label {
258
- flex: 1;
259
-
260
- input {
261
- width: 100%;
262
-
263
- padding: var(--spacing-normal);
264
- margin: 0;
265
- border: none;
266
- font-weight: inherit;
267
- outline: 0;
268
- background-color: var(--color-3);
269
- color: var(--color-1);
270
- border-radius: 0;
271
- font-size: var(--font-size-level-headline-3);
272
-
273
- @media screen and (min-width: 768px) {
274
- font-size: var(--font-size-level-headline-2);
275
- }
276
-
277
- &::placeholder {
278
- color: var(--color-1);
279
- }
280
-
281
- &:focus {
282
- background-color: var(--color-2);
283
- }
284
- }
285
- }
286
-
287
- button {
288
- font-weight: inherit;
289
-
290
- padding: var(--spacing-normal) var(--spacing-large);
291
-
292
- background-color: var(--color-highlight);
293
- color: var(--color-1);
294
- }
295
- }
296
-
297
- .page-content-results {
298
- min-height: 0;
299
-
300
- display: grid;
301
-
302
- .loading & {
303
- opacity: 0.5;
304
- }
305
- }
306
-
307
- .select-track {
308
- background-color: var(--color-1);
309
- color: var(--color-bg);
310
-
311
- border-radius: var(--border-radius-normal);
312
- padding: var(--spacing-small) var(--spacing-normal);
313
-
314
- &:hover,
315
- &:focus-visible {
316
- background-color: var(--color-2);
317
- }
318
- }
319
-
320
- .initial {
321
- display: flex;
322
-
323
- align-items: center;
324
- justify-content: center;
325
- }
326
-
327
- .context-header {
328
- --media-image: 28px;
329
- --media-font-size: var(--font-size-level-small-2);
330
-
331
- background-color: var(--color-1);
332
- border-top: 1px solid var(--color-bg);
333
- border-bottom: 1px solid var(--color-bg);
334
- color: var(--color-bg);
335
-
336
- display: grid;
337
-
338
- grid-template-columns: 38px 1fr;
339
- gap: var(--spacing-small);
340
-
341
- &-action {
342
- display: flex;
343
-
344
- justify-content: center;
345
- align-items: center;
346
- line-height: 0;
347
-
348
- background-color: var(--color-3);
349
- color: var(--color-1);
350
- aspect-ratio: 1;
351
- }
352
-
353
- &-item {
354
- padding: var(--spacing-small);
355
- }
356
- }
357
-
358
- .warning {
359
- border-radius: var(--border-radius-large);
360
- background-color: var(--color-1);
361
- color: var(--color-2);
362
-
363
- padding: var(--spacing-large);
364
-
365
- display: flex;
366
-
367
- flex-direction: column;
368
- align-items: center;
369
- }
370
- .outlink {
371
- a {
372
- color: var(--color-2);
373
- text-decoration: none;
374
-
375
- &:hover,
376
- &:focus-visible {
377
- color: var(--color-highlight);
378
- }
379
- }
380
- }
381
- </style>