angular-visuals 0.1.0 → 0.1.1

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.
Binary file
@@ -0,0 +1,506 @@
1
+ import * as i1 from '@angular/common';
2
+ import { CommonModule, isPlatformBrowser } from '@angular/common';
3
+ import * as i0 from '@angular/core';
4
+ import { inject, input, booleanAttribute, output, signal, computed, effect, Component, ElementRef, DestroyRef, PLATFORM_ID, Renderer2, contentChild, HostListener, HostBinding, InjectionToken, makeEnvironmentProviders } from '@angular/core';
5
+ import { AvIcon } from '@av/lib/components/base/av-icon/av-icon.component';
6
+ export { AvIcon } from '@av/lib/components/base/av-icon/av-icon.component';
7
+ import { VISUALS_CONFIG as VISUALS_CONFIG$1 } from '@av/lib/core/tokens';
8
+ export { provideAngularVisuals } from '@av/lib/core/tokens';
9
+ import { ThemeService } from '@av/lib/core/services/ThemeService.service';
10
+ export { ThemeService } from '@av/lib/core/services/ThemeService.service';
11
+ import { RouterLink, RouterLinkActive } from '@angular/router';
12
+ export { AvTooltip } from '@av/lib/components/overlay/av-tooltip/av-tooltip';
13
+ export { AvTextArea } from '@av/lib/components/form/av-text-area/av-text-area.component';
14
+ export { AvFileUpload } from '@av/lib/components/form/av-file-upload/av-file-upload';
15
+ export { AvText } from '@av/lib/primitives/av-text/av-text';
16
+ export { AvSwitch } from '@av/lib/components/form/av-switch/av-switch.component';
17
+ export { AvSlider } from '@av/lib/components/form/av-slider/av-slider';
18
+ export { AvSelect } from '@av/lib/components/form/av-select/av-select.component';
19
+ export { AvInput } from '@av/lib/components/form/av-input/av-input.component';
20
+ export { AvCheckbox } from '@av/lib/components/form/av-checkbox/av-checkbox.component';
21
+ export { AvCurrencyInput } from '@av/lib/components/form/av-currency-input/av-currency-input.component';
22
+ export { AvDateTimePicker } from '@av/lib/components/form/av-date-time-picker/av-date-time-picker.component';
23
+ export { AvForm } from '@av/lib/components/form/av-form/av-form.component';
24
+ export { AvMultiSelect } from '@av/lib/components/form/av-multi-select/av-multi-select.component';
25
+ export { AvGrid } from '@av/lib/components/layout/av-grid/grid.component';
26
+ export { AvIconRegistry } from '@av/lib/core/services/IconRegistry.service';
27
+ export { AvPaginator } from '@av/lib/components/layout/av-paginator/av-paginator.component';
28
+ export { AvProgressBar, AvProgressBarCircle } from '@av/lib/components/feedback/progress-bars';
29
+ export { AvCarousel, AvCarouselItem } from '@av/lib/components/midia/carousel';
30
+ export { AvStep, AvStepper } from '@av/lib/components/nav/stepper';
31
+ export { AvTab, AvTabs } from '@av/lib/components/nav/tabs';
32
+ export { AvTable } from '@av/lib/components/layout/av-table/av-table.component';
33
+ export { AvButton } from '@av/lib/components/base/av-button/av-button.component';
34
+ export { AvBadge } from '@av/lib/components/base/av-badge/av-badge.component';
35
+
36
+ class AvDropdown {
37
+ config = inject(VISUALS_CONFIG$1);
38
+ themeService = inject(ThemeService);
39
+ badge = input(null, /* @ts-ignore */
40
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
41
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
42
+ expanded = input(undefined, { ...(ngDevMode ? { debugName: "expanded" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined ? undefined : booleanAttribute(value) });
43
+ icon = input('', /* @ts-ignore */
44
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
45
+ label = input('', /* @ts-ignore */
46
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
47
+ variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
48
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
49
+ expandedChange = output();
50
+ internalExpanded = signal(false, /* @ts-ignore */
51
+ ...(ngDevMode ? [{ debugName: "internalExpanded" }] : /* istanbul ignore next */ []));
52
+ panelId = `av-dropdown-${Math.random().toString(36).slice(2, 9)}`;
53
+ isExpanded = computed(() => this.expanded() ?? this.internalExpanded(), /* @ts-ignore */
54
+ ...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
55
+ themeVars = computed(() => {
56
+ const variant = this.variant();
57
+ const isDark = this.themeService.dark();
58
+ return {
59
+ '--av-dropdown-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,
60
+ '--av-dropdown-accent-hover': `var(--av-${variant}-${isDark ? 300 : 700})`,
61
+ '--av-dropdown-accent-soft': isDark
62
+ ? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`
63
+ : `var(--av-${variant}-50)`,
64
+ '--av-dropdown-text': 'var(--av-color-text-muted)',
65
+ '--av-dropdown-text-active': isDark ? `var(--av-${variant}-100)` : `var(--av-${variant}-800)`,
66
+ };
67
+ }, /* @ts-ignore */
68
+ ...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
69
+ constructor() {
70
+ effect(() => {
71
+ const controlledExpanded = this.expanded();
72
+ if (controlledExpanded !== undefined) {
73
+ this.internalExpanded.set(controlledExpanded);
74
+ }
75
+ });
76
+ }
77
+ toggle() {
78
+ if (this.disabled())
79
+ return;
80
+ const next = !this.isExpanded();
81
+ this.internalExpanded.set(next);
82
+ this.expandedChange.emit(next);
83
+ }
84
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component });
85
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvDropdown, isStandalone: true, selector: "av-dropdown", inputs: { badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, expanded: { classPropertyName: "expanded", publicName: "expanded", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { expandedChange: "expandedChange" }, ngImport: i0, template: "<div class=\"av-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n type=\"button\"\n class=\"av-dropdown__trigger\"\n [class.av-dropdown__trigger--active]=\"isExpanded()\"\n [disabled]=\"disabled()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"isExpanded()\"\n (click)=\"toggle()\"\n >\n @if (icon()) {\n <span class=\"av-dropdown__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-dropdown__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content select=\"[av-dropdown-label]\"></ng-content>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-dropdown__badge\">{{ badge() }}</span>\n }\n\n <span\n class=\"av-dropdown__chevron\"\n av-icon\n name=\"expand_more\"\n size=\"md\"\n [class.av-dropdown__chevron--open]=\"isExpanded()\"\n ></span>\n </button>\n\n <div\n class=\"av-dropdown__panel\"\n [id]=\"panelId\"\n [class.av-dropdown__panel--open]=\"isExpanded()\"\n [attr.aria-hidden]=\"!isExpanded()\"\n [attr.inert]=\"isExpanded() ? null : ''\"\n >\n <div class=\"av-dropdown__panel-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;min-width:0}.av-dropdown{display:grid;gap:.125rem;min-width:0}.av-dropdown__trigger{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--av-radius-md);box-sizing:border-box;color:var(--av-dropdown-text, var(--av-color-text-muted));cursor:pointer;display:flex;font:inherit;gap:.625rem;min-height:2.5rem;min-width:0;padding:.625rem .75rem;text-align:left;transition:background-color .18s ease,border-color .18s ease,color .18s ease;width:100%}.av-dropdown__trigger:hover:not(:disabled),.av-dropdown__trigger--active{background:var(--av-dropdown-accent-soft);color:var(--av-dropdown-accent-hover)}.av-dropdown__trigger--active{border-color:color-mix(in srgb,var(--av-dropdown-accent) 24%,transparent);color:var(--av-dropdown-text-active);font-weight:700}.av-dropdown__trigger:disabled{cursor:not-allowed;opacity:.52}.av-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-dropdown-accent) 24%,transparent);outline:none}.av-dropdown__icon,.av-dropdown__chevron{color:currentColor;flex:0 0 auto}.av-dropdown__label{flex:1;font-size:.875rem;line-height:1.25;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-dropdown__badge{background:var(--av-dropdown-accent);border-radius:var(--av-radius-full);color:var(--av-white);flex:0 0 auto;font-size:.6875rem;font-weight:700;line-height:1;min-width:1.25rem;padding:.25rem .375rem;text-align:center}.av-dropdown__chevron{transition:transform .18s ease}.av-dropdown__chevron--open{transform:rotate(180deg)}.av-dropdown__panel{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .2s ease,opacity .18s ease}.av-dropdown__panel--open{grid-template-rows:1fr;opacity:1}.av-dropdown__panel-inner{--av-nav-link-padding-left: 1rem;--av-nav-link-padding-y: .5rem;border-left:1px solid var(--av-color-border-soft);display:grid;gap:.125rem;margin-left:1.25rem;overflow:hidden;padding:.125rem 0 .125rem .5rem}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
86
+ }
87
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDropdown, decorators: [{
88
+ type: Component,
89
+ args: [{ imports: [CommonModule, AvIcon], selector: 'av-dropdown', template: "<div class=\"av-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n type=\"button\"\n class=\"av-dropdown__trigger\"\n [class.av-dropdown__trigger--active]=\"isExpanded()\"\n [disabled]=\"disabled()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"isExpanded()\"\n (click)=\"toggle()\"\n >\n @if (icon()) {\n <span class=\"av-dropdown__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-dropdown__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content select=\"[av-dropdown-label]\"></ng-content>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-dropdown__badge\">{{ badge() }}</span>\n }\n\n <span\n class=\"av-dropdown__chevron\"\n av-icon\n name=\"expand_more\"\n size=\"md\"\n [class.av-dropdown__chevron--open]=\"isExpanded()\"\n ></span>\n </button>\n\n <div\n class=\"av-dropdown__panel\"\n [id]=\"panelId\"\n [class.av-dropdown__panel--open]=\"isExpanded()\"\n [attr.aria-hidden]=\"!isExpanded()\"\n [attr.inert]=\"isExpanded() ? null : ''\"\n >\n <div class=\"av-dropdown__panel-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;min-width:0}.av-dropdown{display:grid;gap:.125rem;min-width:0}.av-dropdown__trigger{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--av-radius-md);box-sizing:border-box;color:var(--av-dropdown-text, var(--av-color-text-muted));cursor:pointer;display:flex;font:inherit;gap:.625rem;min-height:2.5rem;min-width:0;padding:.625rem .75rem;text-align:left;transition:background-color .18s ease,border-color .18s ease,color .18s ease;width:100%}.av-dropdown__trigger:hover:not(:disabled),.av-dropdown__trigger--active{background:var(--av-dropdown-accent-soft);color:var(--av-dropdown-accent-hover)}.av-dropdown__trigger--active{border-color:color-mix(in srgb,var(--av-dropdown-accent) 24%,transparent);color:var(--av-dropdown-text-active);font-weight:700}.av-dropdown__trigger:disabled{cursor:not-allowed;opacity:.52}.av-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-dropdown-accent) 24%,transparent);outline:none}.av-dropdown__icon,.av-dropdown__chevron{color:currentColor;flex:0 0 auto}.av-dropdown__label{flex:1;font-size:.875rem;line-height:1.25;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-dropdown__badge{background:var(--av-dropdown-accent);border-radius:var(--av-radius-full);color:var(--av-white);flex:0 0 auto;font-size:.6875rem;font-weight:700;line-height:1;min-width:1.25rem;padding:.25rem .375rem;text-align:center}.av-dropdown__chevron{transition:transform .18s ease}.av-dropdown__chevron--open{transform:rotate(180deg)}.av-dropdown__panel{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .2s ease,opacity .18s ease}.av-dropdown__panel--open{grid-template-rows:1fr;opacity:1}.av-dropdown__panel-inner{--av-nav-link-padding-left: 1rem;--av-nav-link-padding-y: .5rem;border-left:1px solid var(--av-color-border-soft);display:grid;gap:.125rem;margin-left:1.25rem;overflow:hidden;padding:.125rem 0 .125rem .5rem}\n"] }]
90
+ }], ctorParameters: () => [], propDecorators: { badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], expanded: [{ type: i0.Input, args: [{ isSignal: true, alias: "expanded", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], expandedChange: [{ type: i0.Output, args: ["expandedChange"] }] } });
91
+
92
+ class AvNavLink {
93
+ config = inject(VISUALS_CONFIG$1);
94
+ elementRef = inject((ElementRef));
95
+ themeService = inject(ThemeService);
96
+ active = input(false, { ...(ngDevMode ? { debugName: "active" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
97
+ badge = input(null, /* @ts-ignore */
98
+ ...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
99
+ description = input('', /* @ts-ignore */
100
+ ...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
101
+ disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
102
+ href = input('', /* @ts-ignore */
103
+ ...(ngDevMode ? [{ debugName: "href" }] : /* istanbul ignore next */ []));
104
+ // route can be string or link params array
105
+ route = input(null, /* @ts-ignore */
106
+ ...(ngDevMode ? [{ debugName: "route" }] : /* istanbul ignore next */ []));
107
+ icon = input('', /* @ts-ignore */
108
+ ...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
109
+ label = input('', /* @ts-ignore */
110
+ ...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
111
+ rel = input('', /* @ts-ignore */
112
+ ...(ngDevMode ? [{ debugName: "rel" }] : /* istanbul ignore next */ []));
113
+ target = input('', /* @ts-ignore */
114
+ ...(ngDevMode ? [{ debugName: "target" }] : /* istanbul ignore next */ []));
115
+ variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
116
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
117
+ // class to apply when routerLink is active
118
+ routerActiveClass = input('active', /* @ts-ignore */
119
+ ...(ngDevMode ? [{ debugName: "routerActiveClass" }] : /* istanbul ignore next */ []));
120
+ // routerLinkActive options (defaults to exact match)
121
+ routerActiveOptions = input({ exact: true }, /* @ts-ignore */
122
+ ...(ngDevMode ? [{ debugName: "routerActiveOptions" }] : /* istanbul ignore next */ []));
123
+ selected = output();
124
+ themeVars = computed(() => {
125
+ const variant = this.variant();
126
+ const isDark = this.themeService.dark();
127
+ return {
128
+ '--av-nav-link-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,
129
+ '--av-nav-link-accent-hover': `var(--av-${variant}-${isDark ? 300 : 700})`,
130
+ '--av-nav-link-accent-soft': isDark
131
+ ? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`
132
+ : `var(--av-${variant}-50)`,
133
+ '--av-nav-link-text': 'var(--av-color-text-muted)',
134
+ '--av-nav-link-text-active': isDark ? `var(--av-${variant}-100)` : `var(--av-${variant}-800)`,
135
+ };
136
+ }, /* @ts-ignore */
137
+ ...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
138
+ relValue = computed(() => {
139
+ if (this.rel())
140
+ return this.rel();
141
+ return this.target() === '_blank' ? 'noopener noreferrer' : null;
142
+ }, /* @ts-ignore */
143
+ ...(ngDevMode ? [{ debugName: "relValue" }] : /* istanbul ignore next */ []));
144
+ isExternal = computed(() => {
145
+ const h = this.href();
146
+ if (!h)
147
+ return false;
148
+ return /^(https?:)?\/\//.test(h);
149
+ }, /* @ts-ignore */
150
+ ...(ngDevMode ? [{ debugName: "isExternal" }] : /* istanbul ignore next */ []));
151
+ handleClick(event) {
152
+ if (this.disabled()) {
153
+ event.preventDefault();
154
+ event.stopPropagation();
155
+ return;
156
+ }
157
+ this.selected.emit(event);
158
+ this.elementRef.nativeElement.dispatchEvent(new CustomEvent('av-nav-link-select', {
159
+ bubbles: true,
160
+ composed: true,
161
+ detail: { source: this },
162
+ }));
163
+ }
164
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvNavLink, deps: [], target: i0.ɵɵFactoryTarget.Component });
165
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvNavLink, isStandalone: true, selector: "av-nav-link", inputs: { active: { classPropertyName: "active", publicName: "active", isSignal: true, isRequired: false, transformFunction: null }, badge: { classPropertyName: "badge", publicName: "badge", isSignal: true, isRequired: false, transformFunction: null }, description: { classPropertyName: "description", publicName: "description", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, href: { classPropertyName: "href", publicName: "href", isSignal: true, isRequired: false, transformFunction: null }, route: { classPropertyName: "route", publicName: "route", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, rel: { classPropertyName: "rel", publicName: "rel", isSignal: true, isRequired: false, transformFunction: null }, target: { classPropertyName: "target", publicName: "target", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, routerActiveClass: { classPropertyName: "routerActiveClass", publicName: "routerActiveClass", isSignal: true, isRequired: false, transformFunction: null }, routerActiveOptions: { classPropertyName: "routerActiveOptions", publicName: "routerActiveOptions", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selected: "selected" }, ngImport: i0, template: "@if (!disabled() && (route() || (href() && !isExternal()))) {\n <a\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [routerLink]=\"route() ? route() : href()\"\n [routerLinkActive]=\"routerActiveClass()\"\n [routerLinkActiveOptions]=\"routerActiveOptions()\"\n [attr.rel]=\"relValue()\"\n [attr.target]=\"target() || null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </a>\n} @else {\n @if (href() && !disabled()) {\n <a\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.href]=\"href()\"\n [attr.rel]=\"relValue()\"\n [attr.target]=\"target() || null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [class.av-nav-link--disabled]=\"disabled()\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </button>\n }\n}\n\n<ng-template #content>\n @if (icon()) {\n <span class=\"av-nav-link__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-nav-link__body\">\n @if (label()) {\n <span class=\"av-nav-link__label\">{{ label() }}</span>\n } @else {\n <span class=\"av-nav-link__label\">\n <ng-content></ng-content>\n </span>\n }\n\n @if (description()) {\n <span class=\"av-nav-link__description\">{{ description() }}</span>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-nav-link__badge\">{{ badge() }}</span>\n }\n</ng-template>\n", styles: [":host{display:block;min-width:0}.av-nav-link{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--av-radius-md);box-sizing:border-box;color:var(--av-nav-link-text, var(--av-color-text-muted));cursor:pointer;display:flex;font:inherit;gap:.625rem;min-height:2.5rem;min-width:0;padding:var(--av-nav-link-padding-y, .625rem) var(--av-nav-link-padding-x, .75rem);padding-left:var(--av-nav-link-padding-left, var(--av-nav-link-padding-x, .75rem));text-align:left;text-decoration:none;transition:background-color .18s ease,border-color .18s ease,color .18s ease,transform .18s ease;width:100%}.av-nav-link:hover:not(.av-nav-link--disabled){background:var(--av-nav-link-accent-soft);color:var(--av-nav-link-accent-hover)}.av-nav-link:active:not(.av-nav-link--disabled){transform:scale(.99)}.av-nav-link:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-nav-link-accent) 24%,transparent);outline:none}.av-nav-link--active{background:var(--av-nav-link-accent-soft);border-color:color-mix(in srgb,var(--av-nav-link-accent) 28%,transparent);color:var(--av-nav-link-text-active);font-weight:700}:host(.active) .av-nav-link{background:var(--av-nav-link-accent-soft);border-color:color-mix(in srgb,var(--av-nav-link-accent) 28%,transparent);color:var(--av-nav-link-text-active);font-weight:700}.av-nav-link--disabled{cursor:not-allowed;opacity:.52}.av-nav-link__icon{color:currentColor;flex:0 0 auto}.av-nav-link__body{display:grid;flex:1;gap:.125rem;min-width:0}.av-nav-link__label,.av-nav-link__description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-nav-link__label{font-size:.875rem;line-height:1.25}.av-nav-link__description{color:var(--av-color-text-subtle);font-size:.75rem;line-height:1.2}.av-nav-link__badge{background:var(--av-nav-link-accent);border-radius:var(--av-radius-full);color:var(--av-white);flex:0 0 auto;font-size:.6875rem;font-weight:700;line-height:1;min-width:1.25rem;padding:.25rem .375rem;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }, { kind: "directive", type: RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "info", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "browserUrl", "routerLink"] }, { kind: "directive", type: RouterLinkActive, selector: "[routerLinkActive]", inputs: ["routerLinkActiveOptions", "ariaCurrentWhenActive", "routerLinkActive"], outputs: ["isActiveChange"], exportAs: ["routerLinkActive"] }] });
166
+ }
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvNavLink, decorators: [{
168
+ type: Component,
169
+ args: [{ imports: [CommonModule, AvIcon, RouterLink, RouterLinkActive], selector: 'av-nav-link', template: "@if (!disabled() && (route() || (href() && !isExternal()))) {\n <a\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [routerLink]=\"route() ? route() : href()\"\n [routerLinkActive]=\"routerActiveClass()\"\n [routerLinkActiveOptions]=\"routerActiveOptions()\"\n [attr.rel]=\"relValue()\"\n [attr.target]=\"target() || null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </a>\n} @else {\n @if (href() && !disabled()) {\n <a\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.href]=\"href()\"\n [attr.rel]=\"relValue()\"\n [attr.target]=\"target() || null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [class.av-nav-link--disabled]=\"disabled()\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </button>\n }\n}\n\n<ng-template #content>\n @if (icon()) {\n <span class=\"av-nav-link__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-nav-link__body\">\n @if (label()) {\n <span class=\"av-nav-link__label\">{{ label() }}</span>\n } @else {\n <span class=\"av-nav-link__label\">\n <ng-content></ng-content>\n </span>\n }\n\n @if (description()) {\n <span class=\"av-nav-link__description\">{{ description() }}</span>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-nav-link__badge\">{{ badge() }}</span>\n }\n</ng-template>\n", styles: [":host{display:block;min-width:0}.av-nav-link{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--av-radius-md);box-sizing:border-box;color:var(--av-nav-link-text, var(--av-color-text-muted));cursor:pointer;display:flex;font:inherit;gap:.625rem;min-height:2.5rem;min-width:0;padding:var(--av-nav-link-padding-y, .625rem) var(--av-nav-link-padding-x, .75rem);padding-left:var(--av-nav-link-padding-left, var(--av-nav-link-padding-x, .75rem));text-align:left;text-decoration:none;transition:background-color .18s ease,border-color .18s ease,color .18s ease,transform .18s ease;width:100%}.av-nav-link:hover:not(.av-nav-link--disabled){background:var(--av-nav-link-accent-soft);color:var(--av-nav-link-accent-hover)}.av-nav-link:active:not(.av-nav-link--disabled){transform:scale(.99)}.av-nav-link:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-nav-link-accent) 24%,transparent);outline:none}.av-nav-link--active{background:var(--av-nav-link-accent-soft);border-color:color-mix(in srgb,var(--av-nav-link-accent) 28%,transparent);color:var(--av-nav-link-text-active);font-weight:700}:host(.active) .av-nav-link{background:var(--av-nav-link-accent-soft);border-color:color-mix(in srgb,var(--av-nav-link-accent) 28%,transparent);color:var(--av-nav-link-text-active);font-weight:700}.av-nav-link--disabled{cursor:not-allowed;opacity:.52}.av-nav-link__icon{color:currentColor;flex:0 0 auto}.av-nav-link__body{display:grid;flex:1;gap:.125rem;min-width:0}.av-nav-link__label,.av-nav-link__description{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-nav-link__label{font-size:.875rem;line-height:1.25}.av-nav-link__description{color:var(--av-color-text-subtle);font-size:.75rem;line-height:1.2}.av-nav-link__badge{background:var(--av-nav-link-accent);border-radius:var(--av-radius-full);color:var(--av-white);flex:0 0 auto;font-size:.6875rem;font-weight:700;line-height:1;min-width:1.25rem;padding:.25rem .375rem;text-align:center}\n"] }]
170
+ }], propDecorators: { active: [{ type: i0.Input, args: [{ isSignal: true, alias: "active", required: false }] }], badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], href: [{ type: i0.Input, args: [{ isSignal: true, alias: "href", required: false }] }], route: [{ type: i0.Input, args: [{ isSignal: true, alias: "route", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], rel: [{ type: i0.Input, args: [{ isSignal: true, alias: "rel", required: false }] }], target: [{ type: i0.Input, args: [{ isSignal: true, alias: "target", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], routerActiveClass: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerActiveClass", required: false }] }], routerActiveOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "routerActiveOptions", required: false }] }], selected: [{ type: i0.Output, args: ["selected"] }] } });
171
+
172
+ class AvSidenav {
173
+ config = inject(VISUALS_CONFIG$1);
174
+ destroyRef = inject(DestroyRef);
175
+ platformId = inject(PLATFORM_ID);
176
+ renderer = inject(Renderer2);
177
+ themeService = inject(ThemeService);
178
+ isBrowser = isPlatformBrowser(this.platformId);
179
+ projectedToggleTrigger = contentChild('toggleTrigger', /* @ts-ignore */
180
+ ...(ngDevMode ? [{ debugName: "projectedToggleTrigger" }] : /* istanbul ignore next */ []));
181
+ drawerModeState = signal(false, /* @ts-ignore */
182
+ ...(ngDevMode ? [{ debugName: "drawerModeState" }] : /* istanbul ignore next */ []));
183
+ internalOpened = signal(true, /* @ts-ignore */
184
+ ...(ngDevMode ? [{ debugName: "internalOpened" }] : /* istanbul ignore next */ []));
185
+ missingTriggerWarned = false;
186
+ previousBodyOverflow = null;
187
+ lastMode = 'side';
188
+ ariaLabel = input('Navegação principal', /* @ts-ignore */
189
+ ...(ngDevMode ? [{ debugName: "ariaLabel" }] : /* istanbul ignore next */ []));
190
+ backdropLabel = input('Fechar navegação', /* @ts-ignore */
191
+ ...(ngDevMode ? [{ debugName: "backdropLabel" }] : /* istanbul ignore next */ []));
192
+ closeOnBackdrop = input(true, { ...(ngDevMode ? { debugName: "closeOnBackdrop" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
193
+ closeOnNavigation = input(true, { ...(ngDevMode ? { debugName: "closeOnNavigation" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
194
+ drawerBreakpoint = input(768, /* @ts-ignore */
195
+ ...(ngDevMode ? [{ debugName: "drawerBreakpoint" }] : /* istanbul ignore next */ []));
196
+ opened = input(undefined, { ...(ngDevMode ? { debugName: "opened" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined ? undefined : booleanAttribute(value) });
197
+ toggleable = input(false, { ...(ngDevMode ? { debugName: "toggleable" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
198
+ toggleTrigger = input(null, /* @ts-ignore */
199
+ ...(ngDevMode ? [{ debugName: "toggleTrigger" }] : /* istanbul ignore next */ []));
200
+ variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
201
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
202
+ width = input('16rem', /* @ts-ignore */
203
+ ...(ngDevMode ? [{ debugName: "width" }] : /* istanbul ignore next */ []));
204
+ openedChange = output();
205
+ modeChange = output();
206
+ drawerMode = computed(() => this.drawerModeState(), /* @ts-ignore */
207
+ ...(ngDevMode ? [{ debugName: "drawerMode" }] : /* istanbul ignore next */ []));
208
+ isOpen = computed(() => {
209
+ if (!this.toggleable())
210
+ return true;
211
+ return this.opened() ?? this.internalOpened();
212
+ }, /* @ts-ignore */
213
+ ...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
214
+ themeVars = computed(() => {
215
+ const variant = this.variant();
216
+ const isDark = this.themeService.dark();
217
+ console.log(variant);
218
+ return {
219
+ '--av-sidenav-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,
220
+ '--av-sidenav-accent-soft': isDark
221
+ ? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`
222
+ : `var(--av-${variant}-50)`,
223
+ '--av-sidenav-border': 'var(--av-color-border-soft)',
224
+ '--av-sidenav-surface': 'var(--av-color-surface)',
225
+ '--av-sidenav-text': 'var(--av-color-text)',
226
+ '--av-sidenav-muted': 'var(--av-color-text-muted)',
227
+ };
228
+ }, /* @ts-ignore */
229
+ ...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
230
+ get drawerClass() {
231
+ return this.drawerMode();
232
+ }
233
+ get closedClass() {
234
+ return !this.isOpen();
235
+ }
236
+ get toggleableClass() {
237
+ return this.toggleable();
238
+ }
239
+ get widthStyle() {
240
+ return this.coerceCssLength(this.width());
241
+ }
242
+ constructor() {
243
+ effect((onCleanup) => {
244
+ if (!this.isBrowser)
245
+ return;
246
+ const mediaQuery = window.matchMedia(this.mediaQuery());
247
+ const updateMode = () => {
248
+ this.setDrawerMode(mediaQuery.matches);
249
+ };
250
+ updateMode();
251
+ mediaQuery.addEventListener('change', updateMode);
252
+ onCleanup(() => mediaQuery.removeEventListener('change', updateMode));
253
+ });
254
+ effect(() => {
255
+ const controlledOpened = this.opened();
256
+ if (controlledOpened !== undefined) {
257
+ this.internalOpened.set(controlledOpened);
258
+ }
259
+ });
260
+ effect(() => {
261
+ this.drawerMode();
262
+ this.isOpen();
263
+ this.toggleable();
264
+ this.updateBodyScroll();
265
+ });
266
+ effect((onCleanup) => {
267
+ if (!this.toggleable())
268
+ return;
269
+ const trigger = this.resolveToggleTrigger();
270
+ if (!trigger) {
271
+ this.warnMissingTrigger();
272
+ return;
273
+ }
274
+ this.renderer.setAttribute(trigger, 'aria-controls', this.navId);
275
+ this.renderer.setAttribute(trigger, 'aria-haspopup', 'dialog');
276
+ const removeClickListener = this.renderer.listen(trigger, 'click', (event) => {
277
+ event.preventDefault();
278
+ this.toggle();
279
+ });
280
+ onCleanup(() => {
281
+ removeClickListener();
282
+ this.renderer.removeAttribute(trigger, 'aria-controls');
283
+ this.renderer.removeAttribute(trigger, 'aria-expanded');
284
+ this.renderer.removeAttribute(trigger, 'aria-haspopup');
285
+ });
286
+ });
287
+ effect(() => {
288
+ if (!this.toggleable())
289
+ return;
290
+ const trigger = this.resolveToggleTrigger();
291
+ if (!trigger)
292
+ return;
293
+ this.renderer.setAttribute(trigger, 'aria-expanded', String(this.isOpen()));
294
+ });
295
+ this.destroyRef.onDestroy(() => {
296
+ this.restoreBodyScroll();
297
+ });
298
+ }
299
+ navId = `av-sidenav-${Math.random().toString(36).slice(2, 9)}`;
300
+ open() {
301
+ this.setOpenState(true);
302
+ }
303
+ close(options = {}) {
304
+ this.setOpenState(false);
305
+ if (options.restoreFocus) {
306
+ this.resolveToggleTrigger()?.focus();
307
+ }
308
+ }
309
+ toggle() {
310
+ this.setOpenState(!this.isOpen());
311
+ }
312
+ closeFromBackdrop() {
313
+ if (!this.closeOnBackdrop())
314
+ return;
315
+ this.close({ restoreFocus: true });
316
+ }
317
+ handleNavigation() {
318
+ if (!this.drawerMode() || !this.closeOnNavigation())
319
+ return;
320
+ this.close();
321
+ }
322
+ handleEscape(event) {
323
+ if (!this.drawerMode() || !this.isOpen())
324
+ return;
325
+ event.preventDefault();
326
+ this.close({ restoreFocus: true });
327
+ }
328
+ get mode() {
329
+ return this.drawerMode() ? 'drawer' : 'side';
330
+ }
331
+ mediaQuery() {
332
+ const breakpoint = this.drawerBreakpoint();
333
+ if (typeof breakpoint === 'number') {
334
+ return `(max-width: ${breakpoint}px)`;
335
+ }
336
+ const value = breakpoint.trim();
337
+ if (value.startsWith('('))
338
+ return value;
339
+ return `(max-width: ${value})`;
340
+ }
341
+ setDrawerMode(isDrawer) {
342
+ this.drawerModeState.set(isDrawer);
343
+ if (this.opened() === undefined && this.toggleable()) {
344
+ this.internalOpened.set(!isDrawer);
345
+ }
346
+ if (this.mode !== this.lastMode) {
347
+ this.lastMode = this.mode;
348
+ this.modeChange.emit(this.mode);
349
+ }
350
+ }
351
+ setOpenState(open) {
352
+ if (!this.toggleable())
353
+ return;
354
+ this.internalOpened.set(open);
355
+ this.openedChange.emit(open);
356
+ this.updateBodyScroll();
357
+ }
358
+ updateBodyScroll() {
359
+ if (!this.isBrowser)
360
+ return;
361
+ const shouldLock = this.drawerMode() && this.isOpen() && this.toggleable();
362
+ if (shouldLock && this.previousBodyOverflow === null) {
363
+ this.previousBodyOverflow = document.body.style.overflow;
364
+ document.body.style.overflow = 'hidden';
365
+ return;
366
+ }
367
+ if (!shouldLock && this.previousBodyOverflow !== null) {
368
+ document.body.style.overflow = this.previousBodyOverflow;
369
+ this.previousBodyOverflow = null;
370
+ }
371
+ }
372
+ restoreBodyScroll() {
373
+ if (!this.isBrowser)
374
+ return;
375
+ if (this.previousBodyOverflow !== null) {
376
+ document.body.style.overflow = this.previousBodyOverflow;
377
+ this.previousBodyOverflow = null;
378
+ }
379
+ }
380
+ resolveToggleTrigger() {
381
+ const trigger = this.toggleTrigger();
382
+ const projectedTrigger = this.projectedToggleTrigger();
383
+ if (trigger instanceof ElementRef) {
384
+ return trigger.nativeElement;
385
+ }
386
+ if (typeof HTMLElement !== 'undefined' && trigger instanceof HTMLElement) {
387
+ return trigger;
388
+ }
389
+ return projectedTrigger?.nativeElement ?? null;
390
+ }
391
+ warnMissingTrigger() {
392
+ if (this.missingTriggerWarned)
393
+ return;
394
+ this.missingTriggerWarned = true;
395
+ console.warn('AvSidenav: quando toggleable estiver habilitado, forneça um botão com #toggleTrigger e passe-o em [toggleTrigger].');
396
+ }
397
+ coerceCssLength(value) {
398
+ if (typeof value === 'number') {
399
+ return `${value}px`;
400
+ }
401
+ return value;
402
+ }
403
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSidenav, deps: [], target: i0.ɵɵFactoryTarget.Component });
404
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvSidenav, isStandalone: true, selector: "av-sidenav", inputs: { ariaLabel: { classPropertyName: "ariaLabel", publicName: "ariaLabel", isSignal: true, isRequired: false, transformFunction: null }, backdropLabel: { classPropertyName: "backdropLabel", publicName: "backdropLabel", isSignal: true, isRequired: false, transformFunction: null }, closeOnBackdrop: { classPropertyName: "closeOnBackdrop", publicName: "closeOnBackdrop", isSignal: true, isRequired: false, transformFunction: null }, closeOnNavigation: { classPropertyName: "closeOnNavigation", publicName: "closeOnNavigation", isSignal: true, isRequired: false, transformFunction: null }, drawerBreakpoint: { classPropertyName: "drawerBreakpoint", publicName: "drawerBreakpoint", isSignal: true, isRequired: false, transformFunction: null }, opened: { classPropertyName: "opened", publicName: "opened", isSignal: true, isRequired: false, transformFunction: null }, toggleable: { classPropertyName: "toggleable", publicName: "toggleable", isSignal: true, isRequired: false, transformFunction: null }, toggleTrigger: { classPropertyName: "toggleTrigger", publicName: "toggleTrigger", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, width: { classPropertyName: "width", publicName: "width", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openedChange: "openedChange", modeChange: "modeChange" }, host: { listeners: { "document:keydown.escape": "handleEscape($event)" }, properties: { "class.av-sidenav-host--drawer": "this.drawerClass", "class.av-sidenav-host--closed": "this.closedClass", "class.av-sidenav-host--toggleable": "this.toggleableClass", "style.--av-sidenav-width": "this.widthStyle" } }, queries: [{ propertyName: "projectedToggleTrigger", first: true, predicate: ["toggleTrigger"], descendants: true, isSignal: true }], ngImport: i0, template: "@if (drawerMode() && isOpen() && toggleable()) {\n <button\n type=\"button\"\n class=\"av-sidenav__backdrop\"\n [attr.aria-label]=\"backdropLabel()\"\n (click)=\"closeFromBackdrop()\"\n ></button>\n}\n\n<nav\n class=\"av-sidenav\"\n [id]=\"navId\"\n [ngStyle]=\"themeVars()\"\n [class.av-sidenav--drawer]=\"drawerMode()\"\n [class.av-sidenav--closed]=\"!isOpen()\"\n [attr.aria-hidden]=\"!isOpen() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.inert]=\"!isOpen() ? '' : null\"\n (av-nav-link-select)=\"handleNavigation()\"\n>\n <div class=\"av-sidenav__header\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"av-sidenav__content\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n\n <div class=\"av-sidenav__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</nav>\n", styles: [":host{display:block;height:100%;min-height:0;transition:width .2s ease;width:var(--av-sidenav-width, 16rem)}:host(.av-sidenav-host--closed:not(.av-sidenav-host--drawer)){width:0}:host(.av-sidenav-host--drawer){height:100dvh;inset:0;pointer-events:none;position:fixed;width:auto;z-index:var(--av-sidenav-z-index, 50)}.av-sidenav{background:var(--av-sidenav-surface, var(--av-color-surface));border:1px solid var(--av-sidenav-border, var(--av-color-border-soft));box-shadow:var(--av-shadow-raised);color:var(--av-sidenav-text, var(--av-color-text));display:flex;flex-direction:column;gap:.75rem;height:100%;overflow:hidden;padding:.75rem;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .22s ease;width:100%}.av-sidenav--drawer{max-width:calc(100dvw - 2rem);pointer-events:auto;position:relative;width:var(--av-sidenav-width, 16rem)}.av-sidenav--closed{transform:translate(calc(-100% - 1rem))}.av-sidenav__header,.av-sidenav__footer{flex:0 0 auto}.av-sidenav__content{display:flex;flex:1;flex-direction:column;gap:.25rem;min-height:0;overflow:auto}.av-sidenav__backdrop{background:#0f172a6b;border:0;cursor:pointer;inset:0;pointer-events:auto;position:fixed}:host-context([data-av-theme=\"dark\"]) .av-sidenav__backdrop{background:#00000094}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
405
+ }
406
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSidenav, decorators: [{
407
+ type: Component,
408
+ args: [{ imports: [CommonModule], selector: 'av-sidenav', template: "@if (drawerMode() && isOpen() && toggleable()) {\n <button\n type=\"button\"\n class=\"av-sidenav__backdrop\"\n [attr.aria-label]=\"backdropLabel()\"\n (click)=\"closeFromBackdrop()\"\n ></button>\n}\n\n<nav\n class=\"av-sidenav\"\n [id]=\"navId\"\n [ngStyle]=\"themeVars()\"\n [class.av-sidenav--drawer]=\"drawerMode()\"\n [class.av-sidenav--closed]=\"!isOpen()\"\n [attr.aria-hidden]=\"!isOpen() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.inert]=\"!isOpen() ? '' : null\"\n (av-nav-link-select)=\"handleNavigation()\"\n>\n <div class=\"av-sidenav__header\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"av-sidenav__content\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n\n <div class=\"av-sidenav__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</nav>\n", styles: [":host{display:block;height:100%;min-height:0;transition:width .2s ease;width:var(--av-sidenav-width, 16rem)}:host(.av-sidenav-host--closed:not(.av-sidenav-host--drawer)){width:0}:host(.av-sidenav-host--drawer){height:100dvh;inset:0;pointer-events:none;position:fixed;width:auto;z-index:var(--av-sidenav-z-index, 50)}.av-sidenav{background:var(--av-sidenav-surface, var(--av-color-surface));border:1px solid var(--av-sidenav-border, var(--av-color-border-soft));box-shadow:var(--av-shadow-raised);color:var(--av-sidenav-text, var(--av-color-text));display:flex;flex-direction:column;gap:.75rem;height:100%;overflow:hidden;padding:.75rem;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .22s ease;width:100%}.av-sidenav--drawer{max-width:calc(100dvw - 2rem);pointer-events:auto;position:relative;width:var(--av-sidenav-width, 16rem)}.av-sidenav--closed{transform:translate(calc(-100% - 1rem))}.av-sidenav__header,.av-sidenav__footer{flex:0 0 auto}.av-sidenav__content{display:flex;flex:1;flex-direction:column;gap:.25rem;min-height:0;overflow:auto}.av-sidenav__backdrop{background:#0f172a6b;border:0;cursor:pointer;inset:0;pointer-events:auto;position:fixed}:host-context([data-av-theme=\"dark\"]) .av-sidenav__backdrop{background:#00000094}\n"] }]
409
+ }], ctorParameters: () => [], propDecorators: { projectedToggleTrigger: [{ type: i0.ContentChild, args: ['toggleTrigger', { isSignal: true }] }], ariaLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "ariaLabel", required: false }] }], backdropLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "backdropLabel", required: false }] }], closeOnBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnBackdrop", required: false }] }], closeOnNavigation: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnNavigation", required: false }] }], drawerBreakpoint: [{ type: i0.Input, args: [{ isSignal: true, alias: "drawerBreakpoint", required: false }] }], opened: [{ type: i0.Input, args: [{ isSignal: true, alias: "opened", required: false }] }], toggleable: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleable", required: false }] }], toggleTrigger: [{ type: i0.Input, args: [{ isSignal: true, alias: "toggleTrigger", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], width: [{ type: i0.Input, args: [{ isSignal: true, alias: "width", required: false }] }], openedChange: [{ type: i0.Output, args: ["openedChange"] }], modeChange: [{ type: i0.Output, args: ["modeChange"] }], drawerClass: [{
410
+ type: HostBinding,
411
+ args: ['class.av-sidenav-host--drawer']
412
+ }], closedClass: [{
413
+ type: HostBinding,
414
+ args: ['class.av-sidenav-host--closed']
415
+ }], toggleableClass: [{
416
+ type: HostBinding,
417
+ args: ['class.av-sidenav-host--toggleable']
418
+ }], widthStyle: [{
419
+ type: HostBinding,
420
+ args: ['style.--av-sidenav-width']
421
+ }], handleEscape: [{
422
+ type: HostListener,
423
+ args: ['document:keydown.escape', ['$event']]
424
+ }] } });
425
+
426
+ class AvCluster {
427
+ gap = input(1, /* @ts-ignore */
428
+ ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
429
+ get gapValue() {
430
+ return `${4 * this.gap()}px`;
431
+ }
432
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCluster, deps: [], target: i0.ɵɵFactoryTarget.Component });
433
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvCluster, isStandalone: true, selector: "av-cluster", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"av-cluster\" [style.--av-cluster-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n", styles: [".av-cluster{display:flex;flex-wrap:wrap;overflow-x:auto;align-items:start;flex-direction:row;justify-content:start;gap:var(--av-cluster-gap)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
434
+ }
435
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCluster, decorators: [{
436
+ type: Component,
437
+ args: [{ imports: [CommonModule], selector: 'av-cluster', template: "<div class=\"av-cluster\" [style.--av-cluster-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n", styles: [".av-cluster{display:flex;flex-wrap:wrap;overflow-x:auto;align-items:start;flex-direction:row;justify-content:start;gap:var(--av-cluster-gap)}\n"] }]
438
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }] } });
439
+
440
+ class AvDivider {
441
+ config = inject(VISUALS_CONFIG$1);
442
+ size = input(1, /* @ts-ignore */
443
+ ...(ngDevMode ? [{ debugName: "size" }] : /* istanbul ignore next */ []));
444
+ direction = input('hori', /* @ts-ignore */
445
+ ...(ngDevMode ? [{ debugName: "direction" }] : /* istanbul ignore next */ []));
446
+ variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
447
+ ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
448
+ get borderStyle() {
449
+ return `${4 * this.size()}px solid var(--av-${this.variant()}-600)`;
450
+ }
451
+ get isVertical() {
452
+ return this.direction() === 'vert';
453
+ }
454
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDivider, deps: [], target: i0.ɵɵFactoryTarget.Component });
455
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvDivider, isStandalone: true, selector: "lib-av-divider", inputs: { size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, direction: { classPropertyName: "direction", publicName: "direction", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div\n class=\"av-divider\"\n aria-hidden=\"true\"\n [style.border-left]=\"isVertical ? borderStyle : null\"\n [style.border-top]=\"isVertical ? null : borderStyle\"\n></div>\n", styles: [""] });
456
+ }
457
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDivider, decorators: [{
458
+ type: Component,
459
+ args: [{ imports: [], selector: 'lib-av-divider', template: "<div\n class=\"av-divider\"\n aria-hidden=\"true\"\n [style.border-left]=\"isVertical ? borderStyle : null\"\n [style.border-top]=\"isVertical ? null : borderStyle\"\n></div>\n" }]
460
+ }], propDecorators: { size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], direction: [{ type: i0.Input, args: [{ isSignal: true, alias: "direction", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
461
+
462
+ class AvInline {
463
+ gap = input(1, /* @ts-ignore */
464
+ ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
465
+ get gapValue() {
466
+ return `${4 * this.gap()}px`;
467
+ }
468
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvInline, deps: [], target: i0.ɵɵFactoryTarget.Component });
469
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvInline, isStandalone: true, selector: "av-inline", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"av-inline\" [style.--av-inline-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n", styles: [".av-inline{width:100%;height:100%;display:flex;flex-wrap:nowrap;overflow-x:auto;align-items:start;flex-direction:row;justify-content:start;gap:var(--av-inline-gap)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
470
+ }
471
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvInline, decorators: [{
472
+ type: Component,
473
+ args: [{ imports: [CommonModule], selector: 'av-inline', template: "<div class=\"av-inline\" [style.--av-inline-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n", styles: [".av-inline{width:100%;height:100%;display:flex;flex-wrap:nowrap;overflow-x:auto;align-items:start;flex-direction:row;justify-content:start;gap:var(--av-inline-gap)}\n"] }]
474
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }] } });
475
+
476
+ class AvStack {
477
+ gap = input(1, /* @ts-ignore */
478
+ ...(ngDevMode ? [{ debugName: "gap" }] : /* istanbul ignore next */ []));
479
+ get gapValue() {
480
+ return `${4 * this.gap()}px`;
481
+ }
482
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvStack, deps: [], target: i0.ɵɵFactoryTarget.Component });
483
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvStack, isStandalone: true, selector: "av-stack", inputs: { gap: { classPropertyName: "gap", publicName: "gap", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div class=\"av-stack\" [style.--av-stack-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n", styles: [".av-stack{display:flex;flex-wrap:nowrap;overflow-x:auto;align-items:start;flex-direction:column;justify-content:start;gap:var(--av-stack-gap)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] });
484
+ }
485
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvStack, decorators: [{
486
+ type: Component,
487
+ args: [{ imports: [CommonModule], selector: 'av-stack', template: "<div class=\"av-stack\" [style.--av-stack-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n", styles: [".av-stack{display:flex;flex-wrap:nowrap;overflow-x:auto;align-items:start;flex-direction:column;justify-content:start;gap:var(--av-stack-gap)}\n"] }]
488
+ }], propDecorators: { gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }] } });
489
+
490
+ const VISUALS_CONFIG = new InjectionToken('VISUALS_CONFIG');
491
+ function provideAngularVisuals(config) {
492
+ const providers = [
493
+ {
494
+ provide: VISUALS_CONFIG,
495
+ useValue: config
496
+ },
497
+ ];
498
+ return makeEnvironmentProviders(providers);
499
+ }
500
+
501
+ /**
502
+ * Generated bundle index. Do not edit.
503
+ */
504
+
505
+ export { AvCluster, AvDivider, AvDropdown, AvInline, AvNavLink, AvSidenav, AvStack, VISUALS_CONFIG };
506
+ //# sourceMappingURL=angular-visuals.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-visuals.mjs","sources":["../../../projects/angular-visuals/src/lib/components/nav/av-dropdown/av-dropdown.component.ts","../../../projects/angular-visuals/src/lib/components/nav/av-dropdown/av-dropdown.component.html","../../../projects/angular-visuals/src/lib/components/nav/av-nav-link/av-nav-link.component.ts","../../../projects/angular-visuals/src/lib/components/nav/av-nav-link/av-nav-link.component.html","../../../projects/angular-visuals/src/lib/components/nav/av-sidenav/av-sidenav.ts","../../../projects/angular-visuals/src/lib/components/nav/av-sidenav/av-sidenav.html","../../../projects/angular-visuals/src/lib/primitives/av-cluster/av-cluster.ts","../../../projects/angular-visuals/src/lib/primitives/av-cluster/av-cluster.html","../../../projects/angular-visuals/src/lib/primitives/av-divider/av-divider.ts","../../../projects/angular-visuals/src/lib/primitives/av-divider/av-divider.html","../../../projects/angular-visuals/src/lib/primitives/av-inline/av-inline.ts","../../../projects/angular-visuals/src/lib/primitives/av-inline/av-inline.html","../../../projects/angular-visuals/src/lib/primitives/av-stack/av-stack.ts","../../../projects/angular-visuals/src/lib/primitives/av-stack/av-stack.html","../../../projects/angular-visuals/src/lib/core/tokens/configuration.ts","../../../projects/angular-visuals/src/angular-visuals.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport { Component, booleanAttribute, computed, effect, inject, input, output, signal } from '@angular/core';\nimport { AvIcon } from '@av/lib/components/base/av-icon/av-icon.component';\nimport { VISUALS_CONFIG } from '@av/lib/core/tokens';\nimport { ThemeService } from '@av/lib/core/services/ThemeService.service';\n\n@Component({\n imports: [CommonModule, AvIcon],\n selector: 'av-dropdown',\n styleUrl: './av-dropdown.component.css',\n templateUrl: './av-dropdown.component.html',\n})\nexport class AvDropdown {\n private readonly config = inject(VISUALS_CONFIG);\n private readonly themeService = inject(ThemeService);\n\n badge = input<string | number | null>(null);\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n expanded = input<boolean | undefined, unknown>(undefined, {\n transform: (value: unknown) => value === undefined ? undefined : booleanAttribute(value),\n });\n icon = input<string>('');\n label = input<string>('');\n variant = input<string>(this.config.theme.defaultVariant);\n\n expandedChange = output<boolean>();\n\n private readonly internalExpanded = signal<boolean>(false);\n\n readonly panelId = `av-dropdown-${Math.random().toString(36).slice(2, 9)}`;\n readonly isExpanded = computed<boolean>(() => this.expanded() ?? this.internalExpanded());\n readonly themeVars = computed<Record<string, string>>(() => {\n const variant = this.variant();\n const isDark = this.themeService.dark();\n\n return {\n '--av-dropdown-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,\n '--av-dropdown-accent-hover': `var(--av-${variant}-${isDark ? 300 : 700})`,\n '--av-dropdown-accent-soft': isDark\n ? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`\n : `var(--av-${variant}-50)`,\n '--av-dropdown-text': 'var(--av-color-text-muted)',\n '--av-dropdown-text-active': isDark ? `var(--av-${variant}-100)` : `var(--av-${variant}-800)`,\n };\n });\n\n constructor() {\n effect(() => {\n const controlledExpanded = this.expanded();\n\n if (controlledExpanded !== undefined) {\n this.internalExpanded.set(controlledExpanded);\n }\n });\n }\n\n toggle(): void {\n if (this.disabled()) return;\n\n const next = !this.isExpanded();\n this.internalExpanded.set(next);\n this.expandedChange.emit(next);\n }\n}\n","<div class=\"av-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n type=\"button\"\n class=\"av-dropdown__trigger\"\n [class.av-dropdown__trigger--active]=\"isExpanded()\"\n [disabled]=\"disabled()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"isExpanded()\"\n (click)=\"toggle()\"\n >\n @if (icon()) {\n <span class=\"av-dropdown__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-dropdown__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content select=\"[av-dropdown-label]\"></ng-content>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-dropdown__badge\">{{ badge() }}</span>\n }\n\n <span\n class=\"av-dropdown__chevron\"\n av-icon\n name=\"expand_more\"\n size=\"md\"\n [class.av-dropdown__chevron--open]=\"isExpanded()\"\n ></span>\n </button>\n\n <div\n class=\"av-dropdown__panel\"\n [id]=\"panelId\"\n [class.av-dropdown__panel--open]=\"isExpanded()\"\n [attr.aria-hidden]=\"!isExpanded()\"\n [attr.inert]=\"isExpanded() ? null : ''\"\n >\n <div class=\"av-dropdown__panel-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, ElementRef, booleanAttribute, computed, inject, input, output } from '@angular/core';\nimport { AvIcon } from '@av/lib/components/base/av-icon/av-icon.component';\nimport { VISUALS_CONFIG } from '@av/lib/core/tokens';\nimport { ThemeService } from '@av/lib/core/services/ThemeService.service';\nimport { RouterLink, RouterLinkActive } from '@angular/router';\n\n@Component({\n imports: [CommonModule, AvIcon, RouterLink, RouterLinkActive],\n selector: 'av-nav-link',\n styleUrl: './av-nav-link.component.css',\n templateUrl: './av-nav-link.component.html',\n})\nexport class AvNavLink {\n private readonly config = inject(VISUALS_CONFIG);\n private readonly elementRef = inject(ElementRef<HTMLElement>);\n private readonly themeService = inject(ThemeService);\n\n active = input<boolean, unknown>(false, { transform: booleanAttribute });\n badge = input<string | number | null>(null);\n description = input<string>('');\n disabled = input<boolean, unknown>(false, { transform: booleanAttribute });\n href = input<string>('');\n // route can be string or link params array\n route = input<string | any[] | null>(null);\n icon = input<string>('');\n label = input<string>('');\n rel = input<string>('');\n target = input<string>('');\n variant = input<string>(this.config.theme.defaultVariant);\n // class to apply when routerLink is active\n routerActiveClass = input<string>('active');\n // routerLinkActive options (defaults to exact match)\n routerActiveOptions = input<Record<string, boolean>>({ exact: true });\n\n selected = output<Event>();\n\n readonly themeVars = computed<Record<string, string>>(() => {\n const variant = this.variant();\n const isDark = this.themeService.dark();\n\n return {\n '--av-nav-link-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,\n '--av-nav-link-accent-hover': `var(--av-${variant}-${isDark ? 300 : 700})`,\n '--av-nav-link-accent-soft': isDark\n ? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`\n : `var(--av-${variant}-50)`,\n '--av-nav-link-text': 'var(--av-color-text-muted)',\n '--av-nav-link-text-active': isDark ? `var(--av-${variant}-100)` : `var(--av-${variant}-800)`,\n };\n });\n\n readonly relValue = computed<string | null>(() => {\n if (this.rel()) return this.rel();\n\n return this.target() === '_blank' ? 'noopener noreferrer' : null;\n });\n\n readonly isExternal = computed<boolean>(() => {\n const h = this.href();\n if (!h) return false;\n return /^(https?:)?\\/\\//.test(h);\n });\n\n handleClick(event: Event): void {\n if (this.disabled()) {\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n\n this.selected.emit(event);\n this.elementRef.nativeElement.dispatchEvent(\n new CustomEvent('av-nav-link-select', {\n bubbles: true,\n composed: true,\n detail: { source: this },\n })\n );\n }\n}\n","@if (!disabled() && (route() || (href() && !isExternal()))) {\n <a\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [routerLink]=\"route() ? route() : href()\"\n [routerLinkActive]=\"routerActiveClass()\"\n [routerLinkActiveOptions]=\"routerActiveOptions()\"\n [attr.rel]=\"relValue()\"\n [attr.target]=\"target() || null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </a>\n} @else {\n @if (href() && !disabled()) {\n <a\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n [attr.href]=\"href()\"\n [attr.rel]=\"relValue()\"\n [attr.target]=\"target() || null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </a>\n } @else {\n <button\n type=\"button\"\n class=\"av-nav-link\"\n [ngStyle]=\"themeVars()\"\n [class.av-nav-link--active]=\"active()\"\n [class.av-nav-link--disabled]=\"disabled()\"\n [disabled]=\"disabled()\"\n [attr.aria-current]=\"active() ? 'page' : null\"\n (click)=\"handleClick($event)\"\n >\n <ng-container [ngTemplateOutlet]=\"content\"></ng-container>\n </button>\n }\n}\n\n<ng-template #content>\n @if (icon()) {\n <span class=\"av-nav-link__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-nav-link__body\">\n @if (label()) {\n <span class=\"av-nav-link__label\">{{ label() }}</span>\n } @else {\n <span class=\"av-nav-link__label\">\n <ng-content></ng-content>\n </span>\n }\n\n @if (description()) {\n <span class=\"av-nav-link__description\">{{ description() }}</span>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-nav-link__badge\">{{ badge() }}</span>\n }\n</ng-template>\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n Component,\n DestroyRef,\n ElementRef,\n HostBinding,\n HostListener,\n PLATFORM_ID,\n Renderer2,\n booleanAttribute,\n computed,\n contentChild,\n effect,\n inject,\n input,\n output,\n signal,\n} from '@angular/core';\nimport { VISUALS_CONFIG } from '@av/lib/core/tokens';\nimport { ThemeService } from '@av/lib/core/services/ThemeService.service';\n\nexport type AvSidenavMode = 'side' | 'drawer';\nexport type AvSidenavTrigger = ElementRef<HTMLElement> | HTMLElement | null | undefined;\n\n@Component({\n imports: [CommonModule],\n selector: 'av-sidenav',\n styleUrl: './av-sidenav.css',\n templateUrl: './av-sidenav.html',\n})\nexport class AvSidenav {\n private readonly config = inject(VISUALS_CONFIG);\n private readonly destroyRef = inject(DestroyRef);\n private readonly platformId = inject(PLATFORM_ID);\n private readonly renderer = inject(Renderer2);\n private readonly themeService = inject(ThemeService);\n\n private readonly isBrowser = isPlatformBrowser(this.platformId);\n private readonly projectedToggleTrigger = contentChild<ElementRef<HTMLElement>>('toggleTrigger');\n private readonly drawerModeState = signal<boolean>(false);\n private readonly internalOpened = signal<boolean>(true);\n private missingTriggerWarned = false;\n private previousBodyOverflow: string | null = null;\n private lastMode: AvSidenavMode = 'side';\n\n ariaLabel = input<string>('Navegação principal');\n backdropLabel = input<string>('Fechar navegação');\n closeOnBackdrop = input<boolean, unknown>(true, { transform: booleanAttribute });\n closeOnNavigation = input<boolean, unknown>(true, { transform: booleanAttribute });\n drawerBreakpoint = input<number | string>(768);\n opened = input<boolean | undefined, unknown>(undefined, {\n transform: (value: unknown) => value === undefined ? undefined : booleanAttribute(value),\n });\n toggleable = input<boolean, unknown>(false, { transform: booleanAttribute });\n toggleTrigger = input<AvSidenavTrigger>(null);\n variant = input<string>(this.config.theme.defaultVariant);\n width = input<number | string>('16rem');\n\n openedChange = output<boolean>();\n modeChange = output<AvSidenavMode>();\n\n readonly drawerMode = computed<boolean>(() => this.drawerModeState());\n readonly isOpen = computed<boolean>(() => {\n if (!this.toggleable()) return true;\n\n return this.opened() ?? this.internalOpened();\n });\n\n readonly themeVars = computed<Record<string, string>>(() => {\n const variant = this.variant();\n const isDark = this.themeService.dark();\n\n console.log(variant);\n \n\n return {\n '--av-sidenav-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,\n '--av-sidenav-accent-soft': isDark\n ? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`\n : `var(--av-${variant}-50)`,\n '--av-sidenav-border': 'var(--av-color-border-soft)',\n '--av-sidenav-surface': 'var(--av-color-surface)',\n '--av-sidenav-text': 'var(--av-color-text)',\n '--av-sidenav-muted': 'var(--av-color-text-muted)',\n };\n });\n\n @HostBinding('class.av-sidenav-host--drawer')\n get drawerClass(): boolean {\n return this.drawerMode();\n }\n\n @HostBinding('class.av-sidenav-host--closed')\n get closedClass(): boolean {\n return !this.isOpen();\n }\n\n @HostBinding('class.av-sidenav-host--toggleable')\n get toggleableClass(): boolean {\n return this.toggleable();\n }\n\n @HostBinding('style.--av-sidenav-width')\n get widthStyle(): string {\n return this.coerceCssLength(this.width());\n }\n\n constructor() {\n effect((onCleanup) => {\n if (!this.isBrowser) return;\n\n const mediaQuery = window.matchMedia(this.mediaQuery());\n const updateMode = (): void => {\n this.setDrawerMode(mediaQuery.matches);\n };\n\n updateMode();\n mediaQuery.addEventListener('change', updateMode);\n onCleanup(() => mediaQuery.removeEventListener('change', updateMode));\n });\n\n effect(() => {\n const controlledOpened = this.opened();\n\n if (controlledOpened !== undefined) {\n this.internalOpened.set(controlledOpened);\n }\n });\n\n effect(() => {\n this.drawerMode();\n this.isOpen();\n this.toggleable();\n this.updateBodyScroll();\n });\n\n effect((onCleanup) => {\n if (!this.toggleable()) return;\n\n const trigger = this.resolveToggleTrigger();\n\n if (!trigger) {\n this.warnMissingTrigger();\n return;\n }\n\n this.renderer.setAttribute(trigger, 'aria-controls', this.navId);\n this.renderer.setAttribute(trigger, 'aria-haspopup', 'dialog');\n\n const removeClickListener = this.renderer.listen(trigger, 'click', (event: Event) => {\n event.preventDefault();\n this.toggle();\n });\n\n onCleanup(() => {\n removeClickListener();\n this.renderer.removeAttribute(trigger, 'aria-controls');\n this.renderer.removeAttribute(trigger, 'aria-expanded');\n this.renderer.removeAttribute(trigger, 'aria-haspopup');\n });\n });\n\n effect(() => {\n if (!this.toggleable()) return;\n\n const trigger = this.resolveToggleTrigger();\n if (!trigger) return;\n\n this.renderer.setAttribute(trigger, 'aria-expanded', String(this.isOpen()));\n });\n\n this.destroyRef.onDestroy(() => {\n this.restoreBodyScroll();\n });\n }\n\n readonly navId = `av-sidenav-${Math.random().toString(36).slice(2, 9)}`;\n\n open(): void {\n this.setOpenState(true);\n }\n\n close(options: { restoreFocus?: boolean } = {}): void {\n this.setOpenState(false);\n\n if (options.restoreFocus) {\n this.resolveToggleTrigger()?.focus();\n }\n }\n\n toggle(): void {\n this.setOpenState(!this.isOpen());\n }\n\n closeFromBackdrop(): void {\n if (!this.closeOnBackdrop()) return;\n\n this.close({ restoreFocus: true });\n }\n\n handleNavigation(): void {\n if (!this.drawerMode() || !this.closeOnNavigation()) return;\n\n this.close();\n }\n\n @HostListener('document:keydown.escape', ['$event'])\n handleEscape(event: Event): void {\n if (!this.drawerMode() || !this.isOpen()) return;\n\n event.preventDefault();\n this.close({ restoreFocus: true });\n }\n\n private get mode(): AvSidenavMode {\n return this.drawerMode() ? 'drawer' : 'side';\n }\n\n private mediaQuery(): string {\n const breakpoint = this.drawerBreakpoint();\n\n if (typeof breakpoint === 'number') {\n return `(max-width: ${breakpoint}px)`;\n }\n\n const value = breakpoint.trim();\n if (value.startsWith('(')) return value;\n\n return `(max-width: ${value})`;\n }\n\n private setDrawerMode(isDrawer: boolean): void {\n this.drawerModeState.set(isDrawer);\n\n if (this.opened() === undefined && this.toggleable()) {\n this.internalOpened.set(!isDrawer);\n }\n\n if (this.mode !== this.lastMode) {\n this.lastMode = this.mode;\n this.modeChange.emit(this.mode);\n }\n }\n\n private setOpenState(open: boolean): void {\n if (!this.toggleable()) return;\n\n this.internalOpened.set(open);\n this.openedChange.emit(open);\n this.updateBodyScroll();\n }\n\n private updateBodyScroll(): void {\n if (!this.isBrowser) return;\n\n const shouldLock = this.drawerMode() && this.isOpen() && this.toggleable();\n\n if (shouldLock && this.previousBodyOverflow === null) {\n this.previousBodyOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n return;\n }\n\n if (!shouldLock && this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n\n private restoreBodyScroll(): void {\n if (!this.isBrowser) return;\n\n if (this.previousBodyOverflow !== null) {\n document.body.style.overflow = this.previousBodyOverflow;\n this.previousBodyOverflow = null;\n }\n }\n\n private resolveToggleTrigger(): HTMLElement | null {\n const trigger = this.toggleTrigger();\n const projectedTrigger = this.projectedToggleTrigger();\n\n if (trigger instanceof ElementRef) {\n return trigger.nativeElement;\n }\n\n if (typeof HTMLElement !== 'undefined' && trigger instanceof HTMLElement) {\n return trigger;\n }\n\n return projectedTrigger?.nativeElement ?? null;\n }\n\n private warnMissingTrigger(): void {\n if (this.missingTriggerWarned) return;\n\n this.missingTriggerWarned = true;\n console.warn(\n 'AvSidenav: quando toggleable estiver habilitado, forneça um botão com #toggleTrigger e passe-o em [toggleTrigger].'\n );\n }\n\n private coerceCssLength(value: number | string): string {\n if (typeof value === 'number') {\n return `${value}px`;\n }\n\n return value;\n }\n}\n","@if (drawerMode() && isOpen() && toggleable()) {\n <button\n type=\"button\"\n class=\"av-sidenav__backdrop\"\n [attr.aria-label]=\"backdropLabel()\"\n (click)=\"closeFromBackdrop()\"\n ></button>\n}\n\n<nav\n class=\"av-sidenav\"\n [id]=\"navId\"\n [ngStyle]=\"themeVars()\"\n [class.av-sidenav--drawer]=\"drawerMode()\"\n [class.av-sidenav--closed]=\"!isOpen()\"\n [attr.aria-hidden]=\"!isOpen() ? 'true' : null\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.inert]=\"!isOpen() ? '' : null\"\n (av-nav-link-select)=\"handleNavigation()\"\n>\n <div class=\"av-sidenav__header\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"av-sidenav__content\">\n <ng-content select=\"[content]\"></ng-content>\n </div>\n\n <div class=\"av-sidenav__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</nav>\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\n@Component({\n imports: [CommonModule],\n selector: 'av-cluster',\n styleUrl: './av-cluster.css',\n templateUrl: './av-cluster.html',\n})\nexport class AvCluster {\n gap = input<number>(1)\n\n get gapValue() {\n return `${4 * this.gap()}px`\n }\n}\n","<div class=\"av-cluster\" [style.--av-cluster-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n","import { Component, inject, input } from '@angular/core';\nimport { VISUALS_CONFIG } from '@av/lib/core/tokens';\n\n@Component({\n imports: [],\n selector: 'lib-av-divider',\n styleUrl: './av-divider.css',\n templateUrl: './av-divider.html',\n})\nexport class AvDivider {\n private readonly config = inject(VISUALS_CONFIG);\n\n size = input<number>(1);\n direction = input<'vert' | 'hori'>('hori');\n variant = input<string>(this.config.theme.defaultVariant);\n\n get borderStyle(): string {\n return `${4 * this.size()}px solid var(--av-${this.variant()}-600)`;\n }\n\n get isVertical(): boolean {\n return this.direction() === 'vert';\n }\n}\n","<div\n class=\"av-divider\"\n aria-hidden=\"true\"\n [style.border-left]=\"isVertical ? borderStyle : null\"\n [style.border-top]=\"isVertical ? null : borderStyle\"\n></div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\n@Component({\n imports: [CommonModule],\n selector: 'av-inline',\n styleUrl: './av-inline.css',\n templateUrl: './av-inline.html',\n})\nexport class AvInline {\n gap = input<number>(1)\n\n get gapValue() {\n return `${4 * this.gap()}px`\n }\n}\n","<div class=\"av-inline\" [style.--av-inline-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { Component, input } from '@angular/core';\n\n@Component({\n imports: [CommonModule],\n selector: 'av-stack',\n styleUrl: './av-stack.css',\n templateUrl: './av-stack.html',\n})\nexport class AvStack {\n gap = input<number>(1)\n\n get gapValue() {\n return `${4 * this.gap()}px`\n }\n}\n","<div class=\"av-stack\" [style.--av-stack-gap]=\"gapValue\">\n <ng-content></ng-content>\n</div>\n","import { InjectionToken, Provider, makeEnvironmentProviders, EnvironmentProviders } from '@angular/core';\nimport { VisualsConfig } from '@av/types/theme';\n\nexport const VISUALS_CONFIG = new InjectionToken<VisualsConfig>('VISUALS_CONFIG');\n\nexport function provideAngularVisuals(config: VisualsConfig): EnvironmentProviders {\n const providers: Provider[] = [\n {\n provide: VISUALS_CONFIG,\n useValue: config\n },\n ];\n return makeEnvironmentProviders(providers);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["VISUALS_CONFIG"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "angular-visuals",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Angular UI component library with theming, animations and SVG icons.",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -11,7 +11,7 @@
11
11
  "angular-components"
12
12
  ],
13
13
  "sideEffects": [
14
- "src/styles/angular-visuals.css"
14
+ "**/*.css"
15
15
  ],
16
16
  "peerDependencies": {
17
17
  "@angular/common": ">=21.0.0",
@@ -21,11 +21,9 @@
21
21
  "dependencies": {
22
22
  "tslib": "^2.3.0"
23
23
  },
24
- "files": [
25
- "src/styles"
26
- ],
24
+ "module": "fesm2022/angular-visuals.mjs",
25
+ "typings": "types/angular-visuals.d.ts",
27
26
  "exports": {
28
- "./styles/angular-visuals.css": "./src/styles/angular-visuals.css",
29
27
  "./package.json": {
30
28
  "default": "./package.json"
31
29
  },
@@ -34,7 +32,5 @@
34
32
  "default": "./fesm2022/angular-visuals.mjs"
35
33
  }
36
34
  },
37
- "module": "fesm2022/angular-visuals.mjs",
38
- "typings": "types/angular-visuals.d.ts",
39
35
  "type": "module"
40
36
  }
@@ -0,0 +1,169 @@
1
+ import * as _angular_core from '@angular/core';
2
+ import { ElementRef, InjectionToken } from '@angular/core';
3
+ export { AvTooltip, AvTooltipPosition } from '@av/lib/components/overlay/av-tooltip/av-tooltip';
4
+ export { AvTextArea } from '@av/lib/components/form/av-text-area/av-text-area.component';
5
+ export { AvFileUpload, AvFileUploadFile, AvFileUploadRejection, AvFileUploadValue } from '@av/lib/components/form/av-file-upload/av-file-upload';
6
+ export { AvText } from '@av/lib/primitives/av-text/av-text';
7
+ export { AvSwitch } from '@av/lib/components/form/av-switch/av-switch.component';
8
+ export { AvSlider, AvSliderRangeValue, AvSliderValue } from '@av/lib/components/form/av-slider/av-slider';
9
+ export { AvSelect } from '@av/lib/components/form/av-select/av-select.component';
10
+ export { AvInput } from '@av/lib/components/form/av-input/av-input.component';
11
+ export { AvCheckbox } from '@av/lib/components/form/av-checkbox/av-checkbox.component';
12
+ export { AvCurrencyInput } from '@av/lib/components/form/av-currency-input/av-currency-input.component';
13
+ export { AvDateTimePicker } from '@av/lib/components/form/av-date-time-picker/av-date-time-picker.component';
14
+ export { AvForm } from '@av/lib/components/form/av-form/av-form.component';
15
+ export { AvMultiSelect } from '@av/lib/components/form/av-multi-select/av-multi-select.component';
16
+ export { AvGrid } from '@av/lib/components/layout/av-grid/grid.component';
17
+ export { AvIcon } from '@av/lib/components/base/av-icon/av-icon.component';
18
+ export { AvIconRegistry, AvRegisteredIcon } from '@av/lib/core/services/IconRegistry.service';
19
+ export { AvPaginator } from '@av/lib/components/layout/av-paginator/av-paginator.component';
20
+ export { AvProgressBar, AvProgressBarCircle } from '@av/lib/components/feedback/progress-bars';
21
+ export { AvCarousel, AvCarouselItem } from '@av/lib/components/midia/carousel';
22
+ export { AvStep, AvStepper } from '@av/lib/components/nav/stepper';
23
+ export { AvTab, AvTabs } from '@av/lib/components/nav/tabs';
24
+ export { AvTable } from '@av/lib/components/layout/av-table/av-table.component';
25
+ export { AvButton } from '@av/lib/components/base/av-button/av-button.component';
26
+ export { AvBadge } from '@av/lib/components/base/av-badge/av-badge.component';
27
+ export { ThemeService } from '@av/lib/core/services/ThemeService.service';
28
+ export { provideAngularVisuals } from '@av/lib/core/tokens';
29
+ import { VisualsConfig } from '@av/types/theme';
30
+
31
+ declare class AvDropdown {
32
+ private readonly config;
33
+ private readonly themeService;
34
+ badge: _angular_core.InputSignal<string | number | null>;
35
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
36
+ expanded: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
37
+ icon: _angular_core.InputSignal<string>;
38
+ label: _angular_core.InputSignal<string>;
39
+ variant: _angular_core.InputSignal<string>;
40
+ expandedChange: _angular_core.OutputEmitterRef<boolean>;
41
+ private readonly internalExpanded;
42
+ readonly panelId: string;
43
+ readonly isExpanded: _angular_core.Signal<boolean>;
44
+ readonly themeVars: _angular_core.Signal<Record<string, string>>;
45
+ constructor();
46
+ toggle(): void;
47
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvDropdown, never>;
48
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvDropdown, "av-dropdown", never, { "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "expanded": { "alias": "expanded"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, { "expandedChange": "expandedChange"; }, never, ["[av-dropdown-label]", "*"], true, never>;
49
+ }
50
+
51
+ declare class AvNavLink {
52
+ private readonly config;
53
+ private readonly elementRef;
54
+ private readonly themeService;
55
+ active: _angular_core.InputSignalWithTransform<boolean, unknown>;
56
+ badge: _angular_core.InputSignal<string | number | null>;
57
+ description: _angular_core.InputSignal<string>;
58
+ disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
59
+ href: _angular_core.InputSignal<string>;
60
+ route: _angular_core.InputSignal<string | any[] | null>;
61
+ icon: _angular_core.InputSignal<string>;
62
+ label: _angular_core.InputSignal<string>;
63
+ rel: _angular_core.InputSignal<string>;
64
+ target: _angular_core.InputSignal<string>;
65
+ variant: _angular_core.InputSignal<string>;
66
+ routerActiveClass: _angular_core.InputSignal<string>;
67
+ routerActiveOptions: _angular_core.InputSignal<Record<string, boolean>>;
68
+ selected: _angular_core.OutputEmitterRef<Event>;
69
+ readonly themeVars: _angular_core.Signal<Record<string, string>>;
70
+ readonly relValue: _angular_core.Signal<string | null>;
71
+ readonly isExternal: _angular_core.Signal<boolean>;
72
+ handleClick(event: Event): void;
73
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvNavLink, never>;
74
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvNavLink, "av-nav-link", never, { "active": { "alias": "active"; "required": false; "isSignal": true; }; "badge": { "alias": "badge"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "href": { "alias": "href"; "required": false; "isSignal": true; }; "route": { "alias": "route"; "required": false; "isSignal": true; }; "icon": { "alias": "icon"; "required": false; "isSignal": true; }; "label": { "alias": "label"; "required": false; "isSignal": true; }; "rel": { "alias": "rel"; "required": false; "isSignal": true; }; "target": { "alias": "target"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "routerActiveClass": { "alias": "routerActiveClass"; "required": false; "isSignal": true; }; "routerActiveOptions": { "alias": "routerActiveOptions"; "required": false; "isSignal": true; }; }, { "selected": "selected"; }, never, ["*"], true, never>;
75
+ }
76
+
77
+ type AvSidenavMode = 'side' | 'drawer';
78
+ type AvSidenavTrigger = ElementRef<HTMLElement> | HTMLElement | null | undefined;
79
+ declare class AvSidenav {
80
+ private readonly config;
81
+ private readonly destroyRef;
82
+ private readonly platformId;
83
+ private readonly renderer;
84
+ private readonly themeService;
85
+ private readonly isBrowser;
86
+ private readonly projectedToggleTrigger;
87
+ private readonly drawerModeState;
88
+ private readonly internalOpened;
89
+ private missingTriggerWarned;
90
+ private previousBodyOverflow;
91
+ private lastMode;
92
+ ariaLabel: _angular_core.InputSignal<string>;
93
+ backdropLabel: _angular_core.InputSignal<string>;
94
+ closeOnBackdrop: _angular_core.InputSignalWithTransform<boolean, unknown>;
95
+ closeOnNavigation: _angular_core.InputSignalWithTransform<boolean, unknown>;
96
+ drawerBreakpoint: _angular_core.InputSignal<string | number>;
97
+ opened: _angular_core.InputSignalWithTransform<boolean | undefined, unknown>;
98
+ toggleable: _angular_core.InputSignalWithTransform<boolean, unknown>;
99
+ toggleTrigger: _angular_core.InputSignal<AvSidenavTrigger>;
100
+ variant: _angular_core.InputSignal<string>;
101
+ width: _angular_core.InputSignal<string | number>;
102
+ openedChange: _angular_core.OutputEmitterRef<boolean>;
103
+ modeChange: _angular_core.OutputEmitterRef<AvSidenavMode>;
104
+ readonly drawerMode: _angular_core.Signal<boolean>;
105
+ readonly isOpen: _angular_core.Signal<boolean>;
106
+ readonly themeVars: _angular_core.Signal<Record<string, string>>;
107
+ get drawerClass(): boolean;
108
+ get closedClass(): boolean;
109
+ get toggleableClass(): boolean;
110
+ get widthStyle(): string;
111
+ constructor();
112
+ readonly navId: string;
113
+ open(): void;
114
+ close(options?: {
115
+ restoreFocus?: boolean;
116
+ }): void;
117
+ toggle(): void;
118
+ closeFromBackdrop(): void;
119
+ handleNavigation(): void;
120
+ handleEscape(event: Event): void;
121
+ private get mode();
122
+ private mediaQuery;
123
+ private setDrawerMode;
124
+ private setOpenState;
125
+ private updateBodyScroll;
126
+ private restoreBodyScroll;
127
+ private resolveToggleTrigger;
128
+ private warnMissingTrigger;
129
+ private coerceCssLength;
130
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvSidenav, never>;
131
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvSidenav, "av-sidenav", never, { "ariaLabel": { "alias": "ariaLabel"; "required": false; "isSignal": true; }; "backdropLabel": { "alias": "backdropLabel"; "required": false; "isSignal": true; }; "closeOnBackdrop": { "alias": "closeOnBackdrop"; "required": false; "isSignal": true; }; "closeOnNavigation": { "alias": "closeOnNavigation"; "required": false; "isSignal": true; }; "drawerBreakpoint": { "alias": "drawerBreakpoint"; "required": false; "isSignal": true; }; "opened": { "alias": "opened"; "required": false; "isSignal": true; }; "toggleable": { "alias": "toggleable"; "required": false; "isSignal": true; }; "toggleTrigger": { "alias": "toggleTrigger"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; "width": { "alias": "width"; "required": false; "isSignal": true; }; }, { "openedChange": "openedChange"; "modeChange": "modeChange"; }, ["projectedToggleTrigger"], ["[header]", "[content]", "[footer]"], true, never>;
132
+ }
133
+
134
+ declare class AvCluster {
135
+ gap: _angular_core.InputSignal<number>;
136
+ get gapValue(): string;
137
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvCluster, never>;
138
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvCluster, "av-cluster", never, { "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
139
+ }
140
+
141
+ declare class AvDivider {
142
+ private readonly config;
143
+ size: _angular_core.InputSignal<number>;
144
+ direction: _angular_core.InputSignal<"vert" | "hori">;
145
+ variant: _angular_core.InputSignal<string>;
146
+ get borderStyle(): string;
147
+ get isVertical(): boolean;
148
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvDivider, never>;
149
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvDivider, "lib-av-divider", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; "direction": { "alias": "direction"; "required": false; "isSignal": true; }; "variant": { "alias": "variant"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
150
+ }
151
+
152
+ declare class AvInline {
153
+ gap: _angular_core.InputSignal<number>;
154
+ get gapValue(): string;
155
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvInline, never>;
156
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvInline, "av-inline", never, { "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
157
+ }
158
+
159
+ declare class AvStack {
160
+ gap: _angular_core.InputSignal<number>;
161
+ get gapValue(): string;
162
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<AvStack, never>;
163
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<AvStack, "av-stack", never, { "gap": { "alias": "gap"; "required": false; "isSignal": true; }; }, {}, never, ["*"], true, never>;
164
+ }
165
+
166
+ declare const VISUALS_CONFIG: InjectionToken<VisualsConfig>;
167
+
168
+ export { AvCluster, AvDivider, AvDropdown, AvInline, AvNavLink, AvSidenav, AvStack, VISUALS_CONFIG };
169
+ export type { AvSidenavMode, AvSidenavTrigger };
File without changes
File without changes
File without changes
File without changes
File without changes