codexly-ui 0.0.97 → 0.0.98

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.
@@ -1,84 +1,3 @@
1
- /* ── Roboto 300 Light ──────────────────────────────────────────────────────── */
2
- @font-face {
3
- font-family: 'Roboto';
4
- font-style: normal;
5
- font-weight: 300;
6
- font-display: swap;
7
- src: url('../fonts/roboto-light.ttf') format('truetype');
8
- }
9
-
10
- @font-face {
11
- font-family: 'Roboto';
12
- font-style: italic;
13
- font-weight: 300;
14
- font-display: swap;
15
- src: url('../fonts/roboto-light-italic.ttf') format('truetype');
16
- }
17
-
18
- /* ── Roboto 400 Regular ────────────────────────────────────────────────────── */
19
- @font-face {
20
- font-family: 'Roboto';
21
- font-style: normal;
22
- font-weight: 400;
23
- font-display: swap;
24
- src: url('../fonts/roboto-regular.ttf') format('truetype');
25
- }
26
-
27
- @font-face {
28
- font-family: 'Roboto';
29
- font-style: italic;
30
- font-weight: 400;
31
- font-display: swap;
32
- src: url('../fonts/roboto-italic.ttf') format('truetype');
33
- }
34
-
35
- /* ── Roboto 500 Medium ─────────────────────────────────────────────────────── */
36
- @font-face {
37
- font-family: 'Roboto';
38
- font-style: normal;
39
- font-weight: 500;
40
- font-display: swap;
41
- src: url('../fonts/roboto-medium.ttf') format('truetype');
42
- }
43
-
44
- @font-face {
45
- font-family: 'Roboto';
46
- font-style: italic;
47
- font-weight: 500;
48
- font-display: swap;
49
- src: url('../fonts/roboto-medium-italic.ttf') format('truetype');
50
- }
51
-
52
- /* ── Roboto 600 SemiBold ───────────────────────────────────────────────────── */
53
- @font-face {
54
- font-family: 'Roboto';
55
- font-style: normal;
56
- font-weight: 600;
57
- font-display: swap;
58
- src: url('../fonts/roboto-semibold.ttf') format('truetype');
59
- }
60
-
61
- @font-face {
62
- font-family: 'Roboto';
63
- font-style: italic;
64
- font-weight: 600;
65
- font-display: swap;
66
- src: url('../fonts/roboto-semibold-italic.ttf') format('truetype');
67
- }
68
-
69
- /* ── Roboto 700 Bold ───────────────────────────────────────────────────────── */
70
- @font-face {
71
- font-family: 'Roboto';
72
- font-style: normal;
73
- font-weight: 700;
74
- font-display: swap;
75
- src: url('../fonts/roboto-bold.ttf') format('truetype');
76
- }
77
-
78
- @font-face {
79
- font-family: 'Roboto';
80
- font-style: italic;
81
- font-weight: 700;
82
- font-display: swap;
83
- src: url('../fonts/roboto-bold-italic.ttf') format('truetype');
84
- }
1
+ /* Fonts are loaded dynamically by ClxThemeService via <link> injection.
2
+ Roboto is the default — preloaded here so the app renders before JS executes. */
3
+ @import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap');
@@ -1,3 +1,6 @@
1
+ /* ── Global font ─────────────────────────────────────────────────────────── */
2
+ *, *::before, *::after { font-family: var(--clx-font-body); }
3
+
1
4
  /* ── Backdrop base ───────────────────────────────────────────────────────── */
2
5
  .clx-modal-backdrop,
