codexly-ui 0.6.11 → 0.6.13

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.
@@ -6,6 +6,12 @@
6
6
  /* ── Font body variable (overridden dynamically by ClxThemeService) ───────── */
7
7
  :root {
8
8
  --clx-font-body: 'DM Sans', ui-sans-serif, system-ui, sans-serif;
9
+
10
+ /* ── Font weight (overridden dynamically by ClxThemeService) ──
11
+ label: field labels, secondary text, idle nav, badges
12
+ emphasis: titles, selected/active state, standout values (prices, counters) */
13
+ --clx-font-weight-label: 500;
14
+ --clx-font-weight-emphasis: 600;
9
15
  }
10
16
 
11
17
  /* ── Light theme (default) ────────────────────────────────────────────────── */
@@ -378,6 +378,11 @@ const CLX_FONT_CATALOG = [
378
378
  googleUrl: 'https://fonts.googleapis.com/css2?family=Bungee&display=swap',
379
379
  },
380
380
  ];
381
+ const CLX_FONT_WEIGHT_MAP = {
382
+ light: { label: 400, emphasis: 500 },
383
+ normal: { label: 500, emphasis: 600 },
384
+ bold: { label: 600, emphasis: 700 },
385
+ };
381
386
  // ── Tailwind rounded classes per borderRadius token ───────────────────────────
382
387
  const CLX_RADIUS_MAP = {
383
388
  none: 'rounded-none',
@@ -417,6 +422,7 @@ const CLX_THEME_DEFAULTS = {
417
422
  defaultSize: 'md',
418
423
  defaultShape: 'rounded',
419
424
  fontFamily: 'DM Sans',
425
+ fontWeight: 'normal',
420
426
  };
421
427
  // ── Injection token ───────────────────────────────────────────────────────────
422
428
  const CLX_THEME_CONFIG = new InjectionToken('CLX_THEME_CONFIG', { factory: () => CLX_THEME_DEFAULTS });
@@ -545,12 +551,19 @@ class ClxThemeService {
545
551
  return false;
546
552
  return this._sysDark();
547
553
  }, ...(ngDevMode ? [{ debugName: "isDark" }] : /* istanbul ignore next */ []));
