lastriko 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 (101) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +58 -0
  3. package/dist/__tests__/integration/ws-flow.integration.test.d.ts +1 -0
  4. package/dist/__tests__/integration/ws-flow.integration.test.js +249 -0
  5. package/dist/__tests__/integration/ws-flow.integration.test.js.map +1 -0
  6. package/dist/__tests__/integration/ws-flow.test.d.ts +1 -0
  7. package/dist/__tests__/integration/ws-flow.test.js +70 -0
  8. package/dist/__tests__/integration/ws-flow.test.js.map +1 -0
  9. package/dist/client/events.d.ts +6 -0
  10. package/dist/client/events.js +114 -0
  11. package/dist/client/events.js.map +1 -0
  12. package/dist/client/index.d.ts +2 -0
  13. package/dist/client/index.js +5 -0
  14. package/dist/client/index.js.map +1 -0
  15. package/dist/client/swap.d.ts +4 -0
  16. package/dist/client/swap.js +47 -0
  17. package/dist/client/swap.js.map +1 -0
  18. package/dist/client/ws.d.ts +11 -0
  19. package/dist/client/ws.js +111 -0
  20. package/dist/client/ws.js.map +1 -0
  21. package/dist/components/context.d.ts +51 -0
  22. package/dist/components/context.js +595 -0
  23. package/dist/components/context.js.map +1 -0
  24. package/dist/components/context.test.d.ts +1 -0
  25. package/dist/components/context.test.js +69 -0
  26. package/dist/components/context.test.js.map +1 -0
  27. package/dist/components/id.d.ts +3 -0
  28. package/dist/components/id.js +9 -0
  29. package/dist/components/id.js.map +1 -0
  30. package/dist/components/registry.d.ts +2 -0
  31. package/dist/components/registry.js +97 -0
  32. package/dist/components/registry.js.map +1 -0
  33. package/dist/components/types.d.ts +390 -0
  34. package/dist/components/types.js +2 -0
  35. package/dist/components/types.js.map +1 -0
  36. package/dist/engine/executor.d.ts +20 -0
  37. package/dist/engine/executor.js +84 -0
  38. package/dist/engine/executor.js.map +1 -0
  39. package/dist/engine/executor.test.d.ts +1 -0
  40. package/dist/engine/executor.test.js +79 -0
  41. package/dist/engine/executor.test.js.map +1 -0
  42. package/dist/engine/index.d.ts +6 -0
  43. package/dist/engine/index.js +7 -0
  44. package/dist/engine/index.js.map +1 -0
  45. package/dist/engine/lifecycle.d.ts +16 -0
  46. package/dist/engine/lifecycle.js +44 -0
  47. package/dist/engine/lifecycle.js.map +1 -0
  48. package/dist/engine/lifecycle.test.d.ts +1 -0
  49. package/dist/engine/lifecycle.test.js +15 -0
  50. package/dist/engine/lifecycle.test.js.map +1 -0
  51. package/dist/engine/messages.d.ts +95 -0
  52. package/dist/engine/messages.js +21 -0
  53. package/dist/engine/messages.js.map +1 -0
  54. package/dist/engine/renderer.components.test.d.ts +1 -0
  55. package/dist/engine/renderer.components.test.js +302 -0
  56. package/dist/engine/renderer.components.test.js.map +1 -0
  57. package/dist/engine/renderer.d.ts +4 -0
  58. package/dist/engine/renderer.js +408 -0
  59. package/dist/engine/renderer.js.map +1 -0
  60. package/dist/engine/renderer.test.d.ts +1 -0
  61. package/dist/engine/renderer.test.js +80 -0
  62. package/dist/engine/renderer.test.js.map +1 -0
  63. package/dist/engine/server.d.ts +43 -0
  64. package/dist/engine/server.js +402 -0
  65. package/dist/engine/server.js.map +1 -0
  66. package/dist/engine/server.test.d.ts +1 -0
  67. package/dist/engine/server.test.js +149 -0
  68. package/dist/engine/server.test.js.map +1 -0
  69. package/dist/engine/shell.d.ts +7 -0
  70. package/dist/engine/shell.js +25 -0
  71. package/dist/engine/shell.js.map +1 -0
  72. package/dist/engine/theme-path.d.ts +11 -0
  73. package/dist/engine/theme-path.js +32 -0
  74. package/dist/engine/theme-path.js.map +1 -0
  75. package/dist/engine/theme-path.test.d.ts +1 -0
  76. package/dist/engine/theme-path.test.js +52 -0
  77. package/dist/engine/theme-path.test.js.map +1 -0
  78. package/dist/engine/watcher.d.ts +8 -0
  79. package/dist/engine/watcher.js +27 -0
  80. package/dist/engine/watcher.js.map +1 -0
  81. package/dist/engine/websocket.d.ts +24 -0
  82. package/dist/engine/websocket.hub.test.d.ts +1 -0
  83. package/dist/engine/websocket.hub.test.js +75 -0
  84. package/dist/engine/websocket.hub.test.js.map +1 -0
  85. package/dist/engine/websocket.js +119 -0
  86. package/dist/engine/websocket.js.map +1 -0
  87. package/dist/index.d.ts +21 -0
  88. package/dist/index.js +26 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/plugins/registry.d.ts +11 -0
  91. package/dist/plugins/registry.js +61 -0
  92. package/dist/plugins/registry.js.map +1 -0
  93. package/dist/plugins/registry.test.d.ts +1 -0
  94. package/dist/plugins/registry.test.js +44 -0
  95. package/dist/plugins/registry.test.js.map +1 -0
  96. package/dist/plugins/types.d.ts +30 -0
  97. package/dist/plugins/types.js +2 -0
  98. package/dist/plugins/types.js.map +1 -0
  99. package/dist/style.css +134 -0
  100. package/dist/theme/lastriko.css +134 -0
  101. package/package.json +60 -0