3
6
  .clx-alert-backdrop {
@@ -1,9 +1,13 @@
1
1
  /* ── Font registrations ───────────────────────────────────────────────────── */
2
2
  @theme {
3
- --font-roboto: 'Roboto', ui-sans-serif, system-ui, sans-serif;
4
3
  --font-material-symbols-outlined: 'Material Symbols Outlined';
5
4
  }
6
5
 
6
+ /* ── Font body variable (overridden dynamically by ClxThemeService) ───────── */
7
+ :root {
8
+ --clx-font-body: 'Roboto', ui-sans-serif, system-ui, sans-serif;
9
+ }
10
+
7
11
  /* ── Light theme (default) ────────────────────────────────────────────────── */
8
12
  :root {
9
13
  color-scheme: light;
@@ -34,6 +38,12 @@
34
38
  /* ── Scrollbar ── */
35
39
  --clx-scrollbar: #cbd5e1; /* slate-300 */
36
40
  --clx-scrollbar-hover: #94a3b8; /* slate-400 */
41
+
42
+ /* ── Theme accents (overridden dynamically by ClxThemeService) ── */
43
+ --clx-secondary: #64748b; /* slate-500 */
44
+ --clx-secondary-light: #f1f5f9; /* slate-100 */
45
+ --clx-text-base: #64748b; /* slate-500 */
46
+ --clx-text-base-light: #f1f5f9; /* slate-100 */
37
47
  }
38
48
 
39
49
  /* ── Dark theme ───────────────────────────────────────────────────────────── */
@@ -83,4 +93,8 @@
83
93
  --color-clx-border-soft: var(--clx-border-soft);
84
94
  --color-clx-primary: var(--clx-primary);
85
95
  --color-clx-primary-light: var(--clx-primary-light);
96
+ --color-clx-secondary: var(--clx-secondary);
97
+ --color-clx-secondary-light: var(--clx-secondary-light);
98
+ --color-clx-text-base: var(--clx-text-base);
99
+ --color-clx-text-base-light: var(--clx-text-base-light);
86
100
  }
@@ -165,6 +165,58 @@ const BADGE_SHAPE_FIXED = {
165
165
  circle: 'rounded-full',
166
166
  };
167
167
 
168
+ const CLX_FONT_CATALOG = [
169
+ {
170
+ label: 'Roboto',
171
+ value: 'Roboto',
172
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
173
+ },
174
+ {
175
+ label: 'Inter',
176
+ value: 'Inter',
177
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&display=swap',
178
+ },
179
+ {
180
+ label: 'Poppins',
181
+ value: 'Poppins',
182
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
183
+ },
184
+ {
185
+ label: 'Plus Jakarta Sans',
186
+ value: 'Plus Jakarta Sans',
187
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
188
+ },
189
+ {
190
+ label: 'Nunito',
191
+ value: 'Nunito',
192
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
193
+ },
194
+ {
195
+ label: 'DM Sans',
196
+ value: 'DM Sans',
197
+ googleUrl: 'https://fonts.googleapis.com/css2?family=DM+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
198
+ },
199
+ {
200
+ label: 'Geist',
201
+ value: 'Geist',
202
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Geist:wght@300;400;500;600;700&display=swap',
203
+ },
204
+ {
205
+ label: 'Lato',
206
+ value: 'Lato',
207
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,300;0,400;0,700;1,300;1,400;1,700&display=swap',
208
+ },
209
+ {
210
+ label: 'Montserrat',
211
+ value: 'Montserrat',
212
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
213
+ },
214
+ {
215
+ label: 'Open Sans',
216
+ value: 'Open Sans',
217
+ googleUrl: 'https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&display=swap',
218
+ },
219
+ ];
168
220
  // ── Tailwind rounded classes per borderRadius token ───────────────────────────
