@monimesl/dot-cli 0.1.0-alpha.2 → 0.1.0-alpha.21

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 (116) hide show
  1. package/README.md +91 -17
  2. package/dist/cli.js +832 -156
  3. package/dist/cli.js.map +1 -1
  4. package/dist/server-B9-F93mS.js +11295 -0
  5. package/dist/server-B9-F93mS.js.map +1 -0
  6. package/dist/templates/showcase/.env +3 -0
  7. package/dist/templates/showcase/dot.ts +52 -0
  8. package/dist/templates/showcase/pages/basics/bars/controller.ts +36 -0
  9. package/dist/templates/showcase/pages/basics/bars/state.ts +6 -0
  10. package/dist/templates/showcase/pages/basics/bars/view.dml +28 -0
  11. package/dist/templates/showcase/pages/basics/bindings/controller.ts +15 -0
  12. package/dist/templates/showcase/pages/basics/bindings/state.ts +14 -0
  13. package/dist/templates/showcase/pages/basics/bindings/view.dml +41 -0
  14. package/dist/templates/showcase/pages/basics/control-flow/controller.ts +18 -0
  15. package/dist/templates/showcase/pages/basics/control-flow/state.ts +16 -0
  16. package/dist/templates/showcase/pages/basics/control-flow/view.dml +55 -0
  17. package/dist/templates/showcase/pages/basics/events/controller.ts +43 -0
  18. package/dist/templates/showcase/pages/basics/events/state.ts +11 -0
  19. package/dist/templates/showcase/pages/basics/events/view.dml +51 -0
  20. package/dist/templates/showcase/pages/basics/hooks/controller.ts +43 -0
  21. package/dist/templates/showcase/pages/basics/hooks/state.ts +10 -0
  22. package/dist/templates/showcase/pages/basics/hooks/view.dml +37 -0
  23. package/dist/templates/showcase/pages/basics/navigation/controller.ts +41 -0
  24. package/dist/templates/showcase/pages/basics/navigation/state.ts +11 -0
  25. package/dist/templates/showcase/pages/basics/navigation/view.dml +48 -0
  26. package/dist/templates/showcase/pages/basics/pick-genre/controller.ts +12 -0
  27. package/dist/templates/showcase/pages/basics/pick-genre/state.ts +3 -0
  28. package/dist/templates/showcase/pages/basics/pick-genre/view.dml +9 -0
  29. package/dist/templates/showcase/pages/basics/state/controller.ts +23 -0
  30. package/dist/templates/showcase/pages/basics/state/state.ts +10 -0
  31. package/dist/templates/showcase/pages/basics/state/view.dml +46 -0
  32. package/dist/templates/showcase/pages/components/carousel/controller.ts +41 -0
  33. package/dist/templates/showcase/pages/components/carousel/state.ts +77 -0
  34. package/dist/templates/showcase/pages/components/carousel/view.dml +42 -0
  35. package/dist/templates/showcase/pages/components/feedback/controller.ts +32 -0
  36. package/dist/templates/showcase/pages/components/feedback/state.ts +41 -0
  37. package/dist/templates/showcase/pages/components/feedback/view.dml +116 -0
  38. package/dist/templates/showcase/pages/components/forms/controller.ts +72 -0
  39. package/dist/templates/showcase/pages/components/forms/state.ts +37 -0
  40. package/dist/templates/showcase/pages/components/forms/view.dml +97 -0
  41. package/dist/templates/showcase/pages/components/icons/controller.ts +15 -0
  42. package/dist/templates/showcase/pages/components/icons/state.ts +75 -0
  43. package/dist/templates/showcase/pages/components/icons/view.dml +36 -0
  44. package/dist/templates/showcase/pages/components/images/controller.ts +44 -0
  45. package/dist/templates/showcase/pages/components/images/state.ts +10 -0
  46. package/dist/templates/showcase/pages/components/images/view.dml +83 -0
  47. package/dist/templates/showcase/pages/components/layout/controller.ts +61 -0
  48. package/dist/templates/showcase/pages/components/layout/state.ts +34 -0
  49. package/dist/templates/showcase/pages/components/layout/view.dml +143 -0
  50. package/dist/templates/showcase/pages/components/lists/controller.ts +18 -0
  51. package/dist/templates/showcase/pages/components/lists/state.ts +130 -0
  52. package/dist/templates/showcase/pages/components/lists/view.dml +88 -0
  53. package/dist/templates/showcase/pages/components/money/controller.ts +45 -0
  54. package/dist/templates/showcase/pages/components/money/state.ts +13 -0
  55. package/dist/templates/showcase/pages/components/money/view.dml +54 -0
  56. package/dist/templates/showcase/pages/components/reading/controller.ts +6 -0
  57. package/dist/templates/showcase/pages/components/reading/state.ts +23 -0
  58. package/dist/templates/showcase/pages/components/reading/view.dml +42 -0
  59. package/dist/templates/showcase/pages/components/sheets/controller.ts +36 -0
  60. package/dist/templates/showcase/pages/components/sheets/state.ts +26 -0
  61. package/dist/templates/showcase/pages/components/sheets/view.dml +38 -0
  62. package/dist/templates/showcase/pages/components/styles/controller.ts +6 -0
  63. package/dist/templates/showcase/pages/components/styles/state.ts +3 -0
  64. package/dist/templates/showcase/pages/components/styles/view.dml +101 -0
  65. package/dist/templates/showcase/pages/components/tabs/controller.ts +41 -0
  66. package/dist/templates/showcase/pages/components/tabs/state.ts +127 -0
  67. package/dist/templates/showcase/pages/components/tabs/view.dml +57 -0
  68. package/dist/templates/showcase/pages/components/text/controller.ts +10 -0
  69. package/dist/templates/showcase/pages/components/text/state.ts +3 -0
  70. package/dist/templates/showcase/pages/components/text/view.dml +95 -0
  71. package/dist/templates/showcase/pages/dash/cache/controller.ts +50 -0
  72. package/dist/templates/showcase/pages/dash/cache/state.ts +17 -0
  73. package/dist/templates/showcase/pages/dash/cache/view.dml +48 -0
  74. package/dist/templates/showcase/pages/dash/calls/controller.ts +50 -0
  75. package/dist/templates/showcase/pages/dash/calls/state.ts +6 -0
  76. package/dist/templates/showcase/pages/dash/calls/view.dml +52 -0
  77. package/dist/templates/showcase/pages/dash/contacts/controller.ts +30 -0
  78. package/dist/templates/showcase/pages/dash/contacts/state.ts +6 -0
  79. package/dist/templates/showcase/pages/dash/contacts/view.dml +33 -0
  80. package/dist/templates/showcase/pages/dash/files/controller.ts +91 -0
  81. package/dist/templates/showcase/pages/dash/files/state.ts +24 -0
  82. package/dist/templates/showcase/pages/dash/files/view.dml +79 -0
  83. package/dist/templates/showcase/pages/dash/media/controller.ts +36 -0
  84. package/dist/templates/showcase/pages/dash/media/state.ts +8 -0
  85. package/dist/templates/showcase/pages/dash/media/view.dml +34 -0
  86. package/dist/templates/showcase/pages/dash/network/controller.ts +215 -0
  87. package/dist/templates/showcase/pages/dash/network/state.ts +35 -0
  88. package/dist/templates/showcase/pages/dash/network/view.dml +108 -0
  89. package/dist/templates/showcase/pages/dash/secrets/controller.ts +44 -0
  90. package/dist/templates/showcase/pages/dash/secrets/state.ts +5 -0
  91. package/dist/templates/showcase/pages/dash/secrets/view.dml +26 -0
  92. package/dist/templates/showcase/pages/dash/system/controller.ts +89 -0
  93. package/dist/templates/showcase/pages/dash/system/state.ts +13 -0
  94. package/dist/templates/showcase/pages/dash/system/view.dml +97 -0
  95. package/dist/templates/showcase/pages/dash/ui/controller.ts +70 -0
  96. package/dist/templates/showcase/pages/dash/ui/state.ts +8 -0
  97. package/dist/templates/showcase/pages/dash/ui/view.dml +31 -0
  98. package/dist/templates/showcase/pages/index/controller.ts +10 -0
  99. package/dist/templates/showcase/pages/index/state.ts +212 -0
  100. package/dist/templates/showcase/pages/index/view.dml +23 -0
  101. package/dist/templates/showcase/statics/logo.png +0 -0
  102. package/dist/templates/starter/.env +3 -0
  103. package/dist/templates/starter/dot.ts +3 -0
  104. package/dist/templates/starter/pages/index/controller.ts +9 -0
  105. package/dist/templates/starter/pages/index/state.ts +4 -0
  106. package/dist/templates/starter/pages/index/view.dml +16 -0
  107. package/package.json +12 -7
  108. package/dist/template/.env +0 -3
  109. package/dist/template/dot.ts +0 -6
  110. package/dist/template/pages/help/tips/controller.ts +0 -30
  111. package/dist/template/pages/help/tips/state.ts +0 -11
  112. package/dist/template/pages/help/tips/view.dml +0 -15
  113. package/dist/template/pages/index/controller.ts +0 -67
  114. package/dist/template/pages/index/state.ts +0 -17
  115. package/dist/template/pages/index/view.dml +0 -66
  116. /package/dist/{template → templates/starter}/statics/logo.png +0 -0
