adjacent-cli 0.1.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.
Files changed (108) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/LICENSE +21 -0
  3. package/README.md +48 -0
  4. package/dist/arguments.d.ts +54 -0
  5. package/dist/arguments.d.ts.map +1 -0
  6. package/dist/arguments.js +68 -0
  7. package/dist/arguments.js.map +1 -0
  8. package/dist/bin.d.ts +3 -0
  9. package/dist/bin.d.ts.map +1 -0
  10. package/dist/bin.js +140 -0
  11. package/dist/bin.js.map +1 -0
  12. package/dist/checks.d.ts +35 -0
  13. package/dist/checks.d.ts.map +1 -0
  14. package/dist/checks.js +206 -0
  15. package/dist/checks.js.map +1 -0
  16. package/dist/create.d.ts +42 -0
  17. package/dist/create.d.ts.map +1 -0
  18. package/dist/create.js +82 -0
  19. package/dist/create.js.map +1 -0
  20. package/dist/dependencies.d.ts +59 -0
  21. package/dist/dependencies.d.ts.map +1 -0
  22. package/dist/dependencies.js +100 -0
  23. package/dist/dependencies.js.map +1 -0
  24. package/dist/destination.d.ts +16 -0
  25. package/dist/destination.d.ts.map +1 -0
  26. package/dist/destination.js +39 -0
  27. package/dist/destination.js.map +1 -0
  28. package/dist/dev-channel.d.ts +40 -0
  29. package/dist/dev-channel.d.ts.map +1 -0
  30. package/dist/dev-channel.js +192 -0
  31. package/dist/dev-channel.js.map +1 -0
  32. package/dist/dev.d.ts +3 -0
  33. package/dist/dev.d.ts.map +1 -0
  34. package/dist/dev.js +12 -0
  35. package/dist/dev.js.map +1 -0
  36. package/dist/doctor.d.ts +46 -0
  37. package/dist/doctor.d.ts.map +1 -0
  38. package/dist/doctor.js +52 -0
  39. package/dist/doctor.js.map +1 -0
  40. package/dist/edits.d.ts +26 -0
  41. package/dist/edits.d.ts.map +1 -0
  42. package/dist/edits.js +101 -0
  43. package/dist/edits.js.map +1 -0
  44. package/dist/index.d.ts +13 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +18 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/init.d.ts +62 -0
  49. package/dist/init.d.ts.map +1 -0
  50. package/dist/init.js +275 -0
  51. package/dist/init.js.map +1 -0
  52. package/dist/keys.d.ts +14 -0
  53. package/dist/keys.d.ts.map +1 -0
  54. package/dist/keys.js +66 -0
  55. package/dist/keys.js.map +1 -0
  56. package/dist/package-manager.d.ts +40 -0
  57. package/dist/package-manager.d.ts.map +1 -0
  58. package/dist/package-manager.js +98 -0
  59. package/dist/package-manager.js.map +1 -0
  60. package/dist/process.d.ts +33 -0
  61. package/dist/process.d.ts.map +1 -0
  62. package/dist/process.js +95 -0
  63. package/dist/process.js.map +1 -0
  64. package/dist/project-name.d.ts +30 -0
  65. package/dist/project-name.d.ts.map +1 -0
  66. package/dist/project-name.js +73 -0
  67. package/dist/project-name.js.map +1 -0
  68. package/dist/reporter.d.ts +12 -0
  69. package/dist/reporter.d.ts.map +1 -0
  70. package/dist/reporter.js +11 -0
  71. package/dist/reporter.js.map +1 -0
  72. package/dist/rewrite.d.ts +54 -0
  73. package/dist/rewrite.d.ts.map +1 -0
  74. package/dist/rewrite.js +262 -0
  75. package/dist/rewrite.js.map +1 -0
  76. package/dist/shutdown.d.ts +24 -0
  77. package/dist/shutdown.d.ts.map +1 -0
  78. package/dist/shutdown.js +67 -0
  79. package/dist/shutdown.js.map +1 -0
  80. package/dist/survey.d.ts +33 -0
  81. package/dist/survey.d.ts.map +1 -0
  82. package/dist/survey.js +94 -0
  83. package/dist/survey.js.map +1 -0
  84. package/dist/template.d.ts +29 -0
  85. package/dist/template.d.ts.map +1 -0
  86. package/dist/template.js +77 -0
  87. package/dist/template.js.map +1 -0
  88. package/dist/ui.d.ts +14 -0
  89. package/dist/ui.d.ts.map +1 -0
  90. package/dist/ui.js +50 -0
  91. package/dist/ui.js.map +1 -0
  92. package/package.json +65 -0
  93. package/templates/adjacent/app/manifest.ts +5 -0
  94. package/templates/adjacent/app/sw.js/route.ts +5 -0
  95. package/templates/adjacent/app.config.ts +21 -0
  96. package/templates/adjacent/components/navigation.tsx +46 -0
  97. package/templates/adjacent/public/apple-touch-icon.png +0 -0
  98. package/templates/adjacent/public/favicon-96x96.png +0 -0
  99. package/templates/adjacent/public/favicon.ico +0 -0
  100. package/templates/adjacent/public/favicon.svg +4 -0
  101. package/templates/adjacent/public/web-app-manifest-192x192.png +0 -0
  102. package/templates/adjacent/public/web-app-manifest-512x512.png +0 -0
  103. package/templates/adjacent/public/web-app-manifest-maskable-192x192.png +0 -0
  104. package/templates/adjacent/public/web-app-manifest-maskable-512x512.png +0 -0
  105. package/templates/starter/app/(app)/layout.tsx +12 -0
  106. package/templates/starter/app/(app)/page.tsx +75 -0
  107. package/templates/starter/app/(app)/settings/page.tsx +24 -0
  108. package/templates/starter/app/(app)/settings/settings-panel.tsx +54 -0
