@foxeltech/angular-ui 0.7.44 → 0.7.75
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/components.css +320 -18
- package/familjen-grotesk/familjen-grotesk-400-latin-ext.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-400-latin.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-400-vietnamese.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-500-latin-ext.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-500-latin.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-500-vietnamese.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-600-latin-ext.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-600-latin.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-600-vietnamese.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-700-latin-ext.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-700-latin.woff2 +0 -0
- package/familjen-grotesk/familjen-grotesk-700-vietnamese.woff2 +0 -0
- package/fesm2022/foxeltech-angular-ui-chart.mjs +197 -24
- package/fesm2022/foxeltech-angular-ui-chart.mjs.map +1 -1
- package/fesm2022/foxeltech-angular-ui.mjs +504 -108
- package/fesm2022/foxeltech-angular-ui.mjs.map +1 -1
- package/fonts.css +104 -3
- package/package.json +1 -1
- package/src/lib/styles/components.css +320 -18
- package/src/lib/styles/fonts.css +104 -3
- package/src/lib/styles/tailwind.css +12 -0
- package/src/lib/styles/theme.css +160 -114
- package/src/lib/styles/tokens.css +25 -0
- package/src/lib/styles/utilities.css +12 -0
- package/src/lib/ui/components/button/button.component.html +2 -0
- package/src/lib/ui/components/drawer/drawer.component.scss +3 -1
- package/src/lib/ui/components/facets-rail/facets-rail.component.html +1 -6
- package/src/lib/ui/components/master-detail/master-detail.component.css +65 -13
- package/src/lib/ui/components/master-detail/master-detail.component.html +26 -8
- package/src/lib/ui/components/route-skeleton/route-skeleton.component.css +38 -0
- package/src/lib/ui/components/route-skeleton/route-skeleton.component.html +184 -0
- package/src/lib/ui/components/section-card/section-card.component.html +1 -5
- package/src/lib/ui/components/skeleton-dashboard/skeleton-dashboard.component.html +24 -0
- package/src/lib/ui/components/skeleton-detail/skeleton-detail.component.html +8 -8
- package/src/lib/ui/components/skeleton-facets/skeleton-facets.component.html +15 -0
- package/src/lib/ui/components/skeleton-frame/skeleton-frame.component.html +59 -0
- package/src/lib/ui/components/skeleton-list/skeleton-list.component.html +6 -6
- package/src/lib/ui/components/switch/switch.component.html +1 -1
- package/src/lib/ui/components/toast/toast.component.html +6 -6
- package/tailwind.css +12 -0
- package/theme.css +160 -114
- package/tokens.css +25 -0
- package/types/foxeltech-angular-ui-chart.d.ts +76 -1
- package/types/foxeltech-angular-ui.d.ts +278 -33
- package/utilities.css +12 -0
- package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.html +0 -21
- package/src/lib/ui/components/skeleton-table-loading/skeleton-table-loading.component.scss +0 -0
- package/src/lib/ui/components/tab-component/tab.component.html +0 -1
package/src/lib/styles/theme.css
CHANGED
|
@@ -26,12 +26,12 @@
|
|
|
26
26
|
--og-fs-4xl: 32px;
|
|
27
27
|
--og-space-1: 4px;
|
|
28
28
|
--og-space-2: 8px;
|
|
29
|
-
--og-space-3:
|
|
30
|
-
--og-space-4:
|
|
31
|
-
--og-space-5:
|
|
32
|
-
--og-space-6:
|
|
33
|
-
--og-space-7:
|
|
34
|
-
--og-space-8:
|
|
29
|
+
--og-space-3: 8px;
|
|
30
|
+
--og-space-4: 10px;
|
|
31
|
+
--og-space-5: 12px;
|
|
32
|
+
--og-space-6: 13px;
|
|
33
|
+
--og-space-7: 15px;
|
|
34
|
+
--og-space-8: 18px;
|
|
35
35
|
--og-track-h: 5px;
|
|
36
36
|
--og-rule: 1px;
|
|
37
37
|
--og-tracking-label: 0.08em;
|
|
@@ -48,11 +48,11 @@
|
|
|
48
48
|
--og-text-body: 60 63 68; /* #3c3f44 */
|
|
49
49
|
--og-text-muted: 107 112 117; /* #6b7075 */
|
|
50
50
|
--og-text-faint: 155 160 166; /* #9ba0a6 */
|
|
51
|
-
--og-accent:
|
|
52
|
-
--og-accent-fg:
|
|
51
|
+
--og-accent: 74 125 189; /* #4a7dbd */
|
|
52
|
+
--og-accent-fg: 64 105 156; /* #40699c */
|
|
53
53
|
--og-accent-contrast: 255 255 255; /* #ffffff */
|
|
54
|
-
--og-accent-soft-bg:
|
|
55
|
-
--og-accent-soft-fg:
|
|
54
|
+
--og-accent-soft-bg: 231 238 247; /* #e7eef7 */
|
|
55
|
+
--og-accent-soft-fg: 53 97 156; /* #35619c */
|
|
56
56
|
--og-positive: 63 125 85; /* #3f7d55 */
|
|
57
57
|
--og-positive-soft-bg: 230 241 234; /* #e6f1ea */
|
|
58
58
|
--og-negative: 192 69 47; /* #c0452f */
|
|
@@ -66,15 +66,15 @@
|
|
|
66
66
|
--og-radius-card: 9px;
|
|
67
67
|
--og-radius-control: 7px;
|
|
68
68
|
--og-radius-pill: 999px;
|
|
69
|
-
--og-font-body:
|
|
70
|
-
--og-font-display:
|
|
71
|
-
--og-font-mono:
|
|
72
|
-
--og-font-prose:
|
|
73
|
-
--og-font-figure:
|
|
69
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
70
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
71
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
72
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
73
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
74
74
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
75
75
|
--og-derived-critical: 169 0 42; /* #a9002a */
|
|
76
76
|
--og-derived-critical-soft-bg: 239 194 191; /* #efc2bf */
|
|
77
|
-
--og-derived-gradient-accent-end:
|
|
77
|
+
--og-derived-gradient-accent-end: 98 150 215; /* #6296d7 */
|
|
78
78
|
--og-derived-gradient-positive-end: 87 149 108; /* #57956c */
|
|
79
79
|
--shadow-color: 0 0 0;
|
|
80
80
|
/* severity tones — bộ LEGACY (vivid), không lấy từ design V2 */
|
|
@@ -84,6 +84,11 @@
|
|
|
84
84
|
--og-tone-danger: 255 122 0;
|
|
85
85
|
--og-tone-information: 23 127 240;
|
|
86
86
|
--og-tone-discovery: 156 129 255;
|
|
87
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
88
|
+
--og-sev-critical: 127 29 29; /* #7f1d1d */
|
|
89
|
+
--og-sev-danger: 220 38 38; /* #dc2626 */
|
|
90
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
91
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
87
92
|
|
|
88
93
|
/* ---- LEGACY ALIASES (@deprecated — gỡ khi kết thúc campaign V2) ----
|
|
89
94
|
Các biến cũ trỏ vào --og-* qua var() nên chỉ cần khai báo MỘT lần:
|
|
@@ -135,11 +140,11 @@
|
|
|
135
140
|
--og-text-body: 60 63 68; /* #3c3f44 */
|
|
136
141
|
--og-text-muted: 107 112 117; /* #6b7075 */
|
|
137
142
|
--og-text-faint: 155 160 166; /* #9ba0a6 */
|
|
138
|
-
--og-accent:
|
|
139
|
-
--og-accent-fg:
|
|
143
|
+
--og-accent: 74 125 189; /* #4a7dbd */
|
|
144
|
+
--og-accent-fg: 64 105 156; /* #40699c */
|
|
140
145
|
--og-accent-contrast: 255 255 255; /* #ffffff */
|
|
141
|
-
--og-accent-soft-bg:
|
|
142
|
-
--og-accent-soft-fg:
|
|
146
|
+
--og-accent-soft-bg: 231 238 247; /* #e7eef7 */
|
|
147
|
+
--og-accent-soft-fg: 53 97 156; /* #35619c */
|
|
143
148
|
--og-positive: 63 125 85; /* #3f7d55 */
|
|
144
149
|
--og-positive-soft-bg: 230 241 234; /* #e6f1ea */
|
|
145
150
|
--og-negative: 192 69 47; /* #c0452f */
|
|
@@ -153,15 +158,15 @@
|
|
|
153
158
|
--og-radius-card: 9px;
|
|
154
159
|
--og-radius-control: 7px;
|
|
155
160
|
--og-radius-pill: 999px;
|
|
156
|
-
--og-font-body:
|
|
157
|
-
--og-font-display:
|
|
158
|
-
--og-font-mono:
|
|
159
|
-
--og-font-prose:
|
|
160
|
-
--og-font-figure:
|
|
161
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
162
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
163
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
164
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
165
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
161
166
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
162
167
|
--og-derived-critical: 169 0 42; /* #a9002a */
|
|
163
168
|
--og-derived-critical-soft-bg: 239 194 191; /* #efc2bf */
|
|
164
|
-
--og-derived-gradient-accent-end:
|
|
169
|
+
--og-derived-gradient-accent-end: 98 150 215; /* #6296d7 */
|
|
165
170
|
--og-derived-gradient-positive-end: 87 149 108; /* #57956c */
|
|
166
171
|
--shadow-color: 0 0 0;
|
|
167
172
|
/* severity tones — bộ LEGACY (vivid), không lấy từ design V2 */
|
|
@@ -171,48 +176,56 @@
|
|
|
171
176
|
--og-tone-danger: 255 122 0;
|
|
172
177
|
--og-tone-information: 23 127 240;
|
|
173
178
|
--og-tone-discovery: 156 129 255;
|
|
179
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
180
|
+
--og-sev-critical: 127 29 29; /* #7f1d1d */
|
|
181
|
+
--og-sev-danger: 220 38 38; /* #dc2626 */
|
|
182
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
183
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
174
184
|
}
|
|
175
185
|
|
|
176
186
|
:root[data-og-theme='charcoal'] {
|
|
177
|
-
--og-page-bg:
|
|
178
|
-
--og-surface:
|
|
179
|
-
--og-surface-raised:
|
|
180
|
-
--og-surface-sunken:
|
|
181
|
-
--og-border:
|
|
182
|
-
--og-border-subtle:
|
|
183
|
-
--og-border-strong:
|
|
184
|
-
--og-text:
|
|
185
|
-
--og-text-body:
|
|
186
|
-
--og-text-muted:
|
|
187
|
-
--og-text-faint:
|
|
188
|
-
--og-accent:
|
|
189
|
-
--og-accent-fg:
|
|
190
|
-
--og-accent-contrast:
|
|
191
|
-
--og-accent-soft-bg:
|
|
192
|
-
--og-accent-soft-fg:
|
|
193
|
-
--og-positive:
|
|
194
|
-
--og-positive-soft-bg:
|
|
195
|
-
--og-negative:
|
|
196
|
-
--og-negative-soft-bg:
|
|
197
|
-
--og-warning:
|
|
198
|
-
--og-warning-soft-bg: 51
|
|
199
|
-
--og-neutral-soft-bg:
|
|
200
|
-
--og-neutral-soft-fg:
|
|
201
|
-
--og-track:
|
|
187
|
+
--og-page-bg: 26 24 17; /* #1a1811 */
|
|
188
|
+
--og-surface: 34 31 22; /* #221f16 */
|
|
189
|
+
--og-surface-raised: 42 38 25; /* #2a2619 */
|
|
190
|
+
--og-surface-sunken: 23 21 9; /* #171509 */
|
|
191
|
+
--og-border: 58 54 38; /* #3a3626 */
|
|
192
|
+
--og-border-subtle: 44 41 25; /* #2c2919 */
|
|
193
|
+
--og-border-strong: 76 71 50; /* #4c4732 */
|
|
194
|
+
--og-text: 226 221 203; /* #e2ddcb */
|
|
195
|
+
--og-text-body: 193 188 166; /* #c1bca6 */
|
|
196
|
+
--og-text-muted: 147 141 118; /* #938d76 */
|
|
197
|
+
--og-text-faint: 107 102 83; /* #6b6653 */
|
|
198
|
+
--og-accent: 143 200 102; /* #8fc866 */
|
|
199
|
+
--og-accent-fg: 164 217 126; /* #a4d97e */
|
|
200
|
+
--og-accent-contrast: 23 21 9; /* #171509 */
|
|
201
|
+
--og-accent-soft-bg: 38 48 26; /* #26301a */
|
|
202
|
+
--og-accent-soft-fg: 164 217 126; /* #a4d97e */
|
|
203
|
+
--og-positive: 132 200 98; /* #84c862 */
|
|
204
|
+
--og-positive-soft-bg: 34 48 15; /* #22300f */
|
|
205
|
+
--og-negative: 229 130 142; /* #e5828e */
|
|
206
|
+
--og-negative-soft-bg: 63 30 36; /* #3f1e24 */
|
|
207
|
+
--og-warning: 214 178 90; /* #d6b25a */
|
|
208
|
+
--og-warning-soft-bg: 51 42 18; /* #332a12 */
|
|
209
|
+
--og-neutral-soft-bg: 42 39 25; /* #2a2719 */
|
|
210
|
+
--og-neutral-soft-fg: 164 158 134; /* #a49e86 */
|
|
211
|
+
--og-track: 48 44 30; /* #302c1e */
|
|
202
212
|
--og-radius-frame: 10px;
|
|
203
213
|
--og-radius-card: 9px;
|
|
204
214
|
--og-radius-control: 7px;
|
|
205
215
|
--og-radius-pill: 999px;
|
|
206
|
-
--og-font-body:
|
|
207
|
-
--og-font-display:
|
|
208
|
-
--og-font-mono:
|
|
209
|
-
--og-font-prose:
|
|
210
|
-
--og-font-figure:
|
|
216
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
217
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
218
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
219
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
220
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
221
|
+
--og-positive-soft-fg: 164 217 126; /* #a4d97e */
|
|
222
|
+
--og-negative-soft-fg: 238 163 171; /* #eea3ab */
|
|
223
|
+
--og-warning-soft-fg: 224 194 116; /* #e0c274 */
|
|
211
224
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
212
|
-
--og-derived-critical:
|
|
213
|
-
--og-derived-critical-soft-bg:
|
|
214
|
-
--og-derived-gradient-accent-end:
|
|
215
|
-
--og-derived-gradient-positive-end:
|
|
225
|
+
--og-derived-critical: 254 119 154; /* #fe779a */
|
|
226
|
+
--og-derived-critical-soft-bg: 97 46 57; /* #612e39 */
|
|
227
|
+
--og-derived-gradient-accent-end: 174 233 134; /* #aee986 */
|
|
228
|
+
--og-derived-gradient-positive-end: 157 226 123; /* #9de27b */
|
|
216
229
|
--shadow-color: 255 255 255;
|
|
217
230
|
/* severity tones — bộ LEGACY (vivid), không lấy từ design V2 */
|
|
218
231
|
--og-tone-success: 76 175 80;
|
|
@@ -221,6 +234,11 @@
|
|
|
221
234
|
--og-tone-danger: 249 133 7;
|
|
222
235
|
--og-tone-information: 62 175 240;
|
|
223
236
|
--og-tone-discovery: 119 113 227;
|
|
237
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
238
|
+
--og-sev-critical: 207 103 96; /* #cf6760 — #7f1d1d nâng L cho nền tối */
|
|
239
|
+
--og-sev-danger: 246 68 61; /* #f6443d */
|
|
240
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
241
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
224
242
|
}
|
|
225
243
|
|
|
226
244
|
:root[data-og-theme='ivory'] {
|
|
@@ -253,11 +271,11 @@
|
|
|
253
271
|
--og-radius-card: 14px;
|
|
254
272
|
--og-radius-control: 999px;
|
|
255
273
|
--og-radius-pill: 999px;
|
|
256
|
-
--og-font-body:
|
|
257
|
-
--og-font-display:
|
|
258
|
-
--og-font-mono:
|
|
259
|
-
--og-font-prose:
|
|
260
|
-
--og-font-figure:
|
|
274
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
275
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
276
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
277
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
278
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
261
279
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
262
280
|
--og-derived-critical: 154 11 57; /* #9a0b39 */
|
|
263
281
|
--og-derived-critical-soft-bg: 232 192 193; /* #e8c0c1 */
|
|
@@ -271,6 +289,11 @@
|
|
|
271
289
|
--og-tone-danger: 255 122 0;
|
|
272
290
|
--og-tone-information: 23 127 240;
|
|
273
291
|
--og-tone-discovery: 156 129 255;
|
|
292
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
293
|
+
--og-sev-critical: 127 29 29; /* #7f1d1d */
|
|
294
|
+
--og-sev-danger: 220 38 38; /* #dc2626 */
|
|
295
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
296
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
274
297
|
}
|
|
275
298
|
|
|
276
299
|
:root[data-og-theme='studio'] {
|
|
@@ -303,11 +326,11 @@
|
|
|
303
326
|
--og-radius-card: 11px;
|
|
304
327
|
--og-radius-control: 9px;
|
|
305
328
|
--og-radius-pill: 999px;
|
|
306
|
-
--og-font-body:
|
|
307
|
-
--og-font-display:
|
|
308
|
-
--og-font-mono:
|
|
309
|
-
--og-font-prose:
|
|
310
|
-
--og-font-figure:
|
|
329
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
330
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
331
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
332
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
333
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
311
334
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
312
335
|
--og-derived-critical: 238 108 128; /* #ee6c80 */
|
|
313
336
|
--og-derived-critical-soft-bg: 85 48 49; /* #553031 */
|
|
@@ -321,6 +344,11 @@
|
|
|
321
344
|
--og-tone-danger: 249 133 7;
|
|
322
345
|
--og-tone-information: 62 175 240;
|
|
323
346
|
--og-tone-discovery: 119 113 227;
|
|
347
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
348
|
+
--og-sev-critical: 207 103 96; /* #cf6760 — #7f1d1d nâng L cho nền tối */
|
|
349
|
+
--og-sev-danger: 246 68 61; /* #f6443d */
|
|
350
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
351
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
324
352
|
}
|
|
325
353
|
|
|
326
354
|
:root[data-og-theme='blueprint'] {
|
|
@@ -353,11 +381,11 @@
|
|
|
353
381
|
--og-radius-card: 0px;
|
|
354
382
|
--og-radius-control: 0px;
|
|
355
383
|
--og-radius-pill: 0px;
|
|
356
|
-
--og-font-body:
|
|
357
|
-
--og-font-display:
|
|
358
|
-
--og-font-mono:
|
|
359
|
-
--og-font-prose:
|
|
360
|
-
--og-font-figure:
|
|
384
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
385
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
386
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
387
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
388
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
361
389
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
362
390
|
--og-derived-critical: 216 93 120; /* #d85d78 */
|
|
363
391
|
--og-derived-critical-soft-bg: 73 39 39; /* #492727 */
|
|
@@ -371,6 +399,11 @@
|
|
|
371
399
|
--og-tone-danger: 249 133 7;
|
|
372
400
|
--og-tone-information: 62 175 240;
|
|
373
401
|
--og-tone-discovery: 119 113 227;
|
|
402
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
403
|
+
--og-sev-critical: 207 103 96; /* #cf6760 — #7f1d1d nâng L cho nền tối */
|
|
404
|
+
--og-sev-danger: 246 68 61; /* #f6443d */
|
|
405
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
406
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
374
407
|
}
|
|
375
408
|
|
|
376
409
|
:root[data-og-theme='terminal'] {
|
|
@@ -403,11 +436,11 @@
|
|
|
403
436
|
--og-radius-card: 0px;
|
|
404
437
|
--og-radius-control: 0px;
|
|
405
438
|
--og-radius-pill: 0px;
|
|
406
|
-
--og-font-body:
|
|
407
|
-
--og-font-display:
|
|
408
|
-
--og-font-mono:
|
|
409
|
-
--og-font-prose:
|
|
410
|
-
--og-font-figure:
|
|
439
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
440
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
441
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
442
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
443
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
411
444
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
412
445
|
--og-derived-critical: 169 0 42; /* #a9002a */
|
|
413
446
|
--og-derived-critical-soft-bg: 236 191 187; /* #ecbfbb */
|
|
@@ -421,6 +454,11 @@
|
|
|
421
454
|
--og-tone-danger: 255 122 0;
|
|
422
455
|
--og-tone-information: 23 127 240;
|
|
423
456
|
--og-tone-discovery: 156 129 255;
|
|
457
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
458
|
+
--og-sev-critical: 127 29 29; /* #7f1d1d */
|
|
459
|
+
--og-sev-danger: 220 38 38; /* #dc2626 */
|
|
460
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
461
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
424
462
|
}
|
|
425
463
|
|
|
426
464
|
/* ---- SKEW SHIELD (transitional) -------------------------------------
|
|
@@ -474,45 +512,48 @@
|
|
|
474
512
|
standalone không set theme cũng rơi vào nhánh charcoal (khớp hành vi
|
|
475
513
|
dark-default cũ). */
|
|
476
514
|
html:not([data-og-theme]) body:not(.light_theme) {
|
|
477
|
-
--og-page-bg:
|
|
478
|
-
--og-surface:
|
|
479
|
-
--og-surface-raised:
|
|
480
|
-
--og-surface-sunken:
|
|
481
|
-
--og-border:
|
|
482
|
-
--og-border-subtle:
|
|
483
|
-
--og-border-strong:
|
|
484
|
-
--og-text:
|
|
485
|
-
--og-text-body:
|
|
486
|
-
--og-text-muted:
|
|
487
|
-
--og-text-faint:
|
|
488
|
-
--og-accent:
|
|
489
|
-
--og-accent-fg:
|
|
490
|
-
--og-accent-contrast:
|
|
491
|
-
--og-accent-soft-bg:
|
|
492
|
-
--og-accent-soft-fg:
|
|
493
|
-
--og-positive:
|
|
494
|
-
--og-positive-soft-bg:
|
|
495
|
-
--og-negative:
|
|
496
|
-
--og-negative-soft-bg:
|
|
497
|
-
--og-warning:
|
|
498
|
-
--og-warning-soft-bg: 51
|
|
499
|
-
--og-neutral-soft-bg:
|
|
500
|
-
--og-neutral-soft-fg:
|
|
501
|
-
--og-track:
|
|
515
|
+
--og-page-bg: 26 24 17; /* #1a1811 */
|
|
516
|
+
--og-surface: 34 31 22; /* #221f16 */
|
|
517
|
+
--og-surface-raised: 42 38 25; /* #2a2619 */
|
|
518
|
+
--og-surface-sunken: 23 21 9; /* #171509 */
|
|
519
|
+
--og-border: 58 54 38; /* #3a3626 */
|
|
520
|
+
--og-border-subtle: 44 41 25; /* #2c2919 */
|
|
521
|
+
--og-border-strong: 76 71 50; /* #4c4732 */
|
|
522
|
+
--og-text: 226 221 203; /* #e2ddcb */
|
|
523
|
+
--og-text-body: 193 188 166; /* #c1bca6 */
|
|
524
|
+
--og-text-muted: 147 141 118; /* #938d76 */
|
|
525
|
+
--og-text-faint: 107 102 83; /* #6b6653 */
|
|
526
|
+
--og-accent: 143 200 102; /* #8fc866 */
|
|
527
|
+
--og-accent-fg: 164 217 126; /* #a4d97e */
|
|
528
|
+
--og-accent-contrast: 23 21 9; /* #171509 */
|
|
529
|
+
--og-accent-soft-bg: 38 48 26; /* #26301a */
|
|
530
|
+
--og-accent-soft-fg: 164 217 126; /* #a4d97e */
|
|
531
|
+
--og-positive: 132 200 98; /* #84c862 */
|
|
532
|
+
--og-positive-soft-bg: 34 48 15; /* #22300f */
|
|
533
|
+
--og-negative: 229 130 142; /* #e5828e */
|
|
534
|
+
--og-negative-soft-bg: 63 30 36; /* #3f1e24 */
|
|
535
|
+
--og-warning: 214 178 90; /* #d6b25a */
|
|
536
|
+
--og-warning-soft-bg: 51 42 18; /* #332a12 */
|
|
537
|
+
--og-neutral-soft-bg: 42 39 25; /* #2a2719 */
|
|
538
|
+
--og-neutral-soft-fg: 164 158 134; /* #a49e86 */
|
|
539
|
+
--og-track: 48 44 30; /* #302c1e */
|
|
502
540
|
--og-radius-frame: 10px;
|
|
503
541
|
--og-radius-card: 9px;
|
|
504
542
|
--og-radius-control: 7px;
|
|
505
543
|
--og-radius-pill: 999px;
|
|
506
|
-
--og-font-body:
|
|
507
|
-
--og-font-display:
|
|
508
|
-
--og-font-mono:
|
|
509
|
-
--og-font-prose:
|
|
510
|
-
--og-font-figure:
|
|
544
|
+
--og-font-body: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
545
|
+
--og-font-display: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
546
|
+
--og-font-mono: 'JetBrains Mono',ui-monospace,monospace;
|
|
547
|
+
--og-font-prose: 'Familjen Grotesk',ui-sans-serif,system-ui,sans-serif;
|
|
548
|
+
--og-font-figure: 'JetBrains Mono',ui-monospace,monospace;
|
|
549
|
+
--og-positive-soft-fg: 164 217 126; /* #a4d97e */
|
|
550
|
+
--og-negative-soft-fg: 238 163 171; /* #eea3ab */
|
|
551
|
+
--og-warning-soft-fg: 224 194 116; /* #e0c274 */
|
|
511
552
|
/* derived (script-generated, KHÔNG có trong design gốc) */
|
|
512
|
-
--og-derived-critical:
|
|
513
|
-
--og-derived-critical-soft-bg:
|
|
514
|
-
--og-derived-gradient-accent-end:
|
|
515
|
-
--og-derived-gradient-positive-end:
|
|
553
|
+
--og-derived-critical: 254 119 154; /* #fe779a */
|
|
554
|
+
--og-derived-critical-soft-bg: 97 46 57; /* #612e39 */
|
|
555
|
+
--og-derived-gradient-accent-end: 174 233 134; /* #aee986 */
|
|
556
|
+
--og-derived-gradient-positive-end: 157 226 123; /* #9de27b */
|
|
516
557
|
--shadow-color: 255 255 255;
|
|
517
558
|
/* severity tones — bộ LEGACY (vivid), không lấy từ design V2 */
|
|
518
559
|
--og-tone-success: 76 175 80;
|
|
@@ -521,6 +562,11 @@ html:not([data-og-theme]) body:not(.light_theme) {
|
|
|
521
562
|
--og-tone-danger: 249 133 7;
|
|
522
563
|
--og-tone-information: 62 175 240;
|
|
523
564
|
--og-tone-discovery: 119 113 227;
|
|
565
|
+
/* severity ramp cho CHART — literal đo trên demo, không phải token design */
|
|
566
|
+
--og-sev-critical: 207 103 96; /* #cf6760 — #7f1d1d nâng L cho nền tối */
|
|
567
|
+
--og-sev-danger: 246 68 61; /* #f6443d */
|
|
568
|
+
--og-sev-warning: 245 158 11; /* #f59e0b */
|
|
569
|
+
--og-sev-success: 22 163 74; /* #16a34a */
|
|
524
570
|
|
|
525
571
|
/* ---- LEGACY ALIASES (@deprecated — gỡ khi kết thúc campaign V2) ----
|
|
526
572
|
Các biến cũ trỏ vào --og-* qua var() nên chỉ cần khai báo MỘT lần:
|
|
@@ -37,6 +37,23 @@
|
|
|
37
37
|
--color-neutral-soft-fg: rgb(var(--og-neutral-soft-fg));
|
|
38
38
|
--color-track: rgb(var(--og-track));
|
|
39
39
|
|
|
40
|
+
/* ---- CTA (New Analysis / New Scan) ----
|
|
41
|
+
Demo dùng một màu CỐ ĐỊNH cho nút hành động chính (`.bi-newbtn`), không
|
|
42
|
+
đổi theo theme và KHÔNG phải accent — nên để literal ở đây thay vì thành
|
|
43
|
+
token theme. Nguồn: lớp override của design, #c2582a / hover #b34e24. */
|
|
44
|
+
/* ---- Severity ramp CHO CHART ----
|
|
45
|
+
Màu literal đo trên demo (Critical #7f1d1d · High #dc2626 · Medium
|
|
46
|
+
#f59e0b · Low #16a34a; bộ dark nâng L cho đủ tương phản). TÁCH khỏi
|
|
47
|
+
`--color-critical/danger/warning/success` — mấy tên đó trỏ vào bộ LEGACY
|
|
48
|
+
`--og-tone-*` dùng cho text/nền, không phải màu chart của design. */
|
|
49
|
+
--color-sev-critical: rgb(var(--og-sev-critical));
|
|
50
|
+
--color-sev-danger: rgb(var(--og-sev-danger));
|
|
51
|
+
--color-sev-warning: rgb(var(--og-sev-warning));
|
|
52
|
+
--color-sev-success: rgb(var(--og-sev-success));
|
|
53
|
+
|
|
54
|
+
--color-cta: #c2582a;
|
|
55
|
+
--color-cta-hover: #b34e24;
|
|
56
|
+
|
|
40
57
|
/* ---- Legacy colour names (@deprecated — remove after the V2 campaign;
|
|
41
58
|
they resolve through the alias layer in theme.css, so every existing
|
|
42
59
|
class already renders the OG palette) ---- */
|
|
@@ -73,6 +90,14 @@
|
|
|
73
90
|
--color-button-primary: rgb(var(--button-primary));
|
|
74
91
|
|
|
75
92
|
/* Breakpoints (v3 custom screens) */
|
|
93
|
+
/* ⚠️ THANG NÀY KHÔNG PHẢI MẶC ĐỊNH CỦA TAILWIND (640/768/1024/1280).
|
|
94
|
+
`lg` ở đây là **1080px**, không phải 1024px — đã gây lỗi "màn lg mà render
|
|
95
|
+
layout sm" (03/09): mọi viewport 1024-1079 (rất dễ gặp khi OS scaling
|
|
96
|
+
125-150% hoặc browser zoom) rơi xuống layout nhỏ. Anh Tú chốt GIỮ thang
|
|
97
|
+
này; đổi nó sẽ dịch ngưỡng của mọi `lg:`/`xl:` trong 5 app.
|
|
98
|
+
👉 Layout nào cần biết "có đủ chỗ thật hay không" thì dùng CONTAINER QUERY
|
|
99
|
+
theo bề rộng của chính nó (xem master-detail.component.css), đừng bám `lg:`.
|
|
100
|
+
`xl` là 1920px nên màn 1900px KHÔNG BAO GIỜ đạt `xl:`. */
|
|
76
101
|
--breakpoint-sm: 480px;
|
|
77
102
|
--breakpoint-md: 720px;
|
|
78
103
|
--breakpoint-lg: 1080px;
|
|
@@ -18,6 +18,18 @@
|
|
|
18
18
|
@apply flex flex-row items-center px-semi;
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
+
/* Nhãn "eyebrow" (tiêu đề panel, nhóm facet) — spec CUỐI của demo sau khi
|
|
22
|
+
lớp override đè lên base: font MONO, 11.5px, weight 600, letter-spacing
|
|
23
|
+
0.02em và KHÔNG viết hoa. Base DS viết hoa + tracking 0.08em, nhưng
|
|
24
|
+
override đặt `text-transform: none` nên demo hiển thị chữ thường. */
|
|
25
|
+
@utility txt-eyebrow {
|
|
26
|
+
font-family: var(--og-font-mono);
|
|
27
|
+
font-size: var(--og-fs-xs);
|
|
28
|
+
font-weight: 600;
|
|
29
|
+
letter-spacing: 0.02em;
|
|
30
|
+
color: rgb(var(--og-text-muted));
|
|
31
|
+
}
|
|
32
|
+
|
|
21
33
|
@utility card-common {
|
|
22
34
|
@apply text-left px-xl py-large border border-border-default rounded-lg shadow-sm transition-colors duration-500 ease-in-out;
|
|
23
35
|
}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
'btn-default': buttonVariant() === 'default',
|
|
8
8
|
'btn-primary': buttonVariant() === 'primary',
|
|
9
9
|
'btn-success': buttonVariant() === 'success',
|
|
10
|
+
'btn-cta': buttonVariant() === 'cta',
|
|
10
11
|
'btn-alternative': buttonVariant() === 'alternative',
|
|
11
12
|
}"
|
|
12
13
|
[disabled]="disabled() || loading()"
|
|
@@ -226,6 +227,7 @@
|
|
|
226
227
|
'text-text-primary': buttonVariant() === 'alternative',
|
|
227
228
|
'text-accent-contrast': buttonVariant() === 'primary',
|
|
228
229
|
'text-surface': buttonVariant() === 'success',
|
|
230
|
+
'text-white': buttonVariant() === 'cta',
|
|
229
231
|
}"
|
|
230
232
|
></fx-ui-hero-icon>
|
|
231
233
|
}
|
|
@@ -123,7 +123,9 @@
|
|
|
123
123
|
}
|
|
124
124
|
|
|
125
125
|
.drawer-section-label {
|
|
126
|
-
|
|
126
|
+
/* Demo (.og-sidebar__section sau override): 10.5px, text-faint, giãn chữ
|
|
127
|
+
.08em và KHÔNG viết hoa — override đặt `text-transform: none`. */
|
|
128
|
+
@apply px-large pt-4 pb-1 text-[10.5px]/[1.4] font-semibold text-faint select-none;
|
|
127
129
|
letter-spacing: var(--og-tracking-label);
|
|
128
130
|
}
|
|
129
131
|
|
|
@@ -6,12 +6,7 @@
|
|
|
6
6
|
}
|
|
7
7
|
@for (group of groups(); track group.id) {
|
|
8
8
|
<div role="group" [attr.aria-label]="group.label">
|
|
9
|
-
<div
|
|
10
|
-
class="txt-table-header uppercase mb-small"
|
|
11
|
-
[style.letter-spacing]="'var(--og-tracking-label)'"
|
|
12
|
-
>
|
|
13
|
-
{{ group.label }}
|
|
14
|
-
</div>
|
|
9
|
+
<div class="txt-eyebrow mb-small">{{ group.label }}</div>
|
|
15
10
|
<div class="flex flex-col gap-xs">
|
|
16
11
|
@for (option of group.options; track option.value) {
|
|
17
12
|
<button
|
|
@@ -1,24 +1,76 @@
|
|
|
1
|
-
/*
|
|
2
|
-
.
|
|
3
|
-
width: 100%;
|
|
4
|
-
}
|
|
1
|
+
/* ============================================================================
|
|
2
|
+
Layout 3 cụm quyết định theo BỀ RỘNG CỦA CHÍNH HÀNG ĐÓ, không theo viewport.
|
|
5
3
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
🔬 Vì sao đổi (truy ra 03/09): trước đây dùng `@media (min-width: 1080px)`
|
|
5
|
+
cộng với `lg:flex-row` (mà `lg` trong lib này là **1080px**, không phải
|
|
6
|
+
1024px). Viewport là proxy SAI cho câu hỏi "có đủ chỗ cho 3 cụm không":
|
|
7
|
+
hàng thật = viewport − drawer(261px) − padding. Đo được:
|
|
8
|
+
|
|
9
|
+
viewport 1080 → hàng 787px → facets 230 + list 420 + gap ≈ 690
|
|
10
|
+
⇒ cụm detail chỉ còn **97px**
|
|
11
|
+
viewport 1280 → hàng 987px ⇒ detail 297px (vẫn vỡ)
|
|
12
|
+
viewport 1440 → hàng 1147px ⇒ detail 457px (mới dùng được)
|
|
13
|
+
|
|
14
|
+
Nên có HAI vùng hỏng: <1080px xếp dọc dù màn to (đúng cái anh Tú gặp: OS
|
|
15
|
+
scaling 125-150% hoặc zoom kéo viewport xuống dưới 1080), và 1080-1280px
|
|
16
|
+
"ba cột nhưng detail quá hẹp".
|
|
17
|
+
|
|
18
|
+
Container query chữa cả hai: hàng tự biết mình rộng bao nhiêu, nên drawer
|
|
19
|
+
thu lại là có thêm chỗ ngay, và không phụ thuộc thang breakpoint toàn cục.
|
|
20
|
+
============================================================================ */
|
|
21
|
+
|
|
22
|
+
/* Host là containment context. `display: block` là BẮT BUỘC — host component
|
|
23
|
+
mặc định `display: inline` thì `container-type: inline-size` không có
|
|
24
|
+
inline-size xác định để đo. */
|
|
25
|
+
:host {
|
|
26
|
+
display: block;
|
|
27
|
+
container-type: inline-size;
|
|
28
|
+
container-name: fx-md;
|
|
11
29
|
}
|
|
12
30
|
|
|
13
|
-
/*
|
|
31
|
+
/* Mặc định: xếp dọc, mỗi cụm full width, chiều cao tự nhiên.
|
|
32
|
+
KHÔNG ép chiều cao khi xếp dọc — sẽ sinh ba hộp cuộn tí hon lồng trong
|
|
33
|
+
trang đang cuộn, tệ hơn hẳn. */
|
|
34
|
+
.fx-md-list,
|
|
14
35
|
.fx-md-facets {
|
|
15
36
|
width: 100%;
|
|
16
37
|
}
|
|
17
38
|
|
|
18
|
-
|
|
39
|
+
/*
|
|
40
|
+
* Ngưỡng 968px = ĐÚNG tổng bề rộng tối thiểu dùng được của ba cụm:
|
|
41
|
+
* facets 200 + list 320 + detail 400 + 2 gap (~48) = 968px
|
|
42
|
+
* Dưới ngưỡng thì thật sự không đủ chỗ → xếp dọc là đúng, không phải lỗi.
|
|
43
|
+
*
|
|
44
|
+
* ⚠️ Đừng làm tròn lên 1000px: viewport 1280 (rất phổ biến) cho hàng đúng
|
|
45
|
+
* 987px — trượt ngưỡng 1000 chỉ vì 13px dù thừa sức xếp 3 cụm ở mức sàn
|
|
46
|
+
* (đo được: facets 200 / list 320 / detail 419).
|
|
47
|
+
*/
|
|
48
|
+
@container fx-md (min-width: 968px) {
|
|
49
|
+
.fx-md-row {
|
|
50
|
+
flex-direction: row;
|
|
51
|
+
height: var(--fx-md-pane-h, calc(100vh - 300px));
|
|
52
|
+
min-height: 420px;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/* Panes CO GIÃN: facets/list nhường chỗ để cụm detail luôn có sàn 400px.
|
|
56
|
+
`--fx-md-list-width` (input `listWidth`) giờ là bề rộng MONG MUỐN kiêm
|
|
57
|
+
tối đa của cụm list, không còn là con số cứng. */
|
|
19
58
|
.fx-md-facets {
|
|
20
|
-
|
|
21
|
-
|
|
59
|
+
flex: 0 1 230px;
|
|
60
|
+
min-width: 200px;
|
|
61
|
+
max-width: 260px;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.fx-md-list {
|
|
65
|
+
width: auto;
|
|
66
|
+
flex: 0 1 var(--fx-md-list-width, 420px);
|
|
67
|
+
min-width: 320px;
|
|
68
|
+
max-width: var(--fx-md-list-width, 420px);
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
.fx-md-detail {
|
|
72
|
+
flex: 1 1 400px;
|
|
73
|
+
min-width: 400px;
|
|
22
74
|
}
|
|
23
75
|
}
|
|
24
76
|
|