home-atom 1.0.1

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 (169) hide show
  1. package/README.md +25 -0
  2. package/bin/home-atom.js +135 -0
  3. package/dist/client/.vite/manifest.json +184 -0
  4. package/dist/client/_next/static/chunks/app-top-nav-Dh0jEt8u.js +1 -0
  5. package/dist/client/_next/static/chunks/chevron-left-Dn3noAqV.js +1 -0
  6. package/dist/client/_next/static/chunks/framework-BQUlGUOV.js +9 -0
  7. package/dist/client/_next/static/chunks/hls-CgexCc5Z.js +40 -0
  8. package/dist/client/_next/static/chunks/house-DQz6VeTk.js +1 -0
  9. package/dist/client/_next/static/chunks/index-hn3AiVww.js +33 -0
  10. package/dist/client/_next/static/chunks/layout-segment-context-DRM8YCgm.js +1 -0
  11. package/dist/client/_next/static/chunks/manage-profiles-modal-Doi6QM4e.js +1 -0
  12. package/dist/client/_next/static/chunks/navigation-errors-C_V42-00.js +1 -0
  13. package/dist/client/_next/static/chunks/netflix-browser-L_Vb9wXK.js +2 -0
  14. package/dist/client/_next/static/chunks/playback-activity-Dug3BRYr.js +1 -0
  15. package/dist/client/_next/static/chunks/playback-activity-track-switcher-CbO6kl8K.js +1 -0
  16. package/dist/client/_next/static/chunks/rolldown-runtime-QTnfLwEv.js +1 -0
  17. package/dist/client/_next/static/chunks/spotify-app-f93K4FG_.js +1 -0
  18. package/dist/client/_next/static/chunks/step-forward-CV8I5pPb.js +1 -0
  19. package/dist/client/_next/static/chunks/storefront-C_nmcuvH.js +1 -0
  20. package/dist/client/_next/static/chunks/streamed-icons-DwsKSgMb.js +1 -0
  21. package/dist/client/_next/static/css/index.BGXy8e6j.css +1 -0
  22. package/dist/client/_next/static/css/layout.AKSLtSR6.css +1 -0
  23. package/dist/client/_next/static/css/layout.D8T68cCD.css +1 -0
  24. package/dist/client/_next/static/css/manage-profiles-modal.BAVyxRRR.css +1 -0
  25. package/dist/client/_next/static/e1ce9af7-d770-43d6-845a-511443f19971/_buildManifest.js +1 -0
  26. package/dist/client/_next/static/e1ce9af7-d770-43d6-845a-511443f19971/_ssgManifest.js +1 -0
  27. package/dist/client/_next/static/media/roboto-cyrillic-ext-wght-normal.BCp_3N7R.woff2 +0 -0
  28. package/dist/client/_next/static/media/roboto-cyrillic-wght-normal.fOt7epNf.woff2 +0 -0
  29. package/dist/client/_next/static/media/roboto-greek-ext-wght-normal.Bgw4czJT.woff2 +0 -0
  30. package/dist/client/_next/static/media/roboto-greek-wght-normal.DlT9XTxE.woff2 +0 -0
  31. package/dist/client/_next/static/media/roboto-latin-ext-wght-normal.DYIxWhlt.woff2 +0 -0
  32. package/dist/client/_next/static/media/roboto-latin-wght-normal.ccAYIvAh.woff2 +0 -0
  33. package/dist/client/_next/static/media/roboto-math-wght-normal.4a3xuzGk.woff2 +0 -0
  34. package/dist/client/_next/static/media/roboto-symbols-wght-normal.B7iHSfaG.woff2 +0 -0
  35. package/dist/client/_next/static/media/roboto-vietnamese-wght-normal._f1XEJpo.woff2 +0 -0
  36. package/dist/client/icons/home.ico +0 -0
  37. package/dist/client/icons/keyboard.ico +0 -0
  38. package/dist/client/icons/netflix.ico +0 -0
  39. package/dist/client/icons/remote-screen.ico +0 -0
  40. package/dist/client/icons/spotify.ico +0 -0
  41. package/dist/client/vinext-client-entry-manifest.json +3 -0
  42. package/dist/server/BUILD_ID +1 -0
  43. package/dist/server/__vite_rsc_assets_manifest.js +162 -0
  44. package/dist/server/_next/static/app-page-cache-DcrtN14Y.js +1 -0
  45. package/dist/server/_next/static/app-page-cache-render-DoCquoNb.js +1 -0
  46. package/dist/server/_next/static/app-prerender-endpoints-rDLH8gfm.js +1 -0
  47. package/dist/server/_next/static/app-route-handler-dispatch-Be2YIqVp.js +1 -0
  48. package/dist/server/_next/static/app-static-generation-BX8cz43B.js +1 -0
  49. package/dist/server/_next/static/app-top-nav-aGPkB57A.js +1 -0
  50. package/dist/server/_next/static/automation-UGP78ei5.js +172 -0
  51. package/dist/server/_next/static/automation-tAN_1u1H.js +118 -0
  52. package/dist/server/_next/static/base-path-Cmiu3HvG.js +1 -0
  53. package/dist/server/_next/static/cache-headers-BQ-QuzWN.js +1 -0
  54. package/dist/server/_next/static/catalog-BS93IoWO.js +1 -0
  55. package/dist/server/_next/static/css/index.BGXy8e6j.css +1 -0
  56. package/dist/server/_next/static/css/layout.AKSLtSR6.css +1 -0
  57. package/dist/server/_next/static/css/layout.D8T68cCD.css +1 -0
  58. package/dist/server/_next/static/database-BNnYfHmT.js +114 -0
  59. package/dist/server/_next/static/db-BE1J0NNS.js +98 -0
  60. package/dist/server/_next/static/downloader-DgnjNL5T.js +21 -0
  61. package/dist/server/_next/static/framework~index-B2E_Di_-.js +18 -0
  62. package/dist/server/_next/static/framework~index~layout~layout~page~page~page~layout~page~app-page-cache-render~app-page-cac~nvd6h53m-ydvR7YSg.js +1 -0
  63. package/dist/server/_next/static/http-B2HyuWoI.js +1 -0
  64. package/dist/server/_next/static/input-platform-C0756QEt.js +1 -0
  65. package/dist/server/_next/static/instrumentation-BV3gg-L-.js +1 -0
  66. package/dist/server/_next/static/isr-decision-D1zHgPSI.js +1 -0
  67. package/dist/server/_next/static/layout-ClEWbCcj.js +1 -0
  68. package/dist/server/_next/static/layout-Ds3pFa6r.js +1 -0
  69. package/dist/server/_next/static/media/roboto-cyrillic-ext-wght-normal.BCp_3N7R.woff2 +0 -0
  70. package/dist/server/_next/static/media/roboto-cyrillic-wght-normal.fOt7epNf.woff2 +0 -0
  71. package/dist/server/_next/static/media/roboto-greek-ext-wght-normal.Bgw4czJT.woff2 +0 -0
  72. package/dist/server/_next/static/media/roboto-greek-wght-normal.DlT9XTxE.woff2 +0 -0
  73. package/dist/server/_next/static/media/roboto-latin-ext-wght-normal.DYIxWhlt.woff2 +0 -0
  74. package/dist/server/_next/static/media/roboto-latin-wght-normal.ccAYIvAh.woff2 +0 -0
  75. package/dist/server/_next/static/media/roboto-math-wght-normal.4a3xuzGk.woff2 +0 -0
  76. package/dist/server/_next/static/media/roboto-symbols-wght-normal.B7iHSfaG.woff2 +0 -0
  77. package/dist/server/_next/static/media/roboto-vietnamese-wght-normal._f1XEJpo.woff2 +0 -0
  78. package/dist/server/_next/static/netflix-page-BRbORN1F.js +1 -0
  79. package/dist/server/_next/static/page-C457kN_n.js +1 -0
  80. package/dist/server/_next/static/page-Cs-erYTy.js +1 -0
  81. package/dist/server/_next/static/page-DlBGATQp.js +1 -0
  82. package/dist/server/_next/static/page-DlRXyzSQ.js +1 -0
  83. package/dist/server/_next/static/providers-B3YELr_F.js +108 -0
  84. package/dist/server/_next/static/providers-CMBIwNGs.js +1 -0
  85. package/dist/server/_next/static/request-context-C1ZJzkex.js +1 -0
  86. package/dist/server/_next/static/request-profile-B1yGQ0l6.js +1 -0
  87. package/dist/server/_next/static/rolldown-runtime-DaDcL9Zw.js +1 -0
  88. package/dist/server/_next/static/route-96DdgJBs.js +1 -0
  89. package/dist/server/_next/static/route-B0WNLJZp.js +1 -0
  90. package/dist/server/_next/static/route-BBmE0xf12.js +1 -0
  91. package/dist/server/_next/static/route-BPcAdbz_.js +1 -0
  92. package/dist/server/_next/static/route-BWk9YK7r.js +1 -0
  93. package/dist/server/_next/static/route-BdG5ojMj2.js +1 -0
  94. package/dist/server/_next/static/route-BovNctFc.js +1 -0
  95. package/dist/server/_next/static/route-C2LuSjoh.js +1 -0
  96. package/dist/server/_next/static/route-C74RA7va.js +1 -0
  97. package/dist/server/_next/static/route-CCUsQ7AG.js +1 -0
  98. package/dist/server/_next/static/route-CHJzaQu2.js +73 -0
  99. package/dist/server/_next/static/route-CN6VdJwN.js +1 -0
  100. package/dist/server/_next/static/route-CNNiXZoM2.js +1 -0
  101. package/dist/server/_next/static/route-CVPPmUto.js +1 -0
  102. package/dist/server/_next/static/route-CeVsDcbj2.js +1 -0
  103. package/dist/server/_next/static/route-Cim7D4XQ.js +1 -0
  104. package/dist/server/_next/static/route-CjUCKwSj2.js +1 -0
  105. package/dist/server/_next/static/route-CkH7Cg-p.js +1 -0
  106. package/dist/server/_next/static/route-Cn40NftM.js +1 -0
  107. package/dist/server/_next/static/route-DAyF4BHS.js +1 -0
  108. package/dist/server/_next/static/route-DWAMZHLa.js +1 -0
  109. package/dist/server/_next/static/route-DXTJyFWD.js +1 -0
  110. package/dist/server/_next/static/route-D_G2SOlz.js +1 -0
  111. package/dist/server/_next/static/route-Dbs39TkC.js +1 -0
  112. package/dist/server/_next/static/route-DiT9UYUd.js +1 -0
  113. package/dist/server/_next/static/route-DslPFTAK.js +1 -0
  114. package/dist/server/_next/static/route-UWQN8uYr.js +1 -0
  115. package/dist/server/_next/static/route-ipFkK3iA.js +1 -0
  116. package/dist/server/_next/static/route-jMq6H_yh.js +1 -0
  117. package/dist/server/_next/static/route-mzLdjDCs2.js +1 -0
  118. package/dist/server/_next/static/route-vD15s2A8.js +1 -0
  119. package/dist/server/_next/static/route-xtz48fti.js +1 -0
  120. package/dist/server/_next/static/route-zazqen-A2.js +1 -0
  121. package/dist/server/_next/static/seed-cache-oCd9Lfdw.js +1 -0
  122. package/dist/server/_next/static/server-CS40XqUP.js +1 -0
  123. package/dist/server/_next/static/storage-D1zF0J_t.js +288 -0
  124. package/dist/server/_next/static/streamer-B1PRR-dj.js +2 -0
  125. package/dist/server/_next/static/subtitles-DYBlMnha.js +2 -0
  126. package/dist/server/_next/static/title-progress-CQBrSxvN.js +1 -0
  127. package/dist/server/_next/static/unified-request-context-CgIMz2dD.js +1 -0
  128. package/dist/server/index.js +17 -0
  129. package/dist/server/prerendered-routes/404.html +2 -0
  130. package/dist/server/prerendered-routes/index.html +2 -0
  131. package/dist/server/prerendered-routes/index.rsc +13 -0
  132. package/dist/server/ssr/__vite_rsc_assets_manifest.js +162 -0
  133. package/dist/server/ssr/_next/static/app-elements-Psr6bSdJ.js +1 -0
  134. package/dist/server/ssr/_next/static/app-prefetch-fetch-queue-Dm_lGOGz.js +1 -0
  135. package/dist/server/ssr/_next/static/app-router-context-QPmikWPX.js +1 -0
  136. package/dist/server/ssr/_next/static/app-router-scroll-C0MNOLz-.js +1 -0
  137. package/dist/server/ssr/_next/static/app-top-nav-a5vUAoEs.js +1 -0
  138. package/dist/server/ssr/_next/static/base-path-DtcGyvwb.js +1 -0
  139. package/dist/server/ssr/_next/static/chevron-left-CkBJG8E2.js +1 -0
  140. package/dist/server/ssr/_next/static/css/refresh-cw.BAVyxRRR.css +1 -0
  141. package/dist/server/ssr/_next/static/default-global-error-B62cHCkh.js +31 -0
  142. package/dist/server/ssr/_next/static/error-boundary-C28whqLB.js +1 -0
  143. package/dist/server/ssr/_next/static/hls-CgexCc5Z.js +40 -0
  144. package/dist/server/ssr/_next/static/house-l1u9dUbj.js +1 -0
  145. package/dist/server/ssr/_next/static/layout-segment-context-DK0O-NeY.js +1 -0
  146. package/dist/server/ssr/_next/static/minimize-C9JLgte-.js +1 -0
  147. package/dist/server/ssr/_next/static/navigation-BCDRWdBm.js +1 -0
  148. package/dist/server/ssr/_next/static/navigation-context-state-BnWorqxb.js +1 -0
  149. package/dist/server/ssr/_next/static/navigation-errors-BRIEcp79.js +1 -0
  150. package/dist/server/ssr/_next/static/navigation-server-CCLiCOcy.js +1 -0
  151. package/dist/server/ssr/_next/static/netflix-browser-CMAehdwi.js +2 -0
  152. package/dist/server/ssr/_next/static/pin-BQre-tQY.js +1 -0
  153. package/dist/server/ssr/_next/static/playback-activity-D5TYX2Ae.js +1 -0
  154. package/dist/server/ssr/_next/static/refresh-cw-CWdWHjqY.js +1 -0
  155. package/dist/server/ssr/_next/static/rolldown-runtime-DSjMdhoD.js +1 -0
  156. package/dist/server/ssr/_next/static/slot-CE_M6qTT.js +1 -0
  157. package/dist/server/ssr/_next/static/spotify-app-CE-RaTjZ.js +1 -0
  158. package/dist/server/ssr/_next/static/storefront-C5NNzPMa.js +1 -0
  159. package/dist/server/ssr/_next/static/streamed-icons-D2p1hUS_.js +1 -0
  160. package/dist/server/ssr/_next/static/url-safety-CnwxMXYX.js +1 -0
  161. package/dist/server/ssr/index.js +3 -0
  162. package/dist/server/ssr/vinext-client-assets.js +1 -0
  163. package/dist/server/ssr/vinext-server.json +1 -0
  164. package/dist/server/vinext-client-assets.js +1 -0
  165. package/dist/server/vinext-externals.json +5 -0
  166. package/dist/server/vinext-prerender-paths.json +7 -0
  167. package/dist/server/vinext-prerender.json +219 -0
  168. package/dist/server/vinext-server.json +1 -0
  169. package/package.json +66 -0