548
- /** Color to apply to clx-nav-group labels — falls back to neutralColor */
549
- sidebarGroupColor = computed(() => this._config().sidebarGroupColor ?? this._config().neutralColor, ...(ngDevMode ? [{ debugName: "sidebarGroupColor" }] : /* istanbul ignore next */ []));
550
- /** Color to apply to top-level clx-menu — falls back to primaryColor */
551
- sidebarMenuColor = computed(() => this._config().sidebarMenuColor ?? this._config().primaryColor, ...(ngDevMode ? [{ debugName: "sidebarMenuColor" }] : /* istanbul ignore next */ []));
552
- /** Color to apply to clx-menu-item — falls back to primaryColor */
553
- sidebarItemColor = computed(() => this._config().sidebarItemColor ?? this._config().primaryColor, ...(ngDevMode ? [{ debugName: "sidebarItemColor" }] : /* istanbul ignore next */ []));
554
+ /** Resolved style for clx-nav-group labels — falls back to neutralColor/xs/label */
555
+ sidebarGroupStyle = computed(() => this._resolveNavZoneStyle(this._config().sidebarGroup, this._config().neutralColor, 'xs', 'label'), ...(ngDevMode ? [{ debugName: "sidebarGroupStyle" }] : /* istanbul ignore next */ []));
556
+ /** Resolved style for top-level clx-menu — falls back to primaryColor/sm/emphasis */
557
+ sidebarMenuStyle = computed(() => this._resolveNavZoneStyle(this._config().sidebarMenu, this._config().primaryColor, 'sm', 'emphasis'), ...(ngDevMode ? [{ debugName: "sidebarMenuStyle" }] : /* istanbul ignore next */ []));
558
+ /** Resolved style for clx-menu-item — falls back to primaryColor/sm/label */
559
+ sidebarItemStyle = computed(() => this._resolveNavZoneStyle(this._config().sidebarItem, this._config().primaryColor, 'sm', 'label'), ...(ngDevMode ? [{ debugName: "sidebarItemStyle" }] : /* istanbul ignore next */ []));
560
+ _resolveNavZoneStyle(override, defaultColor, defaultSize, defaultWeight) {
561
+ return {
562
+ color: override?.color ?? defaultColor,
563
+ size: override?.size ?? defaultSize,
564
+ weight: override?.weight ?? defaultWeight,
565
+ };
566
+ }
554
567
  constructor() {
555
568
  effect(() => {
556
569
  if (!this._isBrowser)
@@ -570,6 +583,11 @@ class ClxThemeService {
570
583
  return;
571
584
  this._applyFont(this._config().fontFamily ?? 'Roboto');
572
585
  });
586
+ effect(() => {
587
+ if (!this._isBrowser)
588
+ return;
589
+ this._applyFontWeight(this._config().fontWeight ?? 'normal');
590
+ });
573
591
  if (this._isBrowser) {
574
592
  const mq = window.matchMedia('(prefers-color-scheme: dark)');
575
593
  mq.addEventListener('change', e => this._sysDark.set(e.matches));
@@ -622,6 +640,13 @@ class ClxThemeService {
622
640
  link.href = option.googleUrl;
623
641
  document.documentElement.style.setProperty('--clx-font-body', `'${family}', ui-sans-serif, system-ui, sans-serif`);
624
642
  }
643
+ _applyFontWeight(intensity) {
644
+ const pair = CLX_FONT_WEIGHT_MAP[intensity];
645
+ if (!pair)
646
+ return;
647
+ document.documentElement.style.setProperty('--clx-font-weight-label', String(pair.label));
648
+ document.documentElement.style.setProperty('--clx-font-weight-emphasis', String(pair.emphasis));
649
+ }
625
650
  _loadMode() {
626
651
  if (!this._isBrowser)
627
652
  return 'system';
@@ -1236,6 +1261,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
1236
1261
  args: [{ selector: '[clxCardHeader]', standalone: true }]
1237
1262
  }] });
1238
1263
 