169
221
  const CLX_RADIUS_MAP = {
170
222
  none: 'rounded-none',
@@ -194,13 +246,16 @@ function resolveContainerRadius(r) {
194
246
  // ── Default theme ─────────────────────────────────────────────────────────────
195
247
  const CLX_THEME_DEFAULTS = {
196
248
  primaryColor: 'indigo',
249
+ secondaryColor: 'slate',
197
250
  dangerColor: 'red',
198
251
  successColor: 'green',
199
252
  warningColor: 'amber',
200
253
  neutralColor: 'slate',
254
+ textColor: 'slate',
201
255
  borderRadius: 'md',
202
256
  defaultSize: 'md',
203
257
  defaultShape: 'rounded',
258
+ fontFamily: 'Roboto',
204
259
  };
205
260
  // ── Injection token ───────────────────────────────────────────────────────────
206
261
  const CLX_THEME_CONFIG = new InjectionToken('CLX_THEME_CONFIG', { factory: () => CLX_THEME_DEFAULTS });
@@ -212,7 +267,107 @@ function provideCodexlyTheme(config) {
212
267
  };
213
268
  }
214
269
 
270
+ // ── Full Tailwind v4 palette (hex), all colors × all shades ──────────────────
271
+ // Source of truth: official Tailwind CSS v4 color values.
272
+ const CLX_COLOR_PALETTE = {
273
+ red: {
274
+ 50: '#fef2f2', 100: '#fee2e2', 200: '#fecaca', 300: '#fca5a5', 400: '#f87171',
275
+ 500: '#ef4444', 600: '#dc2626', 700: '#b91c1c', 800: '#991b1b', 900: '#7f1d1d', 950: '#450a0a',
276
+ },
277
+ orange: {
278
+ 50: '#fff7ed', 100: '#ffedd5', 200: '#fed7aa', 300: '#fdba74', 400: '#fb923c',
279
+ 500: '#f97316', 600: '#ea580c', 700: '#c2410c', 800: '#9a3412', 900: '#7c2d12', 950: '#431407',
280
+ },
281
+ amber: {
282
+ 50: '#fffbeb', 100: '#fef3c7', 200: '#fde68a', 300: '#fcd34d', 400: '#fbbf24',
283
+ 500: '#f59e0b', 600: '#d97706', 700: '#b45309', 800: '#92400e', 900: '#78350f', 950: '#451a03',
284
+ },
285
+ yellow: {
286
+ 50: '#fefce8', 100: '#fef9c3', 200: '#fef08a', 300: '#fde047', 400: '#facc15',
287
+ 500: '#eab308', 600: '#ca8a04', 700: '#a16207', 800: '#854d0e', 900: '#713f12', 950: '#422006',
288
+ },
289
+ lime: {
290
+ 50: '#f7fee7', 100: '#ecfccb', 200: '#d9f99d', 300: '#bef264', 400: '#a3e635',
291
+ 500: '#84cc16', 600: '#65a30d', 700: '#4d7c0f', 800: '#3f6212', 900: '#365314', 950: '#1a2e05',
292
+ },
293
+ green: {
294
+ 50: '#f0fdf4', 100: '#dcfce7', 200: '#bbf7d0', 300: '#86efac', 400: '#4ade80',
295
+ 500: '#22c55e', 600: '#16a34a', 700: '#15803d', 800: '#166534', 900: '#14532d', 950: '#052e16',
296
+ },
297
+ emerald: {
298
+ 50: '#ecfdf5', 100: '#d1fae5', 200: '#a7f3d0', 300: '#6ee7b7', 400: '#34d399',
299
+ 500: '#10b981', 600: '#059669', 700: '#047857', 800: '#065f46', 900: '#064e3b', 950: '#022c22',
300
+ },
301
+ teal: {
302
+ 50: '#f0fdfa', 100: '#ccfbf1', 200: '#99f6e4', 300: '#5eead4', 400: '#2dd4bf',
303
+ 500: '#14b8a6', 600: '#0d9488', 700: '#0f766e', 800: '#115e59', 900: '#134e4a', 950: '#042f2e',
304
+ },
305
+ cyan: {
306
+ 50: '#ecfeff', 100: '#cffafe', 200: '#a5f3fc', 300: '#67e8f9', 400: '#22d3ee',
307
+ 500: '#06b6d4', 600: '#0891b2', 700: '#0e7490', 800: '#155e75', 900: '#164e63', 950: '#083344',
308
+ },
309
+ sky: {
310
+ 50: '#f0f9ff', 100: '#e0f2fe', 200: '#bae6fd', 300: '#7dd3fc', 400: '#38bdf8',
311
+ 500: '#0ea5e9', 600: '#0284c7', 700: '#0369a1', 800: '#075985', 900: '#0c4a6e', 950: '#082f49',
312
+ },
313
+ blue: {
314
+ 50: '#eff6ff', 100: '#dbeafe', 200: '#bfdbfe', 300: '#93c5fd', 400: '#60a5fa',
315
+ 500: '#3b82f6', 600: '#2563eb', 700: '#1d4ed8', 800: '#1e40af', 900: '#1e3a8a', 950: '#172554',
316
+ },
317
+ indigo: {
318
+ 50: '#eef2ff', 100: '#e0e7ff', 200: '#c7d2fe', 300: '#a5b4fc', 400: '#818cf8',
319
+ 500: '#6366f1', 600: '#4f46e5', 700: '#4338ca', 800: '#3730a3', 900: '#312e81', 950: '#1e1b4b',
320
+ },
321
+ violet: {
322
+ 50: '#f5f3ff', 100: '#ede9fe', 200: '#ddd6fe', 300: '#c4b5fd', 400: '#a78bfa',
323
+ 500: '#8b5cf6', 600: '#7c3aed', 700: '#6d28d9', 800: '#5b21b6', 900: '#4c1d95', 950: '#2e1065',
324
+ },
325
+ purple: {
326
+ 50: '#faf5ff', 100: '#f3e8ff', 200: '#e9d5ff', 300: '#d8b4fe', 400: '#c084fc',
327
+ 500: '#a855f7', 600: '#9333ea', 700: '#7e22ce', 800: '#6b21a8', 900: '#581c87', 950: '#3b0764',
328
+ },
329
+ fuchsia: {
330
+ 50: '#fdf4ff', 100: '#fae8ff', 200: '#f5d0fe', 300: '#f0abfc', 400: '#e879f9',
331
+ 500: '#d946ef', 600: '#c026d3', 700: '#a21caf', 800: '#86198f', 900: '#701a75', 950: '#4a044e',
332
+ },
333
+ pink: {
334
+ 50: '#fdf2f8', 100: '#fce7f3', 200: '#fbcfe8', 300: '#f9a8d4', 400: '#f472b6',
335
+ 500: '#ec4899', 600: '#db2777', 700: '#be185d', 800: '#9d174d', 900: '#831843', 950: '#500724',
336
+ },
337
+ rose: {
338
+ 50: '#fff1f2', 100: '#ffe4e6', 200: '#fecdd3', 300: '#fda4af', 400: '#fb7185',
339
+ 500: '#f43f5e', 600: '#e11d48', 700: '#be123c', 800: '#9f1239', 900: '#881337', 950: '#4c0519',
340
+ },
341
+ slate: {
342
+ 50: '#f8fafc', 100: '#f1f5f9', 200: '#e2e8f0', 300: '#cbd5e1', 400: '#94a3b8',
343
+ 500: '#64748b', 600: '#475569', 700: '#334155', 800: '#1e293b', 900: '#0f172a', 950: '#020617',
344
+ },
345
+ gray: {
346
+ 50: '#f9fafb', 100: '#f3f4f6', 200: '#e5e7eb', 300: '#d1d5db', 400: '#9ca3af',
347
+ 500: '#6b7280', 600: '#4b5563', 700: '#374151', 800: '#1f2937', 900: '#111827', 950: '#030712',
348
+ },
349
+ zinc: {
350
+ 50: '#fafafa', 100: '#f4f4f5', 200: '#e4e4e7', 300: '#d4d4d8', 400: '#a1a1aa',
351
+ 500: '#71717a', 600: '#52525b', 700: '#3f3f46', 800: '#27272a', 900: '#18181b', 950: '#09090b',
352
+ },
353
+ neutral: {
354
+ 50: '#fafafa', 100: '#f5f5f5', 200: '#e5e5e5', 300: '#d4d4d4', 400: '#a3a3a3',
355
+ 500: '#737373', 600: '#525252', 700: '#404040', 800: '#262626', 900: '#171717', 950: '#0a0a0a',
356
+ },
357
+ stone: {
358
+ 50: '#fafaf9', 100: '#f5f5f4', 200: '#e7e5e4', 300: '#d6d3d1', 400: '#a8a29e',
359
+ 500: '#78716c', 600: '#57534e', 700: '#44403c', 800: '#292524', 900: '#1c1917', 950: '#0c0a09',
360
+ },
361
+ white: { 500: '#ffffff' },
362
+ };
363
+ /** Resolve a hex value for any Tailwind color + shade, with a safe fallback. */
364
+ function resolvePaletteHex(color, shade) {
365
+ const entry = CLX_COLOR_PALETTE[color] ?? CLX_COLOR_PALETTE.indigo;
366
+ return entry[shade] ?? entry[500] ?? CLX_COLOR_PALETTE.indigo[500];
367
+ }
368
+
215
369
  const STORAGE_KEY = 'clx-theme-mode';
370
+ const FONT_LINK_ID = 'clx-google-font';
216
371
  class ClxThemeService {
217
372
  _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
218
373
  _initial = inject(CLX_THEME_CONFIG);
@@ -229,6 +384,12 @@ class ClxThemeService {
229
384
  return false;
230
385
  return this._sysDark();
231
386
  }, ...(ngDevMode ? [{ debugName: "isDark" }] : /* istanbul ignore next */ []));
387
+ /** Color to apply to clx-nav-group labels — falls back to neutralColor */
388
+ sidebarGroupColor = computed(() => this._config().sidebarGroupColor ?? this._config().neutralColor, ...(ngDevMode ? [{ debugName: "sidebarGroupColor" }] : /* istanbul ignore next */ []));
389
+ /** Color to apply to top-level clx-menu — falls back to primaryColor */
390
+ sidebarMenuColor = computed(() => this._config().sidebarMenuColor ?? this._config().primaryColor, ...(ngDevMode ? [{ debugName: "sidebarMenuColor" }] : /* istanbul ignore next */ []));
391
+ /** Color to apply to clx-menu-item — falls back to primaryColor */
392
+ sidebarItemColor = computed(() => this._config().sidebarItemColor ?? this._config().primaryColor, ...(ngDevMode ? [{ debugName: "sidebarItemColor" }] : /* istanbul ignore next */ []));
232
393
  constructor() {
233
394
  effect(() => {
234
395
  if (!this._isBrowser)
@@ -238,14 +399,15 @@ class ClxThemeService {
238
399
  effect(() => {
239
400
  if (!this._isBrowser)
240
401
  return;
241
- const primaryColor = this._config().primaryColor;
242
- if (!primaryColor)
402
+ const cfg = this._config();
403
+ this._applyColorVar('--clx-primary', '--clx-primary-light', cfg.primaryColor);
404
+ this._applyColorVar('--clx-secondary', '--clx-secondary-light', cfg.secondaryColor);
405
+ this._applyColorVar('--clx-text-base', '--clx-text-base-light', cfg.textColor);
406
+ });
407
+ effect(() => {
408
+ if (!this._isBrowser)
243
409
  return;
244
- const { color } = parseColorInput(primaryColor);
245
- const hex500 = CLX_COLOR_HEX[color] ?? CLX_COLOR_HEX.indigo;
246
- const hex100 = CLX_COLOR_HEX_100[color] ?? CLX_COLOR_HEX_100.indigo;
247
- document.documentElement.style.setProperty('--clx-primary', hex500);
248
- document.documentElement.style.setProperty('--clx-primary-light', hex100);
410
+ this._applyFont(this._config().fontFamily ?? 'Roboto');
249
411
  });
250
412
  if (this._isBrowser) {
251
413
  const mq = window.matchMedia('(prefers-color-scheme: dark)');
@@ -263,6 +425,29 @@ class ClxThemeService {
263
425
  toggle() {
264
426
  this.setMode(this.isDark() ? 'light' : 'dark');
265
427
  }
428
+ _applyColorVar(varName, lightVarName, input) {
429
+ if (!input)
430
+ return;
431
+ const { color, shade } = parseColorInput(input);
432
+ document.documentElement.style.setProperty(varName, resolvePaletteHex(color, shade));
433
+ if (lightVarName) {
434
+ document.documentElement.style.setProperty(lightVarName, resolvePaletteHex(color, 100));
435
+ }
436
+ }
437
+ _applyFont(family) {
438
+ const option = CLX_FONT_CATALOG.find(f => f.value === family);
439
+ if (!option)
440
+ return;
441
+ let link = document.getElementById(FONT_LINK_ID);
442
+ if (!link) {
443
+ link = document.createElement('link');
444
+ link.id = FONT_LINK_ID;
445
+ link.rel = 'stylesheet';
446
+ document.head.appendChild(link);
447
+ }
448
+ link.href = option.googleUrl;
449
+ document.documentElement.style.setProperty('--clx-font-body', `'${family}', ui-sans-serif, system-ui, sans-serif`);
450
+ }
266
451
  _loadMode() {
267
452
  if (!this._isBrowser)
268
453
  return 'system';
@@ -12002,10 +12187,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
12002
12187
  class ClxNavGroupComponent {
12003
12188
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
12004
12189
  collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
12190
+ color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
12191
+ labelClass = computed(() => {
12192
+ const c = this.color();
12193
+ return c ? resolveColor(c).textSubtle : 'text-clx-text-subtle';
12194
+ }, ...(ngDevMode ? [{ debugName: "labelClass" }] : /* istanbul ignore next */ []));
12005
12195
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxNavGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
12006
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxNavGroupComponent, isStandalone: true, selector: "clx-nav-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
12196
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxNavGroupComponent, isStandalone: true, selector: "clx-nav-group", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
12007
12197
  @if (!collapsed()) {
12008
- <span class="block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest text-clx-text-subtle select-none">{{ label() }}</span>
12198
+ <span class="block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
12009
12199
  } @else {
12010
12200
  <span class="flex items-center justify-center w-full py-3">
12011
12201
  <span class="w-1.5 h-1.5 rounded-full bg-clx-border"></span>
@@ -12020,7 +12210,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
12020
12210
  standalone: true,
12021
12211
  template: `
12022
12212
  @if (!collapsed()) {
12023
- <span class="block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest text-clx-text-subtle select-none">{{ label() }}</span>
12213
+ <span class="block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
12024
12214
  } @else {
12025
12215
  <span class="flex items-center justify-center w-full py-3">
12026
12216
  <span class="w-1.5 h-1.5 rounded-full bg-clx-border"></span>
@@ -12031,7 +12221,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
12031
12221
  changeDetection: ChangeDetectionStrategy.OnPush,
12032
12222
  host: { class: 'block' },
12033
12223
  }]
12034
- }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }] } });
12224
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }] } });
12035
12225
 
12036
12226
  class ClxProfileComponent {
12037
12227
  // ── Inputs ──────────────────────────────────────────────────────────────────
@@ -14873,5 +15063,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
14873
15063
  * Generated bundle index. Do not edit.
14874
15064
  */
14875
15065
 
14876
- export { CLX_ADDON_BORDER, CLX_ADDON_TEXT, CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE, CLX_BG_ADDON, CLX_BG_DISABLED, CLX_BG_ICON_WRAP, CLX_BG_SECTION, CLX_BG_SURFACE, CLX_BORDER_DEFAULT, CLX_BORDER_DISABLED, CLX_BORDER_MEDIUM, CLX_COLOR_HEX, CLX_COLOR_HEX_100, CLX_COLOR_MAP, CLX_MODAL_ANIM_CONFIG, CLX_MODAL_DATA, CLX_MODAL_REF, CLX_OPTION_DISABLED, CLX_PLACEHOLDER, CLX_RADIO_GROUP, CLX_RADIUS_MAP, CLX_TEXT_BODY, CLX_TEXT_DISABLED, CLX_TEXT_HEADING, CLX_TEXT_HINT, CLX_TEXT_IDLE, CLX_TEXT_INPUT, CLX_TEXT_LABEL, CLX_TEXT_OPTION, CLX_TEXT_SUBTITLE, CLX_TEXT_TITLE, CLX_THEME_CONFIG, CLX_THEME_DEFAULTS, CLX_TOAST_DEFAULTS, ClxAlertComponent, ClxAlertService, ClxAnimateDirective, ClxAnimateGroupDirective, ClxAnimateService, ClxAppLayoutComponent, ClxAvatarComponent, ClxBadgeComponent, ClxBrandComponent, ClxButtonComponent, ClxButtonGroupComponent, ClxCardBodyDirective, ClxCardComponent, ClxCardFooterDirective, ClxCardHeaderDirective, ClxCarouselComponent, ClxCarouselDirective, ClxCartComponent, ClxCartSummaryDrawer, ClxCellDirective, ClxChartComponent, ClxCheckboxComponent, ClxColorPickerComponent, ClxColumnDefDirective, ClxDateRangePickerComponent, ClxDatepickerComponent, ClxDrawerComponent, ClxDrawerService, ClxEditorComponent, ClxEditorLinkModalComponent, ClxFilterPanelComponent, ClxHeaderCellDirective, ClxIconComponent, ClxInputComponent, ClxListComponent, ClxListItemComponent, ClxMenuComponent, ClxMenuItemComponent, ClxModalComponent, ClxModalService, ClxNavGroupComponent, ClxNumberComponent, ClxPageEmptyComponent, ClxPageNotFoundComponent, ClxPageServerErrorComponent, ClxPageUnauthorizedComponent, ClxPaginationComponent, ClxProductComponent, ClxProductDetailComponent, ClxProfileComponent, ClxProgressBarComponent, ClxRadioComponent, ClxRadioGroupComponent, ClxRatingComponent, ClxSelectComponent, ClxSkeletonComponent, ClxSliderComponent, ClxSpinnerComponent, ClxStatCardComponent, ClxStepComponent, ClxStepperComponent, ClxSwitchComponent, ClxTabDirective, ClxTableComponent, ClxTabsComponent, ClxTagComponent, ClxTextareaComponent, ClxThemeService, ClxTimelineComponent, ClxTimelineItemComponent, ClxTimepickerComponent, ClxToastComponent, ClxToastContainerComponent, ClxToastService, ClxTooltipComponent, ClxTooltipDirective, ClxTreeComponent, ClxUploadComponent, ClxWishlistComponent, ClxWizardComponent, TIMEPICKER_SIZE_MAP, parseColorInput, provideCodexlyTheme, resolveColor, resolveContainerRadius, resolveRadius };
15066
+ export { CLX_ADDON_BORDER, CLX_ADDON_TEXT, CLX_ALERT_OPTIONS, CLX_ALERT_RESOLVE, CLX_BG_ADDON, CLX_BG_DISABLED, CLX_BG_ICON_WRAP, CLX_BG_SECTION, CLX_BG_SURFACE, CLX_BORDER_DEFAULT, CLX_BORDER_DISABLED, CLX_BORDER_MEDIUM, CLX_COLOR_HEX, CLX_COLOR_HEX_100, CLX_COLOR_MAP, CLX_FONT_CATALOG, CLX_MODAL_ANIM_CONFIG, CLX_MODAL_DATA, CLX_MODAL_REF, CLX_OPTION_DISABLED, CLX_PLACEHOLDER, CLX_RADIO_GROUP, CLX_RADIUS_MAP, CLX_TEXT_BODY, CLX_TEXT_DISABLED, CLX_TEXT_HEADING, CLX_TEXT_HINT, CLX_TEXT_IDLE, CLX_TEXT_INPUT, CLX_TEXT_LABEL, CLX_TEXT_OPTION, CLX_TEXT_SUBTITLE, CLX_TEXT_TITLE, CLX_THEME_CONFIG, CLX_THEME_DEFAULTS, CLX_TOAST_DEFAULTS, ClxAlertComponent, ClxAlertService, ClxAnimateDirective, ClxAnimateGroupDirective, ClxAnimateService, ClxAppLayoutComponent, ClxAvatarComponent, ClxBadgeComponent, ClxBrandComponent, ClxButtonComponent, ClxButtonGroupComponent, ClxCardBodyDirective, ClxCardComponent, ClxCardFooterDirective, ClxCardHeaderDirective, ClxCarouselComponent, ClxCarouselDirective, ClxCartComponent, ClxCartSummaryDrawer, ClxCellDirective, ClxChartComponent, ClxCheckboxComponent, ClxColorPickerComponent, ClxColumnDefDirective, ClxDateRangePickerComponent, ClxDatepickerComponent, ClxDrawerComponent, ClxDrawerService, ClxEditorComponent, ClxEditorLinkModalComponent, ClxFilterPanelComponent, ClxHeaderCellDirective, ClxIconComponent, ClxInputComponent, ClxListComponent, ClxListItemComponent, ClxMenuComponent, ClxMenuItemComponent, ClxModalComponent, ClxModalService, ClxNavGroupComponent, ClxNumberComponent, ClxPageEmptyComponent, ClxPageNotFoundComponent, ClxPageServerErrorComponent, ClxPageUnauthorizedComponent, ClxPaginationComponent, ClxProductComponent, ClxProductDetailComponent, ClxProfileComponent, ClxProgressBarComponent, ClxRadioComponent, ClxRadioGroupComponent, ClxRatingComponent, ClxSelectComponent, ClxSkeletonComponent, ClxSliderComponent, ClxSpinnerComponent, ClxStatCardComponent, ClxStepComponent, ClxStepperComponent, ClxSwitchComponent, ClxTabDirective, ClxTableComponent, ClxTabsComponent, ClxTagComponent, ClxTextareaComponent, ClxThemeService, ClxTimelineComponent, ClxTimelineItemComponent, ClxTimepickerComponent, ClxToastComponent, ClxToastContainerComponent, ClxToastService, ClxTooltipComponent, ClxTooltipDirective, ClxTreeComponent, ClxUploadComponent, ClxWishlistComponent, ClxWizardComponent, TIMEPICKER_SIZE_MAP, parseColorInput, provideCodexlyTheme, resolveColor, resolveContainerRadius, resolveRadius };
14877
15067
  //# sourceMappingURL=codexly-ui.mjs.map