codexly-ui 0.6.10 → 0.6.12
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/assets/styles/_fonts.css +2 -2
- package/assets/styles/_theme.css +7 -1
- package/fesm2022/codexly-ui.mjs +98 -37
- package/fesm2022/codexly-ui.mjs.map +1 -1
- package/package.json +1 -1
- package/types/codexly-ui.d.ts +95 -64
package/assets/styles/_fonts.css
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
/* Fonts are loaded dynamically by ClxThemeService via <link> injection.
|
|
2
|
-
|
|
3
|
-
@import url('https://fonts.googleapis.com/css2?family=
|
|
2
|
+
DM Sans is the default — preloaded here so the app renders before JS executes. */
|
|
3
|
+
@import url('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');
|
package/assets/styles/_theme.css
CHANGED
|
@@ -5,7 +5,13 @@
|
|
|
5
5
|
|
|
6
6
|
/* ── Font body variable (overridden dynamically by ClxThemeService) ───────── */
|
|
7
7
|
:root {
|
|
8
|
-
--clx-font-body: '
|
|
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) ────────────────────────────────────────────────── */
|
package/fesm2022/codexly-ui.mjs
CHANGED
|
@@ -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',
|
|
@@ -416,7 +421,8 @@ const CLX_THEME_DEFAULTS = {
|
|
|
416
421
|
borderRadius: 'md',
|
|
417
422
|
defaultSize: 'md',
|
|
418
423
|
defaultShape: 'rounded',
|
|
419
|
-
fontFamily: '
|
|
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
|
-
/**
|
|
549
|
-
|
|
550
|
-
/**
|
|
551
|
-
|
|
552
|
-
/**
|
|
553
|
-
|
|
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));
|
|
@@ -601,7 +619,7 @@ class ClxThemeService {
|
|
|
601
619
|
const { color } = parseColorInput(input);
|
|
602
620
|
const shades = dark
|
|
603
621
|
? { text: 100, label: 300, muted: 400, subtle: 500, faint: 600 }
|
|
604
|
-
: { text: 900, label: 600, muted: 500, subtle:
|
|
622
|
+
: { text: 900, label: 600, muted: 500, subtle: 500, faint: 300 };
|
|
605
623
|
document.documentElement.style.setProperty('--clx-text', resolvePaletteHex(color, shades.text));
|
|
606
624
|
document.documentElement.style.setProperty('--clx-text-label', resolvePaletteHex(color, shades.label));
|
|
607
625
|
document.documentElement.style.setProperty('--clx-text-muted', resolvePaletteHex(color, shades.muted));
|
|
@@ -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';
|
|
@@ -9537,10 +9562,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
9537
9562
|
}], 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
9563
|
|
|
9539
9564
|
// ── Item geometry ──────────────────────────────────────────────────────────────
|
|
9540
|
-
const NAV_ITEM_BASE = 'flex items-center gap-3 w-full
|
|
9565
|
+
const NAV_ITEM_BASE = 'flex items-center gap-3 w-full cursor-pointer select-none';
|
|
9541
9566
|
const NAV_ITEM_L1 = 'px-6 py-3';
|
|
9542
9567
|
const NAV_ITEM_L2 = 'pl-4 pr-3 py-2';
|
|
9543
9568
|
const NAV_ITEM_IDLE = 'text-clx-text-subtle';
|
|
9569
|
+
// ── Nav zone size → Tailwind text-size class ─────────────────────────────────
|
|
9570
|
+
const NAV_ZONE_SIZE_CLASS = {
|
|
9571
|
+
xs: 'text-xs',
|
|
9572
|
+
sm: 'text-sm',
|
|
9573
|
+
md: 'text-base',
|
|
9574
|
+
};
|
|
9575
|
+
// ── Nav weight token → CSS var-backed arbitrary Tailwind class ───────────────
|
|
9576
|
+
const NAV_ZONE_WEIGHT_CLASS = {
|
|
9577
|
+
label: 'font-[var(--clx-font-weight-label)]',
|
|
9578
|
+
emphasis: 'font-[var(--clx-font-weight-emphasis)]',
|
|
9579
|
+
};
|
|
9580
|
+
/** Resolves a nav zone's configured size + idle weight (its base, theme-configured weight). */
|
|
9581
|
+
function resolveNavZoneIdle(style) {
|
|
9582
|
+
return `${NAV_ZONE_SIZE_CLASS[style.size]} ${NAV_ZONE_WEIGHT_CLASS[style.weight]}`;
|
|
9583
|
+
}
|
|
9584
|
+
/** Resolves a nav zone's configured size + the active/selected state's emphasis weight —
|
|
9585
|
+
* the selected item always reads one step heavier than its configured idle weight. */
|
|
9586
|
+
function resolveNavZoneActive(style) {
|
|
9587
|
+
return `${NAV_ZONE_SIZE_CLASS[style.size]} ${NAV_ZONE_WEIGHT_CLASS.emphasis}`;
|
|
9588
|
+
}
|
|
9544
9589
|
// ── Children container ─────────────────────────────────────────────────────────
|
|
9545
9590
|
const NAV_CHILDREN_WRAPPER = 'grid transition-[grid-template-rows] duration-300 ease-in-out';
|
|
9546
9591
|
const NAV_CHILDREN_INNER = 'overflow-hidden';
|
|
@@ -9550,8 +9595,14 @@ class ClxMenuComponent {
|
|
|
9550
9595
|
_themeSvc = inject(ClxThemeService);
|
|
9551
9596
|
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9552
9597
|
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
9553
|
-
|
|
9554
|
-
|
|
9598
|
+
/** Per-instance override — any field left unset falls back to the theme's sidebarMenu style */
|
|
9599
|
+
style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
|
|
9600
|
+
_resolved = computed(() => {
|
|
9601
|
+
const base = this._themeSvc.sidebarMenuStyle();
|
|
9602
|
+
const o = this.style();
|
|
9603
|
+
return { color: o?.color ?? base.color, size: o?.size ?? base.size, weight: o?.weight ?? base.weight };
|
|
9604
|
+
}, ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
|
|
9605
|
+
_color = computed(() => this._resolved().color, ...(ngDevMode ? [{ debugName: "_color" }] : /* istanbul ignore next */ []));
|
|
9555
9606
|
collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
9556
9607
|
active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
9557
9608
|
routerLink = input('', ...(ngDevMode ? [{ debugName: "routerLink" }] : /* istanbul ignore next */ []));
|
|
@@ -9578,14 +9629,14 @@ class ClxMenuComponent {
|
|
|
9578
9629
|
_iconCls = computed(() => resolveColor(this._color()).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : /* istanbul ignore next */ []));
|
|
9579
9630
|
_buttonCls(isActive) {
|
|
9580
9631
|
const geom = this.collapsed() ? 'w-full py-3 px-0 justify-center' : NAV_ITEM_L1;
|
|
9581
|
-
const base = `${NAV_ITEM_BASE} ${geom}`;
|
|
9582
9632
|
const t = resolveColor(this._color());
|
|
9583
9633
|
if (isActive) {
|
|
9634
|
+
const base = `${NAV_ITEM_BASE} ${resolveNavZoneActive(this._resolved())} ${geom}`;
|
|
9584
9635
|
if (this.collapsed())
|
|
9585
|
-
return `${base} ${t.textSubtle}
|
|
9586
|
-
return `${base} ${t.textSubtle}
|
|
9636
|
+
return `${base} ${t.textSubtle}`;
|
|
9637
|
+
return `${base} ${t.textSubtle} border-l-2 ${t.borderLight} !pl-[22px]`;
|
|
9587
9638
|
}
|
|
9588
|
-
return `${
|
|
9639
|
+
return `${NAV_ITEM_BASE} ${resolveNavZoneIdle(this._resolved())} ${geom} ${t.hoverBgMuted}`;
|
|
9589
9640
|
}
|
|
9590
9641
|
NAV_CHILDREN_WRAPPER = NAV_CHILDREN_WRAPPER;
|
|
9591
9642
|
NAV_CHILDREN_INNER = NAV_CHILDREN_INNER;
|
|
@@ -9594,7 +9645,7 @@ class ClxMenuComponent {
|
|
|
9594
9645
|
this._isExpanded.update(v => !v);
|
|
9595
9646
|
}
|
|
9596
9647
|
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 },
|
|
9648
|
+
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
9649
|
@if (routerLink()) {
|
|
9599
9650
|
<a
|
|
9600
9651
|
[routerLink]="routerLink()"
|
|
@@ -9717,7 +9768,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
9717
9768
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
9718
9769
|
host: { class: 'block' },
|
|
9719
9770
|
}]
|
|
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 }] }],
|
|
9771
|
+
}], 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
9772
|
type: ViewChild,
|
|
9722
9773
|
args: [RouterLinkActive]
|
|
9723
9774
|
}] } });
|
|
@@ -9727,32 +9778,38 @@ class ClxMenuItemComponent {
|
|
|
9727
9778
|
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9728
9779
|
icon = input('', ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
9729
9780
|
active = input(false, ...(ngDevMode ? [{ debugName: "active" }] : /* istanbul ignore next */ []));
|
|
9730
|
-
|
|
9781
|
+
/** Per-instance override — any field left unset falls back to the theme's sidebarItem style */
|
|
9782
|
+
style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
|
|
9731
9783
|
nested = input(false, ...(ngDevMode ? [{ debugName: "nested" }] : /* istanbul ignore next */ []));
|
|
9732
9784
|
collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
9733
9785
|
routerLink = input('', ...(ngDevMode ? [{ debugName: "routerLink" }] : /* istanbul ignore next */ []));
|
|
9734
9786
|
routerLinkActiveOptions = input({ exact: false }, ...(ngDevMode ? [{ debugName: "routerLinkActiveOptions" }] : /* istanbul ignore next */ []));
|
|
9735
9787
|
itemClick = output();
|
|
9736
|
-
|
|
9788
|
+
_resolved = computed(() => {
|
|
9789
|
+
const base = this._themeSvc.sidebarItemStyle();
|
|
9790
|
+
const o = this.style();
|
|
9791
|
+
return { color: o?.color ?? base.color, size: o?.size ?? base.size, weight: o?.weight ?? base.weight };
|
|
9792
|
+
}, ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
|
|
9737
9793
|
_geom = computed(() => {
|
|
9738
9794
|
if (this.collapsed())
|
|
9739
9795
|
return 'w-full py-3 px-0 justify-center';
|
|
9740
9796
|
return this.nested() ? NAV_ITEM_L2 : NAV_ITEM_L1;
|
|
9741
9797
|
}, ...(ngDevMode ? [{ debugName: "_geom" }] : /* istanbul ignore next */ []));
|
|
9742
|
-
_iconCls = computed(() => resolveColor(this.
|
|
9798
|
+
_iconCls = computed(() => resolveColor(this._resolved().color).textSubtle, ...(ngDevMode ? [{ debugName: "_iconCls" }] : /* istanbul ignore next */ []));
|
|
9743
9799
|
_idleCls = computed(() => {
|
|
9744
|
-
const hover = resolveColor(this.
|
|
9745
|
-
return `${NAV_ITEM_BASE} ${this._geom()} ${hover}`;
|
|
9800
|
+
const hover = resolveColor(this._resolved().color).hoverBgMuted;
|
|
9801
|
+
return `${NAV_ITEM_BASE} ${resolveNavZoneIdle(this._resolved())} ${this._geom()} ${hover}`;
|
|
9746
9802
|
}, ...(ngDevMode ? [{ debugName: "_idleCls" }] : /* istanbul ignore next */ []));
|
|
9747
9803
|
_activeCls = computed(() => {
|
|
9748
|
-
const t = resolveColor(this.
|
|
9804
|
+
const t = resolveColor(this._resolved().color);
|
|
9805
|
+
const typography = resolveNavZoneActive(this._resolved());
|
|
9749
9806
|
if (this.collapsed()) {
|
|
9750
|
-
return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle}
|
|
9807
|
+
return `${NAV_ITEM_BASE} ${typography} ${this._geom()} ${t.textSubtle}`;
|
|
9751
9808
|
}
|
|
9752
|
-
return `${NAV_ITEM_BASE} ${this._geom()} ${t.textSubtle}
|
|
9809
|
+
return `${NAV_ITEM_BASE} ${typography} ${this._geom()} ${t.textSubtle} border-l-2 ${t.borderLight} !pl-[22px] ${t.hoverBgMuted}`;
|
|
9753
9810
|
}, ...(ngDevMode ? [{ debugName: "_activeCls" }] : /* istanbul ignore next */ []));
|
|
9754
9811
|
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 },
|
|
9812
|
+
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
9813
|
@if (routerLink()) {
|
|
9757
9814
|
<a
|
|
9758
9815
|
[routerLink]="routerLink()"
|
|
@@ -9825,20 +9882,24 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
9825
9882
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
9826
9883
|
host: { class: 'block' },
|
|
9827
9884
|
}]
|
|
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 }] }],
|
|
9885
|
+
}], 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
9886
|
|
|
9830
9887
|
class ClxNavGroupComponent {
|
|
9888
|
+
_themeSvc = inject(ClxThemeService);
|
|
9831
9889
|
label = input.required(...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
9832
9890
|
collapsed = input(false, ...(ngDevMode ? [{ debugName: "collapsed" }] : /* istanbul ignore next */ []));
|
|
9833
|
-
|
|
9834
|
-
|
|
9835
|
-
|
|
9836
|
-
|
|
9837
|
-
|
|
9891
|
+
/** Per-instance override — any field left unset falls back to the theme's sidebarGroup style */
|
|
9892
|
+
style = input(undefined, ...(ngDevMode ? [{ debugName: "style" }] : /* istanbul ignore next */ []));
|
|
9893
|
+
_resolved = computed(() => {
|
|
9894
|
+
const base = this._themeSvc.sidebarGroupStyle();
|
|
9895
|
+
const o = this.style();
|
|
9896
|
+
return { color: o?.color ?? base.color, size: o?.size ?? base.size, weight: o?.weight ?? base.weight };
|
|
9897
|
+
}, ...(ngDevMode ? [{ debugName: "_resolved" }] : /* istanbul ignore next */ []));
|
|
9898
|
+
labelClass = computed(() => `${resolveColor(this._resolved().color).textSubtle} ${resolveNavZoneIdle(this._resolved())}`, ...(ngDevMode ? [{ debugName: "labelClass" }] : /* istanbul ignore next */ []));
|
|
9838
9899
|
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 },
|
|
9900
|
+
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
9901
|
@if (!collapsed()) {
|
|
9841
|
-
<span class="block px-6 pt-5 pb-1
|
|
9902
|
+
<span class="block px-6 pt-5 pb-1 uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
|
|
9842
9903
|
} @else {
|
|
9843
9904
|
<span class="flex items-center justify-center w-full py-3">
|
|
9844
9905
|
<span class="w-1.5 h-1.5 rounded-full bg-clx-border"></span>
|
|
@@ -9853,7 +9914,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
9853
9914
|
standalone: true,
|
|
9854
9915
|
template: `
|
|
9855
9916
|
@if (!collapsed()) {
|
|
9856
|
-
<span class="block px-6 pt-5 pb-1
|
|
9917
|
+
<span class="block px-6 pt-5 pb-1 uppercase tracking-widest select-none" [class]="labelClass()">{{ label() }}</span>
|
|
9857
9918
|
} @else {
|
|
9858
9919
|
<span class="flex items-center justify-center w-full py-3">
|
|
9859
9920
|
<span class="w-1.5 h-1.5 rounded-full bg-clx-border"></span>
|
|
@@ -9864,7 +9925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
9864
9925
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
9865
9926
|
host: { class: 'block' },
|
|
9866
9927
|
}]
|
|
9867
|
-
}], propDecorators: { label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: true }] }], collapsed: [{ type: i0.Input, args: [{ isSignal: true, alias: "collapsed", required: false }] }],
|
|
9928
|
+
}], 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
9929
|
|
|
9869
9930
|
class ClxProfileComponent {
|
|
9870
9931
|
// ── Inputs ──────────────────────────────────────────────────────────────────
|
|
@@ -15596,5 +15657,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.15", ngImpo
|
|
|
15596
15657
|
* Generated bundle index. Do not edit.
|
|
15597
15658
|
*/
|
|
15598
15659
|
|
|
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 };
|
|
15660
|
+
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, 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
15661
|
//# sourceMappingURL=codexly-ui.mjs.map
|