@veams/status-quo 1.5.0 → 1.6.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 (126) hide show
  1. package/.turbo/turbo-build.log +12 -0
  2. package/.turbo/turbo-check$colon$types.log +4 -0
  3. package/.turbo/turbo-docs$colon$build.log +14 -0
  4. package/.turbo/turbo-lint.log +8 -0
  5. package/.turbo/turbo-test.log +15 -0
  6. package/CHANGELOG.md +24 -3
  7. package/README.md +217 -41
  8. package/dist/config/status-quo-config.d.ts +13 -0
  9. package/dist/config/status-quo-config.js +14 -0
  10. package/dist/config/status-quo-config.js.map +1 -1
  11. package/dist/hooks/__tests__/state-provider.spec.d.ts +4 -0
  12. package/dist/hooks/__tests__/state-provider.spec.js +179 -0
  13. package/dist/hooks/__tests__/state-provider.spec.js.map +1 -0
  14. package/dist/hooks/__tests__/state-selector.spec.js +11 -12
  15. package/dist/hooks/__tests__/state-selector.spec.js.map +1 -1
  16. package/dist/hooks/__tests__/state-singleton.spec.js +10 -11
  17. package/dist/hooks/__tests__/state-singleton.spec.js.map +1 -1
  18. package/dist/hooks/index.d.ts +1 -0
  19. package/dist/hooks/index.js +1 -0
  20. package/dist/hooks/index.js.map +1 -1
  21. package/dist/hooks/state-factory.js.map +1 -1
  22. package/dist/hooks/state-provider.d.ts +14 -0
  23. package/dist/hooks/state-provider.js +24 -0
  24. package/dist/hooks/state-provider.js.map +1 -0
  25. package/dist/hooks/state-subscription-selector.js +6 -2
  26. package/dist/hooks/state-subscription-selector.js.map +1 -1
  27. package/dist/hooks/state-subscription.js +1 -1
  28. package/dist/hooks/state-subscription.js.map +1 -1
  29. package/dist/index.d.ts +4 -5
  30. package/dist/index.js +2 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/react/hooks/__tests__/state-provider.spec.d.ts +4 -0
  33. package/dist/react/hooks/__tests__/state-provider.spec.js +179 -0
  34. package/dist/react/hooks/__tests__/state-provider.spec.js.map +1 -0
  35. package/dist/react/hooks/__tests__/state-selector.spec.d.ts +4 -0
  36. package/dist/react/hooks/__tests__/state-selector.spec.js +499 -0
  37. package/dist/react/hooks/__tests__/state-selector.spec.js.map +1 -0
  38. package/dist/react/hooks/__tests__/state-singleton.spec.d.ts +4 -0
  39. package/dist/react/hooks/__tests__/state-singleton.spec.js +96 -0
  40. package/dist/react/hooks/__tests__/state-singleton.spec.js.map +1 -0
  41. package/{src/hooks/index.ts → dist/react/hooks/index.d.ts} +1 -0
  42. package/dist/react/hooks/index.js +7 -0
  43. package/dist/react/hooks/index.js.map +1 -0
  44. package/dist/react/hooks/state-actions.d.ts +2 -0
  45. package/dist/react/hooks/state-actions.js +5 -0
  46. package/dist/react/hooks/state-actions.js.map +1 -0
  47. package/dist/react/hooks/state-factory.d.ts +7 -0
  48. package/dist/react/hooks/state-factory.js +13 -0
  49. package/dist/react/hooks/state-factory.js.map +1 -0
  50. package/dist/react/hooks/state-handler.d.ts +2 -0
  51. package/dist/react/hooks/state-handler.js +9 -0
  52. package/dist/react/hooks/state-handler.js.map +1 -0
  53. package/dist/react/hooks/state-provider.d.ts +14 -0
  54. package/dist/react/hooks/state-provider.js +24 -0
  55. package/dist/react/hooks/state-provider.js.map +1 -0
  56. package/dist/react/hooks/state-singleton.d.ts +6 -0
  57. package/dist/react/hooks/state-singleton.js +7 -0
  58. package/dist/react/hooks/state-singleton.js.map +1 -0
  59. package/dist/react/hooks/state-subscription-selector.d.ts +3 -0
  60. package/dist/react/hooks/state-subscription-selector.js +63 -0
  61. package/dist/react/hooks/state-subscription-selector.js.map +1 -0
  62. package/dist/react/hooks/state-subscription.d.ts +9 -0
  63. package/dist/react/hooks/state-subscription.js +53 -0
  64. package/dist/react/hooks/state-subscription.js.map +1 -0
  65. package/dist/react/index.d.ts +1 -0
  66. package/dist/react/index.js +2 -0
  67. package/dist/react/index.js.map +1 -0
  68. package/dist/store/__tests__/observable-state-handler.spec.js +66 -11
  69. package/dist/store/__tests__/observable-state-handler.spec.js.map +1 -1
  70. package/dist/store/__tests__/signal-state-handler.spec.js.map +1 -1
  71. package/dist/store/base-state-handler.d.ts +4 -6
  72. package/dist/store/base-state-handler.js +10 -9
  73. package/dist/store/base-state-handler.js.map +1 -1
  74. package/dist/store/dev-tools.js +0 -3
  75. package/dist/store/dev-tools.js.map +1 -1
  76. package/dist/store/observable-state-handler.d.ts +4 -10
  77. package/dist/store/observable-state-handler.js +4 -11
  78. package/dist/store/observable-state-handler.js.map +1 -1
  79. package/dist/store/signal-state-handler.d.ts +2 -5
  80. package/dist/store/signal-state-handler.js +3 -2
  81. package/dist/store/signal-state-handler.js.map +1 -1
  82. package/dist/store/state-singleton.js +1 -1
  83. package/dist/store/state-singleton.js.map +1 -1
  84. package/eslint.config.mjs +75 -0
  85. package/package.json +18 -18
  86. package/src/config/status-quo-config.ts +31 -1
  87. package/src/index.ts +11 -15
  88. package/src/react/hooks/__tests__/state-provider.spec.tsx +286 -0
  89. package/src/{hooks → react/hooks}/__tests__/state-selector.spec.tsx +52 -44
  90. package/src/{hooks → react/hooks}/__tests__/state-singleton.spec.tsx +21 -20
  91. package/src/react/hooks/index.ts +11 -0
  92. package/src/{hooks → react/hooks}/state-actions.tsx +1 -1
  93. package/src/{hooks → react/hooks}/state-factory.tsx +2 -2
  94. package/src/{hooks → react/hooks}/state-handler.tsx +1 -1
  95. package/src/react/hooks/state-provider.tsx +56 -0
  96. package/src/{hooks → react/hooks}/state-singleton.tsx +1 -1
  97. package/src/{hooks → react/hooks}/state-subscription-selector.tsx +15 -6
  98. package/src/{hooks → react/hooks}/state-subscription.tsx +5 -9
  99. package/src/react/index.ts +1 -0
  100. package/src/store/__tests__/observable-state-handler.spec.ts +92 -13
  101. package/src/store/__tests__/signal-state-handler.spec.ts +5 -1
  102. package/src/store/base-state-handler.ts +17 -24
  103. package/src/store/dev-tools.ts +3 -3
  104. package/src/store/observable-state-handler.ts +12 -22
  105. package/src/store/signal-state-handler.ts +11 -8
  106. package/src/store/state-singleton.ts +1 -1
  107. package/tsconfig.json +2 -3
  108. package/.eslintrc.cjs +0 -132
  109. package/.github/workflows/pages.yml +0 -46
  110. package/.github/workflows/release.yml +0 -33
  111. package/.nvmrc +0 -1
  112. package/.prettierrc +0 -7
  113. package/docs/assets/index-BBmpszOW.css +0 -1
  114. package/docs/assets/index-Cf8El_RO.js +0 -194
  115. package/docs/assets/statusquo-logo-8GVRbxpc.png +0 -0
  116. package/docs/index.html +0 -13
  117. package/playground/index.html +0 -12
  118. package/playground/src/App.tsx +0 -699
  119. package/playground/src/assets/philosophy-agnostic.svg +0 -18
  120. package/playground/src/assets/philosophy-separation.svg +0 -13
  121. package/playground/src/assets/philosophy-swap.svg +0 -17
  122. package/playground/src/assets/statusquo-logo.png +0 -0
  123. package/playground/src/main.tsx +0 -19
  124. package/playground/src/styles.css +0 -534
  125. package/playground/tsconfig.json +0 -12
  126. package/playground/vite.config.ts +0 -18