package/dist/style.css ADDED
@@ -0,0 +1,134 @@
1
+ :root {
2
+ --lk-bg: #f8fafc;
3
+ --lk-surface: #ffffff;
4
+ --lk-surface-2: #f1f5f9;
5
+ --lk-text: #0f172a;
6
+ --lk-muted: #475569;
7
+ --lk-border: #dbe2ea;
8
+ --lk-primary: #2563eb;
9
+ --lk-primary-contrast: #ffffff;
10
+ --lk-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
11
+ --lk-radius: 10px;
12
+ --lk-font:
13
+ Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
14
+ }
15
+
16
+ [data-theme='dark'] {
17
+ --lk-bg: #020617;
18
+ --lk-surface: #0f172a;
19
+ --lk-surface-2: #1e293b;
20
+ --lk-text: #e2e8f0;
21
+ --lk-muted: #94a3b8;
22
+ --lk-border: #334155;
23
+ --lk-primary: #60a5fa;
24
+ --lk-primary-contrast: #020617;
25
+ --lk-shadow: 0 8px 24px rgba(2, 6, 23, 0.5);
26
+ }
27
+
28
+ *,
29
+ *::before,
30
+ *::after {
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ html,
35
+ body {
36
+ margin: 0;
37
+ padding: 0;
38
+ }
39
+
40
+ body {
41
+ background: var(--lk-bg);
42
+ color: var(--lk-text);
43
+ font-family: var(--lk-font);
44
+ line-height: 1.45;
45
+ }
46
+
47
+ .lk-toolbar {
48
+ position: sticky;
49
+ top: 0;
50
+ z-index: 20;
51
+ display: flex;
52
+ justify-content: space-between;
53
+ align-items: center;
54
+ gap: 0.5rem;
55
+ padding: 0.75rem 1rem;
56
+ border-bottom: 1px solid var(--lk-border);
57
+ background: var(--lk-surface);
58
+ }
59
+
60
+ .lk-main {
61
+ max-width: 980px;
62
+ margin: 0 auto;
63
+ padding: 1.25rem;
64
+ }
65
+
66
+ /* App body: padded column, centered, comfortable spacing (Phase 1 default shell). */
67
+ .lk-page {
68
+ box-sizing: border-box;
69
+ max-width: 40rem;
70
+ width: 100%;
71
+ margin: 0 auto;
72
+ padding: 2rem 1.5rem 3rem;
73
+ display: flex;
74
+ flex-direction: column;
75
+ gap: 1.25rem;
76
+ align-items: stretch;
77
+ min-height: calc(100vh - 3.5rem);
78
+ justify-content: center;
79
+ }
80
+
81
+ .lk-stack {
82
+ display: grid;
83
+ gap: 0.75rem;
84
+ }
85
+
86
+ .lk-card {
87
+ border: 1px solid var(--lk-border);
88
+ border-radius: var(--lk-radius);
89
+ background: var(--lk-surface);
90
+ padding: 0.9rem;
91
+ box-shadow: var(--lk-shadow);
92
+ }
93
+
94
+ .lk-text {
95
+ margin: 0;
96
+ color: var(--lk-text);
97
+ font-size: 1.0625rem;
98
+ line-height: 1.55;
99
+ }
100
+
101
+ .lk-button {
102
+ align-self: flex-start;
103
+ border: 1px solid transparent;
104
+ border-radius: 999px;
105
+ padding: 0.55rem 1rem;
106
+ font-weight: 600;
107
+ background: var(--lk-primary);
108
+ color: var(--lk-primary-contrast);
109
+ cursor: pointer;
110
+ }
111
+
112
+ .lk-button[disabled] {
113
+ opacity: 0.65;
114
+ cursor: not-allowed;
115
+ }
116
+
117
+ .lk-toast-container {
118
+ position: fixed;
119
+ right: 1rem;
120
+ bottom: 1rem;
121
+ display: grid;
122
+ gap: 0.5rem;
123
+ z-index: 99;
124
+ }
125
+
126
+ .lk-toast {
127
+ border: 1px solid var(--lk-border);
128
+ border-radius: 10px;
129
+ background: var(--lk-surface);
130
+ color: var(--lk-text);
131
+ padding: 0.65rem 0.85rem;
132
+ min-width: 220px;
133
+ box-shadow: var(--lk-shadow);
134
+ }
@@ -0,0 +1,134 @@
1
+ :root {
2
+ --lk-bg: #f8fafc;
3
+ --lk-surface: #ffffff;
4
+ --lk-surface-2: #f1f5f9;
5
+ --lk-text: #0f172a;
6
+ --lk-muted: #475569;
7
+ --lk-border: #dbe2ea;
8
+ --lk-primary: #2563eb;
9
+ --lk-primary-contrast: #ffffff;
10
+ --lk-shadow: 0 8px 24px rgba(15, 23, 42, 0.08);
11
+ --lk-radius: 10px;
12
+ --lk-font:
13
+ Inter, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Helvetica, Arial, sans-serif;
14
+ }
15
+
16
+ [data-theme='dark'] {
17
+ --lk-bg: #020617;
18
+ --lk-surface: #0f172a;
19
+ --lk-surface-2: #1e293b;
20
+ --lk-text: #e2e8f0;
21
+ --lk-muted: #94a3b8;
22
+ --lk-border: #334155;
23
+ --lk-primary: #60a5fa;
24
+ --lk-primary-contrast: #020617;
25
+ --lk-shadow: 0 8px 24px rgba(2, 6, 23, 0.5);
26
+ }
27
+
28
+ *,
29
+ *::before,
30
+ *::after {
31
+ box-sizing: border-box;
32
+ }
33
+
34
+ html,
35
+ body {
36
+ margin: 0;
37
+ padding: 0;
38
+ }
39
+
40
+ body {
41
+ background: var(--lk-bg);
42
+ color: var(--lk-text);
43
+ font-family: var(--lk-font);
44
+ line-height: 1.45;
45
+ }
46
+
47
+ .lk-toolbar {
48
+ position: sticky;
49
+ top: 0;
50
+ z-index: 20;
51
+ display: flex;
52
+ justify-content: space-between;
53
+ align-items: center;
54
+ gap: 0.5rem;
55
+ padding: 0.75rem 1rem;
56
+ border-bottom: 1px solid var(--lk-border);
57
+ background: var(--lk-surface);
58
+ }
59
+
60
+ .lk-main {
61
+ max-width: 980px;
62
+ margin: 0 auto;
63
+ padding: 1.25rem;
64
+ }
65
+
66
+ /* App body: padded column, centered, comfortable spacing (Phase 1 default shell). */
67
+ .lk-page {
68
+ box-sizing: border-box;
69
+ max-width: 40rem;
70
+ width: 100%;
71
+ margin: 0 auto;
72
+ padding: 2rem 1.5rem 3rem;
73
+ display: flex;
74
+ flex-direction: column;
75
+ gap: 1.25rem;
76
+ align-items: stretch;
77
+ min-height: calc(100vh - 3.5rem);
78
+ justify-content: center;
79
+ }
80
+
81
+ .lk-stack {
82
+ display: grid;
83
+ gap: 0.75rem;
84
+ }
85
+
86
+ .lk-card {
87
+ border: 1px solid var(--lk-border);
88
+ border-radius: var(--lk-radius);
89
+ background: var(--lk-surface);
90
+ padding: 0.9rem;
91
+ box-shadow: var(--lk-shadow);
92
+ }
93
+
94
+ .lk-text {
95
+ margin: 0;
96
+ color: var(--lk-text);
97
+ font-size: 1.0625rem;
98
+ line-height: 1.55;
99
+ }
100
+
101
+ .lk-button {
102
+ align-self: flex-start;
103
+ border: 1px solid transparent;
104
+ border-radius: 999px;
105
+ padding: 0.55rem 1rem;
106
+ font-weight: 600;
107
+ background: var(--lk-primary);
108
+ color: var(--lk-primary-contrast);
109
+ cursor: pointer;
110
+ }
111
+
112
+ .lk-button[disabled] {
113
+ opacity: 0.65;
114
+ cursor: not-allowed;
115
+ }
116
+
117
+ .lk-toast-container {
118
+ position: fixed;
119
+ right: 1rem;
120
+ bottom: 1rem;
121
+ display: grid;
122
+ gap: 0.5rem;
123
+ z-index: 99;
124
+ }
125
+
126
+ .lk-toast {
127
+ border: 1px solid var(--lk-border);
128
+ border-radius: 10px;
129
+ background: var(--lk-surface);
130
+ color: var(--lk-text);
131
+ padding: 0.65rem 0.85rem;
132
+ min-width: 220px;
133
+ box-shadow: var(--lk-shadow);
134
+ }
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "lastriko",
3
+ "version": "0.1.0",
4
+ "description": "TypeScript UI toolkit for AI demos and rapid prototyping (server-rendered HTML + WebSocket).",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js",
12
+ "default": "./dist/index.js"
13
+ },
14
+ "./style.css": "./dist/style.css"
15
+ },
16
+ "files": [
17
+ "dist",
18
+ "README.md",
19
+ "CHANGELOG.md"
20
+ ],
21
+ "sideEffects": false,
22
+ "license": "MIT",
23
+ "repository": {
24
+ "type": "git",
25
+ "url": "https://github.com/aixpose/lastriko.git",
26
+ "directory": "packages/core"
27
+ },
28
+ "bugs": {
29
+ "url": "https://github.com/aixpose/lastriko/issues"
30
+ },
31
+ "homepage": "https://github.com/aixpose/lastriko#readme",
32
+ "keywords": [
33
+ "ui",
34
+ "websocket",
35
+ "demo",
36
+ "prototyping",
37
+ "ai",
38
+ "typescript"
39
+ ],
40
+ "engines": {
41
+ "node": ">=22"
42
+ },
43
+ "scripts": {
44
+ "build": "tsc -p tsconfig.json && node ./scripts/copy-theme.mjs",
45
+ "prepack": "npm run build",
46
+ "typecheck": "tsc -p tsconfig.json --noEmit",
47
+ "lint": "eslint src --ext .ts",
48
+ "test": "vitest run --exclude '**/*.integration.test.ts'",
49
+ "test:coverage": "vitest run --coverage --exclude '**/*.integration.test.ts'",
50
+ "test:integration": "vitest run src/__tests__/integration",
51
+ "check:bundle": "node ../../scripts/check-client-size.mjs"
52
+ },
53
+ "dependencies": {
54
+ "nanostores": "^1.1.0",
55
+ "ws": "^8.20.0"
56
+ },
57
+ "devDependencies": {
58
+ "@types/ws": "^8.18.1"
59
+ }
60
+ }