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.
- package/build/client/_app/immutable/assets/0.Dl9__I4E.css +1 -0
- package/build/client/_app/immutable/assets/0.Dl9__I4E.css.br +0 -0
- package/build/client/_app/immutable/assets/0.Dl9__I4E.css.gz +0 -0
- package/build/client/_app/immutable/assets/2.BtzFOBtk.css +1 -0
- package/build/client/_app/immutable/assets/2.BtzFOBtk.css.br +0 -0
- package/build/client/_app/immutable/assets/2.BtzFOBtk.css.gz +0 -0
- package/build/client/_app/immutable/assets/3.BvcZlbFP.css +1 -0
- package/build/client/_app/immutable/assets/3.BvcZlbFP.css.br +0 -0
- package/build/client/_app/immutable/assets/3.BvcZlbFP.css.gz +0 -0
- package/build/client/_app/immutable/assets/LoadingIndicator.D0m6rSKQ.css +1 -0
- package/build/client/_app/immutable/assets/LoadingIndicator.D0m6rSKQ.css.br +0 -0
- package/build/client/_app/immutable/assets/LoadingIndicator.D0m6rSKQ.css.gz +0 -0
- package/build/client/_app/immutable/assets/PlayingTracker.9uM5nyWg.css +1 -0
- package/build/client/_app/immutable/assets/PlayingTracker.9uM5nyWg.css.br +0 -0
- package/build/client/_app/immutable/assets/PlayingTracker.9uM5nyWg.css.gz +0 -0
- package/build/client/_app/immutable/assets/_layout.Dl9__I4E.css +1 -0
- package/build/client/_app/immutable/assets/_layout.Dl9__I4E.css.br +0 -0
- package/build/client/_app/immutable/assets/_layout.Dl9__I4E.css.gz +0 -0
- package/build/client/_app/immutable/assets/_page.BtzFOBtk.css +1 -0
- package/build/client/_app/immutable/assets/_page.BtzFOBtk.css.br +0 -0
- package/build/client/_app/immutable/assets/_page.BtzFOBtk.css.gz +0 -0
- package/build/client/_app/immutable/assets/_page.BvcZlbFP.css +1 -0
- package/build/client/_app/immutable/assets/_page.BvcZlbFP.css.br +0 -0
- package/build/client/_app/immutable/assets/_page.BvcZlbFP.css.gz +0 -0
- package/build/client/_app/immutable/chunks/LoadingIndicator.COVTk436.js +1 -0
- package/build/client/_app/immutable/chunks/LoadingIndicator.COVTk436.js.br +0 -0
- package/build/client/_app/immutable/chunks/LoadingIndicator.COVTk436.js.gz +0 -0
- package/build/client/_app/immutable/chunks/PlayingTracker.Cymhk9j5.js +5 -0
- package/build/client/_app/immutable/chunks/PlayingTracker.Cymhk9j5.js.br +0 -0
- package/build/client/_app/immutable/chunks/PlayingTracker.Cymhk9j5.js.gz +0 -0
- package/build/client/_app/immutable/chunks/disclose-version.N57b1q78.js +1 -0
- package/build/client/_app/immutable/chunks/disclose-version.N57b1q78.js.br +0 -0
- package/build/client/_app/immutable/chunks/disclose-version.N57b1q78.js.gz +0 -0
- package/build/client/_app/immutable/chunks/entry.CTcSu7Oh.js +3 -0
- package/build/client/_app/immutable/chunks/entry.CTcSu7Oh.js.br +0 -0
- package/build/client/_app/immutable/chunks/entry.CTcSu7Oh.js.gz +0 -0
- package/build/client/_app/immutable/chunks/index-client.DV07uIiZ.js +1 -0
- package/build/client/_app/immutable/chunks/index-client.DV07uIiZ.js.br +0 -0
- package/build/client/_app/immutable/chunks/index-client.DV07uIiZ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/index.DFULH2AN.js +1 -0
- package/build/client/_app/immutable/chunks/index.DFULH2AN.js.br +0 -0
- package/build/client/_app/immutable/chunks/index.DFULH2AN.js.gz +0 -0
- package/build/client/_app/immutable/chunks/index.DLR8Bvs6.js +4 -0
- package/build/client/_app/immutable/chunks/index.DLR8Bvs6.js.br +0 -0
- package/build/client/_app/immutable/chunks/index.DLR8Bvs6.js.gz +0 -0
- package/build/client/_app/immutable/chunks/legacy.DZgMwYuQ.js +1 -0
- package/build/client/_app/immutable/chunks/legacy.DZgMwYuQ.js.br +0 -0
- package/build/client/_app/immutable/chunks/legacy.DZgMwYuQ.js.gz +0 -0
- package/build/client/_app/immutable/chunks/props.DYfFZGja.js +1 -0
- package/build/client/_app/immutable/chunks/props.DYfFZGja.js.br +0 -0
- package/build/client/_app/immutable/chunks/props.DYfFZGja.js.gz +0 -0
- package/build/client/_app/immutable/chunks/snippet.BVSCguOu.js +1 -0
- package/build/client/_app/immutable/chunks/snippet.BVSCguOu.js.br +0 -0
- package/build/client/_app/immutable/chunks/snippet.BVSCguOu.js.gz +0 -0
- package/build/client/_app/immutable/chunks/this.EZLWgc5v.js +1 -0
- package/build/client/_app/immutable/chunks/this.EZLWgc5v.js.br +0 -0
- package/build/client/_app/immutable/chunks/this.EZLWgc5v.js.gz +0 -0
- package/build/client/_app/immutable/chunks/utils.BXcQV2KO.js +1 -0
- package/build/client/_app/immutable/chunks/utils.BXcQV2KO.js.br +0 -0
- package/build/client/_app/immutable/chunks/utils.BXcQV2KO.js.gz +0 -0
- package/build/client/_app/immutable/entry/app.DHMJZPqS.js +2 -0
- package/build/client/_app/immutable/entry/app.DHMJZPqS.js.br +0 -0
- package/build/client/_app/immutable/entry/app.DHMJZPqS.js.gz +0 -0
- package/build/client/_app/immutable/entry/start.BGJKS9mR.js +1 -0
- package/build/client/_app/immutable/entry/start.BGJKS9mR.js.br +2 -0
- package/build/client/_app/immutable/entry/start.BGJKS9mR.js.gz +0 -0
- package/build/client/_app/immutable/nodes/0.DaJoi3FK.js +2 -0
- package/build/client/_app/immutable/nodes/0.DaJoi3FK.js.br +0 -0
- package/build/client/_app/immutable/nodes/0.DaJoi3FK.js.gz +0 -0
- package/build/client/_app/immutable/nodes/1.0EwG4xPT.js +1 -0
- package/build/client/_app/immutable/nodes/1.0EwG4xPT.js.br +0 -0
- package/build/client/_app/immutable/nodes/1.0EwG4xPT.js.gz +0 -0
- package/build/client/_app/immutable/nodes/2.CIcrK0Mf.js +1 -0
- package/build/client/_app/immutable/nodes/2.CIcrK0Mf.js.br +0 -0
- package/build/client/_app/immutable/nodes/2.CIcrK0Mf.js.gz +0 -0
- package/build/client/_app/immutable/nodes/3.vzk8SJSG.js +1 -0
- package/build/client/_app/immutable/nodes/3.vzk8SJSG.js.br +0 -0
- package/build/client/_app/immutable/nodes/3.vzk8SJSG.js.gz +0 -0
- package/build/client/_app/version.json +1 -0
- package/build/client/_app/version.json.br +0 -0
- package/build/client/_app/version.json.gz +0 -0
- package/build/client/manifest.json.br +0 -0
- package/build/client/manifest.json.gz +0 -0
- package/build/env.js +45 -0
- package/build/handler.js +1375 -0
- package/build/index.js +334 -0
- package/build/server/chunks/0-D_yciAvo.js +91 -0
- package/build/server/chunks/0-D_yciAvo.js.map +1 -0
- package/build/server/chunks/1-BA-qTHOy.js +9 -0
- package/build/server/chunks/1-BA-qTHOy.js.map +1 -0
- package/build/server/chunks/2-DPsIhdeI.js +9 -0
- package/build/server/chunks/2-DPsIhdeI.js.map +1 -0
- package/build/server/chunks/3-CZREXwZu.js +9 -0
- package/build/server/chunks/3-CZREXwZu.js.map +1 -0
- package/build/server/chunks/LoadingIndicator-CTUFEPkL.js +10 -0
- package/build/server/chunks/LoadingIndicator-CTUFEPkL.js.map +1 -0
- package/build/server/chunks/LoadingIndicator.svelte_svelte_type_style_lang-CVdBHA1v.js +172 -0
- package/build/server/chunks/LoadingIndicator.svelte_svelte_type_style_lang-CVdBHA1v.js.map +1 -0
- package/build/server/chunks/PlayingTracker-BIq1bdv_.js +18 -0
- package/build/server/chunks/PlayingTracker-BIq1bdv_.js.map +1 -0
- package/build/server/chunks/_layout.svelte-BoFI04Ng.js +24 -0
- package/build/server/chunks/_layout.svelte-BoFI04Ng.js.map +1 -0
- package/build/server/chunks/_page.svelte-C3Mw7ZhL.js +115 -0
- package/build/server/chunks/_page.svelte-C3Mw7ZhL.js.map +1 -0
- package/build/server/chunks/_page.svelte-CzGyTA7b.js +368 -0
- package/build/server/chunks/_page.svelte-CzGyTA7b.js.map +1 -0
- package/build/server/chunks/error.svelte-BZE1ioPX.js +116 -0
- package/build/server/chunks/error.svelte-BZE1ioPX.js.map +1 -0
- package/build/server/chunks/exports-DAjI6ZSp.js +125 -0
- package/build/server/chunks/exports-DAjI6ZSp.js.map +1 -0
- package/build/server/chunks/index2-BA59f76P.js +1214 -0
- package/build/server/chunks/index2-BA59f76P.js.map +1 -0
- package/build/server/index.js +4868 -0
- package/build/server/index.js.map +1 -0
- package/build/server/manifest.js +50 -0
- package/build/server/manifest.js.map +1 -0
- package/build/shims.js +32 -0
- package/package.json +9 -2
- package/server/index.js +4 -0
- package/server/spotify_auth.json +1 -0
- package/.prettierignore +0 -4
- package/.prettierrc +0 -17
- package/CHANGELOG.md +0 -34
- package/env.template +0 -2
- package/eslint.config.js +0 -24
- package/jsconfig.json +0 -19
- package/screenshot.png +0 -0
- package/src/app.d.ts +0 -13
- package/src/app.html +0 -12
- package/src/lib/actions/qr.svelte.js +0 -23
- package/src/lib/comms.js +0 -25
- package/src/lib/components/AuthenticateTrigger.svelte +0 -74
- package/src/lib/components/Controls.svelte +0 -91
- package/src/lib/components/ImageLoad.svelte +0 -79
- package/src/lib/components/LoadingIndicator.svelte +0 -75
- package/src/lib/components/MediaItem.svelte +0 -75
- package/src/lib/components/PlayingTracker.svelte +0 -94
- package/src/lib/components/ResultsList.svelte +0 -80
- package/src/lib/components/Toast/Item.svelte +0 -71
- package/src/lib/components/Toast/Manager.svelte +0 -34
- package/src/lib/icons/disc.svg +0 -1
- package/src/lib/index.js +0 -1
- package/src/lib/store.js +0 -146
- package/src/lib/styles.scss +0 -166
- package/src/lib/toast.js +0 -57
- package/src/lib/utils.js +0 -723
- package/src/routes/+layout.server.js +0 -25
- package/src/routes/+layout.svelte +0 -72
- package/src/routes/+page.svelte +0 -381
- package/src/routes/player/+page.svelte +0 -294
- package/svelte.config.js +0 -19
- package/tools/BuildManifest.js +0 -87
- package/vite.config.js +0 -46
- /package/{static → build/client}/favicon.ico +0 -0
- /package/{static → build/client}/favicon.png +0 -0
- /package/{static → build/client}/icons/144.favicon.png +0 -0
- /package/{static → build/client}/icons/168.favicon.png +0 -0
- /package/{static → build/client}/icons/192.favicon.png +0 -0
- /package/{static → build/client}/icons/48.favicon.png +0 -0
- /package/{static → build/client}/icons/72.favicon.png +0 -0
- /package/{static → build/client}/icons/96.favicon.png +0 -0
- /package/{static → build/client}/manifest.json +0 -0
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const manifest = (() => {
|
|
2
|
+
function __memo(fn) {
|
|
3
|
+
let value;
|
|
4
|
+
return () => value ??= (value = fn());
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
appDir: "_app",
|
|
9
|
+
appPath: "_app",
|
|
10
|
+
assets: new Set(["favicon.ico","favicon.png","icons/144.favicon.png","icons/168.favicon.png","icons/192.favicon.png","icons/48.favicon.png","icons/72.favicon.png","icons/96.favicon.png","manifest.json"]),
|
|
11
|
+
mimeTypes: {".png":"image/png",".json":"application/json"},
|
|
12
|
+
_: {
|
|
13
|
+
client: {"start":"_app/immutable/entry/start.BGJKS9mR.js","app":"_app/immutable/entry/app.DHMJZPqS.js","imports":["_app/immutable/entry/start.BGJKS9mR.js","_app/immutable/chunks/entry.CTcSu7Oh.js","_app/immutable/chunks/utils.BXcQV2KO.js","_app/immutable/chunks/index.DFULH2AN.js","_app/immutable/chunks/index-client.DV07uIiZ.js","_app/immutable/entry/app.DHMJZPqS.js","_app/immutable/chunks/utils.BXcQV2KO.js","_app/immutable/chunks/disclose-version.N57b1q78.js","_app/immutable/chunks/props.DYfFZGja.js","_app/immutable/chunks/this.EZLWgc5v.js","_app/immutable/chunks/index-client.DV07uIiZ.js"],"stylesheets":[],"fonts":[],"uses_env_dynamic_public":false},
|
|
14
|
+
nodes: [
|
|
15
|
+
__memo(() => import('./chunks/0-D_yciAvo.js')),
|
|
16
|
+
__memo(() => import('./chunks/1-BA-qTHOy.js')),
|
|
17
|
+
__memo(() => import('./chunks/2-DPsIhdeI.js')),
|
|
18
|
+
__memo(() => import('./chunks/3-CZREXwZu.js'))
|
|
19
|
+
],
|
|
20
|
+
routes: [
|
|
21
|
+
{
|
|
22
|
+
id: "/",
|
|
23
|
+
pattern: /^\/$/,
|
|
24
|
+
params: [],
|
|
25
|
+
page: { layouts: [0,], errors: [1,], leaf: 2 },
|
|
26
|
+
endpoint: null
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "/player",
|
|
30
|
+
pattern: /^\/player\/?$/,
|
|
31
|
+
params: [],
|
|
32
|
+
page: { layouts: [0,], errors: [1,], leaf: 3 },
|
|
33
|
+
endpoint: null
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
matchers: async () => {
|
|
37
|
+
|
|
38
|
+
return { };
|
|
39
|
+
},
|
|
40
|
+
server_assets: {}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
})();
|
|
44
|
+
|
|
45
|
+
const prerendered = new Set([]);
|
|
46
|
+
|
|
47
|
+
const base = "";
|
|
48
|
+
|
|
49
|
+
export { base, manifest, prerendered };
|
|
50
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([\"favicon.ico\",\"favicon.png\",\"icons/144.favicon.png\",\"icons/168.favicon.png\",\"icons/192.favicon.png\",\"icons/48.favicon.png\",\"icons/72.favicon.png\",\"icons/96.favicon.png\",\"manifest.json\"]),\n\tmimeTypes: {\".png\":\"image/png\",\".json\":\"application/json\"},\n\t_: {\n\t\tclient: {\"start\":\"_app/immutable/entry/start.BGJKS9mR.js\",\"app\":\"_app/immutable/entry/app.DHMJZPqS.js\",\"imports\":[\"_app/immutable/entry/start.BGJKS9mR.js\",\"_app/immutable/chunks/entry.CTcSu7Oh.js\",\"_app/immutable/chunks/utils.BXcQV2KO.js\",\"_app/immutable/chunks/index.DFULH2AN.js\",\"_app/immutable/chunks/index-client.DV07uIiZ.js\",\"_app/immutable/entry/app.DHMJZPqS.js\",\"_app/immutable/chunks/utils.BXcQV2KO.js\",\"_app/immutable/chunks/disclose-version.N57b1q78.js\",\"_app/immutable/chunks/props.DYfFZGja.js\",\"_app/immutable/chunks/this.EZLWgc5v.js\",\"_app/immutable/chunks/index-client.DV07uIiZ.js\"],\"stylesheets\":[],\"fonts\":[],\"uses_env_dynamic_public\":false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js'))\n\t\t],\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/player\",\n\t\t\t\tpattern: /^\\/player\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"AAAY,MAAC,QAAQ,GAAG,CAAC,MAAM;AAC/B,SAAS,MAAM,CAAC,EAAE,EAAE;AACpB,CAAC,IAAI,KAAK;AACV,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,GAAG,EAAE,EAAE,CAAC;AACtC;;AAEA,OAAO;AACP,CAAC,MAAM,EAAE,MAAM;AACf,CAAC,OAAO,EAAE,MAAM;AAChB,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,sBAAsB,CAAC,eAAe,CAAC,CAAC;AAC5M,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC;AAC3D,CAAC,CAAC,EAAE;AACJ,EAAE,MAAM,EAAE,CAAC,OAAO,CAAC,wCAAwC,CAAC,KAAK,CAAC,sCAAsC,CAAC,SAAS,CAAC,CAAC,wCAAwC,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,yCAAyC,CAAC,gDAAgD,CAAC,sCAAsC,CAAC,yCAAyC,CAAC,oDAAoD,CAAC,yCAAyC,CAAC,wCAAwC,CAAC,gDAAgD,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,yBAAyB,CAAC,KAAK,CAAC;AACnpB,EAAE,KAAK,EAAE;AACT,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC,CAAC;AACvC,GAAG,MAAM,CAAC,MAAM,OAAO,wBAAc,CAAC;AACtC,GAAG;AACH,EAAE,MAAM,EAAE;AACV,GAAG;AACH,IAAI,EAAE,EAAE,GAAG;AACX,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd,IAAI;AACJ,GAAG;AACH,IAAI,EAAE,EAAE,SAAS;AACjB,IAAI,OAAO,EAAE,eAAe;AAC5B,IAAI,MAAM,EAAE,EAAE;AACd,IAAI,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;AAClD,IAAI,QAAQ,EAAE;AACd;AACA,GAAG;AACH,EAAE,QAAQ,EAAE,YAAY;AACxB;AACA,GAAG,OAAO,IAAI;AACd,GAAG;AACH,EAAE,aAAa,EAAE;AACjB;AACA;AACA,CAAC;;AAEW,MAAC,WAAW,GAAG,IAAI,GAAG,CAAC,EAAE;;AAEzB,MAAC,IAAI,GAAG;;;;"}
|
package/build/shims.js
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import buffer from 'node:buffer';
|
|
2
|
+
import { webcrypto } from 'node:crypto';
|
|
3
|
+
|
|
4
|
+
// `buffer.File` was added in Node 18.13.0 while the `File` global was added in Node 20.0.0
|
|
5
|
+
const File = /** @type {import('node:buffer') & { File?: File}} */ (buffer).File;
|
|
6
|
+
|
|
7
|
+
/** @type {Record<string, any>} */
|
|
8
|
+
const globals = {
|
|
9
|
+
crypto: webcrypto,
|
|
10
|
+
File
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// exported for dev/preview and node environments
|
|
14
|
+
/**
|
|
15
|
+
* Make various web APIs available as globals:
|
|
16
|
+
* - `crypto`
|
|
17
|
+
* - `File`
|
|
18
|
+
*/
|
|
19
|
+
function installPolyfills() {
|
|
20
|
+
for (const name in globals) {
|
|
21
|
+
if (name in globalThis) continue;
|
|
22
|
+
|
|
23
|
+
Object.defineProperty(globalThis, name, {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: globals[name]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
installPolyfills();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ambient-display",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "Like a spotify jam but much worse, but also much better. If you need it, you'll love it.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -17,8 +17,15 @@
|
|
|
17
17
|
"format": "prettier --write .",
|
|
18
18
|
"lint": "prettier --check . && eslint .",
|
|
19
19
|
"release": "standard-version",
|
|
20
|
-
"release:publish": "npm run release && npm publish"
|
|
20
|
+
"release:publish": "npm run build && npm run release && npm publish"
|
|
21
21
|
},
|
|
22
|
+
"files": [
|
|
23
|
+
"build/*",
|
|
24
|
+
"server/*",
|
|
25
|
+
"ambient.config.js.template",
|
|
26
|
+
"README.md",
|
|
27
|
+
".nvmrc"
|
|
28
|
+
],
|
|
22
29
|
"devDependencies": {
|
|
23
30
|
"@eslint/compat": "^1.2.3",
|
|
24
31
|
"@poppanator/sveltekit-svg": "^5.0.0",
|
package/server/index.js
CHANGED
|
@@ -18,6 +18,10 @@ import { CommandHistory } from './history.js';
|
|
|
18
18
|
|
|
19
19
|
const URL = `${OPTIONS.origin}:${OPTIONS.port}`;
|
|
20
20
|
|
|
21
|
+
if (OPTIONS.verbose) {
|
|
22
|
+
console.log(OPTIONS);
|
|
23
|
+
}
|
|
24
|
+
|
|
21
25
|
const app = express();
|
|
22
26
|
const server = createServer(app);
|
|
23
27
|
const io = new Server(server, {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"refresh_token":"AQBAFqcupbCx89_PRsBTqVLMh_-UcwelJnu1FNA1XVLGZPZO9MZIQcfMaaAC_WseRuahnHFufZYJ8tuiT9_DN8xFAq353b0LhWhlWM51nD-LW6ioGM0rU4SJPtyJrTLqliU","access_token":"BQCGuzKADp9mNfAXWhjZXDQPM0mIT-EyII37V41DTzImiVCHrmP3gwhNVccbyHYoHJp5yw-Md0cNjjts2NKx4ZmkgnOu9i7Rh1cYgClbIvITOZe1osYogkQkEdBJeC5dA5EJMkZwdI7UNO4lzEe2nf7nzLX1r2mwTtovt4ekGmkjEsZG6GIzDFbN912vGbxBKRcHYy0R_8LgpRfJgsrdHrpRkuIYUYqHvL61kA","token_type":"Bearer","expires_in":3600,"scope":"user-modify-playback-state user-read-playback-state user-read-currently-playing user-read-email user-read-private"}
|
package/.prettierignore
DELETED
package/.prettierrc
DELETED
package/CHANGELOG.md
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
|
-
|
|
5
|
-
## 1.1.0 (2025-03-04)
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
### Features
|
|
9
|
-
|
|
10
|
-
* added cursor hide ([928c7f8](https://github.com/jthawme/ambient/commit/928c7f8aef867b947d77f198a1bda916ff13167b))
|
|
11
|
-
* added fleshed out adding panel ([0ebbbc2](https://github.com/jthawme/ambient/commit/0ebbbc2189599a94f55ecadcdff18909e1c1dc28))
|
|
12
|
-
* added history system and converted errors ([30977fc](https://github.com/jthawme/ambient/commit/30977fc9444738d7adbd8597656411e2154b9a4f))
|
|
13
|
-
* added screen lock to player ([11f5275](https://github.com/jthawme/ambient/commit/11f52751524d7de83b22ba84887cd330b55b8dda))
|
|
14
|
-
* added sonos fallback plugin ([0acefd8](https://github.com/jthawme/ambient/commit/0acefd8138765705c88c5e0b0c5cc3ad393549b9))
|
|
15
|
-
* introduced events ecosystem and config file injection ([c3ade28](https://github.com/jthawme/ambient/commit/c3ade28661d4709e72f4f1f5505c4564712fe773))
|
|
16
|
-
* removed plugins from root repo ([0b1528e](https://github.com/jthawme/ambient/commit/0b1528e2790cd9f70e71505780317ca19b0ae83f))
|
|
17
|
-
* sewn up the loop of built and running flows ([7b3f21a](https://github.com/jthawme/ambient/commit/7b3f21acce980d42c0e79d0f1bcea2bb5c410c44))
|
|
18
|
-
* switched to a centralised polling system first, to protect against rate limits ([3f33865](https://github.com/jthawme/ambient/commit/3f33865d6b8f528f7e69d6cffd54161f6c5c5d29))
|
|
19
|
-
* updated eco system ([de42b2b](https://github.com/jthawme/ambient/commit/de42b2b5d6341bac2c987c3d48cfdbd0cc8d3791))
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
### Bug Fixes
|
|
23
|
-
|
|
24
|
-
* added attempt at memoization for rate limiting ([9530833](https://github.com/jthawme/ambient/commit/95308335f7eb740de69ef78c542e821a5823f87e))
|
|
25
|
-
* added run script as seperate ([46d90ed](https://github.com/jthawme/ambient/commit/46d90edac3fafb18e8dc4be1c985bf13ad34baa2))
|
|
26
|
-
* backed off on certain endpoints ([d95b69c](https://github.com/jthawme/ambient/commit/d95b69c8466ce12cdae871bec2911009b7258383))
|
|
27
|
-
* built in messaging to spotify errors ([0cc61cb](https://github.com/jthawme/ambient/commit/0cc61cb5be2b902df259eb11d6012e60e4a7307c))
|
|
28
|
-
* continued to make the project less reliant on local install ([22060cc](https://github.com/jthawme/ambient/commit/22060cc4f3d84ebe7c47e328182b617cf7c7ea68))
|
|
29
|
-
* fixed issue with persisting sdk ([0f7fc23](https://github.com/jthawme/ambient/commit/0f7fc2309ec9a9c790060687af562cd2c5293eb2))
|
|
30
|
-
* fixed reauth strategy class ([cfa328d](https://github.com/jthawme/ambient/commit/cfa328dc1599c397ff85b2319800dce7d628283b))
|
|
31
|
-
* is main check fix ([77d087d](https://github.com/jthawme/ambient/commit/77d087d4dc68428e875d01c0b0259ecd47b2d681))
|
|
32
|
-
* protect the polling async function ([e5282b6](https://github.com/jthawme/ambient/commit/e5282b60050fc217e6d4861988cc603fbd594696))
|
|
33
|
-
* reintroduced package lock for npm ci ([fb906cc](https://github.com/jthawme/ambient/commit/fb906cccb8fd7c6856e1f2af28bd7cc429f8d236))
|
|
34
|
-
* small fixes ([0fc9688](https://github.com/jthawme/ambient/commit/0fc9688dc24629b47aaf96f27087011032fdaa6c))
|
package/env.template
DELETED
package/eslint.config.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import prettier from "eslint-config-prettier";
|
|
2
|
-
import js from '@eslint/js';
|
|
3
|
-
import { includeIgnoreFile } from '@eslint/compat';
|
|
4
|
-
import svelte from 'eslint-plugin-svelte';
|
|
5
|
-
import globals from 'globals';
|
|
6
|
-
import { fileURLToPath } from 'node:url';
|
|
7
|
-
const gitignorePath = fileURLToPath(new URL("./.gitignore", import.meta.url));
|
|
8
|
-
|
|
9
|
-
/** @type {import('eslint').Linter.Config[]} */
|
|
10
|
-
export default [
|
|
11
|
-
includeIgnoreFile(gitignorePath),
|
|
12
|
-
js.configs.recommended,
|
|
13
|
-
...svelte.configs["flat/recommended"],
|
|
14
|
-
prettier,
|
|
15
|
-
...svelte.configs['flat/prettier'],
|
|
16
|
-
{
|
|
17
|
-
languageOptions: {
|
|
18
|
-
globals: {
|
|
19
|
-
...globals.browser,
|
|
20
|
-
...globals.node
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
];
|
package/jsconfig.json
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"extends": "./.svelte-kit/tsconfig.json",
|
|
3
|
-
"compilerOptions": {
|
|
4
|
-
"allowJs": true,
|
|
5
|
-
"checkJs": true,
|
|
6
|
-
"esModuleInterop": true,
|
|
7
|
-
"forceConsistentCasingInFileNames": true,
|
|
8
|
-
"resolveJsonModule": true,
|
|
9
|
-
"skipLibCheck": true,
|
|
10
|
-
"sourceMap": true,
|
|
11
|
-
"strict": true,
|
|
12
|
-
"moduleResolution": "bundler"
|
|
13
|
-
}
|
|
14
|
-
// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias
|
|
15
|
-
// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files
|
|
16
|
-
//
|
|
17
|
-
// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes
|
|
18
|
-
// from the referenced tsconfig.json - TypeScript does not merge them in
|
|
19
|
-
}
|
package/screenshot.png
DELETED
|
Binary file
|
package/src/app.d.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
// See https://svelte.dev/docs/kit/types#app.d.ts
|
|
2
|
-
// for information about these interfaces
|
|
3
|
-
declare global {
|
|
4
|
-
namespace App {
|
|
5
|
-
// interface Error {}
|
|
6
|
-
// interface Locals {}
|
|
7
|
-
// interface PageData {}
|
|
8
|
-
// interface PageState {}
|
|
9
|
-
// interface Platform {}
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export {};
|
package/src/app.html
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
|
6
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
7
|
-
%sveltekit.head%
|
|
8
|
-
</head>
|
|
9
|
-
<body data-sveltekit-preload-data="hover">
|
|
10
|
-
<div style="display: contents">%sveltekit.body%</div>
|
|
11
|
-
</body>
|
|
12
|
-
</html>
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import QRCode from 'qrcode-svg';
|
|
2
|
-
|
|
3
|
-
export const qr = (node, { url, ...rest }) => {
|
|
4
|
-
// the node has been mounted in the DOM
|
|
5
|
-
|
|
6
|
-
$effect(() => {
|
|
7
|
-
var svg = new QRCode({
|
|
8
|
-
color: 'currentColor',
|
|
9
|
-
background: 'transparent',
|
|
10
|
-
padding: 0,
|
|
11
|
-
join: true,
|
|
12
|
-
container: 'svg-viewbox',
|
|
13
|
-
...rest,
|
|
14
|
-
content: url
|
|
15
|
-
}).svg();
|
|
16
|
-
|
|
17
|
-
node.innerHTML = svg;
|
|
18
|
-
|
|
19
|
-
return () => {
|
|
20
|
-
node.innerHTML = '';
|
|
21
|
-
};
|
|
22
|
-
});
|
|
23
|
-
};
|
package/src/lib/comms.js
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { io, Socket } from 'socket.io-client';
|
|
2
|
-
import { derived } from 'svelte/store';
|
|
3
|
-
import { address, settled } from './store';
|
|
4
|
-
|
|
5
|
-
/** */
|
|
6
|
-
const previous = {
|
|
7
|
-
/** @type {Socket | null} */
|
|
8
|
-
current: null
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
export const socket = derived([address, settled], ([$address, $settled]) => {
|
|
12
|
-
if (!$settled) {
|
|
13
|
-
return null;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const i = io($address.endpoint);
|
|
17
|
-
|
|
18
|
-
if (previous.current) {
|
|
19
|
-
previous.current.disconnect();
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
previous.current = i;
|
|
23
|
-
|
|
24
|
-
return i;
|
|
25
|
-
});
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { qr } from '$lib/actions/qr.svelte';
|
|
3
|
-
import { address } from '$lib/store';
|
|
4
|
-
</script>
|
|
5
|
-
|
|
6
|
-
<div class="content">
|
|
7
|
-
<div class="options">
|
|
8
|
-
<div class="options-left">
|
|
9
|
-
<h1>This instance is not authenticated</h1>
|
|
10
|
-
<p>
|
|
11
|
-
{$address.server('/spotify/start')}
|
|
12
|
-
<a href={$address.server('/spotify/start')}>Authenticate</a> or scan qr to authenticate via device
|
|
13
|
-
</p>
|
|
14
|
-
</div>
|
|
15
|
-
<div class="options-right">
|
|
16
|
-
<span class="qr" use:qr={{ url: $address.server('/spotify/start') }}></span>
|
|
17
|
-
</div>
|
|
18
|
-
<div class="options-bottom">
|
|
19
|
-
<p class="size-small-1 color-2">
|
|
20
|
-
Make sure that <em>{$address.server('/spotify/token')}</em> is added as a Redirect URI in your
|
|
21
|
-
spotify app dashboard
|
|
22
|
-
</p>
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
</div>
|
|
26
|
-
|
|
27
|
-
<style lang="scss">
|
|
28
|
-
.content {
|
|
29
|
-
position: absolute;
|
|
30
|
-
|
|
31
|
-
top: 50%;
|
|
32
|
-
left: 50%;
|
|
33
|
-
|
|
34
|
-
width: calc(100% - (var(--spacing-large) * 2));
|
|
35
|
-
max-width: 500px;
|
|
36
|
-
padding: var(--spacing-large);
|
|
37
|
-
|
|
38
|
-
transform: translate3d(-50%, -50%, 0);
|
|
39
|
-
|
|
40
|
-
background-color: var(--color-3);
|
|
41
|
-
color: var(--color-1);
|
|
42
|
-
|
|
43
|
-
border-radius: var(--border-radius-large);
|
|
44
|
-
|
|
45
|
-
p {
|
|
46
|
-
margin: 0.5em 0;
|
|
47
|
-
max-width: 65%;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
.qr {
|
|
51
|
-
display: block;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
.options {
|
|
56
|
-
display: grid;
|
|
57
|
-
|
|
58
|
-
grid-template-columns: 1fr 100px;
|
|
59
|
-
gap: var(--spacing-normal);
|
|
60
|
-
|
|
61
|
-
&-bottom {
|
|
62
|
-
grid-column: 1 / -1;
|
|
63
|
-
|
|
64
|
-
p {
|
|
65
|
-
margin: 0;
|
|
66
|
-
|
|
67
|
-
em {
|
|
68
|
-
color: vaR(--color-1);
|
|
69
|
-
font-style: normal;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
</style>
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
import { Pause, Play, PlaySkipBack, PlaySkipForward } from 'svelte-ionicons';
|
|
3
|
-
import { api } from '$lib/store';
|
|
4
|
-
|
|
5
|
-
const { playing = false, title, onTrigger = () => {}, canControl = true } = $props();
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
* A variable to create the illusion of immediate feedback
|
|
9
|
-
*
|
|
10
|
-
* @type {boolean | null}
|
|
11
|
-
*/
|
|
12
|
-
let eagerToggle = $state(null);
|
|
13
|
-
|
|
14
|
-
let playDisplay = $derived(eagerToggle ?? playing);
|
|
15
|
-
|
|
16
|
-
async function onSkipBackward() {
|
|
17
|
-
await $api.skipBackward();
|
|
18
|
-
onTrigger();
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
async function onPlay() {
|
|
22
|
-
eagerToggle = true;
|
|
23
|
-
await $api.play();
|
|
24
|
-
onTrigger();
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function onPause() {
|
|
28
|
-
eagerToggle = false;
|
|
29
|
-
await $api.pause();
|
|
30
|
-
onTrigger();
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async function onSkipForward() {
|
|
34
|
-
await $api.skipForward();
|
|
35
|
-
onTrigger();
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
$effect(() => {
|
|
39
|
-
if (typeof playing === 'boolean') {
|
|
40
|
-
eagerToggle = null;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<div class="controls color-1">
|
|
46
|
-
<div class="controls-top ellipsis">{title}</div>
|
|
47
|
-
|
|
48
|
-
{#if canControl}
|
|
49
|
-
<div class="controls-actions">
|
|
50
|
-
<button onclick={onSkipBackward} class="btn-reset">
|
|
51
|
-
<PlaySkipBack />
|
|
52
|
-
</button>
|
|
53
|
-
{#if playDisplay === true}
|
|
54
|
-
<button onclick={onPause} class="btn-reset">
|
|
55
|
-
<Pause />
|
|
56
|
-
</button>
|
|
57
|
-
{:else if playDisplay === false}
|
|
58
|
-
<button onclick={onPlay} class="btn-reset">
|
|
59
|
-
<Play />
|
|
60
|
-
</button>
|
|
61
|
-
{/if}
|
|
62
|
-
<button onclick={onSkipForward} class="btn-reset">
|
|
63
|
-
<PlaySkipForward />
|
|
64
|
-
</button>
|
|
65
|
-
</div>
|
|
66
|
-
{/if}
|
|
67
|
-
</div>
|
|
68
|
-
|
|
69
|
-
<style lang="scss">
|
|
70
|
-
.controls {
|
|
71
|
-
display: flex;
|
|
72
|
-
|
|
73
|
-
flex-direction: column;
|
|
74
|
-
align-items: center;
|
|
75
|
-
|
|
76
|
-
gap: var(--spacing-normal);
|
|
77
|
-
|
|
78
|
-
width: 100%;
|
|
79
|
-
max-width: 400px;
|
|
80
|
-
|
|
81
|
-
&-top {
|
|
82
|
-
width: 100%;
|
|
83
|
-
|
|
84
|
-
text-align: center;
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
:global(svg) {
|
|
88
|
-
fill: currentColor;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
</style>
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
const { full, low } = $props();
|
|
3
|
-
|
|
4
|
-
const LOAD_STATE = {
|
|
5
|
-
INITIAL: 0,
|
|
6
|
-
LOAD: 1,
|
|
7
|
-
FULL: 2,
|
|
8
|
-
COMPLETE: 3
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
let loadState = $state();
|
|
12
|
-
|
|
13
|
-
function onLowLoad() {
|
|
14
|
-
if (loadState === LOAD_STATE.INITIAL) {
|
|
15
|
-
loadState = LOAD_STATE.LOAD;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
function onFullLoad() {
|
|
20
|
-
loadState = LOAD_STATE.FULL;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let mounted = $state(false);
|
|
24
|
-
|
|
25
|
-
$effect(() => {
|
|
26
|
-
mounted = true;
|
|
27
|
-
});
|
|
28
|
-
</script>
|
|
29
|
-
|
|
30
|
-
<span
|
|
31
|
-
class="image"
|
|
32
|
-
class:display={loadState === LOAD_STATE.FULL || loadState === LOAD_STATE.COMPLETE}
|
|
33
|
-
>
|
|
34
|
-
{#if loadState !== LOAD_STATE.INITIAL && mounted}
|
|
35
|
-
<img
|
|
36
|
-
class="full"
|
|
37
|
-
src={full}
|
|
38
|
-
onload={onFullLoad}
|
|
39
|
-
alt=""
|
|
40
|
-
ontransitionend={() => (loadState = LOAD_STATE.COMPLETE)}
|
|
41
|
-
/>
|
|
42
|
-
{/if}
|
|
43
|
-
|
|
44
|
-
{#if loadState !== LOAD_STATE.COMPLETE}
|
|
45
|
-
<img class="low" src={low} onload={onLowLoad} alt="" />
|
|
46
|
-
{/if}
|
|
47
|
-
</span>
|
|
48
|
-
|
|
49
|
-
<style lang="scss">
|
|
50
|
-
.image {
|
|
51
|
-
display: inline-grid;
|
|
52
|
-
|
|
53
|
-
grid-template-columns: 1fr;
|
|
54
|
-
grid-template-rows: 1fr;
|
|
55
|
-
|
|
56
|
-
line-height: 0;
|
|
57
|
-
|
|
58
|
-
width: 100%;
|
|
59
|
-
height: 100%;
|
|
60
|
-
|
|
61
|
-
img {
|
|
62
|
-
grid-column: 1;
|
|
63
|
-
grid-row: 1;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
.full {
|
|
68
|
-
opacity: 0;
|
|
69
|
-
|
|
70
|
-
transition: {
|
|
71
|
-
duration: 0.5s;
|
|
72
|
-
property: opacity;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
.display & {
|
|
76
|
-
opacity: 1;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
</style>
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
<script>
|
|
2
|
-
const { floating = false } = $props();
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<div class="loading" class:floating>
|
|
6
|
-
<div class="loading-icon"></div>
|
|
7
|
-
<div class="loading-icon"></div>
|
|
8
|
-
<div class="loading-icon"></div>
|
|
9
|
-
</div>
|
|
10
|
-
|
|
11
|
-
<style lang="scss">
|
|
12
|
-
@property --loading-size {
|
|
13
|
-
syntax: '<length>';
|
|
14
|
-
inherits: false;
|
|
15
|
-
initial-value: 16px;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
.loading {
|
|
19
|
-
display: inline-grid;
|
|
20
|
-
|
|
21
|
-
aspect-ratio: 1;
|
|
22
|
-
align-items: center;
|
|
23
|
-
grid-template-columns: repeat(3, var(--loading-size));
|
|
24
|
-
|
|
25
|
-
padding: var(--loading-padding, var(--spacing-small));
|
|
26
|
-
gap: var(--loading-gap, var(--spacing-small));
|
|
27
|
-
|
|
28
|
-
background-color: var(--color-1);
|
|
29
|
-
border-radius: var(--border-radius-normal);
|
|
30
|
-
|
|
31
|
-
&.floating {
|
|
32
|
-
position: absolute;
|
|
33
|
-
|
|
34
|
-
top: 50%;
|
|
35
|
-
left: 50%;
|
|
36
|
-
|
|
37
|
-
transform: translate3d(-50%, -50%, 0);
|
|
38
|
-
|
|
39
|
-
z-index: 20;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
.loading-icon {
|
|
44
|
-
background-color: var(--color-bg);
|
|
45
|
-
|
|
46
|
-
aspect-ratio: 1;
|
|
47
|
-
|
|
48
|
-
border-radius: 100%;
|
|
49
|
-
|
|
50
|
-
animation: {
|
|
51
|
-
name: BLOAT;
|
|
52
|
-
duration: 1.2s;
|
|
53
|
-
iteration-count: infinite;
|
|
54
|
-
timing-function: var(--easing);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
@for $i from 1 through 3 {
|
|
58
|
-
&:nth-child(#{$i}) {
|
|
59
|
-
animation-delay: 0.15s * ($i - 1);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
@keyframes BLOAT {
|
|
65
|
-
0% {
|
|
66
|
-
transform: scale(1);
|
|
67
|
-
}
|
|
68
|
-
50% {
|
|
69
|
-
transform: scale(1.2);
|
|
70
|
-
}
|
|
71
|
-
100% {
|
|
72
|
-
transform: scale(1);
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
</style>
|