@@ -0,0 +1,16 @@
1
+ <View>
2
+ <View direction="row" align="center" gap="medium">
3
+ <Image src="statics/logo.png" alt="Logo" width="40" height="40" />
4
+ <Text variant="title">{{ greeting }}</Text>
5
+ </View>
6
+ <Text>Change pages/index/view.dml and save: the simulator shows it at once.</Text>
7
+
8
+ <View variant="card" align="center" gap="medium">
9
+ <Text variant="title">{{ count }}</Text>
10
+ <Text tone="muted">{{ count === 1 ? 'tap' : 'taps' }} so far</Text>
11
+ <View direction="row" gap="small">
12
+ <Button variant="secondary" onClick="reset" disabled="{{ count === 0 }}">Reset</Button>
13
+ <Button onClick="increment">Tap me</Button>
14
+ </View>
15
+ </View>
16
+ </View>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monimesl/dot-cli",
3
- "version": "0.1.0-alpha.2",
3
+ "version": "0.1.0-alpha.21",
4
4
  "description": "The dotctl command: build mini apps and run them in the simulator",
5
5
  "type": "module",
6
6
  "repository": {
@@ -22,18 +22,23 @@
22
22
  "./package.json": "./package.json"
23
23
  },
24
24
  "dependencies": {
25
- "@monimesl/dot-dml-parser": "0.1.0-alpha.2",
26
- "@monimesl/dot-script-parser": "0.1.0-alpha.2",
27
- "@monimesl/dot-compiler": "0.1.0-alpha.2",
28
- "@monimesl/dot-simulator": "0.1.0-alpha.2"
25
+ "typescript": "^5.9.3",
26
+ "uqr": "^0.1.3",
27
+ "@monimesl/dot-core": "0.1.0-alpha.21",
28
+ "@monimesl/dot-compiler": "0.1.0-alpha.21",
29
+ "@monimesl/dot-script-parser": "0.1.0-alpha.21",
30
+ "@monimesl/dot-dml-parser": "0.1.0-alpha.21",
31
+ "@monimesl/dot-simulator": "0.1.0-alpha.21"
29
32
  },