@@ -1,18 +0,0 @@
1
- <svg width="640" height="420" viewBox="0 0 640 420" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="640" height="420" rx="48" fill="#0E1116"/>
3
- <circle cx="320" cy="210" r="120" fill="#1B2330" stroke="#2F6BFF" stroke-width="2"/>
4
- <circle cx="320" cy="210" r="64" fill="#2F6BFF" fill-opacity="0.22"/>
5
- <circle cx="320" cy="210" r="24" fill="#2F6BFF"/>
6
- <path d="M320 78V122" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
7
- <path d="M320 298V342" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
8
- <path d="M188 210H232" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
9
- <path d="M408 210H452" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
10
- <circle cx="320" cy="78" r="12" fill="#FF9F1C"/>
11
- <circle cx="320" cy="342" r="12" fill="#7B879A"/>
12
- <circle cx="188" cy="210" r="12" fill="#FF9F1C"/>
13
- <circle cx="452" cy="210" r="12" fill="#7B879A"/>
14
- <path d="M238 134L270 156" stroke="#E7E9EE" stroke-width="3" stroke-linecap="round"/>
15
- <path d="M402 134L370 156" stroke="#E7E9EE" stroke-width="3" stroke-linecap="round"/>
16
- <path d="M238 286L270 264" stroke="#E7E9EE" stroke-width="3" stroke-linecap="round"/>
17
- <path d="M402 286L370 264" stroke="#E7E9EE" stroke-width="3" stroke-linecap="round"/>
18
- </svg>
@@ -1,13 +0,0 @@
1
- <svg width="640" height="420" viewBox="0 0 640 420" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="640" height="420" rx="48" fill="#0E1116"/>
3
- <rect x="64" y="70" width="220" height="280" rx="32" fill="#1B2330" stroke="#2F6BFF" stroke-width="2"/>
4
- <rect x="356" y="70" width="220" height="280" rx="32" fill="#1B2330" stroke="#7B879A" stroke-width="2"/>
5
- <rect x="90" y="110" width="170" height="28" rx="14" fill="#2F6BFF" fill-opacity="0.25"/>
6
- <rect x="90" y="160" width="140" height="28" rx="14" fill="#2F6BFF" fill-opacity="0.25"/>
7
- <rect x="90" y="210" width="120" height="28" rx="14" fill="#2F6BFF" fill-opacity="0.25"/>
8
- <rect x="382" y="120" width="168" height="44" rx="22" fill="#2F6BFF"/>
9
- <rect x="382" y="186" width="168" height="44" rx="22" fill="#FF9F1C"/>
10
- <rect x="382" y="252" width="168" height="44" rx="22" fill="#7B879A"/>
11
- <path d="M284 210H356" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round" stroke-dasharray="10 12"/>
12
- <circle cx="320" cy="210" r="8" fill="#E7E9EE"/>
13
- </svg>
@@ -1,17 +0,0 @@
1
- <svg width="640" height="420" viewBox="0 0 640 420" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="640" height="420" rx="48" fill="#0E1116"/>
3
- <rect x="40" y="70" width="220" height="280" rx="28" fill="#1B2330" stroke="#2F6BFF" stroke-width="2"/>
4
- <rect x="380" y="70" width="220" height="280" rx="28" fill="#1B2330" stroke="#FF9F1C" stroke-width="2"/>
5
- <circle cx="150" cy="150" r="44" fill="#2F6BFF" fill-opacity="0.2"/>
6
- <circle cx="150" cy="150" r="18" fill="#2F6BFF"/>
7
- <circle cx="490" cy="270" r="44" fill="#FF9F1C" fill-opacity="0.2"/>
8
- <circle cx="490" cy="270" r="18" fill="#FF9F1C"/>
9
- <path d="M260 155H330" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
10
- <path d="M330 155L312 141" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
11
- <path d="M330 155L312 169" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
12
- <path d="M380 265H310" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
13
- <path d="M310 265L328 251" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
14
- <path d="M310 265L328 279" stroke="#E7E9EE" stroke-width="4" stroke-linecap="round"/>
15
- <rect x="90" y="230" width="120" height="18" rx="9" fill="#2F6BFF" fill-opacity="0.3"/>
16
- <rect x="430" y="160" width="120" height="18" rx="9" fill="#FF9F1C" fill-opacity="0.3"/>
17
- </svg>
@@ -1,19 +0,0 @@
1
- import React from 'react';
2
- import { createRoot } from 'react-dom/client';
3
-
4
- import 'prismjs/themes/prism-tomorrow.css';
5
-
6
- import { App } from './App.js';
7
- import './styles.css';
8
-
9
- const rootElement = document.getElementById('root');
10
-
11
- if (!rootElement) {
12
- throw new Error('Missing root element');
13
- }
14
-
15
- createRoot(rootElement).render(
16
- <React.StrictMode>
17
- <App />
18
- </React.StrictMode>
19
- );
@@ -1,534 +0,0 @@
1
- @import url('https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap');
2
-
3
- :root {
4
- color-scheme: light;
5
- --bg: #f3f2ee;
6
- --bg-strong: #e6e1d8;
7
- --card: #ffffff;
8
- --ink: #1b1b1f;
9
- --muted: #5c5c66;
10
- --accent: #2f6bff;
11
- --accent-soft: #c9d8ff;
12
- --accent-2: #ff9f1c;
13
- --shadow: 0 18px 45px -30px rgba(0, 0, 0, 0.45);
14
- --radius-lg: 28px;
15
- --radius-md: 18px;
16
- --radius-sm: 12px;
17
- --panel-dark: #0e1116;
18
- font-family: 'Space Grotesk', system-ui, -apple-system, sans-serif;
19
- }
20
-
21
- * {
22
- box-sizing: border-box;
23
- }
24
-
25
- body {
26
- margin: 0;
27
- min-height: 100vh;
28
- color: var(--ink);
29
- background:
30
- radial-gradient(circle at 20% 20%, rgba(47, 107, 255, 0.18), transparent 55%),
31
- radial-gradient(circle at 80% 0%, rgba(255, 159, 28, 0.2), transparent 50%),
32
- linear-gradient(160deg, var(--bg), var(--bg-strong));
33
- }
34
-
35
- #root {
36
- min-height: 100vh;
37
- }
38
-
39
- .app {
40
- max-width: 1100px;
41
- margin: 0 auto;
42
- padding: 56px 28px 72px;
43
- display: flex;
44
- flex-direction: column;
45
- gap: 40px;
46
- }
47
-
48
- .brand-bar {
49
- display: inline-flex;
50
- align-items: center;
51
- gap: 10px;
52
- font-weight: 600;
53
- justify-content: center;
54
- width: 100%;
55
- }
56
-
57
- .brand-logo {
58
- width: 260px;
59
- height: auto;
60
- display: block;
61
- }
62
-
63
- .nav {
64
- display: flex;
65
- align-items: center;
66
- justify-content: center;
67
- flex-direction: column;
68
- padding: 10px 6px;
69
- width: 100%;
70
- }
71
-
72
- .nav-toggle {
73
- display: none;
74
- border: 1px solid rgba(27, 27, 31, 0.18);
75
- background: rgba(255, 255, 255, 0.85);
76
- color: var(--ink);
77
- border-radius: 999px;
78
- padding: 8px 14px;
79
- font: inherit;
80
- font-weight: 600;
81
- cursor: pointer;
82
- box-shadow: var(--shadow);
83
- }
84
-
85
- .nav-links {
86
- display: inline-flex;
87
- align-items: center;
88
- justify-content: center;
89
- gap: 10px;
90
- flex-wrap: wrap;
91
- padding: 6px 12px;
92
- width: min(100%, 980px);
93
- background: rgba(255, 255, 255, 0.7);
94
- border-radius: 999px;
95
- border: 1px solid rgba(27, 27, 31, 0.1);
96
- box-shadow: var(--shadow);
97
- }
98
-
99
- .nav-links a {
100
- text-decoration: none;
101
- color: var(--ink);
102
- font-weight: 500;
103
- padding: 6px 12px;
104
- border-radius: 999px;
105
- transition: background 0.2s ease, color 0.2s ease;
106
- }
107
-
108
- .nav-links a:hover {
109
- background: rgba(47, 107, 255, 0.12);
110
- color: var(--accent);
111
- }
112
-
113
- .hero {
114
- display: grid;
115
- gap: 16px;
116
- padding: 32px 34px;
117
- background: rgba(255, 255, 255, 0.75);
118
- border-radius: var(--radius-lg);
119
- box-shadow: var(--shadow);
120
- border: 1px solid rgba(27, 27, 31, 0.08);
121
- backdrop-filter: blur(14px);
122
- animation: fade-up 0.6s ease both;
123
- }
124
-
125
- .hero.intro {
126
- gap: 18px;
127
- }
128
-
129
- h1 {
130
- font-size: clamp(2rem, 1.6vw + 1.4rem, 2.8rem);
131
- line-height: 1.15;
132
- margin: 0;
133
- }
134
-
135
- h2 {
136
- margin: 0;
137
- font-size: 1.4rem;
138
- }
139
-
140
- h3 {
141
- margin: 0 0 8px;
142
- }
143
-
144
- p {
145
- margin: 0;
146
- color: var(--muted);
147
- line-height: 1.6;
148
-
149
- span {
150
- font-family: monospace;
151
- font-weight: 700;
152
- font-size: .9rem;
153
- }
154
- }
155
-
156
- .muted {
157
- color: var(--muted);
158
- }
159
-
160
- .eyebrow {
161
- font-family: 'IBM Plex Mono', ui-monospace, SFMono-Regular, monospace;
162
- text-transform: uppercase;
163
- letter-spacing: 0.18em;
164
- font-size: 0.7rem;
165
- color: var(--muted);
166
- margin-bottom: 10px;
167
- }
168
-
169
- .subtext {
170
- max-width: 600px;
171
- }
172
-
173
- .hero .subtext {
174
- margin-top: 12px;
175
- }
176
-
177
- .hero .subtext + .subtext {
178
- margin-top: 10px;
179
- }
180
-
181
- .grid {
182
- display: grid;
183
- gap: 24px;
184
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
185
- align-items: stretch;
186
- }
187
-
188
- .doc-section {
189
- display: grid;
190
- gap: 18px;
191
- padding: 28px;
192
- border-radius: var(--radius-md);
193
- background: rgba(255, 255, 255, 0.85);
194
- border: 1px solid rgba(27, 27, 31, 0.08);
195
- box-shadow: var(--shadow);
196
- }
197
-
198
- .doc-copy {
199
- display: grid;
200
- gap: 10px;
201
- }
202
-
203
- .doc-snippets {
204
- display: grid;
205
- gap: 12px;
206
- }
207
-
208
- .singleton-grid {
209
- display: grid;
210
- gap: 20px;
211
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
212
- align-items: stretch;
213
- }
214
-
215
- .singleton-card {
216
- background: #fff;
217
- border-radius: var(--radius-md);
218
- padding: 22px;
219
- border: 1px solid rgba(27, 27, 31, 0.08);
220
- box-shadow: var(--shadow);
221
- display: grid;
222
- gap: 14px;
223
- align-content: start;
224
- height: 100%;
225
- }
226
-
227
- .singleton-count {
228
- font-size: 2.4rem;
229
- font-weight: 700;
230
- color: var(--ink);
231
- background: var(--bg-strong);
232
- border-radius: var(--radius-sm);
233
- padding: 10px 16px;
234
- width: fit-content;
235
- }
236
-
237
- .singleton-count.highlight {
238
- background: rgba(47, 107, 255, 0.16);
239
- color: var(--accent);
240
- }
241
-
242
- .singleton-hint {
243
- font-size: 0.85rem;
244
- color: var(--muted);
245
- }
246
-
247
- .guide {
248
- display: grid;
249
- gap: 20px;
250
- grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
251
- align-items: stretch;
252
- }
253
-
254
- .api-flow {
255
- display: grid;
256
- gap: 30px;
257
- }
258
-
259
- .api-group {
260
- display: grid;
261
- gap: 18px;
262
- }
263
-
264
- .api-grid {
265
- display: grid;
266
- gap: 18px;
267
- grid-template-columns: repeat(2, minmax(0, 1fr));
268
- align-items: stretch;
269
- }
270
-
271
- .api-composition-card {
272
- padding: 2px 0 18px;
273
- border-bottom: 1px solid rgba(27, 27, 31, 0.16);
274
- display: grid;
275
- gap: 10px;
276
- align-content: start;
277
- }
278
-
279
- .api-composition-card h3 {
280
- margin: 0;
281
- font-size: 1rem;
282
- }
283
-
284
- .api-composition-punch {
285
- margin-top: 8px;
286
- font-weight: 600;
287
- color: var(--ink);
288
- background: linear-gradient(120deg, rgba(47, 107, 255, 0.14), rgba(255, 159, 28, 0.14));
289
- border: 1px solid rgba(47, 107, 255, 0.2);
290
- border-radius: var(--radius-sm);
291
- padding: 10px 12px;
292
- }
293
-
294
- .api-card {
295
- background: #fff;
296
- border-radius: var(--radius-sm);
297
- padding: 18px;
298
- border: 1px solid rgba(27, 27, 31, 0.08);
299
- box-shadow: var(--shadow);
300
- display: grid;
301
- gap: 10px;
302
- align-content: start;
303
- height: 100%;
304
- }
305
-
306
- .api-card h3 {
307
- margin: 0;
308
- font-size: 1rem;
309
- }
310
-
311
- .api-card-wide {
312
- grid-column: 1 / -1;
313
- }
314
-
315
- .philosophy-grid {
316
- display: grid;
317
- gap: 20px;
318
- grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
319
- align-items: stretch;
320
- }
321
-
322
- .philosophy-card {
323
- background: #fff;
324
- border-radius: var(--radius-md);
325
- border: 1px solid rgba(27, 27, 31, 0.08);
326
- box-shadow: var(--shadow);
327
- overflow: hidden;
328
- display: grid;
329
- gap: 16px;
330
- align-content: start;
331
- height: 100%;
332
- }
333
-
334
- .philosophy-card img {
335
- width: 100%;
336
- height: 190px;
337
- object-fit: cover;
338
- background: var(--panel-dark);
339
- }
340
-
341
- .philosophy-card div {
342
- padding: 0 20px 22px;
343
- display: grid;
344
- gap: 8px;
345
- }
346
-
347
- .guide-card {
348
- background: rgba(255, 255, 255, 0.85);
349
- border-radius: var(--radius-md);
350
- padding: 22px;
351
- border: 1px solid rgba(27, 27, 31, 0.08);
352
- box-shadow: var(--shadow);
353
- display: grid;
354
- gap: 16px;
355
- align-content: start;
356
- height: 100%;
357
- }
358
-
359
- .guide-highlight {
360
- margin-top: 4px;
361
- font-weight: 600;
362
- color: var(--ink);
363
- background: linear-gradient(120deg, rgba(47, 107, 255, 0.16), rgba(255, 159, 28, 0.16));
364
- border: 1px solid rgba(47, 107, 255, 0.2);
365
- border-radius: var(--radius-sm);
366
- padding: 10px 12px;
367
- }
368
-
369
- .code-block.compact {
370
- font-size: 0.75rem;
371
- padding: 12px 14px;
372
- }
373
-
374
- .card {
375
- background: var(--card);
376
- border-radius: var(--radius-md);
377
- padding: 24px;
378
- box-shadow: var(--shadow);
379
- border: 1px solid rgba(27, 27, 31, 0.08);
380
- display: flex;
381
- flex-direction: column;
382
- gap: 20px;
383
- animation: fade-up 0.6s ease both;
384
- height: 100%;
385
- }
386
-
387
- .card:nth-child(2) {
388
- animation-delay: 0.1s;
389
- }
390
-
391
- .card-header {
392
- display: flex;
393
- align-items: center;
394
- justify-content: space-between;
395
- gap: 12px;
396
- }
397
-
398
- .count-chip {
399
- background: var(--accent-soft);
400
- color: var(--accent);
401
- border-radius: 999px;
402
- padding: 6px 14px;
403
- font-weight: 600;
404
- font-size: 1rem;
405
- }
406
-
407
- .count-display {
408
- display: grid;
409
- gap: 8px;
410
- padding: 16px;
411
- border-radius: var(--radius-sm);
412
- background: linear-gradient(120deg, rgba(47, 107, 255, 0.1), rgba(255, 159, 28, 0.08));
413
- }
414
-
415
- .code-block {
416
- margin: 0;
417
- padding: 16px 18px;
418
- border-radius: var(--radius-sm);
419
- background: #12131a;
420
- color: #f0f2ff;
421
- font-family: 'IBM Plex Mono', ui-monospace, SFMono-Regular, monospace;
422
- font-size: 0.8rem;
423
- line-height: 1.5;
424
- overflow-x: auto;
425
- box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.08);
426
- }
427
-
428
- .code-block code {
429
- font-family: inherit;
430
- }
431
-
432
- .count-label {
433
- font-size: 0.85rem;
434
- color: var(--muted);
435
- }
436
-
437
- .count-value {
438
- font-size: 2.6rem;
439
- font-weight: 700;
440
- }
441
-
442
- .actions {
443
- display: grid;
444
- grid-template-columns: repeat(auto-fit, minmax(110px, 1fr));
445
- gap: 10px;
446
- }
447
-
448
- .btn {
449
- border: 1px solid rgba(27, 27, 31, 0.18);
450
- border-radius: 999px;
451
- padding: 10px 14px;
452
- font: inherit;
453
- background: #fff;
454
- cursor: pointer;
455
- transition: transform 0.2s ease, box-shadow 0.2s ease, border 0.2s ease;
456
- }
457
-
458
- .btn:hover {
459
- transform: translateY(-1px);
460
- box-shadow: 0 10px 20px -14px rgba(27, 27, 31, 0.4);
461
- }
462
-
463
- .btn.primary {
464
- background: var(--accent);
465
- color: #fff;
466
- border-color: transparent;
467
- }
468
-
469
- .btn.ghost {
470
- background: transparent;
471
- color: var(--ink);
472
- }
473
-
474
- @keyframes fade-up {
475
- from {
476
- opacity: 0;
477
- transform: translateY(12px);
478
- }
479
- to {
480
- opacity: 1;
481
- transform: translateY(0);
482
- }
483
- }
484
-
485
- @media (max-width: 720px) {
486
- .app {
487
- padding: 40px 20px 60px;
488
- }
489
-
490
- .nav {
491
- padding: 0;
492
- }
493
-
494
- .nav-toggle {
495
- display: inline-flex;
496
- align-items: center;
497
- justify-content: center;
498
- margin-bottom: 10px;
499
- }
500
-
501
- .nav-links {
502
- display: none;
503
- width: 100%;
504
- border-radius: var(--radius-md);
505
- padding: 10px;
506
- gap: 8px;
507
- }
508
-
509
- .nav-links.is-open {
510
- display: grid;
511
- grid-template-columns: repeat(2, minmax(0, 1fr));
512
- }
513
-
514
- .nav-links a {
515
- text-align: center;
516
- }
517
-
518
- .doc-section {
519
- padding: 22px;
520
- }
521
-
522
- .api-grid {
523
- grid-template-columns: 1fr;
524
- }
525
-
526
- .hero {
527
- padding: 26px;
528
- }
529
-
530
- .footer-card {
531
- flex-direction: column;
532
- align-items: flex-start;
533
- }
534
- }
@@ -1,12 +0,0 @@
1
- {
2
- "extends": "../tsconfig.json",
3
- "compilerOptions": {
4
- "jsx": "react-jsx",
5
- "noEmit": true,
6
- "baseUrl": ".",
7
- "paths": {
8
- "@veams/status-quo": ["../src/index.ts"]
9
- }
10
- },
11
- "include": ["src"]
12
- }
@@ -1,18 +0,0 @@
1
- import { defineConfig } from 'vite';
2
- import react from '@vitejs/plugin-react';
3
- import { fileURLToPath, URL } from 'node:url';
4
-
5
- export default defineConfig({
6
- root: fileURLToPath(new URL('.', import.meta.url)),
7
- base: './',
8
- plugins: [react()],
9
- resolve: {
10
- alias: {
11
- '@veams/status-quo': fileURLToPath(new URL('../src/index.ts', import.meta.url)),
12
- },
13
- },
14
- build: {
15
- outDir: fileURLToPath(new URL('../docs', import.meta.url)),
16
- emptyOutDir: true,
17
- },
18
- });