@@ -0,0 +1,75 @@
1
+ import {
2
+ Button,
3
+ Card,
4
+ CardContent,
5
+ CardDescription,
6
+ CardHeader,
7
+ CardTitle,
8
+ Divider,
9
+ List,
10
+ ListItem,
11
+ Page,
12
+ Text,
13
+ } from "adjacent-ui";
14
+
15
+ export default function Home() {
16
+ return (
17
+ <Page
18
+ options={{
19
+ headerVariant: "large",
20
+ subtitle: "A mobile-first progressive web app",
21
+ title: "{{appName}}",
22
+ }}
23
+ >
24
+ <Card variant="outlined">
25
+ <CardHeader>
26
+ <CardTitle>Start here</CardTitle>
27
+ <CardDescription>
28
+ Edit <code>app/(app)/page.tsx</code> and this page reloads as you save.
29
+ </CardDescription>
30
+ </CardHeader>
31
+ <CardContent>
32
+ <Text variant="body-medium">
33
+ Every component reads the design tokens in{" "}
34
+ <code>app/globals.css</code>, so changing one there changes the whole
35
+ application.
36
+ </Text>
37
+ </CardContent>
38
+ </Card>
39
+
40
+ <Card variant="outlined">
41
+ <CardHeader>
42
+ <CardTitle>What is configured</CardTitle>
43
+ </CardHeader>
44
+ <List divided dividerInset="none" lastDivider={false}>
45
+ <ListItem
46
+ headline="Offline support"
47
+ supportingText="A service worker is served from /sw.js in production builds."
48
+ />
49
+ <ListItem
50
+ headline="Web app manifest"
51
+ supportingText="Generated from app.config.ts at /manifest.webmanifest."
52
+ />
53
+ <ListItem
54
+ headline="Install prompt"
55
+ supportingText="Installation state is reported on the Settings tab."
56
+ />
57
+ </List>
58
+ </Card>
59
+
60
+ <Divider />
61
+
62
+ <Text variant="label-large">Run it on a phone</Text>
63
+ <Text variant="body-small">
64
+ With a device connected over ADB, <code>adj dev --android</code> serves
65
+ this app over a trusted HTTPS tunnel and opens it fullscreen.
66
+ </Text>
67
+
68
+ <div>
69
+ <Button size="sm" variant="filled">
70
+ A filled button
71
+ </Button>
72
+ </div>
73
+ </Page>
74
+ );
75
+ }
@@ -0,0 +1,24 @@
1
+ import { Card, CardContent, CardHeader, CardTitle, Page, Text } from "adjacent-ui";
2
+
3
+ import { SettingsPanel } from "./settings-panel";
4
+
5
+ export default function Settings() {
6
+ return (
7
+ <Page options={{ title: "Settings" }}>
8
+ <Card variant="outlined">
9
+ <CardHeader>
10
+ <CardTitle>Runtime</CardTitle>
11
+ </CardHeader>
12
+ <CardContent>
13
+ <Text variant="body-small">
14
+ Reported by <code>useAdjacent()</code> from{" "}
15
+ <code>adjacent-react</code>. The service worker registers in
16
+ production builds only, so it stays unavailable while developing.
17
+ </Text>
18
+ </CardContent>
19
+ </Card>
20
+
21
+ <SettingsPanel />
22
+ </Page>
23
+ );
24
+ }
@@ -0,0 +1,54 @@
1
+ "use client";
2
+
3
+ import { useAdjacent } from "adjacent-react";
4
+ import { Button, List, ListItem, Text, useDisplayMode } from "adjacent-ui";
5
+
6
+ const INSTALL_HINT: Readonly<Record<string, string>> = {
7
+ android: "Open the browser menu and choose Install app.",
8
+ browser: "This browser cannot install the app.",
9
+ ios: "Open the Share sheet and choose Add to Home Screen.",
10
+ macos: "Open the Share menu and choose Add to Dock.",
11
+ };
12
+
13
+ /**
14
+ * Adjacent reports installation and runtime state and renders no UI of its own,
15
+ * so what a prompt looks like is entirely this component's decision.
16
+ */
17
+ export function SettingsPanel() {
18
+ const adjacent = useAdjacent();
19
+ const displayMode = useDisplayMode();
20
+
21
+ return (
22
+ <>
23
+ <List divided lastDivider={false}>
24
+ <ListItem headline="Connectivity" trailingSupportingText={adjacent.connectivity} />
25
+ <ListItem headline="Display mode" trailingSupportingText={displayMode} />
26
+ <ListItem
27
+ headline="Service worker"
28
+ trailingSupportingText={adjacent.serviceWorker.status}
29
+ />
30
+ <ListItem headline="Installation" trailingSupportingText={adjacent.state.status} />
31
+ </List>
32
+
33
+ {adjacent.state.status === "available" ? (
34
+ <div>
35
+ <Button onClick={() => void adjacent.install()} variant="filled">
36
+ Install app
37
+ </Button>
38
+ </div>
39
+ ) : null}
40
+
41
+ {adjacent.state.status === "manual" ? (
42
+ <Text variant="body-small">{INSTALL_HINT[adjacent.state.platform]}</Text>
43
+ ) : null}
44
+
45
+ {adjacent.serviceWorker.status === "update-available" ? (
46
+ <div>
47
+ <Button onClick={() => void adjacent.activateUpdate()} variant="tonal">
48
+ Update app
49
+ </Button>
50
+ </div>
51
+ ) : null}
52
+ </>
53
+ );
54
+ }