30
33
  "devDependencies": {
31
34
  "@types/node": "^22.20.4",
32
35
  "publint": "^0.3.24",
33
36
  "rimraf": "^6.1.3",
34
37
  "tsdown": "^0.23.0",
35
- "typescript": "^5.9.3",
36
- "vitest": "^5.0.1"
38
+ "vitest": "^5.0.1",
39
+ "vscode-languageserver": "^9.0.1",
40
+ "vscode-languageserver-protocol": "^3.17.5",
41
+ "vscode-languageserver-textdocument": "^1.0.15"
37
42
  },
38
43
  "publishConfig": {
39
44
  "access": "public"
@@ -1,3 +0,0 @@
1
- # Public configuration for the dot. Only DOT_PUBLIC_ variables reach it, and anyone with the dot
2
- # can read them: never put a secret here. Read them in the service as `env.DOT_PUBLIC_…`.
3
- DOT_PUBLIC_GREETING=Dash draws this alert, not the dot.
@@ -1,6 +0,0 @@
1
- import { logger } from '@monimesl/dot-runtime';
2
-
3
- export default defineDot({
4
- pages: ['index', 'help/tips'],
5
- plugins: [logger()],
6
- });
@@ -1,30 +0,0 @@
1
- import state from './state';
2
-
3
- export default definePage({
4
- initialState: state,
5
- hooks: {
6
- // The page that opens this one passes its own trail and depth.
7
- onLoad(options) {
8
- this.setState({
9
- count: Number(options.count ?? 0),
10
- trail: `${options.trail ?? 'Home'} › Tips`,
11
- depth: Number(options.depth ?? 1) + 1,
12
- });
13
- },
14
- },
15
- actions: {
16
- back() {
17
- this.navigation.back();
18
- },
19
- openAnother(state) {
20
- this.navigation.push('help/tips', {
21
- count: String(state.count),
22
- trail: state.trail,
23
- depth: String(state.depth),
24
- });
25
- },
26
- startOver() {
27
- this.navigation.reset('index');
28
- },
29
- },
30
- });
@@ -1,11 +0,0 @@
1
- export default {
2
- count: 0,
3
- trail: '',
4
- depth: 0,
5
- maxPages: 8,
6
- tips: [
7
- 'Every tap is handled by controller.ts in a Worker',
8
- 'The view only renders the state it receives',
9
- 'Pages open on top of each other; Back returns to the one below',
10
- ],
11
- };
@@ -1,15 +0,0 @@
1
- <Text variant="caption">{{ trail }}</Text>
2
- <Text variant="title">Tips</Text>
3
- <Text>Page {{ depth }} of {{ maxPages }}, opened at {{ count }} taps.</Text>
4
-
5
- <View variant="card" gap="small">
6
- <For each="{{ tips }}" item="tip" key="*this">
7
- <Text>{{ tip }}</Text>
8
- </For>
9
- </View>
10
-
11
- <View direction="row">
12
- <Button onClick="back">Back</Button>
13
- <Button variant="secondary" onClick="openAnother" disabled="{{ depth >= maxPages }}">Open another</Button>
14
- <Button variant="secondary" onClick="startOver">Start over</Button>
15
- </View>
@@ -1,67 +0,0 @@
1
- import state from './state';
2
-
3
- export default definePage({
4
- initialState: state,
5
- hooks: {
6
- onShow() {
7
- this.setState((current) => ({ visits: current.visits + 1 }));
8
- },
9
- },
10
- mutations: {
11
- increment: (state) => {
12
- const count = state.count + 1;
13
- return { count, taps: [{ id: count }, ...state.taps] };
14
- },
15
- reset: () => ({ count: 0, taps: [] }),
16
- rename: (_state, event: DotEvent<{ value: string }>) => ({ title: event.detail.value }),
17
- logoLoaded: (_state, event: DotEvent<{ width: number; height: number }>) => ({
18
- logoStatus: 'loaded' as const,
19
- logoSize: `${event.detail.width}x${event.detail.height}`,
20
- }),
21
- logoFailed: () => ({ logoStatus: 'failed' as const }),
22
- },
23
- actions: {
24
- fillUp() {
25
- while (this.state.count < this.state.limit) {
26
- this.mutations.increment();
27
- }
28
- },
29
- async sayHello(state) {
30
- try {
31
- const { action } = await dash.ui.alert(
32
- {
33
- title: `Hello from ${state.title}`,
34
- message: env.DOT_PUBLIC_GREETING,
35
- actions: [
36
- { id: 'nice', label: 'Nice' },
37
- { id: 'close', label: 'Close', role: 'cancel' },
38
- ],
39
- },
40
- { timeout: 30_000 },
41
- );
42
- this.setState({ dashNote: `You chose "${action}"` });
43
- } catch (error) {
44
- this.setState({ dashNote: errorMessage(error) });
45
- }
46
- },
47
- async vibrate() {
48
- await dash.system.vibrate({ style: 'success' });
49
- },
50
- async toggleTorch(state) {
51
- const next = state.torch === 'on' ? 'off' : 'on';
52
- try {
53
- await dash.system.torch(next);
54
- this.setState({ torch: next, dashNote: `Torch ${next}` });
55
- } catch (error) {
56
- this.setState({ dashNote: errorMessage(error) });
57
- }
58
- },
59
- openTips(state) {
60
- this.navigation.push('help/tips', { count: String(state.count), trail: 'Home', depth: '1' });
61
- },
62
- },
63
- });
64
-
65
- function errorMessage(error: unknown): string {
66
- return error instanceof Error ? error.message : String(error);
67
- }
@@ -1,17 +0,0 @@
1
- export interface Tap {
2
- id: number;
3
- }
4
-
5
- export type LogoStatus = 'loading' | 'loaded' | 'failed';
6
-
7
- export default {
8
- title: 'Dot Counter',
9
- logoStatus: 'loading' as LogoStatus,
10
- logoSize: '',
11
- count: 0,
12
- limit: 5,
13
- taps: [] as Tap[],
14
- visits: 0,
15
- torch: 'off' as 'on' | 'off',
16
- dashNote: '',
17
- };
@@ -1,66 +0,0 @@
1
- <Text variant="caption">Home</Text>
2
-
3
- <View direction="row" align="center" gap="large">
4
- <Image src="statics/logo.png" alt="Dot logo" width="48" height="48" onLoad="logoLoaded" onError="logoFailed" />
5
- <View gap="none">
6
- <Text variant="title">{{ title }}</Text>
7
- <If condition="{{ logoStatus === 'loaded' }}">
8
- <Text variant="caption">Logo loaded at {{ logoSize }}</Text>
9
- </If>
10
- <ElseIf condition="{{ logoStatus === 'failed' }}">
11
- <Text variant="caption">Logo failed to load</Text>
12
- </ElseIf>
13
- <Else>
14
- <Text variant="caption">Loading logo…</Text>
15
- </Else>
16
- </View>
17
- </View>
18
-
19
- <View variant="card">
20
- <Text variant="title">{{ count }} / {{ limit }}</Text>
21
- <If condition="{{ count >= limit }}">
22
- <Text>Limit reached</Text>
23
- </If>
24
- <ElseIf condition="{{ count > 0 }}">
25
- <Text>Keep tapping</Text>
26
- </ElseIf>
27
- <Else>
28
- <Text>Tap to start 🚀</Text>
29
- </Else>
30
- <View direction="row">
31
- <Button onClick="increment" disabled="{{ count >= limit }}">Add one</Button>
32
- <Button variant="secondary" onClick="reset" disabled="{{ count === 0 }}">Reset</Button>
33
- <Button variant="secondary" onClick="fillUp" disabled="{{ count >= limit }}">Fill up</Button>
34
- </View>
35
- </View>
36
-
37
- <View variant="card" gap="small">
38
- <Text variant="caption">Name your counter</Text>
39
- <Input label="Counter name" placeholder="Dot Counter" value="{{ title }}" maxLength="24" onChange="rename" />
40
- </View>
41
-
42
- <View variant="card" gap="small">
43
- <Text variant="caption">Dash</Text>
44
- <View direction="row">
45
- <Button variant="secondary" onClick="sayHello">Say hello</Button>
46
- <Button variant="secondary" onClick="vibrate">Vibrate</Button>
47
- <Button variant="secondary" onClick="toggleTorch">{{ torch === 'on' ? 'Torch off' : 'Torch on' }}</Button>
48
- </View>
49
- <If condition="{{ dashNote }}">
50
- <Text variant="caption">{{ dashNote }}</Text>
51
- </If>
52
- </View>
53
-
54
- <View variant="card" onTap="openTips">
55
- <Text>Tips -> </Text>
56
- <Text variant="caption">Shown {{ visits }} {{ visits === 1 ? 'time' : 'times' }}</Text>
57
- </View>
58
-
59
- <If condition="{{ taps.length > 0 }}">
60
- <View variant="card" gap="small">
61
- <Text variant="caption">History</Text>
62
- <For each="{{ taps }}" index="i" item="tap" key="id">
63
- <Text>{{ i + 1 }}. Tap #{{ tap.id }}</Text>
64
- </For>
65
- </View>
66
- </If>