1264
+ /** Optional trailing slot next to the auto-generated icon+title header (see ClxCardComponent's
1265
+ * `icon`/`headerTitle` inputs) — for a button, badge or switch shown to the right of the title. */
1266
+ class ClxCardHeaderActionsDirective {
1267
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardHeaderActionsDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1268
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.15", type: ClxCardHeaderActionsDirective, isStandalone: true, selector: "[clxCardHeaderActions]", ngImport: i0 });
1269
+ }
1270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardHeaderActionsDirective, decorators: [{
1271
+ type: Directive,
1272
+ args: [{ selector: '[clxCardHeaderActions]', standalone: true }]
1273
+ }] });
1274
+
1239
1275
  class ClxCardBodyDirective {
1240
1276
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardBodyDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
1241
1277
  static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.2.15", type: ClxCardBodyDirective, isStandalone: true, selector: "[clxCardBody]", providers: [
@@ -1290,11 +1326,21 @@ class ClxCardComponent {
1290
1326
  shadow = input(undefined, ...(ngDevMode ? [{ debugName: "shadow" }] : /* istanbul ignore next */ []));
1291
1327
  hover = input(false, ...(ngDevMode ? [{ debugName: "hover" }] : /* istanbul ignore next */ []));
1292
1328
  disabled = input(false, ...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
1329
+ /** Auto-generated header icon (Material Symbols name) — shown in a rounded primary-subtle
1330
+ * square next to headerTitle. Ignored when a manual [clxCardHeader] block is projected. */
1331
+ icon = input(undefined, ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
1332
+ /** Auto-generated header title — set this (without projecting [clxCardHeader]) to get the
1333
+ * standard icon+title(+subtitle) card header used across the app, instead of hand-rolling it. */
1334
+ headerTitle = input(undefined, ...(ngDevMode ? [{ debugName: "headerTitle" }] : /* istanbul ignore next */ []));
1335
+ /** Optional secondary line under headerTitle. */
1336
+ headerSubtitle = input(undefined, ...(ngDevMode ? [{ debugName: "headerSubtitle" }] : /* istanbul ignore next */ []));
1293
1337
  _color = computed(() => this.color() ?? this._themeSvc.config().primaryColor, ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
1294
1338
  _headerSlot = contentChild(ClxCardHeaderDirective, ...(ngDevMode ? [{ debugName: "_headerSlot" }] : /* istanbul ignore next */ []));
1339
+ _headerActionsSlot = contentChild(ClxCardHeaderActionsDirective, ...(ngDevMode ? [{ debugName: "_headerActionsSlot" }] : /* istanbul ignore next */ []));
1295
1340
  _bodySlot = contentChild(ClxCardBodyDirective, ...(ngDevMode ? [{ debugName: "_bodySlot" }] : /* istanbul ignore next */ []));
1296
1341
  _footerSlot = contentChild(ClxCardFooterDirective, ...(ngDevMode ? [{ debugName: "_footerSlot" }] : /* istanbul ignore next */ []));
1297
1342
  _hasHeader = computed(() => !!this._headerSlot(), ...(ngDevMode ? [{ debugName: "_hasHeader" }] : /* istanbul ignore next */ []));
1343
+ _hasHeaderActions = computed(() => !!this._headerActionsSlot(), ...(ngDevMode ? [{ debugName: "_hasHeaderActions" }] : /* istanbul ignore next */ []));
1298
1344
  _hasBody = computed(() => !!this._bodySlot(), ...(ngDevMode ? [{ debugName: "_hasBody" }] : /* istanbul ignore next */ []));
1299
1345
  _hasFooter = computed(() => !!this._footerSlot(), ...(ngDevMode ? [{ debugName: "_hasFooter" }] : /* istanbul ignore next */ []));
1300
1346
  /** Blocks interaction only — applied to body/footer so the header (e.g. an enable/disable switch) stays clickable. */
@@ -1326,11 +1372,30 @@ class ClxCardComponent {
1326
1372
  return `flex flex-col ${resolveContainerRadius(this._themeSvc.config().borderRadius)} overflow-hidden w-full ${variantClass} ${hover} ${disabledCls}`.trim();
1327
1373
  }, ...(ngDevMode ? [{ debugName: "_hostClass" }] : /* istanbul ignore next */ []));
1328
1374
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1329
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxCardComponent, isStandalone: true, selector: "clx-card", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, shadow: { classPropertyName: "shadow", publicName: "shadow", isSignal: true, isRequired: false, transformFunction: null }, hover: { classPropertyName: "hover", publicName: "hover", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_hostClass()", "attr.aria-disabled": "disabled() || null" } }, queries: [{ propertyName: "_headerSlot", first: true, predicate: ClxCardHeaderDirective, descendants: true, isSignal: true }, { propertyName: "_bodySlot", first: true, predicate: ClxCardBodyDirective, descendants: true, isSignal: true }, { propertyName: "_footerSlot", first: true, predicate: ClxCardFooterDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
1375
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxCardComponent, isStandalone: true, selector: "clx-card", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, shadow: { classPropertyName: "shadow", publicName: "shadow", isSignal: true, isRequired: false, transformFunction: null }, hover: { classPropertyName: "hover", publicName: "hover", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, headerTitle: { classPropertyName: "headerTitle", publicName: "headerTitle", isSignal: true, isRequired: false, transformFunction: null }, headerSubtitle: { classPropertyName: "headerSubtitle", publicName: "headerSubtitle", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "class": "_hostClass()", "attr.aria-disabled": "disabled() || null" } }, queries: [{ propertyName: "_headerSlot", first: true, predicate: ClxCardHeaderDirective, descendants: true, isSignal: true }, { propertyName: "_headerActionsSlot", first: true, predicate: ClxCardHeaderActionsDirective, descendants: true, isSignal: true }, { propertyName: "_bodySlot", first: true, predicate: ClxCardBodyDirective, descendants: true, isSignal: true }, { propertyName: "_footerSlot", first: true, predicate: ClxCardFooterDirective, descendants: true, isSignal: true }], ngImport: i0, template: `
1330
1376
  @if (_hasHeader()) {
1331
1377
  <div class="clx-card-header flex items-center justify-between gap-3 px-4 py-3 border-b border-clx-border-soft">
1332
1378
  <ng-content select="[clxCardHeader]" />
1333
1379
  </div>
1380
+ } @else if (headerTitle()) {
1381
+ <div class="clx-card-header flex w-full items-center justify-between gap-3 px-4 py-3 border-b border-clx-border-soft">
1382
+ <div class="flex items-center gap-3 min-w-0">
1383
+ @if (icon()) {
1384
+ <div class="w-8 h-8 rounded-lg bg-clx-primary-subtle flex items-center justify-center shrink-0">
1385
+ <span clx-icon [name]="icon()!" size="sm" class="text-clx-primary"></span>
1386
+ </div>
1387
+ }
1388
+ <div class="flex flex-col min-w-0">
1389
+ <p class="text-sm font-(--clx-font-weight-emphasis) text-clx-text-label leading-tight truncate">{{ headerTitle() }}</p>
1390
+ @if (headerSubtitle()) {
1391
+ <p class="text-xs text-clx-text-muted leading-tight truncate">{{ headerSubtitle() }}</p>
1392
+ }
1393
+ </div>
1394
+ </div>
1395
+ @if (_hasHeaderActions()) {
1396
+ <ng-content select="[clxCardHeaderActions]" />
1397
+ }
1398
+ </div>
1334
1399
  }
1335
1400
 
1336
1401
  <div [class]="_bodyClass()">
@@ -1345,14 +1410,14 @@ class ClxCardComponent {
1345
1410
  <ng-content select="[clxCardFooter]" />
1346
1411
  </div>
1347
1412
  }
1348
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1413
+ `, isInline: true, dependencies: [{ kind: "component", type: ClxIconComponent, selector: "span[clx-icon]", inputs: ["name", "size", "color", "fill"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
1349
1414
  }
1350
1415
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxCardComponent, decorators: [{
1351
1416
  type: Component,
1352
1417
  args: [{
1353
1418
  selector: 'clx-card',
1354
1419
  standalone: true,
1355
- imports: [],
1420
+ imports: [ClxIconComponent],
1356
1421
  encapsulation: ViewEncapsulation.None,
1357
1422
  changeDetection: ChangeDetectionStrategy.OnPush,
1358
1423
  host: {
@@ -1364,6 +1429,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
1364
1429
  <div class="clx-card-header flex items-center justify-between gap-3 px-4 py-3 border-b border-clx-border-soft">
1365
1430
  <ng-content select="[clxCardHeader]" />
1366
1431
  </div>
1432
+ } @else if (headerTitle()) {
1433
+ <div class="clx-card-header flex w-full items-center justify-between gap-3 px-4 py-3 border-b border-clx-border-soft">
1434
+ <div class="flex items-center gap-3 min-w-0">
1435
+ @if (icon()) {
1436
+ <div class="w-8 h-8 rounded-lg bg-clx-primary-subtle flex items-center justify-center shrink-0">
1437
+ <span clx-icon [name]="icon()!" size="sm" class="text-clx-primary"></span>
1438
+ </div>
1439
+ }
1440
+ <div class="flex flex-col min-w-0">
1441
+ <p class="text-sm font-(--clx-font-weight-emphasis) text-clx-text-label leading-tight truncate">{{ headerTitle() }}</p>
1442
+ @if (headerSubtitle()) {
1443
+ <p class="text-xs text-clx-text-muted leading-tight truncate">{{ headerSubtitle() }}</p>
1444
+ }
1445
+ </div>
1446
+ </div>
1447
+ @if (_hasHeaderActions()) {
1448
+ <ng-content select="[clxCardHeaderActions]" />
1449
+ }
1450
+ </div>
1367
1451
  }
1368
1452
 
1369
1453
  <div [class]="_bodyClass()">
@@ -1380,7 +1464,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
1380
1464
  }
1381
1465
  `,
1382
1466
  }]
1383
- }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], shadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "shadow", required: false }] }], hover: [{ type: i0.Input, args: [{ isSignal: true, alias: "hover", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], _headerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardHeaderDirective), { isSignal: true }] }], _bodySlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardBodyDirective), { isSignal: true }] }], _footerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardFooterDirective), { isSignal: true }] }] } });
1467
+ }], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], shadow: [{ type: i0.Input, args: [{ isSignal: true, alias: "shadow", required: false }] }], hover: [{ type: i0.Input, args: [{ isSignal: true, alias: "hover", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], headerTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerTitle", required: false }] }], headerSubtitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "headerSubtitle", required: false }] }], _headerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardHeaderDirective), { isSignal: true }] }], _headerActionsSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardHeaderActionsDirective), { isSignal: true }] }], _bodySlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardBodyDirective), { isSignal: true }] }], _footerSlot: [{ type: i0.ContentChild, args: [i0.forwardRef(() => ClxCardFooterDirective), { isSignal: true }] }] } });
1384
1468
 
1385
1469
  const CLX_LIST_CONTEXT = new InjectionToken('CLX_LIST_CONTEXT');
1386
1470
  // ── Variant maps ──────────────────────────────────────────────────────────────
@@ -9537,10 +9621,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9537
9621
  }], propDecorators: { logo: [{ type: i0.Input, args: [{ isSignal: true, alias: "logo", required: true }] }], name: [{ type: i0.Input, args: [{ isSignal: true, alias: "name", required: true }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }] } });
9538
9622
 
9539
9623
  // ── Item geometry ──────────────────────────────────────────────────────────────
9540
- const NAV_ITEM_BASE = 'flex items-center gap-3 w-full text-sm font-medium cursor-pointer select-none';
9624
+ const NAV_ITEM_BASE = 'flex items-center gap-3 w-full cursor-pointer select-none';
9541
9625
  const NAV_ITEM_L1 = 'px-6 py-3';
9542
9626
  const NAV_ITEM_L2 = 'pl-4 pr-3 py-2';
9543
9627
  const NAV_ITEM_IDLE = 'text-clx-text-subtle';
9628
+ // ── Nav zone size → Tailwind text-size class ─────────────────────────────────
9629
+ const NAV_ZONE_SIZE_CLASS = {
9630
+ xs: 'text-xs',
9631
+ sm: 'text-sm',
9632
+ md: 'text-base',
9633
+ };
9634
+ // ── Nav weight token → CSS var-backed arbitrary Tailwind class ───────────────
9635
+ const NAV_ZONE_WEIGHT_CLASS = {
9636
+ label: 'font-(--clx-font-weight-label)',
9637
+ emphasis: 'font-(--clx-font-weight-emphasis)',
9638
+ };
9639
+ /** Resolves a nav zone's configured size + idle weight (its base, theme-configured weight). */
9640
+ function resolveNavZoneIdle(style) {
9641
+ return `${NAV_ZONE_SIZE_CLASS[style.size]} ${NAV_ZONE_WEIGHT_CLASS[style.weight]}`;
9642
+ }
9643
+ /** Resolves a nav zone's configured size + the active/selected state's emphasis weight —
9644
+ * the selected item always reads one step heavier than its configured idle weight. */
9645
+ function resolveNavZoneActive(style) {
9646
+ return `${NAV_ZONE_SIZE_CLASS[style.size]} ${NAV_ZONE_WEIGHT_CLASS.emphasis}`;
9647
+ }
9544
9648
  // ── Children container ─────────────────────────────────────────────────────────
9545
9649
  const NAV_CHILDREN_WRAPPER = 'grid transition-[grid-template-rows] duration-300 ease-in-out';
9546
9650
  const NAV_CHILDREN_INNER = 'overflow-hidden';
@@ -9550,8 +9654,14 @@ class ClxMenuComponent {
9550
9654
  _themeSvc = inject(ClxThemeService);
9551
9655
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
9552
9656
  icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
9553
- color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
9554
- _color = computed(() => this.color() ?? this._themeSvc.sidebarMenuColor(), ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
9657
+ /** Per-instance override any field left unset falls back to the theme's sidebarMenu style */
9658
+ style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
9659
+ _resolved = computed(() => {
9660
+ const base = this._themeSvc.sidebarMenuStyle();
9661
+ const o = this.style();
9662
+ return { color: o?.color ?? base.color, size: o?.size ?? base.size, weight: o?.weight ?? base.weight };
9663
+ }, ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
9664
+ _color = computed(() => this._resolved().color, ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
9555
9665
  collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
9556
9666
  active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
9557
9667
  routerLink = input('', ...(ngDevMode ? [{ debugName: "routerLink" }] : /* istanbul ignore next */ []));
@@ -9578,14 +9688,14 @@ class ClxMenuComponent {
9578
9688
  _iconCls = computed(() => resolveColor(this._color()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : /* istanbul ignore next */ []));
9579
9689
  _buttonCls(isActive) {
9580
9690
  const geom = this.collapsed() ? 'w-full py-3 px-0 justify-center' : NAV_ITEM_L1;
9581
- const base = `${NAV_ITEM_BASE} ${geom}`;
9582
9691
  const t = resolveColor(this._color());
9583
9692
  if (isActive) {
9693
+ const base = `${NAV_ITEM_BASE} ${resolveNavZoneActive(this._resolved())} ${geom}`;
9584
9694
  if (this.collapsed())
9585
- return `${base} ${t.textSubtle} font-semibold`;
9586
- return `${base} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px]`;
9695
+ return `${base} ${t.textSubtle}`;
9696
+ return `${base} ${t.textSubtle} border-l-2 ${t.borderLight} !pl-[22px]`;
9587
9697
  }
9588
- return `${base} ${t.hoverBgMuted}`;
9698
+ return `${NAV_ITEM_BASE} ${resolveNavZoneIdle(this._resolved())} ${geom} ${t.hoverBgMuted}`;
9589
9699
  }
9590
9700
  NAV_CHILDREN_WRAPPER = NAV_CHILDREN_WRAPPER;
9591
9701
  NAV_CHILDREN_INNER = NAV_CHILDREN_INNER;
@@ -9594,7 +9704,7 @@ class ClxMenuComponent {
9594
9704
  this._isExpanded.update(v => !v);
9595
9705
  }
9596
9706
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxMenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9597
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxMenuComponent, isStandalone: true, selector: "clx-menu", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, viewQueries: [{ propertyName: "_rla", first: true, predicate: RouterLinkActive, descendants: true }], ngImport: i0, template: `
9707
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxMenuComponent, isStandalone: true, selector: "clx-menu", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, viewQueries: [{ propertyName: "_rla", first: true, predicate: RouterLinkActive, descendants: true }], ngImport: i0, template: `
9598
9708
  @if (routerLink()) {
9599
9709
  <a
9600
9710
  [routerLink]="routerLink()"
@@ -9717,7 +9827,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9717
9827
  changeDetection: ChangeDetectionStrategy.OnPush,
9718
9828
  host: { class: 'block' },
9719
9829
  }]
9720
- }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], _rla: [{
9830
+ }], ctorParameters: () => [], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], _rla: [{
9721
9831
  type: ViewChild,
9722
9832
  args: [RouterLinkActive]
9723
9833
  }] } });
@@ -9727,32 +9837,38 @@ class ClxMenuItemComponent {
9727
9837
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
9728
9838
  icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
9729
9839
  active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
9730
- color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
9840
+ /** Per-instance override any field left unset falls back to the theme's sidebarItem style */
9841
+ style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
9731
9842
  nested = input(false, ...(ngDevMode ? [{ debugName: "nested" }] : /* istanbul ignore next */ []));
9732
9843
  collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
9733
9844
  routerLink = input('', ...(ngDevMode ? [{ debugName: "routerLink" }] : /* istanbul ignore next */ []));
9734
9845
  routerLinkActiveOptions = input({ exact: false }, ...(ngDevMode ? [{ debugName: "routerLinkActiveOptions" }] : /* istanbul ignore next */ []));
9735
9846
  itemClick = output();
9736
- _resolvedColor = computed(() => this.color() ?? this._themeSvc.sidebarItemColor(), ...(ngDevMode ? [{ debugName: "_resolvedColor" }] : /* istanbul ignore next */ []));
9847
+ _resolved = computed(() => {
9848
+ const base = this._themeSvc.sidebarItemStyle();
9849
+ const o = this.style();
9850
+ return { color: o?.color ?? base.color, size: o?.size ?? base.size, weight: o?.weight ?? base.weight };
9851
+ }, ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
9737
9852
  _geom = computed(() => {
9738
9853
  if (this.collapsed())
9739
9854
  return 'w-full py-3 px-0 justify-center';
9740
9855
  return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;
9741
9856
  }, ...(ngDevMode ? [{ debugName: "_geom" }] : /* istanbul ignore next */ []));
9742
- _iconCls = computed(() => resolveColor(this._resolvedColor()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : /* istanbul ignore next */ []));
9857
+ _iconCls = computed(() => resolveColor(this._resolved().color).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : /* istanbul ignore next */ []));
9743
9858
  _idleCls = computed(() => {
9744
- const hover = resolveColor(this._resolvedColor()).hoverBgMuted;
9745
- return `${NAV_ITEM_BASE} ${this._geom()} ${hover}`;
9859
+ const hover = resolveColor(this._resolved().color).hoverBgMuted;
9860
+ return `${NAV_ITEM_BASE} ${resolveNavZoneIdle(this._resolved())} ${this._geom()} ${hover}`;
9746
9861
  }, ...(ngDevMode ? [{ debugName: "_idleCls" }] : /* istanbul ignore next */ []));
9747
9862
  _activeCls = computed(() => {
9748
- const t = resolveColor(this._resolvedColor());
9863
+ const t = resolveColor(this._resolved().color);
9864
+ const typography = resolveNavZoneActive(this._resolved());
9749
9865
  if (this.collapsed()) {
9750
- return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold`;
9866
+ return `${NAV_ITEM_BASE} ${typography} ${this._geom()} ${t.textSubtle}`;
9751
9867
  }
9752
- return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle} font-semibold border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;
9868
+ return `${NAV_ITEM_BASE} ${typography} ${this._geom()} ${t.textSubtle} border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;
9753
9869
  }, ...(ngDevMode ? [{ debugName: "_activeCls" }] : /* istanbul ignore next */ []));
9754
9870
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxMenuItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9755
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxMenuItemComponent, isStandalone: true, selector: "clx-menu-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, color: { classPropertyName: "color", publicName: "color", isSignal: true, isRequired: false, transformFunction: null }, nested: { classPropertyName: "nested", publicName: "nested", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { classAttribute: "block" }, ngImport: i0, template: `
9871
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.15", type: ClxMenuItemComponent, isStandalone: true, selector: "clx-menu-item", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: true, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null }, nested: { classPropertyName: "nested", publicName: "nested", isSignal: true, isRequired: false, transformFunction: null }, collapsed: { classPropertyName: "collapsed", publicName: "collapsed", isSignal: true, isRequired: false, transformFunction: null }, routerLink: { classPropertyName: "routerLink", publicName: "routerLink", isSignal: true, isRequired: false, transformFunction: null }, routerLinkActiveOptions: { classPropertyName: "routerLinkActiveOptions", publicName: "routerLinkActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { itemClick: "itemClick" }, host: { classAttribute: "block" }, ngImport: i0, template: `
9756
9872
  @if (routerLink()) {
9757
9873
  <a
9758
9874
  [routerLink]="routerLink()"
@@ -9825,20 +9941,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9825
9941
  changeDetection: ChangeDetectionStrategy.OnPush,
9826
9942
  host: { class: 'block' },
9827
9943
  }]
9828
- }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], color: [{ type: i0.Input, args: [{ isSignal: true, alias: "color", required: false }] }], nested: [{ type: i0.Input, args: [{ isSignal: true, alias: "nested", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
9944
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }], nested: [{ type: i0.Input, args: [{ isSignal: true, alias: "nested", required: false }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], routerLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLink", required: false }] }], routerLinkActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerLinkActiveOptions", required: false }] }], itemClick: [{ type: i0.Output, args: ["itemClick"] }] } });
9829
9945
 
9830
9946
  class ClxNavGroupComponent {
9947
+ _themeSvc = inject(ClxThemeService);
9831
9948
  label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
9832
9949
  collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
9833
- color = input(undefined, ...(ngDevMode ? [{ debugName: "color" }] : /* istanbul ignore next */ []));
9834
- labelClass = computed(() => {
9835
- const c = this.color();
9836
- return c ? resolveColor(c).textSubtle : 'text-clx-text-subtle';
9837
- }, ...(ngDevMode ? [{ debugName: "labelClass" }] : /* istanbul ignore next */ []));
9950
+ /** Per-instance override any field left unset falls back to the theme's sidebarGroup style */
9951
+ style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
9952
+ _resolved = computed(() => {
9953
+ const base = this._themeSvc.sidebarGroupStyle();
9954
+ const o = this.style();
9955
+ return { color: o?.color ?? base.color, size: o?.size ?? base.size, weight: o?.weight ?? base.weight };
9956
+ }, ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
9957
+ labelClass = computed(() => `${resolveColor(this._resolved().color).textSubtle} ${resolveNavZoneIdle(this._resolved())}`, ...(ngDevMode ? [{ debugName: "labelClass" }] : /* istanbul ignore next */ []));
9838
9958
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.15", ngImport: i0, type: ClxNavGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
9839
- 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: `
9959
+ 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 }, style: { classPropertyName: "style", publicName: "style", isSignal: true, isRequired: false, transformFunction: null } }, host: { classAttribute: "block" }, ngImport: i0, template: `
9840
9960
  @if (!collapsed()) {
9841
- <span class="block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
9961
+ <span class="block px-6 pt-5 pb-1 uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
9842
9962
  } @else {
9843
9963
  <span class="flex items-center justify-center w-full py-3">
9844
9964
  <span class="w-1.5 h-1.5 rounded-full bg-clx-border"></span>
@@ -9853,7 +9973,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9853
9973
  standalone: true,
9854
9974
  template: `
9855
9975
  @if (!collapsed()) {
9856
- <span class="block px-6 pt-5 pb-1 text-[10px] font-bold uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
9976
+ <span class="block px-6 pt-5 pb-1 uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
9857
9977
  } @else {
9858
9978
  <span class="flex items-center justify-center w-full py-3">
9859
9979
  <span class="w-1.5 h-1.5 rounded-full bg-clx-border"></span>
@@ -9864,7 +9984,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
9864
9984
  changeDetection: ChangeDetectionStrategy.OnPush,
9865
9985
  host: { class: 'block' },
9866
9986
  }]
9867
- }], 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 }] }] } });
9987
+ }], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }], style: [{ type: i0.Input, args: [{ isSignal: true, alias: "style", required: false }] }] } });
9868
9988
 
9869
9989
  class ClxProfileComponent {
9870
9990
  // ── Inputs ──────────────────────────────────────────────────────────────────
@@ -15596,5 +15716,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
15596
15716
  * Generated bundle index. Do not edit.
15597
15717
  */
15598
15718
 
15599
- 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, ClxCheckboxComponent, ClxColorPickerComponent, ClxColumnDefDirective, ClxDateRangePickerComponent, ClxDatepickerComponent, ClxDrawerComponent, ClxDrawerService, ClxEditorComponent, ClxEditorLinkModalComponent, ClxFabComponent, 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 };
15719
+ 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_FONT_WEIGHT_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, ClxCardHeaderActionsDirective, ClxCardHeaderDirective, ClxCarouselComponent, ClxCarouselDirective, ClxCartComponent, ClxCartSummaryDrawer, ClxCellDirective, ClxCheckboxComponent, ClxColorPickerComponent, ClxColumnDefDirective, ClxDateRangePickerComponent, ClxDatepickerComponent, ClxDrawerComponent, ClxDrawerService, ClxEditorComponent, ClxEditorLinkModalComponent, ClxFabComponent, 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 };
15600
15720
  //# sourceMappingURL=codexly-ui.mjs.map