@astralui/core 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.
- package/LICENSE +21 -0
- package/README.md +121 -0
- package/dist/index.cjs +621 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +150 -0
- package/dist/index.d.ts +150 -0
- package/dist/index.js +599 -0
- package/dist/index.js.map +1 -0
- package/dist/styles.css +584 -0
- package/package.json +61 -0
package/dist/styles.css
ADDED
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700;800;900&display=swap');
|
|
2
|
+
|
|
3
|
+
/* ===== src/styles/tokens.css ===== */
|
|
4
|
+
/* Default UI font (override --astral-font-family to use your own; or self-host Inter). */
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
/* ============================================================================
|
|
8
|
+
AstralUI theme tokens - the --astral-* design variables. Every Astral token
|
|
9
|
+
(au-*, etc.) resolves through these + light-dark(), which is why `color-scheme`
|
|
10
|
+
is set per scheme here.
|
|
11
|
+
|
|
12
|
+
:root carries the scheme-independent palette + the DARK semantic defaults
|
|
13
|
+
(AstralUI defaults to dark). The [data-astral-scheme="light"] block overrides
|
|
14
|
+
only the ~12 vars that differ in light mode. Per-org brand/surface overrides
|
|
15
|
+
are layered on top at runtime by <AstralThemeProvider>.
|
|
16
|
+
============================================================================ */
|
|
17
|
+
|
|
18
|
+
/* ── Base reset (so AstralUI works standalone, no external reset needed) ── */
|
|
19
|
+
*, *::before, *::after { box-sizing: border-box; }
|
|
20
|
+
html { font-size: 16px; -webkit-text-size-adjust: 100%; }
|
|
21
|
+
body {
|
|
22
|
+
margin: 0;
|
|
23
|
+
font-family: var(--astral-font-family);
|
|
24
|
+
font-size: 16px;
|
|
25
|
+
line-height: 1.55;
|
|
26
|
+
background: var(--astral-color-body);
|
|
27
|
+
color: var(--astral-color-text);
|
|
28
|
+
-webkit-font-smoothing: antialiased;
|
|
29
|
+
}
|
|
30
|
+
h1, h2, h3, h4, h5, h6, p, figure, blockquote, dl, dd { margin: 0; }
|
|
31
|
+
button, input, optgroup, select, textarea { font-family: inherit; font-size: 100%; }
|
|
32
|
+
|
|
33
|
+
:root {
|
|
34
|
+
color-scheme: dark;
|
|
35
|
+
|
|
36
|
+
--astral-font-family: Inter, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, sans-serif;
|
|
37
|
+
--astral-radius-md: calc(0.5rem * 1);
|
|
38
|
+
|
|
39
|
+
--astral-color-black: #000;
|
|
40
|
+
--astral-color-white: #fff;
|
|
41
|
+
|
|
42
|
+
/* palette shades - identical in both schemes */
|
|
43
|
+
--astral-color-blue-4: #4dabf7;
|
|
44
|
+
--astral-color-blue-5: #339af0;
|
|
45
|
+
--astral-color-blue-6: #228be6;
|
|
46
|
+
--astral-color-blue-7: #1c7ed6;
|
|
47
|
+
--astral-color-cyan-6: #15aabf;
|
|
48
|
+
--astral-color-cyan-8: #0c8599;
|
|
49
|
+
--astral-color-grape-6: #be4bdb;
|
|
50
|
+
--astral-color-grape-7: #ae3ec9;
|
|
51
|
+
--astral-color-indigo-6: #4c6ef5;
|
|
52
|
+
--astral-color-gray-0: #f8f9fa;
|
|
53
|
+
--astral-color-gray-1: #f1f3f5;
|
|
54
|
+
--astral-color-gray-2: #e9ecef;
|
|
55
|
+
--astral-color-gray-3: #dee2e6;
|
|
56
|
+
--astral-color-gray-4: #ced4da;
|
|
57
|
+
--astral-color-gray-5: #adb5bd;
|
|
58
|
+
--astral-color-gray-6: #868e96;
|
|
59
|
+
--astral-color-gray-7: #495057;
|
|
60
|
+
--astral-color-green-5: #51cf66;
|
|
61
|
+
--astral-color-green-6: #40c057;
|
|
62
|
+
--astral-color-green-7: #37b24d;
|
|
63
|
+
--astral-color-green-8: #2f9e44;
|
|
64
|
+
--astral-color-green-9: #2b8a3e;
|
|
65
|
+
--astral-color-orange-5: #ff922b;
|
|
66
|
+
--astral-color-orange-6: #fd7e14;
|
|
67
|
+
--astral-color-orange-7: #f76707;
|
|
68
|
+
--astral-color-orange-9: #d9480f;
|
|
69
|
+
--astral-color-red-5: #ff6b6b;
|
|
70
|
+
--astral-color-red-6: #fa5252;
|
|
71
|
+
--astral-color-red-7: #f03e3e;
|
|
72
|
+
--astral-color-red-8: #e03131;
|
|
73
|
+
--astral-color-teal-5: #20c997;
|
|
74
|
+
--astral-color-teal-6: #12b886;
|
|
75
|
+
--astral-color-teal-7: #0ca678;
|
|
76
|
+
--astral-color-teal-8: #099268;
|
|
77
|
+
--astral-color-violet-0: #f3f0ff;
|
|
78
|
+
--astral-color-violet-1: #e5dbff;
|
|
79
|
+
--astral-color-violet-2: #d0bfff;
|
|
80
|
+
--astral-color-violet-3: #b197fc;
|
|
81
|
+
--astral-color-violet-4: #9775fa;
|
|
82
|
+
--astral-color-violet-5: #845ef7;
|
|
83
|
+
--astral-color-violet-6: #7950f2;
|
|
84
|
+
--astral-color-violet-7: #7048e8;
|
|
85
|
+
--astral-color-violet-8: #6741d9;
|
|
86
|
+
--astral-color-violet-9: #5f3dc4;
|
|
87
|
+
--astral-color-yellow-5: #fcc419;
|
|
88
|
+
--astral-color-yellow-6: #fab005;
|
|
89
|
+
--astral-color-yellow-7: #f59f00;
|
|
90
|
+
--astral-color-yellow-8: #f08c00;
|
|
91
|
+
--astral-color-dark-0: #f4f4f5;
|
|
92
|
+
--astral-color-dark-1: #d4d4d8;
|
|
93
|
+
--astral-color-dark-2: #a1a1aa;
|
|
94
|
+
--astral-color-dark-3: #71717a;
|
|
95
|
+
--astral-color-dark-4: #3f3f46;
|
|
96
|
+
--astral-color-dark-5: #27272a;
|
|
97
|
+
--astral-color-dark-6: #1c1c20;
|
|
98
|
+
--astral-color-dark-7: #141417;
|
|
99
|
+
--astral-color-dark-8: #0e0e11;
|
|
100
|
+
--astral-color-dark-9: #09090b;
|
|
101
|
+
|
|
102
|
+
/* semantic / primary - DARK defaults */
|
|
103
|
+
--astral-color-text: #f4f4f5;
|
|
104
|
+
--astral-color-body: #141417;
|
|
105
|
+
--astral-color-dimmed: #a1a1aa;
|
|
106
|
+
--astral-color-default-border: #3f3f46;
|
|
107
|
+
--astral-color-default-hover: #27272a;
|
|
108
|
+
--astral-primary-color-filled: #6741d9;
|
|
109
|
+
--astral-primary-color-filled-hover: #5f3dc4;
|
|
110
|
+
--astral-primary-color-light: rgba(121, 80, 242, 0.15);
|
|
111
|
+
--astral-primary-color-light-hover: rgba(121, 80, 242, 0.2);
|
|
112
|
+
--astral-primary-color-light-color: #b197fc;
|
|
113
|
+
--astral-color-yellow-light: rgba(250, 176, 5, 0.15);
|
|
114
|
+
--astral-color-yellow-light-color: #ffe066;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
/* LIGHT overrides - only the vars that differ from the dark defaults above */
|
|
118
|
+
[data-astral-scheme="light"] {
|
|
119
|
+
color-scheme: light;
|
|
120
|
+
|
|
121
|
+
--astral-color-text: #000;
|
|
122
|
+
--astral-color-body: #fff;
|
|
123
|
+
--astral-color-dimmed: #868e96;
|
|
124
|
+
--astral-color-default-border: #ced4da;
|
|
125
|
+
--astral-color-default-hover: #f8f9fa;
|
|
126
|
+
--astral-primary-color-filled: #7950f2;
|
|
127
|
+
--astral-primary-color-filled-hover: #7048e8;
|
|
128
|
+
--astral-primary-color-light: rgba(121, 80, 242, 0.1);
|
|
129
|
+
--astral-primary-color-light-hover: rgba(121, 80, 242, 0.12);
|
|
130
|
+
--astral-primary-color-light-color: #7950f2;
|
|
131
|
+
--astral-color-yellow-light: rgba(250, 176, 5, 0.1);
|
|
132
|
+
--astral-color-yellow-light-color: #fab005;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
/* ===== src/styles/utilities.css ===== */
|
|
137
|
+
/* ============ AstralUI utilities + component primitives ============
|
|
138
|
+
Scoped under :root. Theme-aware via the --astral-* tokens + light-dark().
|
|
139
|
+
Set a brand color inline as --au-ic to tint accents (hero tile, highlights). */
|
|
140
|
+
|
|
141
|
+
:root{
|
|
142
|
+
--au-panel: var(--astral-app-card, light-dark(#ffffff, #16161b));
|
|
143
|
+
--au-surface-2: light-dark(var(--astral-color-gray-1), #1d1d24);
|
|
144
|
+
--au-line: var(--astral-color-default-border);
|
|
145
|
+
--au-text: var(--astral-color-text);
|
|
146
|
+
--au-dim: light-dark(var(--astral-color-gray-7), #a6a6b3);
|
|
147
|
+
--au-faint: light-dark(var(--astral-color-gray-6), #6f6f7d);
|
|
148
|
+
--au-brand: var(--astral-primary-color-filled);
|
|
149
|
+
--au-brand-text: light-dark(var(--astral-color-violet-7), var(--astral-color-violet-3));
|
|
150
|
+
--au-green: light-dark(#16a34a, #34d399);
|
|
151
|
+
--au-amber: light-dark(#d97706, #fbbf24);
|
|
152
|
+
--au-red: light-dark(#dc2626, #f87171);
|
|
153
|
+
--au-blue: light-dark(#2563eb, #60a5fa);
|
|
154
|
+
--au-ic: var(--astral-primary-color-filled);
|
|
155
|
+
--au-radius:16px;
|
|
156
|
+
--au-shadow: light-dark(0 1px 2px rgba(16,16,24,.06), 0 1px 2px rgba(0,0,0,.4)),
|
|
157
|
+
light-dark(0 8px 22px rgba(16,16,24,.05), 0 8px 24px rgba(0,0,0,.22));
|
|
158
|
+
font-family: var(--astral-font-family);
|
|
159
|
+
/* full-width: fill the content area (viewport minus the sidebar), not centered.
|
|
160
|
+
Inside the Clay modal/drawer this wrapper is constrained by the overlay anyway. */
|
|
161
|
+
}
|
|
162
|
+
:root .num{ font-variant-numeric:tabular-nums; }
|
|
163
|
+
|
|
164
|
+
/* ---------- back link ---------- */
|
|
165
|
+
.au-back{ display:inline-flex; align-items:center; gap:7px; color:var(--au-faint); font-size:12.5px; font-weight:600; text-decoration:none; margin-bottom:14px; transition:color .15s; }
|
|
166
|
+
.au-back:hover{ color:var(--au-text); }
|
|
167
|
+
.au-back svg{ width:15px; height:15px; }
|
|
168
|
+
|
|
169
|
+
/* ---------- hero ---------- */
|
|
170
|
+
.au-hero{ position:relative; overflow:hidden; background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:20px 22px; display:flex; align-items:center; gap:17px; }
|
|
171
|
+
.au-hero::before{ content:""; position:absolute; inset:0; pointer-events:none; background:radial-gradient(60% 120% at 0% 0%, color-mix(in srgb, var(--au-ic) 13%, transparent), transparent 70%); }
|
|
172
|
+
.au-hero > *{ position:relative; }
|
|
173
|
+
.au-tile{ width:56px; height:56px; border-radius:14px; display:grid; place-items:center; flex:0 0 auto; background:color-mix(in srgb, var(--au-ic) 18%, transparent); color:var(--au-ic); }
|
|
174
|
+
.au-tile svg{ width:28px; height:28px; }
|
|
175
|
+
.au-hmain{ flex:1; min-width:0; }
|
|
176
|
+
.au-hmain h1{ margin:0; font-size:21px; font-weight:700; letter-spacing:-.02em; color:var(--au-text); }
|
|
177
|
+
.au-hdesc{ margin-top:4px; font-size:12.5px; color:var(--au-dim); line-height:1.5; }
|
|
178
|
+
.au-hright{ display:flex; align-items:center; gap:12px; flex:0 0 auto; flex-wrap:wrap; justify-content:flex-end; }
|
|
179
|
+
|
|
180
|
+
/* ---------- status pill ---------- */
|
|
181
|
+
.au-status{ display:inline-flex; align-items:center; gap:7px; font-size:12px; font-weight:700; border-radius:999px; padding:5px 12px; white-space:nowrap; }
|
|
182
|
+
.au-status .dot{ width:7px; height:7px; border-radius:50%; flex:0 0 auto; }
|
|
183
|
+
.au-status.on{ color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); }
|
|
184
|
+
.au-status.on .dot{ background:var(--au-green); box-shadow:0 0 7px var(--au-green); }
|
|
185
|
+
.au-status.paused{ color:var(--au-amber); background:color-mix(in srgb, var(--au-amber) 14%, transparent); }
|
|
186
|
+
.au-status.paused .dot{ background:var(--au-amber); }
|
|
187
|
+
.au-status.off{ color:var(--au-faint); background:var(--au-surface-2); border:1px solid var(--au-line); }
|
|
188
|
+
.au-status.off .dot{ background:var(--au-faint); }
|
|
189
|
+
|
|
190
|
+
/* ---------- buttons ---------- */
|
|
191
|
+
.au-btn{ display:inline-flex; align-items:center; gap:7px; font:inherit; font-size:12.5px; font-weight:600; border-radius:10px; padding:9px 15px; cursor:pointer; border:1px solid var(--au-line); background:var(--au-surface-2); color:var(--au-dim); text-decoration:none; transition:color .15s, border-color .15s, filter .15s; white-space:nowrap; }
|
|
192
|
+
.au-btn:hover{ color:var(--au-text); border-color:color-mix(in srgb, var(--au-brand) 45%, transparent); }
|
|
193
|
+
.au-btn:disabled{ opacity:.5; cursor:not-allowed; }
|
|
194
|
+
.au-btn svg{ width:15px; height:15px; flex:0 0 auto; }
|
|
195
|
+
.au-btn.primary{ background:var(--au-brand); border-color:var(--au-brand); color:#fff; }
|
|
196
|
+
.au-btn.primary:hover{ filter:brightness(1.08); color:#fff; border-color:var(--au-brand); }
|
|
197
|
+
.au-btn.sm{ font-size:12px; padding:7px 12px; }
|
|
198
|
+
.au-ico{ width:36px; height:36px; border-radius:9px; display:grid; place-items:center; border:1px solid var(--au-line); background:var(--au-surface-2); color:var(--au-faint); cursor:pointer; flex:0 0 auto; transition:color .15s, border-color .15s; }
|
|
199
|
+
.au-ico:hover{ color:var(--au-red); border-color:color-mix(in srgb, var(--au-red) 40%, transparent); }
|
|
200
|
+
.au-ico.sm{ width:34px; height:34px; }
|
|
201
|
+
.au-ico svg{ width:16px; height:16px; }
|
|
202
|
+
|
|
203
|
+
/* ---------- alerts ---------- */
|
|
204
|
+
.au-alert{ display:flex; align-items:flex-start; gap:11px; margin-top:14px; padding:13px 15px; border-radius:12px; font-size:12.5px; line-height:1.5; color:var(--au-text); background:color-mix(in srgb, var(--au-green) 10%, transparent); border:1px solid color-mix(in srgb, var(--au-green) 30%, transparent); }
|
|
205
|
+
.au-alert svg{ width:17px; height:17px; flex:0 0 auto; color:var(--au-green); margin-top:1px; }
|
|
206
|
+
.au-alert.info{ background:color-mix(in srgb, var(--au-blue) 10%, transparent); border-color:color-mix(in srgb, var(--au-blue) 28%, transparent); }
|
|
207
|
+
.au-alert.info svg{ color:var(--au-blue); }
|
|
208
|
+
.au-alert.warn{ background:color-mix(in srgb, var(--au-amber) 11%, transparent); border-color:color-mix(in srgb, var(--au-amber) 30%, transparent); }
|
|
209
|
+
.au-alert.warn svg{ color:var(--au-amber); }
|
|
210
|
+
.au-alert.error{ background:color-mix(in srgb, var(--au-red) 10%, transparent); border-color:color-mix(in srgb, var(--au-red) 30%, transparent); }
|
|
211
|
+
.au-alert.error svg{ color:var(--au-red); }
|
|
212
|
+
.au-alert.col{ flex-direction:column; gap:9px; }
|
|
213
|
+
|
|
214
|
+
/* ---------- button color variants (used in the Clay drawer) ---------- */
|
|
215
|
+
.au-btn.danger{ color:var(--au-red); border-color:color-mix(in srgb, var(--au-red) 36%, transparent); background:color-mix(in srgb, var(--au-red) 12%, transparent); }
|
|
216
|
+
.au-btn.danger:hover{ color:var(--au-red); border-color:color-mix(in srgb, var(--au-red) 55%, transparent); filter:brightness(1.05); }
|
|
217
|
+
.au-btn.ok{ color:var(--au-green); border-color:color-mix(in srgb, var(--au-green) 38%, transparent); background:color-mix(in srgb, var(--au-green) 12%, transparent); }
|
|
218
|
+
.au-btn.ok:hover{ color:var(--au-green); filter:brightness(1.05); }
|
|
219
|
+
.au-btn.solidred{ color:#fff; background:var(--au-red); border-color:var(--au-red); }
|
|
220
|
+
.au-btn.solidred:hover{ filter:brightness(1.06); color:#fff; }
|
|
221
|
+
.au-btn.orange{ color:#fff; background:#EF8E2E; border-color:#EF8E2E; }
|
|
222
|
+
.au-btn.orange:hover{ filter:brightness(1.05); color:#fff; }
|
|
223
|
+
.au-btn.orange svg{ color:#fff; }
|
|
224
|
+
.au-btn.green{ color:#fff; background:var(--au-green); border-color:var(--au-green); }
|
|
225
|
+
.au-btn.green:hover{ filter:brightness(1.06); color:#fff; }
|
|
226
|
+
.au-btn.green svg{ color:#fff; }
|
|
227
|
+
.au-kbd{ font-family:inherit; font-size:11px; font-weight:700; padding:1px 6px; border-radius:5px;
|
|
228
|
+
background:var(--au-surface-2); border:1px solid var(--au-line); color:var(--au-text); }
|
|
229
|
+
.au-ck{ width:18px; height:18px; border-radius:5px; border:1.5px solid var(--au-line); background:var(--au-surface-2);
|
|
230
|
+
display:inline-grid; place-items:center; flex:0 0 auto; transition:background .12s, border-color .12s; }
|
|
231
|
+
.au-ck.on{ background:var(--au-brand); border-color:var(--au-brand); }
|
|
232
|
+
.au-ck svg{ width:11px; height:11px; color:#fff; display:block; }
|
|
233
|
+
.au-tag{ font-size:10.5px; font-weight:700; border-radius:6px; padding:2px 7px; color:var(--au-faint); background:var(--au-surface-2); white-space:nowrap; }
|
|
234
|
+
.au-tag.prem{ color:var(--au-amber, #d97706); background:color-mix(in srgb, var(--au-amber, #d97706) 14%, transparent); }
|
|
235
|
+
.au-tablewrap{ border:1px solid var(--au-line); border-radius:11px; overflow:auto; }
|
|
236
|
+
.au-table{ width:100%; border-collapse:collapse; font-size:12.5px; }
|
|
237
|
+
.au-table thead th{ text-align:left; font-size:10px; font-weight:700; letter-spacing:.04em; text-transform:uppercase;
|
|
238
|
+
color:var(--au-faint); padding:8px 10px; border-bottom:1px solid var(--au-line);
|
|
239
|
+
background:color-mix(in srgb, var(--au-surface-2) 55%, transparent); }
|
|
240
|
+
.au-table tbody td{ padding:8px 10px; border-bottom:1px solid var(--au-line); color:var(--au-text); vertical-align:middle; }
|
|
241
|
+
.au-table tbody tr:last-child td{ border-bottom:0; }
|
|
242
|
+
.au-table tbody tr:hover td{ background:var(--au-surface-2); }
|
|
243
|
+
.au-alert{ display:flex; align-items:flex-start; gap:9px; padding:10px 12px; border-radius:10px; font-size:12px; color:var(--au-text); line-height:1.5; }
|
|
244
|
+
.au-alert svg{ flex:0 0 auto; margin-top:1px; }
|
|
245
|
+
.au-alert.warn{ color:var(--au-amber, #d97706); background:color-mix(in srgb, var(--au-amber, #d97706) 10%, transparent); border:1px solid color-mix(in srgb, var(--au-amber, #d97706) 34%, var(--au-line)); }
|
|
246
|
+
.au-alert.err{ color:var(--au-red); background:color-mix(in srgb, var(--au-red) 9%, transparent); border:1px solid color-mix(in srgb, var(--au-red) 34%, var(--au-line)); }
|
|
247
|
+
.au-alert.brand{ color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 9%, transparent); border:1px solid color-mix(in srgb, var(--au-brand) 32%, var(--au-line)); }
|
|
248
|
+
.au-alert .t{ font-weight:700; margin-bottom:2px; }
|
|
249
|
+
.au-card{ border:1px solid var(--au-line); border-radius:12px; padding:13px 15px; background:color-mix(in srgb, var(--au-surface-2) 32%, transparent); }
|
|
250
|
+
.au-card-h{ font-size:10.5px; font-weight:700; letter-spacing:.04em; text-transform:uppercase; color:var(--au-faint); margin-bottom:9px; }
|
|
251
|
+
.au-mpill{ display:inline-flex; align-items:center; gap:6px; font-size:12px; font-weight:700; border-radius:999px; padding:4px 11px; width:fit-content; }
|
|
252
|
+
.au-day{ width:22px; height:22px; border-radius:6px; display:inline-grid; place-items:center; font-size:10px; font-weight:700;
|
|
253
|
+
background:var(--au-surface-2); color:var(--au-faint); }
|
|
254
|
+
.au-day.on{ background:var(--au-brand); color:#fff; }
|
|
255
|
+
.au-divider{ height:1px; background:var(--au-line); border:0; margin:2px 0; }
|
|
256
|
+
.au-tcard{ border:1px solid var(--au-line); border-radius:12px; padding:14px; background:var(--au-surface-2);
|
|
257
|
+
cursor:pointer; transition:border-color .12s, filter .12s; }
|
|
258
|
+
.au-tcard:hover{ border-color:color-mix(in srgb, var(--au-brand) 45%, var(--au-line)); filter:brightness(1.02); }
|
|
259
|
+
.au-seg{ display:flex; gap:4px; padding:3px; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:10px; }
|
|
260
|
+
.au-seg button{ flex:1; background:none; border:0; border-radius:7px; padding:7px 10px; font:inherit; font-size:12.5px; font-weight:600;
|
|
261
|
+
color:var(--au-dim); cursor:pointer; transition:background .12s, color .12s; }
|
|
262
|
+
.au-seg button.on{ background:var(--au-panel); color:var(--au-text); box-shadow:0 1px 2px rgba(0,0,0,.12); }
|
|
263
|
+
.au-suggest{ font-size:11px; font-weight:600; border-radius:6px; padding:2px 8px; cursor:pointer; font-family:inherit;
|
|
264
|
+
color:var(--au-blue, #3b82f6); background:color-mix(in srgb, var(--au-blue, #3b82f6) 10%, transparent);
|
|
265
|
+
border:1px solid color-mix(in srgb, var(--au-blue, #3b82f6) 34%, var(--au-line)); }
|
|
266
|
+
.au-suggest:hover{ filter:brightness(1.05); }
|
|
267
|
+
.au-check{ display:flex; align-items:flex-start; gap:10px; cursor:pointer; }
|
|
268
|
+
.au-check .cl{ font-size:13px; color:var(--au-text); display:block; }
|
|
269
|
+
.au-check .cd{ font-size:11.5px; color:var(--au-faint); display:block; margin-top:1px; }
|
|
270
|
+
|
|
271
|
+
/* ---------- modal / drawer form layout ---------- */
|
|
272
|
+
.clay-form{ display:flex; flex-direction:column; gap:14px; }
|
|
273
|
+
.clay-actions{ display:flex; justify-content:flex-end; gap:9px; margin-top:4px; }
|
|
274
|
+
.clay-link{ font:inherit; font-size:12.5px; font-weight:600; color:var(--au-brand-text); cursor:pointer; background:none; border:0; padding:0; text-align:left; width:fit-content; }
|
|
275
|
+
.clay-link:hover{ text-decoration:underline; }
|
|
276
|
+
.clay-stats{ display:flex; gap:28px; }
|
|
277
|
+
.clay-stat .l{ font-size:11px; color:var(--au-faint); }
|
|
278
|
+
.clay-stat .v{ font-size:15px; font-weight:700; color:var(--au-text); margin-top:2px; font-variant-numeric:tabular-nums; }
|
|
279
|
+
.clay-tokrow{ display:flex; align-items:center; gap:9px; }
|
|
280
|
+
.clay-meta{ font-size:12px; color:var(--au-faint); }
|
|
281
|
+
.clay-meta b{ color:var(--au-dim); font-weight:600; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
|
|
282
|
+
.clay-errs-title{ font-size:12.5px; font-weight:700; color:var(--au-text); margin-bottom:4px; }
|
|
283
|
+
.clay-err{ padding:10px 0; border-top:1px solid var(--au-line); }
|
|
284
|
+
.clay-err:first-of-type{ border-top:0; }
|
|
285
|
+
.clay-err .top{ display:flex; gap:10px; align-items:center; font-size:11.5px; color:var(--au-dim); }
|
|
286
|
+
.clay-err .top .st{ font-weight:700; color:var(--au-amber); }
|
|
287
|
+
.clay-err .reason{ font-size:12px; color:var(--au-text); margin-top:3px; }
|
|
288
|
+
.clay-err .code{ font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:10.5px; color:var(--au-faint); margin-top:1px; }
|
|
289
|
+
|
|
290
|
+
/* ---------- custom text input / textarea (Astral) ---------- */
|
|
291
|
+
.au-field-label .req{ color:var(--au-red); }
|
|
292
|
+
|
|
293
|
+
/* inline field error */
|
|
294
|
+
.au-field-err{ color:var(--au-red); font-size:11.5px; margin-top:5px; }
|
|
295
|
+
|
|
296
|
+
/* ---------- 6-box code input ---------- */
|
|
297
|
+
.au-pin{ display:flex; gap:8px; }
|
|
298
|
+
.au-pin-box{ width:44px; height:50px; min-width:0; flex:1; max-width:52px; text-align:center; font-size:19px; font-weight:700; font-variant-numeric:tabular-nums; color:var(--au-text); background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:11px; outline:none; transition:border-color .15s, box-shadow .15s; }
|
|
299
|
+
.au-pin-box:focus{ border-color:color-mix(in srgb, var(--au-brand) 55%, transparent); box-shadow:0 0 0 3px color-mix(in srgb, var(--au-brand) 18%, transparent); }
|
|
300
|
+
.au-textarea{ width:100%; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:10px; padding:10px 13px; font:inherit; font-size:13px; color:var(--au-text); outline:none; resize:vertical; min-height:64px; line-height:1.5; }
|
|
301
|
+
.au-textarea:focus{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); }
|
|
302
|
+
.au-textarea::placeholder{ color:var(--au-faint); }
|
|
303
|
+
|
|
304
|
+
/* ---------- Astral modal ---------- */
|
|
305
|
+
.au-modal-overlay{ position:fixed; inset:0; z-index:300; background:rgba(8,8,12,.55); backdrop-filter:blur(2px); display:grid; place-items:center; padding:20px; }
|
|
306
|
+
.au-modal-panel{ width:100%; background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:0 24px 60px rgba(0,0,0,.45); max-height:calc(100dvh - 40px); overflow-y:auto; }
|
|
307
|
+
.au-modal-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:18px 20px 0; }
|
|
308
|
+
.au-modal-title{ font-size:16px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); }
|
|
309
|
+
.au-modal-x{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; border:0; background:transparent; color:var(--au-faint); cursor:pointer; flex:0 0 auto; }
|
|
310
|
+
.au-modal-x:hover{ background:var(--au-surface-2); color:var(--au-text); }
|
|
311
|
+
.au-modal-x svg{ width:18px; height:18px; }
|
|
312
|
+
.au-modal-body{ padding:16px 20px 20px; font-size:13px; }
|
|
313
|
+
|
|
314
|
+
/* ---------- Astral drawer ---------- */
|
|
315
|
+
.au-drawer-overlay{ position:fixed; inset:0; z-index:300; background:rgba(8,8,12,.5); display:flex; justify-content:flex-end; }
|
|
316
|
+
.au-drawer-panel{ height:100%; background:var(--au-panel); border-left:1px solid var(--au-line); box-shadow:-12px 0 40px rgba(0,0,0,.4); display:flex; flex-direction:column; max-width:100vw; }
|
|
317
|
+
.au-drawer-head{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:17px 20px; border-bottom:1px solid var(--au-line); flex:0 0 auto; }
|
|
318
|
+
.au-drawer-title{ font-size:16px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
319
|
+
.au-drawer-body{ padding:18px 20px; overflow-y:auto; flex:1; font-size:13px; }
|
|
320
|
+
|
|
321
|
+
/* ---------- Astral select ---------- */
|
|
322
|
+
.au-select{ position:relative; }
|
|
323
|
+
.au-select-trigger{ width:100%; cursor:pointer; justify-content:space-between; text-align:left; font:inherit; font-size:13px; color:var(--au-text); }
|
|
324
|
+
.au-select-trigger:disabled{ opacity:.55; cursor:not-allowed; }
|
|
325
|
+
.au-select-trigger > span:first-child{ flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
326
|
+
.au-select-trigger .ph{ color:var(--au-faint); }
|
|
327
|
+
.au-select-caret{ color:var(--au-faint); flex:0 0 auto; }
|
|
328
|
+
/* portaled to body + fixed-positioned (left/top|bottom/width/max-height set inline)
|
|
329
|
+
so it floats above the modal instead of being clipped by its overflow. */
|
|
330
|
+
.au-select-menu{ position:fixed; z-index:320; background:var(--au-panel); border:1px solid var(--au-line); border-radius:11px; box-shadow:0 14px 34px rgba(0,0,0,.4); padding:5px; overflow-y:auto; }
|
|
331
|
+
.au-select-search{ width:100%; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:8px; padding:8px 11px; font:inherit; font-size:12.5px; color:var(--au-text); outline:none; margin-bottom:5px; }
|
|
332
|
+
.au-select-search:focus{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); }
|
|
333
|
+
.au-select-opt{ display:block; width:100%; text-align:left; border:0; background:transparent; font:inherit; font-size:13px; color:var(--au-dim); padding:8px 10px; border-radius:8px; cursor:pointer; }
|
|
334
|
+
.au-select-opt:hover{ background:var(--au-surface-2); color:var(--au-text); }
|
|
335
|
+
.au-select-opt.on{ color:var(--au-brand-text); font-weight:600; }
|
|
336
|
+
.au-select-opt.au-select-create{ color:var(--au-brand-text); font-weight:600; }
|
|
337
|
+
.au-select-empty{ padding:10px; font-size:12px; color:var(--au-faint); text-align:center; }
|
|
338
|
+
.au-select-clear{ cursor:pointer; }
|
|
339
|
+
.au-select-clear:hover{ color:var(--au-text); }
|
|
340
|
+
|
|
341
|
+
/* ---------- Astral action menu (AstralMenu) ---------- */
|
|
342
|
+
.au-menu-anchor{ display:inline-flex; }
|
|
343
|
+
.au-menu{ position:fixed; z-index:320; background:var(--au-panel); border:1px solid var(--au-line); border-radius:11px; box-shadow:0 14px 34px rgba(0,0,0,.4); padding:6px; overflow-y:auto; }
|
|
344
|
+
.au-menu-item{ display:flex; align-items:center; gap:11px; width:100%; text-align:left; border:0; background:transparent; font:inherit; font-size:13px; font-weight:500; color:var(--au-dim); padding:9px 10px; border-radius:8px; cursor:pointer; }
|
|
345
|
+
.au-menu-item:hover{ background:var(--au-surface-2); color:var(--au-text); }
|
|
346
|
+
.au-menu-item:disabled{ opacity:.5; cursor:not-allowed; }
|
|
347
|
+
.au-menu-item.danger{ color:var(--au-red); }
|
|
348
|
+
.au-menu-item.danger:hover{ background:color-mix(in srgb, var(--au-red) 12%, transparent); color:var(--au-red); }
|
|
349
|
+
.au-menu-ic{ display:grid; place-items:center; flex:0 0 auto; color:var(--au-faint); }
|
|
350
|
+
.au-menu-item:hover .au-menu-ic{ color:inherit; }
|
|
351
|
+
.au-menu-item.danger .au-menu-ic{ color:inherit; }
|
|
352
|
+
.au-menu-ic svg{ width:16px; height:16px; display:block; }
|
|
353
|
+
.au-menu-label{ flex:1; min-width:0; }
|
|
354
|
+
.au-menu-divider{ height:1px; background:var(--au-line); margin:5px 4px; }
|
|
355
|
+
|
|
356
|
+
/* ---------- generic spinner (available wherever AstralOverlay/Astral modals load) ---------- */
|
|
357
|
+
.au-spinner{ width:18px; height:18px; border-radius:50%; border:2px solid var(--au-line); border-top-color:var(--au-brand); animation:au-spin .7s linear infinite; display:inline-block; box-sizing:border-box; flex:0 0 auto; }
|
|
358
|
+
@keyframes au-spin{ to{ transform:rotate(360deg); } }
|
|
359
|
+
|
|
360
|
+
/* ---------- access strip (webhook pages) ---------- */
|
|
361
|
+
.au-access{ display:flex; align-items:center; gap:11px; margin-top:14px; padding:11px 14px; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:12px; }
|
|
362
|
+
.au-lg{ width:30px; height:30px; border-radius:8px; flex:0 0 auto; display:grid; place-items:center; font-weight:800; font-size:11px; color:#fff; background:linear-gradient(135deg, var(--astral-color-violet-6), var(--astral-color-violet-4)); overflow:hidden; }
|
|
363
|
+
.au-lg img{ width:100%; height:100%; object-fit:cover; }
|
|
364
|
+
.au-access .au-ax{ flex:1; min-width:0; font-size:12.5px; color:var(--au-text); }
|
|
365
|
+
.au-access .au-ax b{ font-weight:650; }
|
|
366
|
+
.au-access .au-ax .s{ color:var(--au-faint); }
|
|
367
|
+
.au-access .au-chip{ font-size:10.5px; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 16%, transparent); border-radius:6px; padding:3px 8px; white-space:nowrap; }
|
|
368
|
+
.au-access .au-chip.muted{ color:var(--au-faint); background:var(--au-panel); border:1px solid var(--au-line); }
|
|
369
|
+
|
|
370
|
+
/* ---------- panel ---------- */
|
|
371
|
+
.au-panel{ background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:18px 20px; margin-top:16px; }
|
|
372
|
+
.au-phead{ display:flex; align-items:center; gap:11px; margin-bottom:15px; }
|
|
373
|
+
.au-pic{ width:34px; height:34px; border-radius:10px; display:grid; place-items:center; background:color-mix(in srgb, var(--au-brand) 15%, transparent); color:var(--au-brand-text); flex:0 0 auto; }
|
|
374
|
+
.au-pic svg{ width:17px; height:17px; }
|
|
375
|
+
.au-pt{ flex:1; min-width:0; }
|
|
376
|
+
.au-pt .t{ font-size:14px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); }
|
|
377
|
+
.au-pt .h{ font-size:12px; color:var(--au-faint); margin-top:2px; }
|
|
378
|
+
.au-pt .h b{ color:var(--au-dim); font-weight:600; }
|
|
379
|
+
.au-badge-ok{ font-size:10.5px; font-weight:700; color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); border-radius:999px; padding:3px 9px; display:inline-flex; align-items:center; gap:5px; white-space:nowrap; }
|
|
380
|
+
.au-badge-ok .dot{ width:6px; height:6px; border-radius:50%; background:var(--au-green); }
|
|
381
|
+
|
|
382
|
+
/* ---------- webhook field ---------- */
|
|
383
|
+
.au-field-label{ font-size:11.5px; font-weight:600; color:var(--au-dim); margin-bottom:7px; }
|
|
384
|
+
.au-input{ display:flex; align-items:center; gap:9px; background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:10px; padding:10px 13px; transition:border-color .15s; }
|
|
385
|
+
.au-input:focus-within{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); }
|
|
386
|
+
.au-input input{ flex:1; min-width:0; border:0; background:transparent; color:var(--au-text); font:inherit; font-size:13px; outline:none; }
|
|
387
|
+
.au-input input::placeholder{ color:var(--au-faint); letter-spacing:0; }
|
|
388
|
+
.au-input input:disabled{ cursor:not-allowed; }
|
|
389
|
+
.au-input .au-eye{ color:var(--au-faint); cursor:pointer; display:grid; place-items:center; flex:0 0 auto; background:none; border:0; padding:0; }
|
|
390
|
+
.au-input .au-eye:hover{ color:var(--au-text); }
|
|
391
|
+
.au-input .au-eye svg{ width:16px; height:16px; display:block; }
|
|
392
|
+
.au-actions{ display:flex; align-items:center; gap:9px; margin-top:14px; flex-wrap:wrap; }
|
|
393
|
+
.au-note{ font-size:11.5px; color:var(--au-faint); margin-top:10px; line-height:1.5; }
|
|
394
|
+
|
|
395
|
+
/* ---------- master toggle ---------- */
|
|
396
|
+
.au-toggle{ position:relative; width:38px; height:22px; border-radius:999px; background:var(--au-surface-2); border:1px solid var(--au-line); cursor:pointer; flex:0 0 auto; transition:background .15s, border-color .15s; padding:0; }
|
|
397
|
+
.au-toggle.on{ background:var(--au-brand); border-color:var(--au-brand); }
|
|
398
|
+
.au-toggle:disabled{ opacity:.5; cursor:not-allowed; }
|
|
399
|
+
.au-toggle i{ position:absolute; top:2px; left:2px; width:16px; height:16px; border-radius:50%; background:var(--au-faint); transition:left .15s, background .15s; }
|
|
400
|
+
.au-toggle.on i{ left:18px; background:#fff; }
|
|
401
|
+
|
|
402
|
+
/* ---------- drive-file picker row ---------- */
|
|
403
|
+
.au-drive-row{ transition:background .12s; }
|
|
404
|
+
.au-drive-row:hover{ background:var(--au-surface-2); }
|
|
405
|
+
|
|
406
|
+
/* ---------- skeleton shimmer ---------- */
|
|
407
|
+
.au-skel{ border-radius:10px; background:linear-gradient(90deg, var(--au-surface-2) 25%, var(--au-line) 37%, var(--au-surface-2) 63%); background-size:400% 100%; animation:au-shimmer 1.4s ease infinite; }
|
|
408
|
+
@keyframes au-shimmer{ 0%{ background-position:100% 0; } 100%{ background-position:-100% 0; } }
|
|
409
|
+
|
|
410
|
+
/* ---------- notification tiles ---------- */
|
|
411
|
+
.au-ntf-grid{ display:grid; grid-template-columns:repeat(auto-fill, minmax(220px, 1fr)); gap:9px; }
|
|
412
|
+
.au-ntf{ display:flex; align-items:center; gap:11px; padding:11px 12px; border-radius:11px; border:1px solid var(--au-line); background:var(--au-surface-2); cursor:pointer; transition:border-color .15s, background .15s, opacity .15s; text-align:left; font:inherit; }
|
|
413
|
+
.au-ntf:hover{ border-color:color-mix(in srgb, var(--au-brand) 35%, transparent); }
|
|
414
|
+
.au-ntf.on{ border-color:color-mix(in srgb, var(--au-brand) 50%, transparent); background:color-mix(in srgb, var(--au-brand) 9%, transparent); }
|
|
415
|
+
.au-ntf.dim{ opacity:.45; }
|
|
416
|
+
.au-ntf:disabled{ cursor:default; }
|
|
417
|
+
.au-nic{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; flex:0 0 auto; background:var(--au-panel); color:var(--au-faint); border:1px solid var(--au-line); }
|
|
418
|
+
.au-ntf.on .au-nic{ color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 16%, transparent); border-color:transparent; }
|
|
419
|
+
.au-nic svg{ width:15px; height:15px; }
|
|
420
|
+
.au-nl{ flex:1; min-width:0; font-size:12.5px; font-weight:550; color:var(--au-dim); }
|
|
421
|
+
.au-ntf.on .au-nl{ color:var(--au-text); font-weight:600; }
|
|
422
|
+
.au-chk{ color:var(--au-brand-text); opacity:0; flex:0 0 auto; display:grid; place-items:center; }
|
|
423
|
+
.au-ntf.on .au-chk{ opacity:1; }
|
|
424
|
+
.au-chk svg{ width:15px; height:15px; display:block; }
|
|
425
|
+
.au-savebar{ display:flex; justify-content:flex-end; margin-top:15px; }
|
|
426
|
+
|
|
427
|
+
/* ---------- capability cards (OAuth) ---------- */
|
|
428
|
+
.au-cap-grid{ display:grid; grid-template-columns:repeat(auto-fit, minmax(240px, 1fr)); gap:13px; margin-top:16px; }
|
|
429
|
+
.au-cap{ background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:16px 17px; }
|
|
430
|
+
.au-cap .c-top{ display:flex; align-items:center; gap:10px; margin-bottom:9px; }
|
|
431
|
+
.au-cap .c-ic{ width:34px; height:34px; border-radius:10px; display:grid; place-items:center; flex:0 0 auto; }
|
|
432
|
+
.au-cap .c-ic svg{ width:17px; height:17px; }
|
|
433
|
+
.au-cap .c-nm{ font-size:13.5px; font-weight:700; color:var(--au-text); }
|
|
434
|
+
.au-cap .c-desc{ font-size:12px; color:var(--au-dim); line-height:1.5; }
|
|
435
|
+
.au-cap .c-foot{ display:flex; align-items:center; gap:9px; margin-top:12px; }
|
|
436
|
+
.au-code{ flex:1; min-width:0; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; font-size:11.5px; color:var(--au-dim); background:var(--au-surface-2); border:1px solid var(--au-line); border-radius:8px; padding:7px 10px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
437
|
+
|
|
438
|
+
/* ---------- account rows (OAuth) ---------- */
|
|
439
|
+
.au-secpanel{ margin-top:16px; }
|
|
440
|
+
.au-sec-title{ font-size:13.5px; font-weight:700; letter-spacing:-.01em; color:var(--au-text); display:flex; align-items:center; gap:9px; margin:0 2px 11px; }
|
|
441
|
+
.au-sec-title .c{ font-size:10px; font-weight:700; color:var(--au-brand-text); background:color-mix(in srgb, var(--au-brand) 16%, transparent); border-radius:999px; padding:1px 7px; }
|
|
442
|
+
.au-acct{ display:flex; align-items:center; gap:14px; padding:13px 15px; border-radius:12px; background:var(--au-panel); border:1px solid var(--au-line); box-shadow:var(--au-shadow); }
|
|
443
|
+
.au-acct + .au-acct{ margin-top:10px; }
|
|
444
|
+
.au-av{ width:40px; height:40px; border-radius:10px; display:grid; place-items:center; flex:0 0 auto; background:color-mix(in srgb, var(--au-ic) 18%, transparent); color:var(--au-ic); }
|
|
445
|
+
.au-av svg{ width:20px; height:20px; }
|
|
446
|
+
.au-amain{ flex:1; min-width:0; }
|
|
447
|
+
.au-anm{ font-size:13.5px; font-weight:650; color:var(--au-text); display:flex; align-items:center; gap:9px; min-width:0; }
|
|
448
|
+
.au-anm .nm-txt{ white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
449
|
+
.au-anm .dot{ width:7px; height:7px; border-radius:50%; flex:0 0 auto; }
|
|
450
|
+
.au-anm .dot.live{ background:var(--au-green); box-shadow:0 0 7px var(--au-green); }
|
|
451
|
+
.au-anm .dot.idle{ background:var(--au-faint); }
|
|
452
|
+
.au-asub{ font-size:11.5px; color:var(--au-faint); margin-top:3px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
453
|
+
.au-atags{ display:flex; gap:6px; margin-top:6px; flex-wrap:wrap; }
|
|
454
|
+
.au-ttag{ font-size:10px; font-weight:600; border-radius:5px; padding:2px 7px; display:inline-flex; align-items:center; gap:4px; }
|
|
455
|
+
.au-ttag svg{ width:10px; height:10px; }
|
|
456
|
+
.au-ttag.sheets{ color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); }
|
|
457
|
+
.au-ttag.drive{ color:var(--au-blue); background:color-mix(in srgb, var(--au-blue) 14%, transparent); }
|
|
458
|
+
.au-aact{ display:flex; align-items:center; gap:8px; flex:0 0 auto; }
|
|
459
|
+
|
|
460
|
+
/* ---------- Clay table ---------- */
|
|
461
|
+
.au-tbl{ background:var(--au-panel); border:1px solid var(--au-line); border-radius:var(--au-radius); box-shadow:var(--au-shadow); padding:7px 8px; margin-top:16px; }
|
|
462
|
+
.au-grow{ display:grid; grid-template-columns:1.5fr 1.2fr 0.9fr 0.6fr auto 36px; align-items:center; gap:14px; }
|
|
463
|
+
.au-thead{ padding:11px 14px 9px; font-size:10.5px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--au-faint); }
|
|
464
|
+
.au-thead .r{ text-align:right; }
|
|
465
|
+
.au-trow{ padding:13px 14px; border-radius:12px; cursor:pointer; transition:background .12s; border:0; background:transparent; font:inherit; text-align:left; width:100%; color:inherit; }
|
|
466
|
+
.au-trow:hover{ background:var(--au-surface-2); }
|
|
467
|
+
.au-trow + .au-trow{ box-shadow:inset 0 1px 0 var(--au-line); }
|
|
468
|
+
.au-trow:hover{ box-shadow:none; }
|
|
469
|
+
.au-cname{ font-size:13.5px; font-weight:650; color:var(--au-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
470
|
+
.au-csub{ font-size:11px; color:var(--au-faint); margin-top:2px; }
|
|
471
|
+
.au-clist{ font-size:12.5px; color:var(--au-dim); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
|
|
472
|
+
.au-clist.muted{ color:var(--au-faint); font-style:italic; }
|
|
473
|
+
.au-cwhen{ font-size:12.5px; color:var(--au-dim); }
|
|
474
|
+
.au-cwhen.never{ color:var(--au-faint); }
|
|
475
|
+
.au-ctotal{ font-size:12.5px; font-weight:600; color:var(--au-text); text-align:right; }
|
|
476
|
+
.au-ctotal.zero{ color:var(--au-faint); font-weight:500; }
|
|
477
|
+
.au-pill{ font-size:11px; font-weight:700; border-radius:999px; padding:3px 10px; display:inline-flex; align-items:center; gap:6px; white-space:nowrap; justify-self:start; }
|
|
478
|
+
.au-pill .dot{ width:6px; height:6px; border-radius:50%; }
|
|
479
|
+
.au-pill.on{ color:var(--au-green); background:color-mix(in srgb, var(--au-green) 14%, transparent); }
|
|
480
|
+
.au-pill.on .dot{ background:var(--au-green); }
|
|
481
|
+
.au-pill.idle{ color:var(--au-faint); background:var(--au-surface-2); border:1px solid var(--au-line); }
|
|
482
|
+
.au-pill.warn{ color:var(--au-amber); background:color-mix(in srgb, var(--au-amber) 14%, transparent); }
|
|
483
|
+
.au-gear{ width:30px; height:30px; border-radius:8px; display:grid; place-items:center; color:var(--au-faint); }
|
|
484
|
+
.au-trow:hover .au-gear{ color:var(--au-text); }
|
|
485
|
+
.au-gear svg{ width:16px; height:16px; }
|
|
486
|
+
|
|
487
|
+
/* ---------- empty state ---------- */
|
|
488
|
+
.au-empty{ display:flex; flex-direction:column; align-items:center; gap:10px; text-align:center; padding:34px 18px; color:var(--au-faint); font-size:13px; background:var(--au-panel); border:1px dashed var(--au-line); border-radius:var(--au-radius); margin-top:16px; }
|
|
489
|
+
.au-empty .e-ic{ width:46px; height:46px; border-radius:13px; display:grid; place-items:center; background:color-mix(in srgb, var(--au-ic) 16%, transparent); color:var(--au-ic); }
|
|
490
|
+
.au-empty .e-ic svg{ width:22px; height:22px; }
|
|
491
|
+
.au-empty .e-t{ font-size:14px; font-weight:650; color:var(--au-text); }
|
|
492
|
+
|
|
493
|
+
/* ---------- responsive ---------- */
|
|
494
|
+
@media (max-width:680px){
|
|
495
|
+
.au-hero{ flex-wrap:wrap; }
|
|
496
|
+
.au-hright{ width:100%; justify-content:flex-start; }
|
|
497
|
+
.au-grow{ grid-template-columns:1.4fr auto 36px; }
|
|
498
|
+
.au-grow .col-list, .au-grow .col-when, .au-grow .col-total{ display:none; }
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
/* ===== src/styles/toast.css ===== */
|
|
503
|
+
/* Astral toast host. Bottom-right stack, newest at the bottom (nearest the
|
|
504
|
+
corner). Theme-aware via the --astral-* tokens. */
|
|
505
|
+
|
|
506
|
+
.au-toast-host{
|
|
507
|
+
position: fixed;
|
|
508
|
+
right: 16px;
|
|
509
|
+
bottom: 16px;
|
|
510
|
+
z-index: 10000; /* above AstralModal/AstralMenu portals */
|
|
511
|
+
display: flex;
|
|
512
|
+
flex-direction: column;
|
|
513
|
+
gap: 10px;
|
|
514
|
+
width: 360px;
|
|
515
|
+
max-width: calc(100vw - 32px);
|
|
516
|
+
pointer-events: none;
|
|
517
|
+
font-family: var(--astral-font-family);
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
@keyframes au-toast-in{
|
|
521
|
+
from{ opacity: 0; transform: translateX(16px) scale(.98); }
|
|
522
|
+
to{ opacity: 1; transform: translateX(0) scale(1); }
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
.au-toast{
|
|
526
|
+
pointer-events: auto;
|
|
527
|
+
display: flex;
|
|
528
|
+
align-items: flex-start;
|
|
529
|
+
gap: 11px;
|
|
530
|
+
padding: 12px 13px;
|
|
531
|
+
border-radius: 12px;
|
|
532
|
+
border: 1px solid var(--astral-color-default-border);
|
|
533
|
+
border-left: 3px solid var(--au-toast-accent, var(--astral-color-default-border));
|
|
534
|
+
background: light-dark(#ffffff, var(--astral-color-dark-6));
|
|
535
|
+
box-shadow: light-dark(0 6px 22px rgba(16,16,24,.12), 0 8px 26px rgba(0,0,0,.45));
|
|
536
|
+
color: var(--astral-color-text);
|
|
537
|
+
animation: au-toast-in .18s ease;
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
.au-toast-lead{
|
|
541
|
+
flex: 0 0 auto;
|
|
542
|
+
display: grid;
|
|
543
|
+
place-items: center;
|
|
544
|
+
width: 24px;
|
|
545
|
+
height: 24px;
|
|
546
|
+
border-radius: 7px;
|
|
547
|
+
color: var(--au-toast-accent, var(--astral-color-dimmed));
|
|
548
|
+
background: color-mix(in srgb, var(--au-toast-accent, var(--astral-color-default-border)) 16%, transparent);
|
|
549
|
+
}
|
|
550
|
+
.au-toast-lead svg{ width: 16px; height: 16px; display: block; }
|
|
551
|
+
|
|
552
|
+
.au-toast-body{ flex: 1; min-width: 0; padding-top: 1px; }
|
|
553
|
+
.au-toast-title{ font-size: 13px; font-weight: 700; color: var(--astral-color-text); margin-bottom: 2px; line-height: 1.35; }
|
|
554
|
+
.au-toast-msg{ font-size: 12.5px; line-height: 1.45; color: var(--astral-color-dimmed); word-break: break-word; }
|
|
555
|
+
.au-toast-title + .au-toast-msg{ color: var(--astral-color-dimmed); }
|
|
556
|
+
/* when there's no title, the message is the primary line */
|
|
557
|
+
.au-toast-body > .au-toast-msg:only-child{ color: var(--astral-color-text); font-weight: 500; }
|
|
558
|
+
|
|
559
|
+
.au-toast-x{
|
|
560
|
+
flex: 0 0 auto;
|
|
561
|
+
display: grid;
|
|
562
|
+
place-items: center;
|
|
563
|
+
width: 22px;
|
|
564
|
+
height: 22px;
|
|
565
|
+
border: 0;
|
|
566
|
+
background: none;
|
|
567
|
+
border-radius: 6px;
|
|
568
|
+
color: var(--astral-color-dimmed);
|
|
569
|
+
cursor: pointer;
|
|
570
|
+
transition: color .12s, background .12s;
|
|
571
|
+
}
|
|
572
|
+
.au-toast-x:hover{ color: var(--astral-color-text); background: var(--astral-color-default-hover); }
|
|
573
|
+
.au-toast-x svg{ width: 14px; height: 14px; display: block; }
|
|
574
|
+
|
|
575
|
+
@keyframes au-toast-spin{ to{ transform: rotate(360deg); } }
|
|
576
|
+
.au-toast-spin{
|
|
577
|
+
width: 16px;
|
|
578
|
+
height: 16px;
|
|
579
|
+
border-radius: 50%;
|
|
580
|
+
border: 2px solid color-mix(in srgb, currentColor 30%, transparent);
|
|
581
|
+
border-top-color: currentColor;
|
|
582
|
+
animation: au-toast-spin .6s linear infinite;
|
|
583
|
+
display: block;
|
|
584
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@astralui/core",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "AstralUI - a self-contained, dependency-free React design system: theme engine (light/dark + per-brand theming), design tokens, and components (Modal, Drawer, Select, Menu, Toast, DateInput, PinInput, Spinner).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Unbounded Technologies",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"sideEffects": [
|
|
9
|
+
"**/*.css"
|
|
10
|
+
],
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"main": "./dist/index.cjs",
|
|
15
|
+
"module": "./dist/index.js",
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": {
|
|
19
|
+
"types": "./dist/index.d.ts",
|
|
20
|
+
"import": "./dist/index.js",
|
|
21
|
+
"require": "./dist/index.cjs"
|
|
22
|
+
},
|
|
23
|
+
"./styles.css": "./dist/styles.css"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "tsup && node scripts/build-css.mjs",
|
|
27
|
+
"dev": "tsup --watch",
|
|
28
|
+
"typecheck": "tsc --noEmit",
|
|
29
|
+
"prepublishOnly": "npm run build"
|
|
30
|
+
},
|
|
31
|
+
"keywords": [
|
|
32
|
+
"react",
|
|
33
|
+
"design-system",
|
|
34
|
+
"ui",
|
|
35
|
+
"components",
|
|
36
|
+
"theme",
|
|
37
|
+
"dark-mode",
|
|
38
|
+
"astralui"
|
|
39
|
+
],
|
|
40
|
+
"peerDependencies": {
|
|
41
|
+
"react": ">=18",
|
|
42
|
+
"react-dom": ">=18",
|
|
43
|
+
"@tabler/icons-react": ">=3"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"chroma-js": "^3.2.0"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@tabler/icons-react": "^3.0.0",
|
|
50
|
+
"@types/chroma-js": "^3.1.0",
|
|
51
|
+
"@types/react": "^19.0.0",
|
|
52
|
+
"@types/react-dom": "^19.0.0",
|
|
53
|
+
"react": "^19.0.0",
|
|
54
|
+
"react-dom": "^19.0.0",
|
|
55
|
+
"tsup": "^8.3.0",
|
|
56
|
+
"typescript": "^5.6.0"
|
|
57
|
+
},
|
|
58
|
+
"publishConfig": {
|
|
59
|
+
"access": "public"
|
|
60
|
+
}
|
|
61
|
+
}
|