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.
- package/angular-visuals-0.1.1.tgz +0 -0
- package/fesm2022/angular-visuals.mjs +506 -0
- package/fesm2022/angular-visuals.mjs.map +1 -0
- package/package.json +4 -8
- package/types/angular-visuals.d.ts +169 -0
- /package/{src/styles → styles}/angular-visuals.css +0 -0
- /package/{src/styles → styles}/animations.css +0 -0
- /package/{src/styles → styles}/palette.css +0 -0
- /package/{src/styles → styles}/theme.css +0 -0
- /package/{src/styles → styles}/typography.css +0 -0
|
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.
|
|
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
|
-
"
|
|
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
|
-
"
|
|
25
|
-
|
|
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
|