package/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # Home Atom
2
+
3
+ Home Atom is a self-hosted home entertainment dashboard.
4
+
5
+ ## Run
6
+
7
+ Node.js 20.19 or newer is required.
8
+
9
+ ```sh
10
+ npm exec -y home-atom
11
+ ```
12
+
13
+ The server starts at <http://localhost:5567>. To use another port or bind
14
+ address:
15
+
16
+ ```sh
17
+ npm exec -y home-atom -- --port 3000 --hostname 127.0.0.1
18
+ ```
19
+
20
+ `PORT` and `HOST` are also supported.
21
+
22
+ Home Atom stores profiles and downloaded media in `./data` by default, relative
23
+ to the directory where the command is run. See
24
+ [`docs/profile-storage.md`](docs/profile-storage.md) in the repository for the
25
+ available data-directory environment variables and migration behavior.
@@ -0,0 +1,135 @@
1
+ #!/usr/bin/env node
2
+
3
+ import path from "node:path";
4
+ import process from "node:process";
5
+ import { fileURLToPath } from "node:url";
6
+
7
+ const DEFAULT_PORT = 5567;
8
+ const DEFAULT_HOSTNAME = "0.0.0.0";
9
+
10
+ function fail(message) {
11
+ console.error(`home-atom: ${message}`);
12
+ console.error("Run `home-atom --help` for usage.");
13
+ process.exitCode = 1;
14
+ }
15
+
16
+ function valueAfter(args, index, option) {
17
+ const value = args[index + 1];
18
+
19
+ if (!value || value.startsWith("-")) {
20
+ throw new Error(`${option} requires a value`);
21
+ }
22
+
23
+ return value;
24
+ }
25
+
26
+ function parseArgs(args) {
27
+ let port = process.env.PORT || String(DEFAULT_PORT);
28
+ let hostname = process.env.HOST || DEFAULT_HOSTNAME;
29
+
30
+ for (let index = 0; index < args.length; index += 1) {
31
+ const arg = args[index];
32
+
33
+ if (arg === "-h" || arg === "--help") {
34
+ return { help: true };
35
+ }
36
+
37
+ if (arg === "-p" || arg === "--port") {
38
+ port = valueAfter(args, index, arg);
39
+ index += 1;
40
+ continue;
41
+ }
42
+
43
+ if (arg.startsWith("--port=")) {
44
+ port = arg.slice("--port=".length);
45
+ continue;
46
+ }
47
+
48
+ if (arg === "-H" || arg === "--hostname") {
49
+ hostname = valueAfter(args, index, arg);
50
+ index += 1;
51
+ continue;
52
+ }
53
+
54
+ if (arg.startsWith("--hostname=")) {
55
+ hostname = arg.slice("--hostname=".length);
56
+ continue;
57
+ }
58
+
59
+ throw new Error(`unknown option: ${arg}`);
60
+ }
61
+
62
+ const parsedPort = Number(port);
63
+
64
+ if (!Number.isInteger(parsedPort) || parsedPort < 1 || parsedPort > 65535) {
65
+ throw new Error(`port must be an integer between 1 and 65535 (received ${port})`);
66
+ }
67
+
68
+ if (!hostname.trim()) {
69
+ throw new Error("hostname cannot be empty");
70
+ }
71
+
72
+ return { help: false, hostname: hostname.trim(), port: parsedPort };
73
+ }
74
+
75
+ function printHelp() {
76
+ console.log(`
77
+ Home Atom
78
+
79
+ Usage:
80
+ home-atom [options]
81
+
82
+ Options:
83
+ -p, --port <port> Port to listen on (default: ${DEFAULT_PORT}, or PORT)
84
+ -H, --hostname <hostname> Interface to bind to (default: ${DEFAULT_HOSTNAME}, or HOST)
85
+ -h, --help Show this help
86
+
87
+ Home Atom stores its data in ./data by default. Run it from the directory where
88
+ you want that data to live, or use the HOME_ATOM_* data directory variables.
89
+ `.trim());
90
+ }
91
+
92
+ let options;
93
+
94
+ try {
95
+ options = parseArgs(process.argv.slice(2));
96
+ } catch (error) {
97
+ fail(error instanceof Error ? error.message : String(error));
98
+ }
99
+
100
+ if (options?.help) {
101
+ printHelp();
102
+ } else if (options) {
103
+ const packageRoot = path.dirname(
104
+ path.dirname(fileURLToPath(import.meta.url)),
105
+ );
106
+ const displayHostname =
107
+ options.hostname === "0.0.0.0" || options.hostname === "::"
108
+ ? "localhost"
109
+ : options.hostname;
110
+
111
+ process.env.NODE_ENV = "production";
112
+ process.env.PORT = String(options.port);
113
+
114
+ // Import vinext only after NODE_ENV is set: a hoisted static import would
115
+ // load React's development build and mismatch the production SSR renderer.
116
+ const { startProdServer } = await import("vinext/server/prod-server");
117
+
118
+ console.log(`Home Atom is starting at http://${displayHostname}:${options.port}`);
119
+ const hasConfiguredDataDirectory = Object.keys(process.env).some((name) =>
120
+ (name.startsWith("HOME_ATOM_") && name.endsWith("_DIR")) ||
121
+ name === "HOME_ATOM_PROFILE_DATA_ROOT"
122
+ );
123
+
124
+ console.log(
125
+ hasConfiguredDataDirectory
126
+ ? "Data directories: configured by HOME_ATOM_* environment variables"
127
+ : `Data directory: ${path.resolve(process.cwd(), "data")}`,
128
+ );
129
+
130
+ await startProdServer({
131
+ host: options.hostname,
132
+ outDir: path.join(packageRoot, "dist"),
133
+ port: options.port,
134
+ });
135
+ }
@@ -0,0 +1,184 @@
1
+ {
2
+ "_chevron-left-Dn3noAqV.js": {
3
+ "file": "_next/static/chunks/chevron-left-Dn3noAqV.js",
4
+ "name": "chevron-left",
5
+ "imports": [
6
+ "_rolldown-runtime-QTnfLwEv.js",
7
+ "_framework-BQUlGUOV.js"
8
+ ]
9
+ },
10
+ "_framework-BQUlGUOV.js": {
11
+ "file": "_next/static/chunks/framework-BQUlGUOV.js",
12
+ "name": "framework",
13
+ "imports": [
14
+ "_rolldown-runtime-QTnfLwEv.js"
15
+ ]
16
+ },
17
+ "_house-DQz6VeTk.js": {
18
+ "file": "_next/static/chunks/house-DQz6VeTk.js",
19
+ "name": "house",
20
+ "imports": [
21
+ "_chevron-left-Dn3noAqV.js"
22
+ ]
23
+ },
24
+ "_manage-profiles-modal-Doi6QM4e.js": {
25
+ "file": "_next/static/chunks/manage-profiles-modal-Doi6QM4e.js",
26
+ "name": "manage-profiles-modal",
27
+ "imports": [
28
+ "_rolldown-runtime-QTnfLwEv.js",
29
+ "_framework-BQUlGUOV.js",
30
+ "_chevron-left-Dn3noAqV.js"
31
+ ],
32
+ "css": [
33
+ "_next/static/css/manage-profiles-modal.BAVyxRRR.css"
34
+ ]
35
+ },
36
+ "_manage-profiles-modal.BAVyxRRR.css": {
37
+ "file": "_next/static/css/manage-profiles-modal.BAVyxRRR.css",
38
+ "src": "_manage-profiles-modal.BAVyxRRR.css"
39
+ },
40
+ "_navigation-errors-C_V42-00.js": {
41
+ "file": "_next/static/chunks/navigation-errors-C_V42-00.js",
42
+ "name": "navigation-errors",
43
+ "imports": [
44
+ "_rolldown-runtime-QTnfLwEv.js",
45
+ "_framework-BQUlGUOV.js"
46
+ ]
47
+ },
48
+ "_playback-activity-Dug3BRYr.js": {
49
+ "file": "_next/static/chunks/playback-activity-Dug3BRYr.js",
50
+ "name": "playback-activity",
51
+ "imports": [
52
+ "_chevron-left-Dn3noAqV.js"
53
+ ]
54
+ },
55
+ "_playback-activity-track-switcher-CbO6kl8K.js": {
56
+ "file": "_next/static/chunks/playback-activity-track-switcher-CbO6kl8K.js",
57
+ "name": "playback-activity-track-switcher",
58
+ "imports": [
59
+ "_rolldown-runtime-QTnfLwEv.js",
60
+ "_framework-BQUlGUOV.js",
61
+ "_chevron-left-Dn3noAqV.js",
62
+ "_manage-profiles-modal-Doi6QM4e.js"
63
+ ]
64
+ },
65
+ "_rolldown-runtime-QTnfLwEv.js": {
66
+ "file": "_next/static/chunks/rolldown-runtime-QTnfLwEv.js",
67
+ "name": "rolldown-runtime"
68
+ },
69
+ "_step-forward-CV8I5pPb.js": {
70
+ "file": "_next/static/chunks/step-forward-CV8I5pPb.js",
71
+ "name": "step-forward",
72
+ "imports": [
73
+ "_chevron-left-Dn3noAqV.js"
74
+ ]
75
+ },
76
+ "app/app-top-nav.tsx": {
77
+ "file": "_next/static/chunks/app-top-nav-Dh0jEt8u.js",
78
+ "name": "app-top-nav",
79
+ "src": "app/app-top-nav.tsx",
80
+ "isDynamicEntry": true,
81
+ "imports": [
82
+ "_framework-BQUlGUOV.js",
83
+ "virtual:vinext-app-browser-entry",
84
+ "_chevron-left-Dn3noAqV.js",
85
+ "_house-DQz6VeTk.js"
86
+ ]
87
+ },
88
+ "app/storefront.tsx": {
89
+ "file": "_next/static/chunks/storefront-C_nmcuvH.js",
90
+ "name": "storefront",
91
+ "src": "app/storefront.tsx",
92
+ "isDynamicEntry": true,
93
+ "imports": [
94
+ "_rolldown-runtime-QTnfLwEv.js",
95
+ "_framework-BQUlGUOV.js",
96
+ "virtual:vinext-app-browser-entry",
97
+ "_chevron-left-Dn3noAqV.js",
98
+ "_step-forward-CV8I5pPb.js",
99
+ "_playback-activity-track-switcher-CbO6kl8K.js",
100
+ "_manage-profiles-modal-Doi6QM4e.js"
101
+ ]
102
+ },
103
+ "features/netflix/netflix-browser.tsx": {
104
+ "file": "_next/static/chunks/netflix-browser-L_Vb9wXK.js",
105
+ "name": "netflix-browser",
106
+ "src": "features/netflix/netflix-browser.tsx",
107
+ "isDynamicEntry": true,
108
+ "imports": [
109
+ "_rolldown-runtime-QTnfLwEv.js",
110
+ "_framework-BQUlGUOV.js",
111
+ "virtual:vinext-app-browser-entry",
112
+ "_chevron-left-Dn3noAqV.js",
113
+ "_step-forward-CV8I5pPb.js",
114
+ "_playback-activity-Dug3BRYr.js",
115
+ "_manage-profiles-modal-Doi6QM4e.js"
116
+ ],
117
+ "dynamicImports": [
118
+ "node_modules/hls.js/dist/hls.mjs"
119
+ ]
120
+ },
121
+ "features/spotify/spotify-app.tsx": {
122
+ "file": "_next/static/chunks/spotify-app-f93K4FG_.js",
123
+ "name": "spotify-app",
124
+ "src": "features/spotify/spotify-app.tsx",
125
+ "isDynamicEntry": true,
126
+ "imports": [
127
+ "_rolldown-runtime-QTnfLwEv.js",
128
+ "_framework-BQUlGUOV.js",
129
+ "_chevron-left-Dn3noAqV.js",
130
+ "_playback-activity-track-switcher-CbO6kl8K.js",
131
+ "_playback-activity-Dug3BRYr.js",
132
+ "_manage-profiles-modal-Doi6QM4e.js",
133
+ "_house-DQz6VeTk.js"
134
+ ]
135
+ },
136
+ "node_modules/hls.js/dist/hls.mjs": {
137
+ "file": "_next/static/chunks/hls-CgexCc5Z.js",
138
+ "name": "hls",
139
+ "src": "node_modules/hls.js/dist/hls.mjs",
140
+ "isDynamicEntry": true
141
+ },
142
+ "node_modules/vinext/dist/shims/layout-segment-context.js": {
143
+ "file": "_next/static/chunks/layout-segment-context-DRM8YCgm.js",
144
+ "name": "layout-segment-context",
145
+ "src": "node_modules/vinext/dist/shims/layout-segment-context.js",
146
+ "isDynamicEntry": true,
147
+ "imports": [
148
+ "_rolldown-runtime-QTnfLwEv.js",
149
+ "_framework-BQUlGUOV.js",
150
+ "_navigation-errors-C_V42-00.js",
151
+ "virtual:vinext-app-browser-entry"
152
+ ]
153
+ },
154
+ "node_modules/vinext/dist/shims/streamed-icons.js": {
155
+ "file": "_next/static/chunks/streamed-icons-DwsKSgMb.js",
156
+ "name": "streamed-icons",
157
+ "src": "node_modules/vinext/dist/shims/streamed-icons.js",
158
+ "isDynamicEntry": true,
159
+ "imports": [
160
+ "_rolldown-runtime-QTnfLwEv.js",
161
+ "_framework-BQUlGUOV.js"
162
+ ]
163
+ },
164
+ "virtual:vinext-app-browser-entry": {
165
+ "file": "_next/static/chunks/index-hn3AiVww.js",
166
+ "name": "index",
167
+ "src": "virtual:vinext-app-browser-entry",
168
+ "isEntry": true,
169
+ "imports": [
170
+ "_rolldown-runtime-QTnfLwEv.js",
171
+ "_framework-BQUlGUOV.js",
172
+ "_navigation-errors-C_V42-00.js"
173
+ ],
174
+ "dynamicImports": [
175
+ "virtual:vinext-app-browser-entry",
176
+ "node_modules/vinext/dist/shims/layout-segment-context.js",
177
+ "features/netflix/netflix-browser.tsx",
178
+ "features/spotify/spotify-app.tsx",
179
+ "node_modules/vinext/dist/shims/streamed-icons.js",
180
+ "app/app-top-nav.tsx",
181
+ "app/storefront.tsx"
182
+ ]
183
+ }
184
+ }
@@ -0,0 +1 @@
1
+ import{i as e}from"./framework-BQUlGUOV.js";import{t}from"./index-hn3AiVww.js";import{t as n}from"./chevron-left-Dn3noAqV.js";import{t as r}from"./house-DQz6VeTk.js";var i=e(),a={netflix:`Netflix`,spotify:`Spotify`};function o(){let e=t().split(`/`).filter(Boolean)[0]??``,o=a[e]??e;return(0,i.jsxs)(`nav`,{className:`app-top-nav`,"aria-label":`App navigation`,children:[(0,i.jsxs)(`a`,{className:`app-top-nav__home`,href:`/`,children:[(0,i.jsx)(n,{size:16,strokeWidth:2.5}),(0,i.jsx)(r,{size:14,strokeWidth:2.2}),(0,i.jsx)(`span`,{children:`Home`})]}),(0,i.jsx)(`span`,{className:`app-top-nav__separator`,"aria-hidden":`true`,children:`/`}),(0,i.jsx)(`span`,{className:`app-top-nav__app`,children:o})]})}export{o as AppTopNav};
@@ -0,0 +1 @@
1
+ import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{r as t}from"./framework-BQUlGUOV.js";var n=e(t(),1),r=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),i=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),a=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),o=e=>{let t=a(e);return t.charAt(0).toUpperCase()+t.slice(1)},s={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},c=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},l=(0,n.createContext)({}),u=()=>(0,n.useContext)(l),d=(0,n.forwardRef)(({color:e,size:t,strokeWidth:i,absoluteStrokeWidth:a,className:o=``,children:l,iconNode:d,...f},p)=>{let{size:m=24,strokeWidth:h=2,absoluteStrokeWidth:g=!1,color:_=`currentColor`,className:v=``}=u()??{},y=a??g?Number(i??h)*24/Number(t??m):i??h;return(0,n.createElement)(`svg`,{ref:p,...s,width:t??m??s.width,height:t??m??s.height,stroke:e??_,strokeWidth:y,className:r(`lucide`,v,o),...!l&&!c(f)&&{"aria-hidden":`true`},...f},[...d.map(([e,t])=>(0,n.createElement)(e,t)),...Array.isArray(l)?l:[l]])}),f=(e,t)=>{let a=(0,n.forwardRef)(({className:a,...s},c)=>(0,n.createElement)(d,{ref:c,iconNode:t,className:r(`lucide-${i(o(e))}`,`lucide-${e}`,a),...s}));return a.displayName=o(e),a},p=f(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]);export{f as n,p as t};