angular-visuals 0.1.2 → 0.1.4
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/README.md +13 -8
- package/fesm2022/angular-visuals.mjs +666 -51
- package/fesm2022/angular-visuals.mjs.map +1 -1
- package/package.json +3 -2
- package/styles/angular-visuals.css +17 -7
- package/types/angular-visuals.d.ts +207 -18
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i1 from '@angular/common';
|
|
2
|
-
import { CommonModule, isPlatformBrowser } from '@angular/common';
|
|
2
|
+
import { CommonModule, DOCUMENT, isPlatformBrowser } from '@angular/common';
|
|
3
3
|
import * as i0 from '@angular/core';
|
|
4
|
-
import { inject, Injectable, input, HostBinding, ViewEncapsulation, Component, InjectionToken, makeEnvironmentProviders, signal, computed, effect, booleanAttribute, output, ElementRef,
|
|
4
|
+
import { inject, Injectable, input, HostBinding, ViewEncapsulation, Component, InjectionToken, makeEnvironmentProviders, DestroyRef, PLATFORM_ID, signal, computed, effect, booleanAttribute, output, ElementRef, Renderer2, contentChild, HostListener, ChangeDetectionStrategy, numberAttribute, Directive, ViewChild, Optional, Self, untracked, forwardRef, model, contentChildren } from '@angular/core';
|
|
5
5
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
6
6
|
import { RouterLink, RouterLinkActive } from '@angular/router';
|
|
7
7
|
import * as i3 from '@angular/cdk/overlay';
|
|
@@ -176,6 +176,9 @@ function provideAngularVisuals(config) {
|
|
|
176
176
|
|
|
177
177
|
class ThemeService {
|
|
178
178
|
config = inject(VISUALS_CONFIG);
|
|
179
|
+
destroyRef = inject(DestroyRef);
|
|
180
|
+
document = inject(DOCUMENT);
|
|
181
|
+
isBrowser = isPlatformBrowser(inject(PLATFORM_ID));
|
|
179
182
|
colorIntensities = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950];
|
|
180
183
|
mode = signal(this.config.theme.mode, /* @ts-ignore */
|
|
181
184
|
...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
@@ -191,15 +194,35 @@ class ThemeService {
|
|
|
191
194
|
}, /* @ts-ignore */
|
|
192
195
|
...(ngDevMode ? [{ debugName: "dark" }] : /* istanbul ignore next */ []));
|
|
193
196
|
constructor() {
|
|
194
|
-
const media =
|
|
195
|
-
|
|
197
|
+
const media = this.isBrowser
|
|
198
|
+
? this.document.defaultView?.matchMedia('(prefers-color-scheme: dark)')
|
|
199
|
+
: null;
|
|
200
|
+
if (media) {
|
|
201
|
+
this.systemDark.set(media.matches);
|
|
202
|
+
}
|
|
196
203
|
this.setPrimaryColorVariables();
|
|
197
|
-
media
|
|
198
|
-
|
|
199
|
-
|
|
204
|
+
if (media) {
|
|
205
|
+
const updateSystemTheme = (event) => {
|
|
206
|
+
this.systemDark.set(event.matches);
|
|
207
|
+
};
|
|
208
|
+
if (media.addEventListener) {
|
|
209
|
+
media.addEventListener('change', updateSystemTheme);
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
media.addListener(updateSystemTheme);
|
|
213
|
+
}
|
|
214
|
+
this.destroyRef.onDestroy(() => {
|
|
215
|
+
if (media.removeEventListener) {
|
|
216
|
+
media.removeEventListener('change', updateSystemTheme);
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
media.removeListener(updateSystemTheme);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
200
223
|
effect(() => {
|
|
201
224
|
const isDark = this.dark();
|
|
202
|
-
const root = document.documentElement;
|
|
225
|
+
const root = this.document.documentElement;
|
|
203
226
|
if (isDark) {
|
|
204
227
|
root.setAttribute('data-av-theme', 'dark');
|
|
205
228
|
}
|
|
@@ -212,7 +235,7 @@ class ThemeService {
|
|
|
212
235
|
this.mode.set(mode);
|
|
213
236
|
}
|
|
214
237
|
setPrimaryColorVariables() {
|
|
215
|
-
const root = document.documentElement;
|
|
238
|
+
const root = this.document.documentElement;
|
|
216
239
|
const variant = this.config.theme.defaultVariant;
|
|
217
240
|
for (const intensity of this.colorIntensities) {
|
|
218
241
|
root.style.setProperty(`--av-primary-${intensity}`, `var(--av-${variant}-${intensity})`);
|
|
@@ -228,7 +251,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
228
251
|
}]
|
|
229
252
|
}], ctorParameters: () => [] });
|
|
230
253
|
|
|
231
|
-
class
|
|
254
|
+
class AvNavDropdown {
|
|
232
255
|
config = inject(VISUALS_CONFIG);
|
|
233
256
|
themeService = inject(ThemeService);
|
|
234
257
|
badge = input(null, /* @ts-ignore */
|
|
@@ -244,20 +267,20 @@ class AvDropdown {
|
|
|
244
267
|
expandedChange = output();
|
|
245
268
|
internalExpanded = signal(false, /* @ts-ignore */
|
|
246
269
|
...(ngDevMode ? [{ debugName: "internalExpanded" }] : /* istanbul ignore next */ []));
|
|
247
|
-
panelId = `av-dropdown-${Math.random().toString(36).slice(2, 9)}`;
|
|
270
|
+
panelId = `av-nav-dropdown-${Math.random().toString(36).slice(2, 9)}`;
|
|
248
271
|
isExpanded = computed(() => this.expanded() ?? this.internalExpanded(), /* @ts-ignore */
|
|
249
272
|
...(ngDevMode ? [{ debugName: "isExpanded" }] : /* istanbul ignore next */ []));
|
|
250
273
|
themeVars = computed(() => {
|
|
251
274
|
const variant = this.variant();
|
|
252
275
|
const isDark = this.themeService.dark();
|
|
253
276
|
return {
|
|
254
|
-
'--av-dropdown-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,
|
|
255
|
-
'--av-dropdown-accent-hover': `var(--av-${variant}-${isDark ? 300 : 700})`,
|
|
256
|
-
'--av-dropdown-accent-soft': isDark
|
|
277
|
+
'--av-nav-dropdown-accent': `var(--av-${variant}-${isDark ? 400 : 500})`,
|
|
278
|
+
'--av-nav-dropdown-accent-hover': `var(--av-${variant}-${isDark ? 300 : 700})`,
|
|
279
|
+
'--av-nav-dropdown-accent-soft': isDark
|
|
257
280
|
? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`
|
|
258
281
|
: `var(--av-${variant}-50)`,
|
|
259
|
-
'--av-dropdown-text': 'var(--av-color-text-muted)',
|
|
260
|
-
'--av-dropdown-text-active': isDark ? `var(--av-${variant}-100)` : `var(--av-${variant}-800)`,
|
|
282
|
+
'--av-nav-dropdown-text': 'var(--av-color-text-muted)',
|
|
283
|
+
'--av-nav-dropdown-text-active': isDark ? `var(--av-${variant}-100)` : `var(--av-${variant}-800)`,
|
|
261
284
|
};
|
|
262
285
|
}, /* @ts-ignore */
|
|
263
286
|
...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
|
|
@@ -276,12 +299,12 @@ class AvDropdown {
|
|
|
276
299
|
this.internalExpanded.set(next);
|
|
277
300
|
this.expandedChange.emit(next);
|
|
278
301
|
}
|
|
279
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type:
|
|
280
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type:
|
|
302
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvNavDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
303
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvNavDropdown, isStandalone: true, selector: "av-nav-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-nav-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n type=\"button\"\n class=\"av-nav-dropdown__trigger\"\n [class.av-nav-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-nav-dropdown__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-nav-dropdown__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content select=\"[av-nav-dropdown-label]\"></ng-content>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-nav-dropdown__badge\">{{ badge() }}</span>\n }\n\n <span\n class=\"av-nav-dropdown__chevron\"\n av-icon\n name=\"expand_more\"\n size=\"md\"\n [class.av-nav-dropdown__chevron--open]=\"isExpanded()\"\n ></span>\n </button>\n\n <div\n class=\"av-nav-dropdown__panel\"\n [id]=\"panelId\"\n [class.av-nav-dropdown__panel--open]=\"isExpanded()\"\n [attr.aria-hidden]=\"!isExpanded()\"\n [attr.inert]=\"isExpanded() ? null : ''\"\n >\n <div class=\"av-nav-dropdown__panel-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;min-width:0}.av-nav-dropdown{display:grid;gap:.125rem;min-width:0}.av-nav-dropdown__trigger{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--av-radius-md);box-sizing:border-box;color:var(--av-nav-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-nav-dropdown__trigger:hover:not(:disabled),.av-nav-dropdown__trigger--active{background:var(--av-nav-dropdown-accent-soft);color:var(--av-nav-dropdown-accent-hover)}.av-nav-dropdown__trigger--active{border-color:color-mix(in srgb,var(--av-nav-dropdown-accent) 24%,transparent);color:var(--av-nav-dropdown-text-active);font-weight:700}.av-nav-dropdown__trigger:disabled{cursor:not-allowed;opacity:.52}.av-nav-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-nav-dropdown-accent) 24%,transparent);outline:none}.av-nav-dropdown__icon,.av-nav-dropdown__chevron{color:currentColor;flex:0 0 auto}.av-nav-dropdown__label{flex:1;font-size:.875rem;line-height:1.25;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-nav-dropdown__badge{background:var(--av-nav-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-nav-dropdown__chevron{transition:transform .18s ease}.av-nav-dropdown__chevron--open{transform:rotate(180deg)}.av-nav-dropdown__panel{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .2s ease,opacity .18s ease}.av-nav-dropdown__panel--open{grid-template-rows:1fr;opacity:1}.av-nav-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"] }] });
|
|
281
304
|
}
|
|
282
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type:
|
|
305
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvNavDropdown, decorators: [{
|
|
283
306
|
type: Component,
|
|
284
|
-
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"] }]
|
|
307
|
+
args: [{ imports: [CommonModule, AvIcon], selector: 'av-nav-dropdown', template: "<div class=\"av-nav-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n type=\"button\"\n class=\"av-nav-dropdown__trigger\"\n [class.av-nav-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-nav-dropdown__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n }\n\n <span class=\"av-nav-dropdown__label\">\n @if (label()) {\n {{ label() }}\n } @else {\n <ng-content select=\"[av-nav-dropdown-label]\"></ng-content>\n }\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-nav-dropdown__badge\">{{ badge() }}</span>\n }\n\n <span\n class=\"av-nav-dropdown__chevron\"\n av-icon\n name=\"expand_more\"\n size=\"md\"\n [class.av-nav-dropdown__chevron--open]=\"isExpanded()\"\n ></span>\n </button>\n\n <div\n class=\"av-nav-dropdown__panel\"\n [id]=\"panelId\"\n [class.av-nav-dropdown__panel--open]=\"isExpanded()\"\n [attr.aria-hidden]=\"!isExpanded()\"\n [attr.inert]=\"isExpanded() ? null : ''\"\n >\n <div class=\"av-nav-dropdown__panel-inner\">\n <ng-content></ng-content>\n </div>\n </div>\n</div>\n", styles: [":host{display:block;min-width:0}.av-nav-dropdown{display:grid;gap:.125rem;min-width:0}.av-nav-dropdown__trigger{align-items:center;background:transparent;border:1px solid transparent;border-radius:var(--av-radius-md);box-sizing:border-box;color:var(--av-nav-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-nav-dropdown__trigger:hover:not(:disabled),.av-nav-dropdown__trigger--active{background:var(--av-nav-dropdown-accent-soft);color:var(--av-nav-dropdown-accent-hover)}.av-nav-dropdown__trigger--active{border-color:color-mix(in srgb,var(--av-nav-dropdown-accent) 24%,transparent);color:var(--av-nav-dropdown-text-active);font-weight:700}.av-nav-dropdown__trigger:disabled{cursor:not-allowed;opacity:.52}.av-nav-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-nav-dropdown-accent) 24%,transparent);outline:none}.av-nav-dropdown__icon,.av-nav-dropdown__chevron{color:currentColor;flex:0 0 auto}.av-nav-dropdown__label{flex:1;font-size:.875rem;line-height:1.25;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-nav-dropdown__badge{background:var(--av-nav-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-nav-dropdown__chevron{transition:transform .18s ease}.av-nav-dropdown__chevron--open{transform:rotate(180deg)}.av-nav-dropdown__panel{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .2s ease,opacity .18s ease}.av-nav-dropdown__panel--open{grid-template-rows:1fr;opacity:1}.av-nav-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"] }]
|
|
285
308
|
}], 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"] }] } });
|
|
286
309
|
|
|
287
310
|
class AvNavLink {
|
|
@@ -596,11 +619,11 @@ class AvSidenav {
|
|
|
596
619
|
return value;
|
|
597
620
|
}
|
|
598
621
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSidenav, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
599
|
-
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(
|
|
622
|
+
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:100vh;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(100vw - 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{-webkit-overflow-scrolling:touch;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"] }] });
|
|
600
623
|
}
|
|
601
624
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSidenav, decorators: [{
|
|
602
625
|
type: Component,
|
|
603
|
-
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(
|
|
626
|
+
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:100vh;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(100vw - 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{-webkit-overflow-scrolling:touch;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"] }]
|
|
604
627
|
}], 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: [{
|
|
605
628
|
type: HostBinding,
|
|
606
629
|
args: ['class.av-sidenav-host--drawer']
|
|
@@ -900,6 +923,168 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
900
923
|
args: ['keydown.escape']
|
|
901
924
|
}] } });
|
|
902
925
|
|
|
926
|
+
class AvDropdown {
|
|
927
|
+
config = inject(VISUALS_CONFIG);
|
|
928
|
+
themeService = inject(ThemeService);
|
|
929
|
+
badge = input(null, /* @ts-ignore */
|
|
930
|
+
...(ngDevMode ? [{ debugName: "badge" }] : /* istanbul ignore next */ []));
|
|
931
|
+
closeOnContentClick = input(true, { ...(ngDevMode ? { debugName: "closeOnContentClick" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
932
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
933
|
+
icon = input('', /* @ts-ignore */
|
|
934
|
+
...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
935
|
+
label = input('', /* @ts-ignore */
|
|
936
|
+
...(ngDevMode ? [{ debugName: "label" }] : /* istanbul ignore next */ []));
|
|
937
|
+
matchTriggerWidth = input(false, { ...(ngDevMode ? { debugName: "matchTriggerWidth" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
938
|
+
offset = input(8, { ...(ngDevMode ? { debugName: "offset" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
939
|
+
open = input(undefined, { ...(ngDevMode ? { debugName: "open" } : /* istanbul ignore next */ {}), transform: (value) => value === undefined ? undefined : booleanAttribute(value) });
|
|
940
|
+
placement = input('bottom-start', /* @ts-ignore */
|
|
941
|
+
...(ngDevMode ? [{ debugName: "placement" }] : /* istanbul ignore next */ []));
|
|
942
|
+
rounded = input('md', /* @ts-ignore */
|
|
943
|
+
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
944
|
+
variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
|
|
945
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
946
|
+
openChange = output();
|
|
947
|
+
triggerEl;
|
|
948
|
+
internalOpen = signal(false, /* @ts-ignore */
|
|
949
|
+
...(ngDevMode ? [{ debugName: "internalOpen" }] : /* istanbul ignore next */ []));
|
|
950
|
+
panelId = `av-dropdown-${Math.random().toString(36).slice(2, 9)}`;
|
|
951
|
+
isOpen = computed(() => this.open() ?? this.internalOpen(), /* @ts-ignore */
|
|
952
|
+
...(ngDevMode ? [{ debugName: "isOpen" }] : /* istanbul ignore next */ []));
|
|
953
|
+
overlayPositions = computed(() => this.positionsFor(this.placement()), /* @ts-ignore */
|
|
954
|
+
...(ngDevMode ? [{ debugName: "overlayPositions" }] : /* istanbul ignore next */ []));
|
|
955
|
+
themeVars = computed(() => {
|
|
956
|
+
const variant = this.variant();
|
|
957
|
+
const isDark = this.themeService.dark();
|
|
958
|
+
const accent = `var(--av-${variant}-${isDark ? 400 : 500})`;
|
|
959
|
+
return {
|
|
960
|
+
'--av-dropdown-accent': accent,
|
|
961
|
+
'--av-dropdown-accent-strong': `var(--av-${variant}-${isDark ? 300 : 600})`,
|
|
962
|
+
'--av-dropdown-accent-soft': isDark
|
|
963
|
+
? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`
|
|
964
|
+
: `var(--av-${variant}-50)`,
|
|
965
|
+
'--av-dropdown-bg': 'var(--av-color-surface)',
|
|
966
|
+
'--av-dropdown-border': 'var(--av-color-border)',
|
|
967
|
+
'--av-dropdown-panel-bg': 'var(--av-color-surface-raised)',
|
|
968
|
+
'--av-dropdown-panel-border': 'var(--av-color-border-soft)',
|
|
969
|
+
'--av-dropdown-shadow': 'var(--av-shadow-raised)',
|
|
970
|
+
'--av-dropdown-text': 'var(--av-color-text)',
|
|
971
|
+
'--av-dropdown-muted': 'var(--av-color-text-muted)',
|
|
972
|
+
'--av-dropdown-focus-ring': `color-mix(in srgb, ${accent} 24%, transparent)`,
|
|
973
|
+
};
|
|
974
|
+
}, /* @ts-ignore */
|
|
975
|
+
...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
|
|
976
|
+
constructor() {
|
|
977
|
+
effect(() => {
|
|
978
|
+
const controlledOpen = this.open();
|
|
979
|
+
if (controlledOpen !== undefined) {
|
|
980
|
+
this.internalOpen.set(controlledOpen);
|
|
981
|
+
}
|
|
982
|
+
});
|
|
983
|
+
}
|
|
984
|
+
get roundedStyle() {
|
|
985
|
+
if (typeof this.rounded() === 'string') {
|
|
986
|
+
return `var(--av-radius-${this.rounded()})`;
|
|
987
|
+
}
|
|
988
|
+
return `${this.rounded()}px`;
|
|
989
|
+
}
|
|
990
|
+
toggle() {
|
|
991
|
+
if (this.disabled())
|
|
992
|
+
return;
|
|
993
|
+
this.setOpen(!this.isOpen());
|
|
994
|
+
}
|
|
995
|
+
close() {
|
|
996
|
+
this.setOpen(false);
|
|
997
|
+
}
|
|
998
|
+
handleTriggerKeydown(event) {
|
|
999
|
+
if (event.key === 'Escape') {
|
|
1000
|
+
this.close();
|
|
1001
|
+
return;
|
|
1002
|
+
}
|
|
1003
|
+
if (event.key !== 'Enter' && event.key !== ' ' && event.key !== 'ArrowDown')
|
|
1004
|
+
return;
|
|
1005
|
+
event.preventDefault();
|
|
1006
|
+
this.setOpen(true);
|
|
1007
|
+
}
|
|
1008
|
+
handlePanelClick() {
|
|
1009
|
+
if (this.closeOnContentClick()) {
|
|
1010
|
+
this.close();
|
|
1011
|
+
}
|
|
1012
|
+
}
|
|
1013
|
+
setOpen(open) {
|
|
1014
|
+
if (open && this.disabled())
|
|
1015
|
+
return;
|
|
1016
|
+
if (open === this.isOpen())
|
|
1017
|
+
return;
|
|
1018
|
+
this.internalOpen.set(open);
|
|
1019
|
+
this.openChange.emit(open);
|
|
1020
|
+
}
|
|
1021
|
+
positionsFor(placement) {
|
|
1022
|
+
const offset = Math.max(0, this.offset());
|
|
1023
|
+
const positions = {
|
|
1024
|
+
'bottom-start': [
|
|
1025
|
+
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },
|
|
1026
|
+
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },
|
|
1027
|
+
],
|
|
1028
|
+
'bottom-end': [
|
|
1029
|
+
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },
|
|
1030
|
+
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },
|
|
1031
|
+
],
|
|
1032
|
+
'top-start': [
|
|
1033
|
+
{ originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -offset },
|
|
1034
|
+
{ originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: offset },
|
|
1035
|
+
],
|
|
1036
|
+
'top-end': [
|
|
1037
|
+
{ originX: 'end', originY: 'top', overlayX: 'end', overlayY: 'bottom', offsetY: -offset },
|
|
1038
|
+
{ originX: 'end', originY: 'bottom', overlayX: 'end', overlayY: 'top', offsetY: offset },
|
|
1039
|
+
],
|
|
1040
|
+
};
|
|
1041
|
+
return positions[placement] ?? positions['bottom-start'];
|
|
1042
|
+
}
|
|
1043
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDropdown, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1044
|
+
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 }, closeOnContentClick: { classPropertyName: "closeOnContentClick", publicName: "closeOnContentClick", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, matchTriggerWidth: { classPropertyName: "matchTriggerWidth", publicName: "matchTriggerWidth", isSignal: true, isRequired: false, transformFunction: null }, offset: { classPropertyName: "offset", publicName: "offset", isSignal: true, isRequired: false, transformFunction: null }, open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, placement: { classPropertyName: "placement", publicName: "placement", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { openChange: "openChange" }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div class=\"av-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"av-dropdown__trigger\"\n [class.av-dropdown__trigger--open]=\"isOpen()\"\n [disabled]=\"disabled()\"\n [style.border-radius]=\"roundedStyle\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"menu\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n @if (label() || icon() || (badge() !== null && badge() !== undefined)) {\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 {{ label() }}\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-dropdown__badge\">{{ badge() }}</span>\n }\n } @else {\n <span class=\"av-dropdown__custom-trigger\">\n <ng-content select=\"[av-dropdown-trigger]\"></ng-content>\n </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]=\"isOpen()\"\n ></span>\n </button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n class=\"av-dropdown__panel\"\n [id]=\"panelId\"\n [ngStyle]=\"themeVars()\"\n [style.border-radius]=\"roundedStyle\"\n [style.min-width.px]=\"matchTriggerWidth() ? triggerEl.offsetWidth : null\"\n role=\"menu\"\n tabindex=\"-1\"\n (click)=\"handlePanelClick()\"\n (keydown.escape)=\"close()\"\n >\n <ng-content></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block}.av-dropdown{display:inline-block}.av-dropdown__trigger{align-items:center;background:var(--av-dropdown-bg);border:1px solid var(--av-dropdown-border);box-sizing:border-box;color:var(--av-dropdown-text);cursor:pointer;display:inline-flex;font:inherit;font-size:.875rem;font-weight:700;gap:.5rem;justify-content:center;line-height:1.2;min-height:2.5rem;min-width:0;padding:.625rem .75rem;touch-action:manipulation;transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease,color .18s ease}.av-dropdown__trigger:hover:not(:disabled),.av-dropdown__trigger--open{background:var(--av-dropdown-accent-soft);border-color:color-mix(in srgb,var(--av-dropdown-accent) 36%,var(--av-dropdown-border));color:var(--av-dropdown-accent-strong)}.av-dropdown__trigger:disabled{cursor:not-allowed;opacity:.52}.av-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px var(--av-dropdown-focus-ring);outline:none}.av-dropdown__icon,.av-dropdown__chevron{color:currentColor;flex:0 0 auto}.av-dropdown__label,.av-dropdown__custom-trigger{min-width:0}.av-dropdown__badge{align-items:center;background:var(--av-dropdown-accent);border-radius:var(--av-radius-full);color:var(--av-white);display:inline-flex;flex:0 0 auto;font-size:.6875rem;font-weight:800;justify-content:center;line-height:1;min-width:1.25rem;padding:.25rem .375rem}.av-dropdown__chevron{transition:transform .18s ease}.av-dropdown__chevron--open{transform:rotate(180deg)}.av-dropdown__panel{animation:av-dropdown-panel-in .14s cubic-bezier(.2,0,0,1);background:var(--av-dropdown-panel-bg);border:1px solid var(--av-dropdown-panel-border);box-shadow:var(--av-dropdown-shadow);box-sizing:border-box;color:var(--av-dropdown-text);display:grid;gap:.125rem;max-height:calc(100dvh - 1rem);max-width:min(24rem,calc(100vw - 2rem));min-width:12rem;overflow:auto;overscroll-behavior:contain;padding:.375rem}@media(pointer:coarse),(max-width:640px){.av-dropdown__trigger{min-height:2.75rem}}@keyframes av-dropdown-panel-in{0%{opacity:0;transform:translateY(-.15rem) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
1045
|
+
}
|
|
1046
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDropdown, decorators: [{
|
|
1047
|
+
type: Component,
|
|
1048
|
+
args: [{ imports: [CommonModule, OverlayModule, AvIcon], selector: 'av-dropdown', standalone: true, template: "<div class=\"av-dropdown\" [ngStyle]=\"themeVars()\">\n <button\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"button\"\n class=\"av-dropdown__trigger\"\n [class.av-dropdown__trigger--open]=\"isOpen()\"\n [disabled]=\"disabled()\"\n [style.border-radius]=\"roundedStyle\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-expanded]=\"isOpen()\"\n aria-haspopup=\"menu\"\n (click)=\"toggle()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n @if (label() || icon() || (badge() !== null && badge() !== undefined)) {\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 {{ label() }}\n </span>\n\n @if (badge() !== null && badge() !== undefined) {\n <span class=\"av-dropdown__badge\">{{ badge() }}</span>\n }\n } @else {\n <span class=\"av-dropdown__custom-trigger\">\n <ng-content select=\"[av-dropdown-trigger]\"></ng-content>\n </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]=\"isOpen()\"\n ></span>\n </button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayPositions]=\"overlayPositions()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"close()\"\n (detach)=\"close()\"\n>\n <div\n class=\"av-dropdown__panel\"\n [id]=\"panelId\"\n [ngStyle]=\"themeVars()\"\n [style.border-radius]=\"roundedStyle\"\n [style.min-width.px]=\"matchTriggerWidth() ? triggerEl.offsetWidth : null\"\n role=\"menu\"\n tabindex=\"-1\"\n (click)=\"handlePanelClick()\"\n (keydown.escape)=\"close()\"\n >\n <ng-content></ng-content>\n </div>\n</ng-template>\n", styles: [":host{display:inline-block}.av-dropdown{display:inline-block}.av-dropdown__trigger{align-items:center;background:var(--av-dropdown-bg);border:1px solid var(--av-dropdown-border);box-sizing:border-box;color:var(--av-dropdown-text);cursor:pointer;display:inline-flex;font:inherit;font-size:.875rem;font-weight:700;gap:.5rem;justify-content:center;line-height:1.2;min-height:2.5rem;min-width:0;padding:.625rem .75rem;touch-action:manipulation;transition:background-color .18s ease,border-color .18s ease,box-shadow .18s ease,color .18s ease}.av-dropdown__trigger:hover:not(:disabled),.av-dropdown__trigger--open{background:var(--av-dropdown-accent-soft);border-color:color-mix(in srgb,var(--av-dropdown-accent) 36%,var(--av-dropdown-border));color:var(--av-dropdown-accent-strong)}.av-dropdown__trigger:disabled{cursor:not-allowed;opacity:.52}.av-dropdown__trigger:focus-visible{box-shadow:0 0 0 3px var(--av-dropdown-focus-ring);outline:none}.av-dropdown__icon,.av-dropdown__chevron{color:currentColor;flex:0 0 auto}.av-dropdown__label,.av-dropdown__custom-trigger{min-width:0}.av-dropdown__badge{align-items:center;background:var(--av-dropdown-accent);border-radius:var(--av-radius-full);color:var(--av-white);display:inline-flex;flex:0 0 auto;font-size:.6875rem;font-weight:800;justify-content:center;line-height:1;min-width:1.25rem;padding:.25rem .375rem}.av-dropdown__chevron{transition:transform .18s ease}.av-dropdown__chevron--open{transform:rotate(180deg)}.av-dropdown__panel{animation:av-dropdown-panel-in .14s cubic-bezier(.2,0,0,1);background:var(--av-dropdown-panel-bg);border:1px solid var(--av-dropdown-panel-border);box-shadow:var(--av-dropdown-shadow);box-sizing:border-box;color:var(--av-dropdown-text);display:grid;gap:.125rem;max-height:calc(100dvh - 1rem);max-width:min(24rem,calc(100vw - 2rem));min-width:12rem;overflow:auto;overscroll-behavior:contain;padding:.375rem}@media(pointer:coarse),(max-width:640px){.av-dropdown__trigger{min-height:2.75rem}}@keyframes av-dropdown-panel-in{0%{opacity:0;transform:translateY(-.15rem) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}\n"] }]
|
|
1049
|
+
}], ctorParameters: () => [], propDecorators: { badge: [{ type: i0.Input, args: [{ isSignal: true, alias: "badge", required: false }] }], closeOnContentClick: [{ type: i0.Input, args: [{ isSignal: true, alias: "closeOnContentClick", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], label: [{ type: i0.Input, args: [{ isSignal: true, alias: "label", required: false }] }], matchTriggerWidth: [{ type: i0.Input, args: [{ isSignal: true, alias: "matchTriggerWidth", required: false }] }], offset: [{ type: i0.Input, args: [{ isSignal: true, alias: "offset", required: false }] }], open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], placement: [{ type: i0.Input, args: [{ isSignal: true, alias: "placement", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], openChange: [{ type: i0.Output, args: ["openChange"] }], triggerEl: [{
|
|
1050
|
+
type: ViewChild,
|
|
1051
|
+
args: ['triggerEl']
|
|
1052
|
+
}] } });
|
|
1053
|
+
|
|
1054
|
+
class AvDropdownItem {
|
|
1055
|
+
danger = input(false, { ...(ngDevMode ? { debugName: "danger" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
1056
|
+
description = input('', /* @ts-ignore */
|
|
1057
|
+
...(ngDevMode ? [{ debugName: "description" }] : /* istanbul ignore next */ []));
|
|
1058
|
+
disabled = input(false, { ...(ngDevMode ? { debugName: "disabled" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
1059
|
+
icon = input('', /* @ts-ignore */
|
|
1060
|
+
...(ngDevMode ? [{ debugName: "icon" }] : /* istanbul ignore next */ []));
|
|
1061
|
+
role = input('menuitem', /* @ts-ignore */
|
|
1062
|
+
...(ngDevMode ? [{ debugName: "role" }] : /* istanbul ignore next */ []));
|
|
1063
|
+
type = input('button', /* @ts-ignore */
|
|
1064
|
+
...(ngDevMode ? [{ debugName: "type" }] : /* istanbul ignore next */ []));
|
|
1065
|
+
handleClick(event) {
|
|
1066
|
+
if (!this.disabled())
|
|
1067
|
+
return;
|
|
1068
|
+
event.preventDefault();
|
|
1069
|
+
event.stopPropagation();
|
|
1070
|
+
}
|
|
1071
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDropdownItem, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1072
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvDropdownItem, isStandalone: true, selector: "button[av-dropdown-item], a[av-dropdown-item]", inputs: { danger: { classPropertyName: "danger", publicName: "danger", 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 }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, role: { classPropertyName: "role", publicName: "role", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "handleClick($event)" }, properties: { "attr.aria-disabled": "disabled() ? \"true\" : null", "attr.disabled": "disabled() ? \"\" : null", "attr.role": "role()", "attr.tabindex": "disabled() ? -1 : 0", "attr.type": "type()", "class.av-dropdown-item--danger": "danger()", "class.av-dropdown-item--disabled": "disabled()" } }, ngImport: i0, template: "@if (icon()) {\n <span class=\"av-dropdown-item__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n}\n\n<span class=\"av-dropdown-item__content\">\n <span class=\"av-dropdown-item__label\">\n <ng-content></ng-content>\n </span>\n\n @if (description()) {\n <span class=\"av-dropdown-item__description\">{{ description() }}</span>\n }\n</span>\n", styles: [":host{align-items:center;background:transparent;border:0;border-radius:var(--av-radius-sm);box-sizing:border-box;color:var(--av-dropdown-text, var(--av-color-text));cursor:pointer;display:flex;font:inherit;gap:.625rem;min-height:2.25rem;min-width:0;padding:.5rem .625rem;text-align:left;text-decoration:none;transition:background-color .16s ease,color .16s ease;width:100%}:host(:hover),:host(:focus-visible){background:var(--av-dropdown-accent-soft, var(--av-color-surface-muted));color:var(--av-dropdown-accent-strong, var(--av-color-text));outline:none}:host(.av-dropdown-item--danger){color:var(--av-red-600, #dc2626)}:host(.av-dropdown-item--danger:hover),:host(.av-dropdown-item--danger:focus-visible){background:color-mix(in srgb,var(--av-red-500, #ef4444) 12%,transparent);color:var(--av-red-700, #b91c1c)}:host(.av-dropdown-item--disabled){cursor:not-allowed;opacity:.52}:host(.av-dropdown-item--disabled:hover),:host(.av-dropdown-item--disabled:focus-visible){background:transparent;color:var(--av-dropdown-text, var(--av-color-text))}.av-dropdown-item__icon{color:currentColor;flex:0 0 auto}.av-dropdown-item__content{display:grid;gap:.125rem;min-width:0}.av-dropdown-item__label{font-size:.875rem;font-weight:700;line-height:1.25;min-width:0}.av-dropdown-item__description{color:var(--av-dropdown-muted, var(--av-color-text-muted));font-size:.75rem;line-height:1.25;min-width:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
1073
|
+
}
|
|
1074
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDropdownItem, decorators: [{
|
|
1075
|
+
type: Component,
|
|
1076
|
+
args: [{ host: {
|
|
1077
|
+
'[attr.aria-disabled]': 'disabled() ? "true" : null',
|
|
1078
|
+
'[attr.disabled]': 'disabled() ? "" : null',
|
|
1079
|
+
'[attr.role]': 'role()',
|
|
1080
|
+
'[attr.tabindex]': 'disabled() ? -1 : 0',
|
|
1081
|
+
'[attr.type]': 'type()',
|
|
1082
|
+
'[class.av-dropdown-item--danger]': 'danger()',
|
|
1083
|
+
'[class.av-dropdown-item--disabled]': 'disabled()',
|
|
1084
|
+
'(click)': 'handleClick($event)',
|
|
1085
|
+
}, imports: [CommonModule, AvIcon], selector: 'button[av-dropdown-item], a[av-dropdown-item]', standalone: true, template: "@if (icon()) {\n <span class=\"av-dropdown-item__icon\" av-icon [name]=\"icon()\" size=\"md\"></span>\n}\n\n<span class=\"av-dropdown-item__content\">\n <span class=\"av-dropdown-item__label\">\n <ng-content></ng-content>\n </span>\n\n @if (description()) {\n <span class=\"av-dropdown-item__description\">{{ description() }}</span>\n }\n</span>\n", styles: [":host{align-items:center;background:transparent;border:0;border-radius:var(--av-radius-sm);box-sizing:border-box;color:var(--av-dropdown-text, var(--av-color-text));cursor:pointer;display:flex;font:inherit;gap:.625rem;min-height:2.25rem;min-width:0;padding:.5rem .625rem;text-align:left;text-decoration:none;transition:background-color .16s ease,color .16s ease;width:100%}:host(:hover),:host(:focus-visible){background:var(--av-dropdown-accent-soft, var(--av-color-surface-muted));color:var(--av-dropdown-accent-strong, var(--av-color-text));outline:none}:host(.av-dropdown-item--danger){color:var(--av-red-600, #dc2626)}:host(.av-dropdown-item--danger:hover),:host(.av-dropdown-item--danger:focus-visible){background:color-mix(in srgb,var(--av-red-500, #ef4444) 12%,transparent);color:var(--av-red-700, #b91c1c)}:host(.av-dropdown-item--disabled){cursor:not-allowed;opacity:.52}:host(.av-dropdown-item--disabled:hover),:host(.av-dropdown-item--disabled:focus-visible){background:transparent;color:var(--av-dropdown-text, var(--av-color-text))}.av-dropdown-item__icon{color:currentColor;flex:0 0 auto}.av-dropdown-item__content{display:grid;gap:.125rem;min-width:0}.av-dropdown-item__label{font-size:.875rem;font-weight:700;line-height:1.25;min-width:0}.av-dropdown-item__description{color:var(--av-dropdown-muted, var(--av-color-text-muted));font-size:.75rem;line-height:1.25;min-width:0}\n"] }]
|
|
1086
|
+
}], propDecorators: { danger: [{ type: i0.Input, args: [{ isSignal: true, alias: "danger", required: false }] }], description: [{ type: i0.Input, args: [{ isSignal: true, alias: "description", required: false }] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], role: [{ type: i0.Input, args: [{ isSignal: true, alias: "role", required: false }] }], type: [{ type: i0.Input, args: [{ isSignal: true, alias: "type", required: false }] }] } });
|
|
1087
|
+
|
|
903
1088
|
class AvTextArea {
|
|
904
1089
|
ngControl;
|
|
905
1090
|
config = inject(VISUALS_CONFIG);
|
|
@@ -949,7 +1134,7 @@ class AvTextArea {
|
|
|
949
1134
|
return !!(this.ngControl && this.ngControl.invalid && (this.ngControl.dirty || this.ngControl.touched));
|
|
950
1135
|
}
|
|
951
1136
|
writeValue(value) {
|
|
952
|
-
this.value = value
|
|
1137
|
+
this.value = value ?? '';
|
|
953
1138
|
}
|
|
954
1139
|
registerOnChange(fn) {
|
|
955
1140
|
this.onChange = fn;
|
|
@@ -966,11 +1151,11 @@ class AvTextArea {
|
|
|
966
1151
|
this.onChange(this.value);
|
|
967
1152
|
}
|
|
968
1153
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvTextArea, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
969
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvTextArea, isStandalone: true, selector: "av-text-area", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div class=\"av-text-area\"\n[style.--av-text-area-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-text-area-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-text-area__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-text-area__field\">\n @if (icon() || loading()) {\n <div class=\"av-text-area__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <textarea\n #inputRef\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-text-area__control\"\n [class.av-text-area__control--with-icon]=\"icon()\"\n [class.av-text-area__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n >\n </textarea>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-text-area__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-text-area{--av-text-area-control-bg: var(--av-color-surface);--av-text-area-color: var(--av-color-text);--av-text-area-muted-color: var(--av-color-text-subtle);--av-text-area-border: var(--av-color-border);--av-text-area-hover-border: var(--av-color-border-hover);--av-text-area-focus-color: var(--av-text-area-accent, var(--av-slate-500));--av-text-area-disabled-bg: var(--av-color-surface-muted);--av-text-area-invalid-color: var(--av-color-danger);--av-text-area-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-text-area-color)}.av-text-area__label{color:var(--av-text-area-color);font-size:.875rem;font-weight:700;text-align:start}.av-text-area__field{align-items:center;display:flex;position:relative;width:100%}.av-text-area__icon{color:var(--av-text-area-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-text-area__control{background-color:var(--av-text-area-control-bg);border:2px solid var(--av-text-area-border);border-radius:var(--av-radius-lg);box-shadow:var(--av-shadow-control);color:var(--av-text-area-color);padding:.5rem 1rem;transition:all .2s ease;width:100%}.av-text-area__control::placeholder{color:var(--av-text-area-muted-color)}.av-text-area__control:hover{border-color:var(--av-text-area-hover-border)}.av-text-area__control:focus{outline:none}.av-text-area__control:disabled{background:var(--av-text-area-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-text-area__control--with-icon{padding-left:2.5rem}.av-text-area__control--without-icon{padding-left:1rem}.av-text-area__control:focus{border-color:var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-focus-color) 24%,transparent)}.av-text-area__control--invalid,.av-text-area__control--invalid:focus{border-color:var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-invalid-color) 24%,transparent);color:var(--av-text-area-invalid-text);animation:av-text-area-shake .4s ease-in-out}.av-text-area__error{color:var(--av-text-area-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-text-area-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-text-area{--av-text-area-focus-color: var(--av-text-area-accent-dark, var(--av-text-area-accent, var(--av-slate-400)))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
1154
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvTextArea, isStandalone: true, selector: "av-text-area", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div class=\"av-text-area\"\n[style.--av-text-area-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-text-area-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-text-area__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-text-area__field\">\n @if (icon() || loading()) {\n <div class=\"av-text-area__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <textarea\n #inputRef\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-text-area__control\"\n [class.av-text-area__control--with-icon]=\"icon()\"\n [class.av-text-area__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n >\n </textarea>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-text-area__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-text-area{--av-text-area-control-bg: var(--av-color-surface);--av-text-area-color: var(--av-color-text);--av-text-area-muted-color: var(--av-color-text-subtle);--av-text-area-border: var(--av-color-border);--av-text-area-hover-border: var(--av-color-border-hover);--av-text-area-focus-color: var(--av-text-area-accent, var(--av-slate-500));--av-text-area-disabled-bg: var(--av-color-surface-muted);--av-text-area-invalid-color: var(--av-color-danger);--av-text-area-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-text-area-color)}.av-text-area__label{color:var(--av-text-area-color);font-size:.875rem;font-weight:700;text-align:start}.av-text-area__field{align-items:center;display:flex;position:relative;width:100%}.av-text-area__icon{color:var(--av-text-area-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-text-area__control{background-color:var(--av-text-area-control-bg);border:2px solid var(--av-text-area-border);border-radius:var(--av-radius-lg);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-text-area-color);font-size:.875rem;line-height:1.5;min-height:6rem;padding:.5rem 1rem;resize:vertical;transition:all .2s ease;width:100%}.av-text-area__control::placeholder{color:var(--av-text-area-muted-color)}.av-text-area__control:hover{border-color:var(--av-text-area-hover-border)}.av-text-area__control:focus{outline:none}.av-text-area__control:disabled{background:var(--av-text-area-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-text-area__control--with-icon{padding-left:2.5rem}.av-text-area__control--without-icon{padding-left:1rem}.av-text-area__control:focus{border-color:var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-focus-color) 24%,transparent)}.av-text-area__control--invalid,.av-text-area__control--invalid:focus{border-color:var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-invalid-color) 24%,transparent);color:var(--av-text-area-invalid-text);animation:av-text-area-shake .4s ease-in-out}.av-text-area__error{color:var(--av-text-area-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-text-area-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-text-area{--av-text-area-focus-color: var(--av-text-area-accent-dark, var(--av-text-area-accent, var(--av-slate-400)))}@media(pointer:coarse),(max-width:640px){.av-text-area__control{font-size:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
970
1155
|
}
|
|
971
1156
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvTextArea, decorators: [{
|
|
972
1157
|
type: Component,
|
|
973
|
-
args: [{ selector: 'av-text-area', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, AvIcon], template: "<div class=\"av-text-area\"\n[style.--av-text-area-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-text-area-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-text-area__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-text-area__field\">\n @if (icon() || loading()) {\n <div class=\"av-text-area__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <textarea\n #inputRef\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-text-area__control\"\n [class.av-text-area__control--with-icon]=\"icon()\"\n [class.av-text-area__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n >\n </textarea>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-text-area__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-text-area{--av-text-area-control-bg: var(--av-color-surface);--av-text-area-color: var(--av-color-text);--av-text-area-muted-color: var(--av-color-text-subtle);--av-text-area-border: var(--av-color-border);--av-text-area-hover-border: var(--av-color-border-hover);--av-text-area-focus-color: var(--av-text-area-accent, var(--av-slate-500));--av-text-area-disabled-bg: var(--av-color-surface-muted);--av-text-area-invalid-color: var(--av-color-danger);--av-text-area-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-text-area-color)}.av-text-area__label{color:var(--av-text-area-color);font-size:.875rem;font-weight:700;text-align:start}.av-text-area__field{align-items:center;display:flex;position:relative;width:100%}.av-text-area__icon{color:var(--av-text-area-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-text-area__control{background-color:var(--av-text-area-control-bg);border:2px solid var(--av-text-area-border);border-radius:var(--av-radius-lg);box-shadow:var(--av-shadow-control);color:var(--av-text-area-color);padding:.5rem 1rem;transition:all .2s ease;width:100%}.av-text-area__control::placeholder{color:var(--av-text-area-muted-color)}.av-text-area__control:hover{border-color:var(--av-text-area-hover-border)}.av-text-area__control:focus{outline:none}.av-text-area__control:disabled{background:var(--av-text-area-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-text-area__control--with-icon{padding-left:2.5rem}.av-text-area__control--without-icon{padding-left:1rem}.av-text-area__control:focus{border-color:var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-focus-color) 24%,transparent)}.av-text-area__control--invalid,.av-text-area__control--invalid:focus{border-color:var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-invalid-color) 24%,transparent);color:var(--av-text-area-invalid-text);animation:av-text-area-shake .4s ease-in-out}.av-text-area__error{color:var(--av-text-area-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-text-area-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-text-area{--av-text-area-focus-color: var(--av-text-area-accent-dark, var(--av-text-area-accent, var(--av-slate-400)))}\n"] }]
|
|
1158
|
+
args: [{ selector: 'av-text-area', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, AvIcon], template: "<div class=\"av-text-area\"\n[style.--av-text-area-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-text-area-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-text-area__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-text-area__field\">\n @if (icon() || loading()) {\n <div class=\"av-text-area__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <textarea\n #inputRef\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-text-area__control\"\n [class.av-text-area__control--with-icon]=\"icon()\"\n [class.av-text-area__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n >\n </textarea>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-text-area__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-text-area{--av-text-area-control-bg: var(--av-color-surface);--av-text-area-color: var(--av-color-text);--av-text-area-muted-color: var(--av-color-text-subtle);--av-text-area-border: var(--av-color-border);--av-text-area-hover-border: var(--av-color-border-hover);--av-text-area-focus-color: var(--av-text-area-accent, var(--av-slate-500));--av-text-area-disabled-bg: var(--av-color-surface-muted);--av-text-area-invalid-color: var(--av-color-danger);--av-text-area-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-text-area-color)}.av-text-area__label{color:var(--av-text-area-color);font-size:.875rem;font-weight:700;text-align:start}.av-text-area__field{align-items:center;display:flex;position:relative;width:100%}.av-text-area__icon{color:var(--av-text-area-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-text-area__control{background-color:var(--av-text-area-control-bg);border:2px solid var(--av-text-area-border);border-radius:var(--av-radius-lg);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-text-area-color);font-size:.875rem;line-height:1.5;min-height:6rem;padding:.5rem 1rem;resize:vertical;transition:all .2s ease;width:100%}.av-text-area__control::placeholder{color:var(--av-text-area-muted-color)}.av-text-area__control:hover{border-color:var(--av-text-area-hover-border)}.av-text-area__control:focus{outline:none}.av-text-area__control:disabled{background:var(--av-text-area-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-text-area__control--with-icon{padding-left:2.5rem}.av-text-area__control--without-icon{padding-left:1rem}.av-text-area__control:focus{border-color:var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-focus-color) 24%,transparent)}.av-text-area__control--invalid,.av-text-area__control--invalid:focus{border-color:var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-text-area-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-text-area-invalid-color) 24%,transparent);color:var(--av-text-area-invalid-text);animation:av-text-area-shake .4s ease-in-out}.av-text-area__error{color:var(--av-text-area-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-text-area-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-text-area{--av-text-area-focus-color: var(--av-text-area-accent-dark, var(--av-text-area-accent, var(--av-slate-400)))}@media(pointer:coarse),(max-width:640px){.av-text-area__control{font-size:1rem}}\n"] }]
|
|
974
1159
|
}], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
|
|
975
1160
|
type: Optional
|
|
976
1161
|
}, {
|
|
@@ -1357,8 +1542,9 @@ class AvSwitch {
|
|
|
1357
1542
|
disabled = input(false, /* @ts-ignore */
|
|
1358
1543
|
...(ngDevMode ? [{ debugName: "disabled" }] : /* istanbul ignore next */ []));
|
|
1359
1544
|
// Disabled vindo do Angular Forms
|
|
1360
|
-
formDisabled = false
|
|
1361
|
-
|
|
1545
|
+
formDisabled = signal(false, /* @ts-ignore */
|
|
1546
|
+
...(ngDevMode ? [{ debugName: "formDisabled" }] : /* istanbul ignore next */ []));
|
|
1547
|
+
isDisabled = computed(() => this.disabled() || this.formDisabled(), /* @ts-ignore */
|
|
1362
1548
|
...(ngDevMode ? [{ debugName: "isDisabled" }] : /* istanbul ignore next */ []));
|
|
1363
1549
|
themeVars = computed(() => {
|
|
1364
1550
|
const variant = this.variant();
|
|
@@ -1386,7 +1572,7 @@ class AvSwitch {
|
|
|
1386
1572
|
this.onTouched = fn;
|
|
1387
1573
|
}
|
|
1388
1574
|
setDisabledState(disabled) {
|
|
1389
|
-
this.formDisabled
|
|
1575
|
+
this.formDisabled.set(disabled);
|
|
1390
1576
|
}
|
|
1391
1577
|
// --------------------------------
|
|
1392
1578
|
// Interaction
|
|
@@ -1406,7 +1592,7 @@ class AvSwitch {
|
|
|
1406
1592
|
useExisting: forwardRef(() => AvSwitch),
|
|
1407
1593
|
multi: true
|
|
1408
1594
|
}
|
|
1409
|
-
], ngImport: i0, template: "<button\n type=\"button\"\n class=\"av-switch\"\n [ngStyle]=\"themeVars()\"\n [attr.aria-checked]=\"checked()\"\n [attr.data-checked]=\"checked()\"\n [disabled]=\"
|
|
1595
|
+
], ngImport: i0, template: "<button\n type=\"button\"\n class=\"av-switch\"\n [ngStyle]=\"themeVars()\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [attr.data-checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n>\n <div class=\"av-switch-thumb\"></div>\n</button>\n", styles: [".av-switch{--av-switch-width: 40px;--av-switch-height: 22px;--av-switch-padding: 2px;--av-switch-thumb-size: 18px;display:inline-flex;position:relative;width:var(--av-switch-width);height:var(--av-switch-height);padding:var(--av-switch-padding);align-items:center;border:none;border-radius:var(--av-switch-rounded);background-color:var(--av-color-surface-muted);cursor:pointer;transition:background-color .18s ease,box-shadow .18s ease;touch-action:manipulation}.av-switch:before{content:\"\";inset:-.65rem;position:absolute}.av-switch-thumb{width:var(--av-switch-thumb-size);height:var(--av-switch-thumb-size);border-radius:var(--av-switch-rounded);background-color:var(--av-white);box-shadow:0 1px 3px #00000040;transform:translate(0);transition:transform .18s cubic-bezier(.2,0,0,1),background-color .18s ease}.av-switch:disabled{cursor:not-allowed;opacity:.58}.av-switch:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-switch-active-bg) 28%,transparent);outline:none}.av-switch[data-checked=true]{background-color:var(--av-switch-active-bg)}.av-switch[data-checked=true] .av-switch-thumb{transform:translate(calc(var(--av-switch-width) - var(--av-switch-thumb-size) - var(--av-switch-padding) * 2))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
1410
1596
|
}
|
|
1411
1597
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSwitch, decorators: [{
|
|
1412
1598
|
type: Component,
|
|
@@ -1416,7 +1602,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
1416
1602
|
useExisting: forwardRef(() => AvSwitch),
|
|
1417
1603
|
multi: true
|
|
1418
1604
|
}
|
|
1419
|
-
], template: "<button\n type=\"button\"\n class=\"av-switch\"\n [ngStyle]=\"themeVars()\"\n [attr.aria-checked]=\"checked()\"\n [attr.data-checked]=\"checked()\"\n [disabled]=\"
|
|
1605
|
+
], template: "<button\n type=\"button\"\n class=\"av-switch\"\n [ngStyle]=\"themeVars()\"\n role=\"switch\"\n [attr.aria-checked]=\"checked()\"\n [attr.data-checked]=\"checked()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n>\n <div class=\"av-switch-thumb\"></div>\n</button>\n", styles: [".av-switch{--av-switch-width: 40px;--av-switch-height: 22px;--av-switch-padding: 2px;--av-switch-thumb-size: 18px;display:inline-flex;position:relative;width:var(--av-switch-width);height:var(--av-switch-height);padding:var(--av-switch-padding);align-items:center;border:none;border-radius:var(--av-switch-rounded);background-color:var(--av-color-surface-muted);cursor:pointer;transition:background-color .18s ease,box-shadow .18s ease;touch-action:manipulation}.av-switch:before{content:\"\";inset:-.65rem;position:absolute}.av-switch-thumb{width:var(--av-switch-thumb-size);height:var(--av-switch-thumb-size);border-radius:var(--av-switch-rounded);background-color:var(--av-white);box-shadow:0 1px 3px #00000040;transform:translate(0);transition:transform .18s cubic-bezier(.2,0,0,1),background-color .18s ease}.av-switch:disabled{cursor:not-allowed;opacity:.58}.av-switch:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-switch-active-bg) 28%,transparent);outline:none}.av-switch[data-checked=true]{background-color:var(--av-switch-active-bg)}.av-switch[data-checked=true] .av-switch-thumb{transform:translate(calc(var(--av-switch-width) - var(--av-switch-thumb-size) - var(--av-switch-padding) * 2))}\n"] }]
|
|
1420
1606
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], checked: [{ type: i0.Input, args: [{ isSignal: true, alias: "checked", required: false }] }, { type: i0.Output, args: ["checkedChange"] }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }] } });
|
|
1421
1607
|
|
|
1422
1608
|
class AvSlider {
|
|
@@ -1738,7 +1924,7 @@ class AvInput {
|
|
|
1738
1924
|
return !!(this.ngControl && this.ngControl.invalid && (this.ngControl.dirty || this.ngControl.touched));
|
|
1739
1925
|
}
|
|
1740
1926
|
writeValue(value) {
|
|
1741
|
-
this.value = value
|
|
1927
|
+
this.value = value ?? '';
|
|
1742
1928
|
}
|
|
1743
1929
|
registerOnChange(fn) {
|
|
1744
1930
|
this.onChange = fn;
|
|
@@ -1755,11 +1941,11 @@ class AvInput {
|
|
|
1755
1941
|
this.onChange(this.value);
|
|
1756
1942
|
}
|
|
1757
1943
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvInput, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
1758
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvInput, isStandalone: true, selector: "av-input", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div class=\"av-input\"\n[style.--av-input-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-input-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-input__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-input__field\">\n @if (icon() || loading()) {\n <div class=\"av-input__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <input\n #inputRef\n [type]=\"type()\"\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-input__control\"\n [class.av-input__control--with-icon]=\"icon()\"\n [class.av-input__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n />\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-input__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-input{--av-input-control-bg: var(--av-color-surface);--av-input-color: var(--av-color-text);--av-input-muted-color: var(--av-color-text-subtle);--av-input-border: var(--av-color-border);--av-input-hover-border: var(--av-color-border-hover);--av-input-focus-color: var(--av-input-accent, var(--av-slate-500));--av-input-disabled-bg: var(--av-color-surface-muted);--av-input-invalid-color: var(--av-color-danger);--av-input-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-input-color)}.av-input__label{color:var(--av-input-color);font-size:.875rem;font-weight:700;text-align:start}.av-input__field{align-items:center;display:flex;position:relative;width:100%}.av-input__icon{color:var(--av-input-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-input__control{background-color:var(--av-input-control-bg);border:2px solid var(--av-input-border);border-radius:var(--av-radius-lg);box-shadow:var(--av-shadow-control);color:var(--av-input-color);padding:.5rem 1rem;transition:all .2s ease;width:100%}.av-input__control::placeholder{color:var(--av-input-muted-color)}.av-input__control:hover{border-color:var(--av-input-hover-border)}.av-input__control:focus{outline:none}.av-input__control:disabled{background:var(--av-input-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-input__control--with-icon{padding-left:2.5rem}.av-input__control--without-icon{padding-left:1rem}.av-input__control:focus{border-color:var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-focus-color) 24%,transparent)}.av-input__control--invalid,.av-input__control--invalid:focus{border-color:var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-invalid-color) 24%,transparent);color:var(--av-input-invalid-text);animation:av-input-shake .4s ease-in-out}.av-input__error{color:var(--av-input-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-input-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-input{--av-input-focus-color: var(--av-input-accent-dark, var(--av-input-accent, var(--av-slate-400)))}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
1944
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvInput, isStandalone: true, selector: "av-input", inputs: { placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, type: { classPropertyName: "type", publicName: "type", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, autoFocus: { classPropertyName: "autoFocus", publicName: "autoFocus", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["inputRef"], descendants: true }], ngImport: i0, template: "<div class=\"av-input\"\n[style.--av-input-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-input-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-input__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-input__field\">\n @if (icon() || loading()) {\n <div class=\"av-input__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <input\n #inputRef\n [type]=\"type()\"\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-input__control\"\n [class.av-input__control--with-icon]=\"icon()\"\n [class.av-input__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n />\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-input__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-input{--av-input-control-bg: var(--av-color-surface);--av-input-color: var(--av-color-text);--av-input-muted-color: var(--av-color-text-subtle);--av-input-border: var(--av-color-border);--av-input-hover-border: var(--av-color-border-hover);--av-input-focus-color: var(--av-input-accent, var(--av-slate-500));--av-input-disabled-bg: var(--av-color-surface-muted);--av-input-invalid-color: var(--av-color-danger);--av-input-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-input-color)}.av-input__label{color:var(--av-input-color);font-size:.875rem;font-weight:700;text-align:start}.av-input__field{align-items:center;display:flex;position:relative;width:100%}.av-input__icon{color:var(--av-input-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-input__control{background-color:var(--av-input-control-bg);border:2px solid var(--av-input-border);border-radius:var(--av-radius-lg);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-input-color);font-size:.875rem;line-height:1.25;min-height:2.5rem;padding:.5rem 1rem;transition:all .2s ease;width:100%}.av-input__control::placeholder{color:var(--av-input-muted-color)}.av-input__control:hover{border-color:var(--av-input-hover-border)}.av-input__control:focus{outline:none}.av-input__control:disabled{background:var(--av-input-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-input__control--with-icon{padding-left:2.5rem}.av-input__control--without-icon{padding-left:1rem}.av-input__control:focus{border-color:var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-focus-color) 24%,transparent)}.av-input__control--invalid,.av-input__control--invalid:focus{border-color:var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-invalid-color) 24%,transparent);color:var(--av-input-invalid-text);animation:av-input-shake .4s ease-in-out}.av-input__error{color:var(--av-input-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-input-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-input{--av-input-focus-color: var(--av-input-accent-dark, var(--av-input-accent, var(--av-slate-400)))}@media(pointer:coarse),(max-width:640px){.av-input__control{font-size:1rem;min-height:2.75rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: FormsModule }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
1759
1945
|
}
|
|
1760
1946
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvInput, decorators: [{
|
|
1761
1947
|
type: Component,
|
|
1762
|
-
args: [{ selector: 'av-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, AvIcon], template: "<div class=\"av-input\"\n[style.--av-input-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-input-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-input__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-input__field\">\n @if (icon() || loading()) {\n <div class=\"av-input__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <input\n #inputRef\n [type]=\"type()\"\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-input__control\"\n [class.av-input__control--with-icon]=\"icon()\"\n [class.av-input__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n />\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-input__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-input{--av-input-control-bg: var(--av-color-surface);--av-input-color: var(--av-color-text);--av-input-muted-color: var(--av-color-text-subtle);--av-input-border: var(--av-color-border);--av-input-hover-border: var(--av-color-border-hover);--av-input-focus-color: var(--av-input-accent, var(--av-slate-500));--av-input-disabled-bg: var(--av-color-surface-muted);--av-input-invalid-color: var(--av-color-danger);--av-input-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-input-color)}.av-input__label{color:var(--av-input-color);font-size:.875rem;font-weight:700;text-align:start}.av-input__field{align-items:center;display:flex;position:relative;width:100%}.av-input__icon{color:var(--av-input-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-input__control{background-color:var(--av-input-control-bg);border:2px solid var(--av-input-border);border-radius:var(--av-radius-lg);box-shadow:var(--av-shadow-control);color:var(--av-input-color);padding:.5rem 1rem;transition:all .2s ease;width:100%}.av-input__control::placeholder{color:var(--av-input-muted-color)}.av-input__control:hover{border-color:var(--av-input-hover-border)}.av-input__control:focus{outline:none}.av-input__control:disabled{background:var(--av-input-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-input__control--with-icon{padding-left:2.5rem}.av-input__control--without-icon{padding-left:1rem}.av-input__control:focus{border-color:var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-focus-color) 24%,transparent)}.av-input__control--invalid,.av-input__control--invalid:focus{border-color:var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-invalid-color) 24%,transparent);color:var(--av-input-invalid-text);animation:av-input-shake .4s ease-in-out}.av-input__error{color:var(--av-input-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-input-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-input{--av-input-focus-color: var(--av-input-accent-dark, var(--av-input-accent, var(--av-slate-400)))}\n"] }]
|
|
1948
|
+
args: [{ selector: 'av-input', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, AvIcon], template: "<div class=\"av-input\"\n[style.--av-input-accent]=\"`var(--av-${variant()}-500)`\"\n[style.--av-input-accent-dark]=\"`var(--av-${variant()}-400)`\"\n>\n @if (label()) {\n <label class=\"av-input__label\">\n {{ label() }}\n </label>\n }\n\n <div class=\"av-input__field\">\n @if (icon() || loading()) {\n <div class=\"av-input__icon\">\n <span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>\n </div>\n }\n\n <input\n #inputRef\n [type]=\"type()\"\n [value]=\"value\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"disabled\"\n (input)=\"onInput($event)\"\n (blur)=\"onTouched()\"\n class=\"av-input__control\"\n [class.av-input__control--with-icon]=\"icon()\"\n [class.av-input__control--without-icon]=\"!icon()\"\n [ngClass]=\"controlClasses\"\n />\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-input__error\">\n {{ errorMessage() || 'Campo inv\u00E1lido' }}\n </span>\n }\n</div>\n", styles: [".av-input{--av-input-control-bg: var(--av-color-surface);--av-input-color: var(--av-color-text);--av-input-muted-color: var(--av-color-text-subtle);--av-input-border: var(--av-color-border);--av-input-hover-border: var(--av-color-border-hover);--av-input-focus-color: var(--av-input-accent, var(--av-slate-500));--av-input-disabled-bg: var(--av-color-surface-muted);--av-input-invalid-color: var(--av-color-danger);--av-input-invalid-text: var(--av-color-danger-text);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-input-color)}.av-input__label{color:var(--av-input-color);font-size:.875rem;font-weight:700;text-align:start}.av-input__field{align-items:center;display:flex;position:relative;width:100%}.av-input__icon{color:var(--av-input-muted-color);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-input__control{background-color:var(--av-input-control-bg);border:2px solid var(--av-input-border);border-radius:var(--av-radius-lg);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-input-color);font-size:.875rem;line-height:1.25;min-height:2.5rem;padding:.5rem 1rem;transition:all .2s ease;width:100%}.av-input__control::placeholder{color:var(--av-input-muted-color)}.av-input__control:hover{border-color:var(--av-input-hover-border)}.av-input__control:focus{outline:none}.av-input__control:disabled{background:var(--av-input-disabled-bg);color:var(--av-color-text-muted);opacity:.72;cursor:not-allowed}.av-input__control--with-icon{padding-left:2.5rem}.av-input__control--without-icon{padding-left:1rem}.av-input__control:focus{border-color:var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-focus-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-focus-color) 24%,transparent)}.av-input__control--invalid,.av-input__control--invalid:focus{border-color:var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-input-invalid-color);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-input-invalid-color) 24%,transparent);color:var(--av-input-invalid-text);animation:av-input-shake .4s ease-in-out}.av-input__error{color:var(--av-input-invalid-color);font-size:.75rem;font-weight:500}@keyframes av-input-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}:host-context([data-av-theme=\"dark\"]) .av-input{--av-input-focus-color: var(--av-input-accent-dark, var(--av-input-accent, var(--av-slate-400)))}@media(pointer:coarse),(max-width:640px){.av-input__control{font-size:1rem;min-height:2.75rem}}\n"] }]
|
|
1763
1949
|
}], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
|
|
1764
1950
|
type: Optional
|
|
1765
1951
|
}, {
|
|
@@ -1823,7 +2009,9 @@ class AvSelect {
|
|
|
1823
2009
|
this.ngControl.valueAccessor = this;
|
|
1824
2010
|
}
|
|
1825
2011
|
effect(() => {
|
|
1826
|
-
|
|
2012
|
+
if (!this.ngControl) {
|
|
2013
|
+
this._value.set(this.value());
|
|
2014
|
+
}
|
|
1827
2015
|
});
|
|
1828
2016
|
}
|
|
1829
2017
|
get roundedStyle() {
|
|
@@ -1965,11 +2153,11 @@ class AvSelect {
|
|
|
1965
2153
|
this.disabled.set(isDisabled);
|
|
1966
2154
|
}
|
|
1967
2155
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSelect, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
1968
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvSelect, isStandalone: true, selector: "av-select", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, labelFormat: { classPropertyName: "labelFormat", publicName: "labelFormat", isSignal: true, isRequired: false, transformFunction: null }, valueKey: { classPropertyName: "valueKey", publicName: "valueKey", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, onSearch: { classPropertyName: "onSearch", publicName: "onSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div\n class=\"av-select\"\n [ngStyle]=\"themeVars\"\n>\n @if (label()) {\n <label class=\"av-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n class=\"av-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-select__trigger--with-icon]=\"icon() || loading()\"\n [class.av-select__trigger--without-icon]=\"!icon() && !loading()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon() || loading()) {\n <div class=\"av-select__icon\">\n <span av-icon [name]=\"loading() ? loadingIcon() : icon()!\"></span>\n </div>\n }\n\n <span class=\"av-select__value\" [class.av-select__value--placeholder]=\"!selectedOption()\">\n {{ selectedOption() ? getItemLabel(selectedOption()) : placeholder() }}\n </span>\n\n <div class=\"av-select__chevron\" [class.av-select__chevron--open]=\"isOpen()\">\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-select__error\">\n {{ errorMessage() || 'Sele\u00E7\u00E3o obrigat\u00F3ria' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-select__panel\"\n [ngStyle]=\"themeVars\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-select__search\">\n <av-input\n [autoFocus]=\"true\"\n icon=\"search\"\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [ngModel]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"selectOption(item)\"\n class=\"av-select__option\"\n [class.av-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-select__option-label\">{{ getItemLabel(item) }}</span>\n\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-select__option-check\"></span>\n }\n </li>\n } @empty {\n <li class=\"av-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-select{--av-select-color: var(--av-color-text);--av-select-muted-color: var(--av-color-text-subtle);--av-select-trigger-bg: var(--av-color-surface);--av-select-trigger-border: var(--av-color-border);--av-select-trigger-hover-border: var(--av-color-border-hover);--av-select-trigger-focus-border: var(--av-select-accent, var(--av-slate-500));--av-select-panel-bg: var(--av-color-surface-raised);--av-select-panel-border: var(--av-color-border-soft);--av-select-panel-shadow: var(--av-shadow-raised);--av-select-search-border: var(--av-color-border-soft);--av-select-search-color: var(--av-color-text);--av-select-option-hover-bg: var(--av-color-surface-muted);--av-select-option-hover-color: var(--av-select-color);--av-select-option-selected-bg: var(--av-select-soft, #eff6ff);--av-select-option-selected-color: var(--av-select-color);--av-select-option-selected-icon: var(--av-select-accent, #3b82f6);--av-select-empty-color: var(--av-neutral-400);--av-select-disabled-bg: var(--av-color-surface-muted);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-select-color)}.av-select__label{color:var(--av-select-color);font-size:.875rem;font-weight:700;text-align:start}.av-select__trigger{align-items:center;background:var(--av-select-trigger-bg);border:2px solid var(--av-select-trigger-border);box-shadow:var(--av-shadow-control);color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;padding:.5rem 1rem;position:relative;transition:all .2s ease;width:100%}.av-select__trigger:hover{border-color:var(--av-select-trigger-hover-border)}.av-select__trigger:focus{outline:none}.av-select__trigger:focus,.av-select__trigger--open{border-color:var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-select-trigger-focus-border) 24%,transparent)}.av-select__trigger--with-icon{padding-left:2.5rem}.av-select__trigger--without-icon{padding-left:1rem}.av-select__trigger--disabled{background:var(--av-select-disabled-bg);cursor:not-allowed;opacity:.72}.av-select__trigger--invalid,.av-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text);animation:av-select-shake .4s ease-in-out}.av-select__icon,.av-select__chevron{color:var(--av-neutral-400);display:flex;pointer-events:none;position:absolute}.av-select__icon{left:.75rem}.av-select__chevron{right:.75rem;transition:transform .2s ease}.av-select__chevron--open{transform:rotate(180deg)}.av-select__value,.av-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-select__value--placeholder,.av-select__empty{color:var(--av-select-muted-color)}.av-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-select__panel{background:var(--av-select-panel-bg);border:1px solid var(--av-select-panel-border);box-shadow:var(--av-select-panel-shadow);display:flex;flex-direction:column;max-height:15rem;margin-top:.25rem;overflow:hidden;opacity:0;transform:translateY(-6px) scale(.98);animation:av-select-panel-in .18s ease forwards;transition:opacity .18s ease,transform .18s ease}.av-select__search{align-items:center;border-bottom:1px solid var(--av-select-search-border);display:flex;gap:.5rem;padding:.5rem}.av-select__search-icon{color:var(--av-select-muted-color);font-size:.875rem}.av-select__search-input{background:transparent;border:0;color:var(--av-select-search-color);font-size:.875rem;outline:0;width:100%}.av-select__options{flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-select__option{align-items:center;color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;padding:.5rem 1rem;transition:background .2s ease}.av-select__option+.av-select__option{border-top:1px solid var(--av-select-panel-border)}.av-select__option:hover{background:var(--av-select-option-hover-bg);color:var(--av-select-option-hover-color)}.av-select__option--selected{background:var(--av-select-option-selected-bg);color:var(--av-select-option-selected-color);font-weight:600}.av-select__option-check{color:var(--av-select-option-selected-icon);font-size:.875rem}.av-select__empty{color:var(--av-select-empty-color);font-size:.875rem;padding:.75rem 1rem;text-align:center}@keyframes av-select-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes av-select-panel-in{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.av-select__icon,.av-select__chevron{color:var(--av-select-muted-color)}.av-select__search-input,.av-select__value,.av-select__option-label{color:var(--av-select-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }, { kind: "component", type: AvInput, selector: "av-input", inputs: ["placeholder", "type", "label", "icon", "loading", "autoFocus", "loadingIcon", "variant", "rounded", "errorMessage"] }] });
|
|
2156
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvSelect, isStandalone: true, selector: "av-select", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, labelFormat: { classPropertyName: "labelFormat", publicName: "labelFormat", isSignal: true, isRequired: false, transformFunction: null }, valueKey: { classPropertyName: "valueKey", publicName: "valueKey", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, onSearch: { classPropertyName: "onSearch", publicName: "onSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div\n class=\"av-select\"\n [ngStyle]=\"themeVars\"\n>\n @if (label()) {\n <label class=\"av-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n class=\"av-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-select__trigger--with-icon]=\"icon() || loading()\"\n [class.av-select__trigger--without-icon]=\"!icon() && !loading()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon() || loading()) {\n <div class=\"av-select__icon\">\n <span av-icon [name]=\"loading() ? loadingIcon() : icon()!\"></span>\n </div>\n }\n\n <span class=\"av-select__value\" [class.av-select__value--placeholder]=\"!selectedOption()\">\n {{ selectedOption() ? getItemLabel(selectedOption()) : placeholder() }}\n </span>\n\n <div class=\"av-select__chevron\" [class.av-select__chevron--open]=\"isOpen()\">\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-select__error\">\n {{ errorMessage() || 'Sele\u00E7\u00E3o obrigat\u00F3ria' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-select__panel\"\n [ngStyle]=\"themeVars\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-select__search\">\n <av-input\n [autoFocus]=\"true\"\n icon=\"search\"\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [ngModel]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"selectOption(item)\"\n class=\"av-select__option\"\n [class.av-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-select__option-label\">{{ getItemLabel(item) }}</span>\n\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-select__option-check\"></span>\n }\n </li>\n } @empty {\n <li class=\"av-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-select{--av-select-color: var(--av-color-text);--av-select-muted-color: var(--av-color-text-subtle);--av-select-trigger-bg: var(--av-color-surface);--av-select-trigger-border: var(--av-color-border);--av-select-trigger-hover-border: var(--av-color-border-hover);--av-select-trigger-focus-border: var(--av-select-accent, var(--av-slate-500));--av-select-panel-bg: var(--av-color-surface-raised);--av-select-panel-border: var(--av-color-border-soft);--av-select-panel-shadow: var(--av-shadow-raised);--av-select-search-border: var(--av-color-border-soft);--av-select-search-color: var(--av-color-text);--av-select-option-hover-bg: var(--av-color-surface-muted);--av-select-option-hover-color: var(--av-select-color);--av-select-option-selected-bg: var(--av-select-soft, #eff6ff);--av-select-option-selected-color: var(--av-select-color);--av-select-option-selected-icon: var(--av-select-accent, #3b82f6);--av-select-empty-color: var(--av-neutral-400);--av-select-disabled-bg: var(--av-color-surface-muted);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-select-color)}.av-select__label{color:var(--av-select-color);font-size:.875rem;font-weight:700;text-align:start}.av-select__trigger{align-items:center;background:var(--av-select-trigger-bg);border:2px solid var(--av-select-trigger-border);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;line-height:1.25;min-height:2.5rem;padding:.5rem 1rem;position:relative;touch-action:manipulation;transition:all .2s ease;width:100%}.av-select__trigger:hover{border-color:var(--av-select-trigger-hover-border)}.av-select__trigger:focus{outline:none}.av-select__trigger:focus,.av-select__trigger--open{border-color:var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-select-trigger-focus-border) 24%,transparent)}.av-select__trigger--with-icon{padding-left:2.5rem}.av-select__trigger--without-icon{padding-left:1rem}.av-select__trigger--disabled{background:var(--av-select-disabled-bg);cursor:not-allowed;opacity:.72}.av-select__trigger--invalid,.av-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text);animation:av-select-shake .4s ease-in-out}.av-select__icon,.av-select__chevron{color:var(--av-neutral-400);display:flex;pointer-events:none;position:absolute}.av-select__icon{left:.75rem}.av-select__chevron{right:.75rem;transition:transform .2s ease}.av-select__chevron--open{transform:rotate(180deg)}.av-select__value,.av-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-select__value--placeholder,.av-select__empty{color:var(--av-select-muted-color)}.av-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-select__panel{background:var(--av-select-panel-bg);border:1px solid var(--av-select-panel-border);box-sizing:border-box;box-shadow:var(--av-select-panel-shadow);display:flex;flex-direction:column;max-height:min(15rem,calc(100dvh - 1rem));max-width:calc(100vw - 1rem);margin-top:.25rem;overflow:hidden;overscroll-behavior:contain;opacity:0;transform:translateY(-6px) scale(.98);animation:av-select-panel-in .18s ease forwards;transition:opacity .18s ease,transform .18s ease}.av-select__search{align-items:center;border-bottom:1px solid var(--av-select-search-border);display:flex;gap:.5rem;padding:.5rem}.av-select__search-icon{color:var(--av-select-muted-color);font-size:.875rem}.av-select__search-input{background:transparent;border:0;color:var(--av-select-search-color);font-size:.875rem;outline:0;width:100%}.av-select__options{-webkit-overflow-scrolling:touch;flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-select__option{align-items:center;color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;min-height:2.5rem;padding:.5rem 1rem;touch-action:manipulation;transition:background .2s ease}.av-select__option+.av-select__option{border-top:1px solid var(--av-select-panel-border)}.av-select__option:hover{background:var(--av-select-option-hover-bg);color:var(--av-select-option-hover-color)}.av-select__option--selected{background:var(--av-select-option-selected-bg);color:var(--av-select-option-selected-color);font-weight:600}.av-select__option-check{color:var(--av-select-option-selected-icon);font-size:.875rem}.av-select__empty{color:var(--av-select-empty-color);font-size:.875rem;padding:.75rem 1rem;text-align:center}@keyframes av-select-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes av-select-panel-in{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.av-select__icon,.av-select__chevron{color:var(--av-select-muted-color)}.av-select__search-input,.av-select__value,.av-select__option-label{color:var(--av-select-color)}@media(pointer:coarse),(max-width:640px){.av-select__trigger,.av-select__option{min-height:2.75rem}.av-select__trigger,.av-select__search-input{font-size:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }, { kind: "component", type: AvInput, selector: "av-input", inputs: ["placeholder", "type", "label", "icon", "loading", "autoFocus", "loadingIcon", "variant", "rounded", "errorMessage"] }] });
|
|
1969
2157
|
}
|
|
1970
2158
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvSelect, decorators: [{
|
|
1971
2159
|
type: Component,
|
|
1972
|
-
args: [{ selector: 'av-select', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, OverlayModule, AvIcon, AvInput], template: "<div\n class=\"av-select\"\n [ngStyle]=\"themeVars\"\n>\n @if (label()) {\n <label class=\"av-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n class=\"av-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-select__trigger--with-icon]=\"icon() || loading()\"\n [class.av-select__trigger--without-icon]=\"!icon() && !loading()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon() || loading()) {\n <div class=\"av-select__icon\">\n <span av-icon [name]=\"loading() ? loadingIcon() : icon()!\"></span>\n </div>\n }\n\n <span class=\"av-select__value\" [class.av-select__value--placeholder]=\"!selectedOption()\">\n {{ selectedOption() ? getItemLabel(selectedOption()) : placeholder() }}\n </span>\n\n <div class=\"av-select__chevron\" [class.av-select__chevron--open]=\"isOpen()\">\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-select__error\">\n {{ errorMessage() || 'Sele\u00E7\u00E3o obrigat\u00F3ria' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-select__panel\"\n [ngStyle]=\"themeVars\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-select__search\">\n <av-input\n [autoFocus]=\"true\"\n icon=\"search\"\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [ngModel]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"selectOption(item)\"\n class=\"av-select__option\"\n [class.av-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-select__option-label\">{{ getItemLabel(item) }}</span>\n\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-select__option-check\"></span>\n }\n </li>\n } @empty {\n <li class=\"av-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-select{--av-select-color: var(--av-color-text);--av-select-muted-color: var(--av-color-text-subtle);--av-select-trigger-bg: var(--av-color-surface);--av-select-trigger-border: var(--av-color-border);--av-select-trigger-hover-border: var(--av-color-border-hover);--av-select-trigger-focus-border: var(--av-select-accent, var(--av-slate-500));--av-select-panel-bg: var(--av-color-surface-raised);--av-select-panel-border: var(--av-color-border-soft);--av-select-panel-shadow: var(--av-shadow-raised);--av-select-search-border: var(--av-color-border-soft);--av-select-search-color: var(--av-color-text);--av-select-option-hover-bg: var(--av-color-surface-muted);--av-select-option-hover-color: var(--av-select-color);--av-select-option-selected-bg: var(--av-select-soft, #eff6ff);--av-select-option-selected-color: var(--av-select-color);--av-select-option-selected-icon: var(--av-select-accent, #3b82f6);--av-select-empty-color: var(--av-neutral-400);--av-select-disabled-bg: var(--av-color-surface-muted);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-select-color)}.av-select__label{color:var(--av-select-color);font-size:.875rem;font-weight:700;text-align:start}.av-select__trigger{align-items:center;background:var(--av-select-trigger-bg);border:2px solid var(--av-select-trigger-border);box-shadow:var(--av-shadow-control);color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;padding:.5rem 1rem;position:relative;transition:all .2s ease;width:100%}.av-select__trigger:hover{border-color:var(--av-select-trigger-hover-border)}.av-select__trigger:focus{outline:none}.av-select__trigger:focus,.av-select__trigger--open{border-color:var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-select-trigger-focus-border) 24%,transparent)}.av-select__trigger--with-icon{padding-left:2.5rem}.av-select__trigger--without-icon{padding-left:1rem}.av-select__trigger--disabled{background:var(--av-select-disabled-bg);cursor:not-allowed;opacity:.72}.av-select__trigger--invalid,.av-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text);animation:av-select-shake .4s ease-in-out}.av-select__icon,.av-select__chevron{color:var(--av-neutral-400);display:flex;pointer-events:none;position:absolute}.av-select__icon{left:.75rem}.av-select__chevron{right:.75rem;transition:transform .2s ease}.av-select__chevron--open{transform:rotate(180deg)}.av-select__value,.av-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-select__value--placeholder,.av-select__empty{color:var(--av-select-muted-color)}.av-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-select__panel{background:var(--av-select-panel-bg);border:1px solid var(--av-select-panel-border);box-shadow:var(--av-select-panel-shadow);display:flex;flex-direction:column;max-height:15rem;margin-top:.25rem;overflow:hidden;opacity:0;transform:translateY(-6px) scale(.98);animation:av-select-panel-in .18s ease forwards;transition:opacity .18s ease,transform .18s ease}.av-select__search{align-items:center;border-bottom:1px solid var(--av-select-search-border);display:flex;gap:.5rem;padding:.5rem}.av-select__search-icon{color:var(--av-select-muted-color);font-size:.875rem}.av-select__search-input{background:transparent;border:0;color:var(--av-select-search-color);font-size:.875rem;outline:0;width:100%}.av-select__options{flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-select__option{align-items:center;color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;padding:.5rem 1rem;transition:background .2s ease}.av-select__option+.av-select__option{border-top:1px solid var(--av-select-panel-border)}.av-select__option:hover{background:var(--av-select-option-hover-bg);color:var(--av-select-option-hover-color)}.av-select__option--selected{background:var(--av-select-option-selected-bg);color:var(--av-select-option-selected-color);font-weight:600}.av-select__option-check{color:var(--av-select-option-selected-icon);font-size:.875rem}.av-select__empty{color:var(--av-select-empty-color);font-size:.875rem;padding:.75rem 1rem;text-align:center}@keyframes av-select-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes av-select-panel-in{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.av-select__icon,.av-select__chevron{color:var(--av-select-muted-color)}.av-select__search-input,.av-select__value,.av-select__option-label{color:var(--av-select-color)}\n"] }]
|
|
2160
|
+
args: [{ selector: 'av-select', standalone: true, imports: [CommonModule, ReactiveFormsModule, FormsModule, OverlayModule, AvIcon, AvInput], template: "<div\n class=\"av-select\"\n [ngStyle]=\"themeVars\"\n>\n @if (label()) {\n <label class=\"av-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n class=\"av-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-select__trigger--with-icon]=\"icon() || loading()\"\n [class.av-select__trigger--without-icon]=\"!icon() && !loading()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon() || loading()) {\n <div class=\"av-select__icon\">\n <span av-icon [name]=\"loading() ? loadingIcon() : icon()!\"></span>\n </div>\n }\n\n <span class=\"av-select__value\" [class.av-select__value--placeholder]=\"!selectedOption()\">\n {{ selectedOption() ? getItemLabel(selectedOption()) : placeholder() }}\n </span>\n\n <div class=\"av-select__chevron\" [class.av-select__chevron--open]=\"isOpen()\">\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-select__error\">\n {{ errorMessage() || 'Sele\u00E7\u00E3o obrigat\u00F3ria' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-select__panel\"\n [ngStyle]=\"themeVars\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-select__search\">\n <av-input\n [autoFocus]=\"true\"\n icon=\"search\"\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [ngModel]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"selectOption(item)\"\n class=\"av-select__option\"\n [class.av-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-select__option-label\">{{ getItemLabel(item) }}</span>\n\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-select__option-check\"></span>\n }\n </li>\n } @empty {\n <li class=\"av-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-select{--av-select-color: var(--av-color-text);--av-select-muted-color: var(--av-color-text-subtle);--av-select-trigger-bg: var(--av-color-surface);--av-select-trigger-border: var(--av-color-border);--av-select-trigger-hover-border: var(--av-color-border-hover);--av-select-trigger-focus-border: var(--av-select-accent, var(--av-slate-500));--av-select-panel-bg: var(--av-color-surface-raised);--av-select-panel-border: var(--av-color-border-soft);--av-select-panel-shadow: var(--av-shadow-raised);--av-select-search-border: var(--av-color-border-soft);--av-select-search-color: var(--av-color-text);--av-select-option-hover-bg: var(--av-color-surface-muted);--av-select-option-hover-color: var(--av-select-color);--av-select-option-selected-bg: var(--av-select-soft, #eff6ff);--av-select-option-selected-color: var(--av-select-color);--av-select-option-selected-icon: var(--av-select-accent, #3b82f6);--av-select-empty-color: var(--av-neutral-400);--av-select-disabled-bg: var(--av-color-surface-muted);display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-select-color)}.av-select__label{color:var(--av-select-color);font-size:.875rem;font-weight:700;text-align:start}.av-select__trigger{align-items:center;background:var(--av-select-trigger-bg);border:2px solid var(--av-select-trigger-border);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;line-height:1.25;min-height:2.5rem;padding:.5rem 1rem;position:relative;touch-action:manipulation;transition:all .2s ease;width:100%}.av-select__trigger:hover{border-color:var(--av-select-trigger-hover-border)}.av-select__trigger:focus{outline:none}.av-select__trigger:focus,.av-select__trigger--open{border-color:var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-select-trigger-focus-border);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-select-trigger-focus-border) 24%,transparent)}.av-select__trigger--with-icon{padding-left:2.5rem}.av-select__trigger--without-icon{padding-left:1rem}.av-select__trigger--disabled{background:var(--av-select-disabled-bg);cursor:not-allowed;opacity:.72}.av-select__trigger--invalid,.av-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text);animation:av-select-shake .4s ease-in-out}.av-select__icon,.av-select__chevron{color:var(--av-neutral-400);display:flex;pointer-events:none;position:absolute}.av-select__icon{left:.75rem}.av-select__chevron{right:.75rem;transition:transform .2s ease}.av-select__chevron--open{transform:rotate(180deg)}.av-select__value,.av-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-select__value--placeholder,.av-select__empty{color:var(--av-select-muted-color)}.av-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-select__panel{background:var(--av-select-panel-bg);border:1px solid var(--av-select-panel-border);box-sizing:border-box;box-shadow:var(--av-select-panel-shadow);display:flex;flex-direction:column;max-height:min(15rem,calc(100dvh - 1rem));max-width:calc(100vw - 1rem);margin-top:.25rem;overflow:hidden;overscroll-behavior:contain;opacity:0;transform:translateY(-6px) scale(.98);animation:av-select-panel-in .18s ease forwards;transition:opacity .18s ease,transform .18s ease}.av-select__search{align-items:center;border-bottom:1px solid var(--av-select-search-border);display:flex;gap:.5rem;padding:.5rem}.av-select__search-icon{color:var(--av-select-muted-color);font-size:.875rem}.av-select__search-input{background:transparent;border:0;color:var(--av-select-search-color);font-size:.875rem;outline:0;width:100%}.av-select__options{-webkit-overflow-scrolling:touch;flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-select__option{align-items:center;color:var(--av-select-color);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;min-height:2.5rem;padding:.5rem 1rem;touch-action:manipulation;transition:background .2s ease}.av-select__option+.av-select__option{border-top:1px solid var(--av-select-panel-border)}.av-select__option:hover{background:var(--av-select-option-hover-bg);color:var(--av-select-option-hover-color)}.av-select__option--selected{background:var(--av-select-option-selected-bg);color:var(--av-select-option-selected-color);font-weight:600}.av-select__option-check{color:var(--av-select-option-selected-icon);font-size:.875rem}.av-select__empty{color:var(--av-select-empty-color);font-size:.875rem;padding:.75rem 1rem;text-align:center}@keyframes av-select-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}@keyframes av-select-panel-in{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.av-select__icon,.av-select__chevron{color:var(--av-select-muted-color)}.av-select__search-input,.av-select__value,.av-select__option-label{color:var(--av-select-color)}@media(pointer:coarse),(max-width:640px){.av-select__trigger,.av-select__option{min-height:2.75rem}.av-select__trigger,.av-select__search-input{font-size:1rem}}\n"] }]
|
|
1973
2161
|
}], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
|
|
1974
2162
|
type: Optional
|
|
1975
2163
|
}, {
|
|
@@ -2052,11 +2240,11 @@ class AvCheckbox {
|
|
|
2052
2240
|
this.disabled.set(isDisabled);
|
|
2053
2241
|
}
|
|
2054
2242
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCheckbox, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
2055
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvCheckbox, isStandalone: true, selector: "av-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ringColor: { classPropertyName: "ringColor", publicName: "ringColor", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"av-checkbox\" [ngStyle]=\"themeVars()\">\n <label\n class=\"av-checkbox__label\"\n [class.av-checkbox__label--disabled]=\"disabled()\"\n >\n <input\n type=\"checkbox\"\n class=\"av-checkbox__native\"\n [checked]=\"value()\"\n [disabled]=\"disabled()\"\n (change)=\"handleChange($event)\"\n (blur)=\"onTouched()\"\n />\n\n <span\n class=\"av-checkbox__box\"\n [class.av-checkbox__box--checked]=\"value()\"\n [class.av-checkbox__box--invalid]=\"isInvalid\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (value()) {\n <span av-icon [name]=\"icon()\" class=\"av-checkbox__icon\"></span>\n }\n </span>\n\n @if (label()) {\n <span class=\"av-checkbox__text\">\n {{ label() }}\n </span>\n }\n </label>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-checkbox__error\">\n {{ errorMessage() || 'Campo obrigat\u00F3rio' }}\n </span>\n }\n</div>\n", styles: [".av-checkbox{display:flex;flex-direction:column;gap:.25rem;color:var(--av-color-text)}.av-checkbox__label{align-items:center;cursor:pointer;display:inline-flex;gap:.625rem;-webkit-user-select:none;user-select:none;width:fit-content}.av-checkbox__label--disabled{cursor:not-allowed;opacity:.72}.av-checkbox__native{height:1px;margin:-1px;opacity:0;overflow:hidden;position:absolute;width:1px}.av-checkbox__box{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text-inverse);display:flex;flex-shrink:0;height:1.25rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,transform .2s ease;width:1.25rem}.av-checkbox__label:hover .av-checkbox__box{border-color:var(--av-color-border-hover)}.av-checkbox__label:focus-within .av-checkbox__box{border-color:var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-checkbox-accent) 24%,transparent)}.av-checkbox__box--checked{background:var(--av-checkbox-accent);border-color:var(--av-checkbox-accent)}.av-checkbox__label:hover .av-checkbox__box--checked{background:var(--av-checkbox-accent-hover);border-color:var(--av-checkbox-accent-hover)}.av-checkbox__box--invalid{border-color:var(--av-color-danger);animation:av-checkbox-shake .4s ease-in-out}.av-checkbox__icon{color:var(--av-white);font-size:.875rem;line-height:1}.av-checkbox__text{color:var(--av-color-text);font-size:.875rem;font-weight:500;transition:color .2s ease}.av-checkbox__label:hover .av-checkbox__text{color:var(--av-color-text)}.av-checkbox__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}@keyframes av-checkbox-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}\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"] }] });
|
|
2243
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvCheckbox, isStandalone: true, selector: "av-checkbox", inputs: { label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ringColor: { classPropertyName: "ringColor", publicName: "ringColor", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { changed: "changed", valueChange: "valueChange" }, ngImport: i0, template: "<div class=\"av-checkbox\" [ngStyle]=\"themeVars()\">\n <label\n class=\"av-checkbox__label\"\n [class.av-checkbox__label--disabled]=\"disabled()\"\n >\n <input\n type=\"checkbox\"\n class=\"av-checkbox__native\"\n [checked]=\"value()\"\n [disabled]=\"disabled()\"\n (change)=\"handleChange($event)\"\n (blur)=\"onTouched()\"\n />\n\n <span\n class=\"av-checkbox__box\"\n [class.av-checkbox__box--checked]=\"value()\"\n [class.av-checkbox__box--invalid]=\"isInvalid\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (value()) {\n <span av-icon [name]=\"icon()\" class=\"av-checkbox__icon\"></span>\n }\n </span>\n\n @if (label()) {\n <span class=\"av-checkbox__text\">\n {{ label() }}\n </span>\n }\n </label>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-checkbox__error\">\n {{ errorMessage() || 'Campo obrigat\u00F3rio' }}\n </span>\n }\n</div>\n", styles: [".av-checkbox{display:flex;flex-direction:column;gap:.25rem;color:var(--av-color-text)}.av-checkbox__label{align-items:center;cursor:pointer;display:inline-flex;gap:.625rem;min-height:2rem;-webkit-user-select:none;user-select:none;width:fit-content}.av-checkbox__label--disabled{cursor:not-allowed;opacity:.72}.av-checkbox__native{height:1px;margin:-1px;opacity:0;overflow:hidden;position:absolute;width:1px}.av-checkbox__box{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text-inverse);display:flex;flex-shrink:0;height:1.25rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,transform .2s ease;width:1.25rem}.av-checkbox__label:hover .av-checkbox__box{border-color:var(--av-color-border-hover)}.av-checkbox__label:focus-within .av-checkbox__box{border-color:var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-checkbox-accent) 24%,transparent)}.av-checkbox__box--checked{background:var(--av-checkbox-accent);border-color:var(--av-checkbox-accent)}.av-checkbox__label:hover .av-checkbox__box--checked{background:var(--av-checkbox-accent-hover);border-color:var(--av-checkbox-accent-hover)}.av-checkbox__box--invalid{border-color:var(--av-color-danger);animation:av-checkbox-shake .4s ease-in-out}.av-checkbox__icon{color:var(--av-white);font-size:.875rem;line-height:1}.av-checkbox__text{color:var(--av-color-text);font-size:.875rem;font-weight:500;transition:color .2s ease}.av-checkbox__label:hover .av-checkbox__text{color:var(--av-color-text)}.av-checkbox__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}@media(pointer:coarse),(max-width:640px){.av-checkbox__label{min-height:2.75rem}.av-checkbox__box{height:1.5rem;width:1.5rem}}@keyframes av-checkbox-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}\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"] }] });
|
|
2056
2244
|
}
|
|
2057
2245
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCheckbox, decorators: [{
|
|
2058
2246
|
type: Component,
|
|
2059
|
-
args: [{ selector: 'av-checkbox', standalone: true, imports: [CommonModule, AvIcon], template: "<div class=\"av-checkbox\" [ngStyle]=\"themeVars()\">\n <label\n class=\"av-checkbox__label\"\n [class.av-checkbox__label--disabled]=\"disabled()\"\n >\n <input\n type=\"checkbox\"\n class=\"av-checkbox__native\"\n [checked]=\"value()\"\n [disabled]=\"disabled()\"\n (change)=\"handleChange($event)\"\n (blur)=\"onTouched()\"\n />\n\n <span\n class=\"av-checkbox__box\"\n [class.av-checkbox__box--checked]=\"value()\"\n [class.av-checkbox__box--invalid]=\"isInvalid\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (value()) {\n <span av-icon [name]=\"icon()\" class=\"av-checkbox__icon\"></span>\n }\n </span>\n\n @if (label()) {\n <span class=\"av-checkbox__text\">\n {{ label() }}\n </span>\n }\n </label>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-checkbox__error\">\n {{ errorMessage() || 'Campo obrigat\u00F3rio' }}\n </span>\n }\n</div>\n", styles: [".av-checkbox{display:flex;flex-direction:column;gap:.25rem;color:var(--av-color-text)}.av-checkbox__label{align-items:center;cursor:pointer;display:inline-flex;gap:.625rem;-webkit-user-select:none;user-select:none;width:fit-content}.av-checkbox__label--disabled{cursor:not-allowed;opacity:.72}.av-checkbox__native{height:1px;margin:-1px;opacity:0;overflow:hidden;position:absolute;width:1px}.av-checkbox__box{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text-inverse);display:flex;flex-shrink:0;height:1.25rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,transform .2s ease;width:1.25rem}.av-checkbox__label:hover .av-checkbox__box{border-color:var(--av-color-border-hover)}.av-checkbox__label:focus-within .av-checkbox__box{border-color:var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-checkbox-accent) 24%,transparent)}.av-checkbox__box--checked{background:var(--av-checkbox-accent);border-color:var(--av-checkbox-accent)}.av-checkbox__label:hover .av-checkbox__box--checked{background:var(--av-checkbox-accent-hover);border-color:var(--av-checkbox-accent-hover)}.av-checkbox__box--invalid{border-color:var(--av-color-danger);animation:av-checkbox-shake .4s ease-in-out}.av-checkbox__icon{color:var(--av-white);font-size:.875rem;line-height:1}.av-checkbox__text{color:var(--av-color-text);font-size:.875rem;font-weight:500;transition:color .2s ease}.av-checkbox__label:hover .av-checkbox__text{color:var(--av-color-text)}.av-checkbox__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}@keyframes av-checkbox-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}\n"] }]
|
|
2247
|
+
args: [{ selector: 'av-checkbox', standalone: true, imports: [CommonModule, AvIcon], template: "<div class=\"av-checkbox\" [ngStyle]=\"themeVars()\">\n <label\n class=\"av-checkbox__label\"\n [class.av-checkbox__label--disabled]=\"disabled()\"\n >\n <input\n type=\"checkbox\"\n class=\"av-checkbox__native\"\n [checked]=\"value()\"\n [disabled]=\"disabled()\"\n (change)=\"handleChange($event)\"\n (blur)=\"onTouched()\"\n />\n\n <span\n class=\"av-checkbox__box\"\n [class.av-checkbox__box--checked]=\"value()\"\n [class.av-checkbox__box--invalid]=\"isInvalid\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (value()) {\n <span av-icon [name]=\"icon()\" class=\"av-checkbox__icon\"></span>\n }\n </span>\n\n @if (label()) {\n <span class=\"av-checkbox__text\">\n {{ label() }}\n </span>\n }\n </label>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-checkbox__error\">\n {{ errorMessage() || 'Campo obrigat\u00F3rio' }}\n </span>\n }\n</div>\n", styles: [".av-checkbox{display:flex;flex-direction:column;gap:.25rem;color:var(--av-color-text)}.av-checkbox__label{align-items:center;cursor:pointer;display:inline-flex;gap:.625rem;min-height:2rem;-webkit-user-select:none;user-select:none;width:fit-content}.av-checkbox__label--disabled{cursor:not-allowed;opacity:.72}.av-checkbox__native{height:1px;margin:-1px;opacity:0;overflow:hidden;position:absolute;width:1px}.av-checkbox__box{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text-inverse);display:flex;flex-shrink:0;height:1.25rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,transform .2s ease;width:1.25rem}.av-checkbox__label:hover .av-checkbox__box{border-color:var(--av-color-border-hover)}.av-checkbox__label:focus-within .av-checkbox__box{border-color:var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-checkbox-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-checkbox-accent) 24%,transparent)}.av-checkbox__box--checked{background:var(--av-checkbox-accent);border-color:var(--av-checkbox-accent)}.av-checkbox__label:hover .av-checkbox__box--checked{background:var(--av-checkbox-accent-hover);border-color:var(--av-checkbox-accent-hover)}.av-checkbox__box--invalid{border-color:var(--av-color-danger);animation:av-checkbox-shake .4s ease-in-out}.av-checkbox__icon{color:var(--av-white);font-size:.875rem;line-height:1}.av-checkbox__text{color:var(--av-color-text);font-size:.875rem;font-weight:500;transition:color .2s ease}.av-checkbox__label:hover .av-checkbox__text{color:var(--av-color-text)}.av-checkbox__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}@media(pointer:coarse),(max-width:640px){.av-checkbox__label{min-height:2.75rem}.av-checkbox__box{height:1.5rem;width:1.5rem}}@keyframes av-checkbox-shake{0%,to{transform:translate(0)}20%,60%{transform:translate(-4px)}40%,80%{transform:translate(4px)}}\n"] }]
|
|
2060
2248
|
}], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
|
|
2061
2249
|
type: Optional
|
|
2062
2250
|
}, {
|
|
@@ -2395,11 +2583,11 @@ class AvDateTimePicker {
|
|
|
2395
2583
|
this.disabled.set(isDisabled);
|
|
2396
2584
|
}
|
|
2397
2585
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDateTimePicker, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
2398
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvDateTimePicker, isStandalone: true, selector: "av-date-time-picker, av-date-picker", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ringColor: { classPropertyName: "ringColor", publicName: "ringColor", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div class=\"av-date-picker\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-date-picker__label\">{{ label() }}</label>\n }\n\n <button\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"button\"\n (click)=\"toggleDropdown()\"\n class=\"av-date-picker__trigger\"\n [class.av-date-picker__trigger--open]=\"isOpen()\"\n [class.av-date-picker__trigger--disabled]=\"disabled()\"\n [class.av-date-picker__trigger--invalid]=\"isInvalid\"\n [disabled]=\"disabled()\"\n [style.border-radius]=\"roundedStyle\"\n >\n <span class=\"av-date-picker__trigger-icon\">\n <span av-icon [name]=\"defaultIcon\"></span>\n </span>\n\n <span class=\"av-date-picker__trigger-value\" [class.av-date-picker__trigger-value--placeholder]=\"!selectedDate()\">\n {{ displayValue() || placeholder() }}\n </span>\n </button>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-date-picker__error\">\n {{ errorMessage() || 'Data/Hora inv\u00E1lida' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-date-picker__panel\"\n [ngStyle]=\"themeVars()\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (mode() === 'datetime') {\n <div class=\"av-date-picker__tabs\">\n <button\n type=\"button\"\n (click)=\"activeTab.set('date')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'date'\"\n >\n Data\n </button>\n <button\n type=\"button\"\n (click)=\"activeTab.set('time')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'time'\"\n >\n Hora\n </button>\n </div>\n }\n\n @if (activeTab() === 'date') {\n <div class=\"av-date-picker__calendar\">\n <div class=\"av-date-picker__month-nav\">\n <button\n type=\"button\"\n (click)=\"changeMonth(-1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"M\u00EAs anterior\"\n >\n <span av-icon name=\"chevron_left\"></span>\n </button>\n <span class=\"av-date-picker__month-label\">\n {{ monthLabel() }}\n </span>\n <button\n type=\"button\"\n (click)=\"changeMonth(1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"Pr\u00F3ximo m\u00EAs\"\n >\n <span av-icon name=\"chevron_right\"></span>\n </button>\n </div>\n\n <div class=\"av-date-picker__weekdays\">\n @for (day of weekDays; track day) {\n <span class=\"av-date-picker__weekday\">{{ day }}</span>\n }\n </div>\n\n <div class=\"av-date-picker__days\">\n @for (day of calendarDays(); track $index) {\n @if (day) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"av-date-picker__day\"\n [class.av-date-picker__day--selected]=\"isDaySelected(day)\"\n >\n {{ day.getDate() }}\n </button>\n } @else {\n <span class=\"av-date-picker__day-spacer\"></span>\n }\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'time') {\n <div class=\"av-date-picker__time\">\n <div class=\"av-date-picker__digital-time\">\n <span>{{ hours().toString().padStart(2, '0') }}</span>\n <span>:</span>\n <span>{{ minutes().toString().padStart(2, '0') }}</span>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Horas</span>\n <div class=\"av-date-picker__time-grid av-date-picker__time-grid--hours\">\n @for (hour of hourOptions; track hour) {\n <button\n type=\"button\"\n (click)=\"selectHour(hour)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"hours() === hour\"\n >\n {{ hour.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Minutos</span>\n <div class=\"av-date-picker__time-grid\">\n @for (minute of minuteOptions; track minute) {\n <button\n type=\"button\"\n (click)=\"selectMinute(minute)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"minutes() === minute\"\n >\n {{ minute.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <button\n type=\"button\"\n (click)=\"confirmSelection()\"\n class=\"av-date-picker__confirm\"\n >\n Confirmar\n </button>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".av-date-picker{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-date-picker__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-date-picker__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;padding:.5rem 1rem .5rem 2.5rem;position:relative;text-align:left;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-date-picker__trigger:hover{border-color:var(--av-color-border-hover)}.av-date-picker__trigger:focus{outline:none}.av-date-picker__trigger--open,.av-date-picker__trigger:focus{border-color:var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-date-accent) 24%,transparent)}.av-date-picker__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-date-picker__trigger--invalid,.av-date-picker__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-date-picker__trigger-icon{color:var(--av-color-text-subtle);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-date-picker__trigger-value{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-date-picker__trigger-value--placeholder{color:var(--av-color-text-subtle)}.av-date-picker__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-date-picker__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;overflow:hidden;width:20rem}.av-date-picker__tabs{background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.25rem;padding:.25rem}.av-date-picker__tab{border-radius:var(--av-radius-md);color:var(--av-color-text-muted);flex:1;font-size:.75rem;font-weight:600;padding:.375rem 0;transition:background-color .2s ease,color .2s ease}.av-date-picker__tab--active{background:var(--av-color-surface);color:var(--av-date-accent-strong)}.av-date-picker__calendar,.av-date-picker__time{padding:1rem}.av-date-picker__time{display:flex;flex-direction:column;gap:.875rem}.av-date-picker__month-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.av-date-picker__nav-button{align-items:center;border-radius:var(--av-radius-full);color:var(--av-color-text-muted);display:flex;height:2rem;justify-content:center;transition:background-color .2s ease,color .2s ease;width:2rem}.av-date-picker__nav-button:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__month-label{color:var(--av-color-text);font-size:.875rem;font-weight:600;text-transform:capitalize}.av-date-picker__weekdays,.av-date-picker__days{display:grid;gap:.25rem;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center}.av-date-picker__weekdays{margin-bottom:.5rem}.av-date-picker__weekday{color:var(--av-color-text-subtle);font-size:.75rem;font-weight:600}.av-date-picker__day,.av-date-picker__time-option{align-items:center;border-radius:var(--av-radius-md);color:var(--av-color-text);display:flex;font-size:.75rem;font-weight:600;justify-content:center;transition:background-color .2s ease,color .2s ease}.av-date-picker__day,.av-date-picker__day-spacer{height:2rem;width:2rem}.av-date-picker__day:hover,.av-date-picker__time-option:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__day--selected,.av-date-picker__time-option--selected{background:var(--av-date-accent);color:var(--av-white)}.av-date-picker__digital-time{align-items:center;background:var(--av-color-surface-muted);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-lg);color:var(--av-color-text);display:flex;font-size:1.5rem;font-weight:700;gap:.25rem;justify-content:center;padding:.5rem 1rem}.av-date-picker__time-section{display:flex;flex-direction:column;gap:.375rem}.av-date-picker__time-label{color:var(--av-color-text-muted);font-size:.75rem;font-weight:700}.av-date-picker__time-grid{display:grid;gap:.375rem;grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-grid--hours{grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-option{border:1px solid var(--av-color-border-soft);height:2rem}.av-date-picker__confirm{background:var(--av-date-accent);border-radius:var(--av-radius-md);color:var(--av-white);font-size:.875rem;font-weight:600;margin-top:.125rem;padding:.5rem 0;transition:background-color .2s ease;width:100%}.av-date-picker__confirm:hover{background:var(--av-date-accent-strong)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2586
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvDateTimePicker, isStandalone: true, selector: "av-date-time-picker, av-date-picker", inputs: { mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ringColor: { classPropertyName: "ringColor", publicName: "ringColor", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div class=\"av-date-picker\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-date-picker__label\">{{ label() }}</label>\n }\n\n <button\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"button\"\n (click)=\"toggleDropdown()\"\n class=\"av-date-picker__trigger\"\n [class.av-date-picker__trigger--open]=\"isOpen()\"\n [class.av-date-picker__trigger--disabled]=\"disabled()\"\n [class.av-date-picker__trigger--invalid]=\"isInvalid\"\n [disabled]=\"disabled()\"\n [style.border-radius]=\"roundedStyle\"\n >\n <span class=\"av-date-picker__trigger-icon\">\n <span av-icon [name]=\"defaultIcon\"></span>\n </span>\n\n <span class=\"av-date-picker__trigger-value\" [class.av-date-picker__trigger-value--placeholder]=\"!selectedDate()\">\n {{ displayValue() || placeholder() }}\n </span>\n </button>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-date-picker__error\">\n {{ errorMessage() || 'Data/Hora inv\u00E1lida' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-date-picker__panel\"\n [ngStyle]=\"themeVars()\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (mode() === 'datetime') {\n <div class=\"av-date-picker__tabs\">\n <button\n type=\"button\"\n (click)=\"activeTab.set('date')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'date'\"\n >\n Data\n </button>\n <button\n type=\"button\"\n (click)=\"activeTab.set('time')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'time'\"\n >\n Hora\n </button>\n </div>\n }\n\n @if (activeTab() === 'date') {\n <div class=\"av-date-picker__calendar\">\n <div class=\"av-date-picker__month-nav\">\n <button\n type=\"button\"\n (click)=\"changeMonth(-1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"M\u00EAs anterior\"\n >\n <span av-icon name=\"chevron_left\"></span>\n </button>\n <span class=\"av-date-picker__month-label\">\n {{ monthLabel() }}\n </span>\n <button\n type=\"button\"\n (click)=\"changeMonth(1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"Pr\u00F3ximo m\u00EAs\"\n >\n <span av-icon name=\"chevron_right\"></span>\n </button>\n </div>\n\n <div class=\"av-date-picker__weekdays\">\n @for (day of weekDays; track day) {\n <span class=\"av-date-picker__weekday\">{{ day }}</span>\n }\n </div>\n\n <div class=\"av-date-picker__days\">\n @for (day of calendarDays(); track $index) {\n @if (day) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"av-date-picker__day\"\n [class.av-date-picker__day--selected]=\"isDaySelected(day)\"\n >\n {{ day.getDate() }}\n </button>\n } @else {\n <span class=\"av-date-picker__day-spacer\"></span>\n }\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'time') {\n <div class=\"av-date-picker__time\">\n <div class=\"av-date-picker__digital-time\">\n <span>{{ hours().toString().padStart(2, '0') }}</span>\n <span>:</span>\n <span>{{ minutes().toString().padStart(2, '0') }}</span>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Horas</span>\n <div class=\"av-date-picker__time-grid av-date-picker__time-grid--hours\">\n @for (hour of hourOptions; track hour) {\n <button\n type=\"button\"\n (click)=\"selectHour(hour)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"hours() === hour\"\n >\n {{ hour.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Minutos</span>\n <div class=\"av-date-picker__time-grid\">\n @for (minute of minuteOptions; track minute) {\n <button\n type=\"button\"\n (click)=\"selectMinute(minute)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"minutes() === minute\"\n >\n {{ minute.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <button\n type=\"button\"\n (click)=\"confirmSelection()\"\n class=\"av-date-picker__confirm\"\n >\n Confirmar\n </button>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".av-date-picker{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-date-picker__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-date-picker__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;line-height:1.25;min-height:2.5rem;padding:.5rem 1rem .5rem 2.5rem;position:relative;text-align:left;touch-action:manipulation;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-date-picker__trigger:hover{border-color:var(--av-color-border-hover)}.av-date-picker__trigger:focus{outline:none}.av-date-picker__trigger--open,.av-date-picker__trigger:focus{border-color:var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-date-accent) 24%,transparent)}.av-date-picker__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-date-picker__trigger--invalid,.av-date-picker__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-date-picker__trigger-icon{color:var(--av-color-text-subtle);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-date-picker__trigger-value{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-date-picker__trigger-value--placeholder{color:var(--av-color-text-subtle)}.av-date-picker__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-date-picker__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-sizing:border-box;box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;max-height:calc(100dvh - 1rem);max-width:calc(100vw - 1rem);overflow:hidden;width:min(20rem,calc(100vw - 1rem))}.av-date-picker__tabs{background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.25rem;padding:.25rem}.av-date-picker__tab{border-radius:var(--av-radius-md);color:var(--av-color-text-muted);flex:1;font-size:.75rem;font-weight:600;padding:.375rem 0;transition:background-color .2s ease,color .2s ease}.av-date-picker__tab--active{background:var(--av-color-surface);color:var(--av-date-accent-strong)}.av-date-picker__calendar,.av-date-picker__time{padding:1rem}.av-date-picker__time{display:flex;flex-direction:column;gap:.875rem}.av-date-picker__month-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.av-date-picker__nav-button{align-items:center;border-radius:var(--av-radius-full);color:var(--av-color-text-muted);display:flex;height:2rem;justify-content:center;touch-action:manipulation;transition:background-color .2s ease,color .2s ease;width:2rem}.av-date-picker__nav-button:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__month-label{color:var(--av-color-text);font-size:.875rem;font-weight:600;text-transform:capitalize}.av-date-picker__weekdays,.av-date-picker__days{display:grid;gap:.25rem;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center}.av-date-picker__weekdays{margin-bottom:.5rem}.av-date-picker__weekday{color:var(--av-color-text-subtle);font-size:.75rem;font-weight:600}.av-date-picker__day,.av-date-picker__time-option{align-items:center;border-radius:var(--av-radius-md);color:var(--av-color-text);display:flex;font-size:.75rem;font-weight:600;justify-content:center;transition:background-color .2s ease,color .2s ease}.av-date-picker__day,.av-date-picker__day-spacer{height:2rem;width:2rem}.av-date-picker__day:hover,.av-date-picker__time-option:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__day--selected,.av-date-picker__time-option--selected{background:var(--av-date-accent);color:var(--av-white)}.av-date-picker__digital-time{align-items:center;background:var(--av-color-surface-muted);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-lg);color:var(--av-color-text);display:flex;font-size:1.5rem;font-weight:700;gap:.25rem;justify-content:center;padding:.5rem 1rem}.av-date-picker__time-section{display:flex;flex-direction:column;gap:.375rem}.av-date-picker__time-label{color:var(--av-color-text-muted);font-size:.75rem;font-weight:700}.av-date-picker__time-grid{display:grid;gap:.375rem;grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-grid--hours{grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-option{border:1px solid var(--av-color-border-soft);height:2rem;touch-action:manipulation}.av-date-picker__confirm{background:var(--av-date-accent);border-radius:var(--av-radius-md);color:var(--av-white);font-size:.875rem;font-weight:600;margin-top:.125rem;min-height:2.5rem;padding:.5rem 0;touch-action:manipulation;transition:background-color .2s ease;width:100%}.av-date-picker__confirm:hover{background:var(--av-date-accent-strong)}@media(pointer:coarse),(max-width:640px){.av-date-picker__trigger,.av-date-picker__confirm{min-height:2.75rem}.av-date-picker__calendar,.av-date-picker__time{padding:.75rem}.av-date-picker__nav-button,.av-date-picker__day,.av-date-picker__day-spacer,.av-date-picker__time-option{min-height:2.5rem}.av-date-picker__day,.av-date-picker__day-spacer{height:auto;width:auto}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2399
2587
|
}
|
|
2400
2588
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvDateTimePicker, decorators: [{
|
|
2401
2589
|
type: Component,
|
|
2402
|
-
args: [{ selector: 'av-date-time-picker, av-date-picker', standalone: true, imports: [CommonModule, OverlayModule, AvIcon], template: "<div class=\"av-date-picker\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-date-picker__label\">{{ label() }}</label>\n }\n\n <button\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"button\"\n (click)=\"toggleDropdown()\"\n class=\"av-date-picker__trigger\"\n [class.av-date-picker__trigger--open]=\"isOpen()\"\n [class.av-date-picker__trigger--disabled]=\"disabled()\"\n [class.av-date-picker__trigger--invalid]=\"isInvalid\"\n [disabled]=\"disabled()\"\n [style.border-radius]=\"roundedStyle\"\n >\n <span class=\"av-date-picker__trigger-icon\">\n <span av-icon [name]=\"defaultIcon\"></span>\n </span>\n\n <span class=\"av-date-picker__trigger-value\" [class.av-date-picker__trigger-value--placeholder]=\"!selectedDate()\">\n {{ displayValue() || placeholder() }}\n </span>\n </button>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-date-picker__error\">\n {{ errorMessage() || 'Data/Hora inv\u00E1lida' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-date-picker__panel\"\n [ngStyle]=\"themeVars()\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (mode() === 'datetime') {\n <div class=\"av-date-picker__tabs\">\n <button\n type=\"button\"\n (click)=\"activeTab.set('date')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'date'\"\n >\n Data\n </button>\n <button\n type=\"button\"\n (click)=\"activeTab.set('time')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'time'\"\n >\n Hora\n </button>\n </div>\n }\n\n @if (activeTab() === 'date') {\n <div class=\"av-date-picker__calendar\">\n <div class=\"av-date-picker__month-nav\">\n <button\n type=\"button\"\n (click)=\"changeMonth(-1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"M\u00EAs anterior\"\n >\n <span av-icon name=\"chevron_left\"></span>\n </button>\n <span class=\"av-date-picker__month-label\">\n {{ monthLabel() }}\n </span>\n <button\n type=\"button\"\n (click)=\"changeMonth(1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"Pr\u00F3ximo m\u00EAs\"\n >\n <span av-icon name=\"chevron_right\"></span>\n </button>\n </div>\n\n <div class=\"av-date-picker__weekdays\">\n @for (day of weekDays; track day) {\n <span class=\"av-date-picker__weekday\">{{ day }}</span>\n }\n </div>\n\n <div class=\"av-date-picker__days\">\n @for (day of calendarDays(); track $index) {\n @if (day) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"av-date-picker__day\"\n [class.av-date-picker__day--selected]=\"isDaySelected(day)\"\n >\n {{ day.getDate() }}\n </button>\n } @else {\n <span class=\"av-date-picker__day-spacer\"></span>\n }\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'time') {\n <div class=\"av-date-picker__time\">\n <div class=\"av-date-picker__digital-time\">\n <span>{{ hours().toString().padStart(2, '0') }}</span>\n <span>:</span>\n <span>{{ minutes().toString().padStart(2, '0') }}</span>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Horas</span>\n <div class=\"av-date-picker__time-grid av-date-picker__time-grid--hours\">\n @for (hour of hourOptions; track hour) {\n <button\n type=\"button\"\n (click)=\"selectHour(hour)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"hours() === hour\"\n >\n {{ hour.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Minutos</span>\n <div class=\"av-date-picker__time-grid\">\n @for (minute of minuteOptions; track minute) {\n <button\n type=\"button\"\n (click)=\"selectMinute(minute)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"minutes() === minute\"\n >\n {{ minute.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <button\n type=\"button\"\n (click)=\"confirmSelection()\"\n class=\"av-date-picker__confirm\"\n >\n Confirmar\n </button>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".av-date-picker{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-date-picker__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-date-picker__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;padding:.5rem 1rem .5rem 2.5rem;position:relative;text-align:left;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-date-picker__trigger:hover{border-color:var(--av-color-border-hover)}.av-date-picker__trigger:focus{outline:none}.av-date-picker__trigger--open,.av-date-picker__trigger:focus{border-color:var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-date-accent) 24%,transparent)}.av-date-picker__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-date-picker__trigger--invalid,.av-date-picker__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-date-picker__trigger-icon{color:var(--av-color-text-subtle);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-date-picker__trigger-value{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-date-picker__trigger-value--placeholder{color:var(--av-color-text-subtle)}.av-date-picker__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-date-picker__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;overflow:hidden;width:20rem}.av-date-picker__tabs{background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.25rem;padding:.25rem}.av-date-picker__tab{border-radius:var(--av-radius-md);color:var(--av-color-text-muted);flex:1;font-size:.75rem;font-weight:600;padding:.375rem 0;transition:background-color .2s ease,color .2s ease}.av-date-picker__tab--active{background:var(--av-color-surface);color:var(--av-date-accent-strong)}.av-date-picker__calendar,.av-date-picker__time{padding:1rem}.av-date-picker__time{display:flex;flex-direction:column;gap:.875rem}.av-date-picker__month-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.av-date-picker__nav-button{align-items:center;border-radius:var(--av-radius-full);color:var(--av-color-text-muted);display:flex;height:2rem;justify-content:center;transition:background-color .2s ease,color .2s ease;width:2rem}.av-date-picker__nav-button:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__month-label{color:var(--av-color-text);font-size:.875rem;font-weight:600;text-transform:capitalize}.av-date-picker__weekdays,.av-date-picker__days{display:grid;gap:.25rem;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center}.av-date-picker__weekdays{margin-bottom:.5rem}.av-date-picker__weekday{color:var(--av-color-text-subtle);font-size:.75rem;font-weight:600}.av-date-picker__day,.av-date-picker__time-option{align-items:center;border-radius:var(--av-radius-md);color:var(--av-color-text);display:flex;font-size:.75rem;font-weight:600;justify-content:center;transition:background-color .2s ease,color .2s ease}.av-date-picker__day,.av-date-picker__day-spacer{height:2rem;width:2rem}.av-date-picker__day:hover,.av-date-picker__time-option:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__day--selected,.av-date-picker__time-option--selected{background:var(--av-date-accent);color:var(--av-white)}.av-date-picker__digital-time{align-items:center;background:var(--av-color-surface-muted);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-lg);color:var(--av-color-text);display:flex;font-size:1.5rem;font-weight:700;gap:.25rem;justify-content:center;padding:.5rem 1rem}.av-date-picker__time-section{display:flex;flex-direction:column;gap:.375rem}.av-date-picker__time-label{color:var(--av-color-text-muted);font-size:.75rem;font-weight:700}.av-date-picker__time-grid{display:grid;gap:.375rem;grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-grid--hours{grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-option{border:1px solid var(--av-color-border-soft);height:2rem}.av-date-picker__confirm{background:var(--av-date-accent);border-radius:var(--av-radius-md);color:var(--av-white);font-size:.875rem;font-weight:600;margin-top:.125rem;padding:.5rem 0;transition:background-color .2s ease;width:100%}.av-date-picker__confirm:hover{background:var(--av-date-accent-strong)}\n"] }]
|
|
2590
|
+
args: [{ selector: 'av-date-time-picker, av-date-picker', standalone: true, imports: [CommonModule, OverlayModule, AvIcon], template: "<div class=\"av-date-picker\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-date-picker__label\">{{ label() }}</label>\n }\n\n <button\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n type=\"button\"\n (click)=\"toggleDropdown()\"\n class=\"av-date-picker__trigger\"\n [class.av-date-picker__trigger--open]=\"isOpen()\"\n [class.av-date-picker__trigger--disabled]=\"disabled()\"\n [class.av-date-picker__trigger--invalid]=\"isInvalid\"\n [disabled]=\"disabled()\"\n [style.border-radius]=\"roundedStyle\"\n >\n <span class=\"av-date-picker__trigger-icon\">\n <span av-icon [name]=\"defaultIcon\"></span>\n </span>\n\n <span class=\"av-date-picker__trigger-value\" [class.av-date-picker__trigger-value--placeholder]=\"!selectedDate()\">\n {{ displayValue() || placeholder() }}\n </span>\n </button>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-date-picker__error\">\n {{ errorMessage() || 'Data/Hora inv\u00E1lida' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-date-picker__panel\"\n [ngStyle]=\"themeVars()\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (mode() === 'datetime') {\n <div class=\"av-date-picker__tabs\">\n <button\n type=\"button\"\n (click)=\"activeTab.set('date')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'date'\"\n >\n Data\n </button>\n <button\n type=\"button\"\n (click)=\"activeTab.set('time')\"\n class=\"av-date-picker__tab\"\n [class.av-date-picker__tab--active]=\"activeTab() === 'time'\"\n >\n Hora\n </button>\n </div>\n }\n\n @if (activeTab() === 'date') {\n <div class=\"av-date-picker__calendar\">\n <div class=\"av-date-picker__month-nav\">\n <button\n type=\"button\"\n (click)=\"changeMonth(-1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"M\u00EAs anterior\"\n >\n <span av-icon name=\"chevron_left\"></span>\n </button>\n <span class=\"av-date-picker__month-label\">\n {{ monthLabel() }}\n </span>\n <button\n type=\"button\"\n (click)=\"changeMonth(1)\"\n class=\"av-date-picker__nav-button\"\n aria-label=\"Pr\u00F3ximo m\u00EAs\"\n >\n <span av-icon name=\"chevron_right\"></span>\n </button>\n </div>\n\n <div class=\"av-date-picker__weekdays\">\n @for (day of weekDays; track day) {\n <span class=\"av-date-picker__weekday\">{{ day }}</span>\n }\n </div>\n\n <div class=\"av-date-picker__days\">\n @for (day of calendarDays(); track $index) {\n @if (day) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"av-date-picker__day\"\n [class.av-date-picker__day--selected]=\"isDaySelected(day)\"\n >\n {{ day.getDate() }}\n </button>\n } @else {\n <span class=\"av-date-picker__day-spacer\"></span>\n }\n }\n </div>\n </div>\n }\n\n @if (activeTab() === 'time') {\n <div class=\"av-date-picker__time\">\n <div class=\"av-date-picker__digital-time\">\n <span>{{ hours().toString().padStart(2, '0') }}</span>\n <span>:</span>\n <span>{{ minutes().toString().padStart(2, '0') }}</span>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Horas</span>\n <div class=\"av-date-picker__time-grid av-date-picker__time-grid--hours\">\n @for (hour of hourOptions; track hour) {\n <button\n type=\"button\"\n (click)=\"selectHour(hour)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"hours() === hour\"\n >\n {{ hour.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <div class=\"av-date-picker__time-section\">\n <span class=\"av-date-picker__time-label\">Minutos</span>\n <div class=\"av-date-picker__time-grid\">\n @for (minute of minuteOptions; track minute) {\n <button\n type=\"button\"\n (click)=\"selectMinute(minute)\"\n class=\"av-date-picker__time-option\"\n [class.av-date-picker__time-option--selected]=\"minutes() === minute\"\n >\n {{ minute.toString().padStart(2, '0') }}\n </button>\n }\n </div>\n </div>\n\n <button\n type=\"button\"\n (click)=\"confirmSelection()\"\n class=\"av-date-picker__confirm\"\n >\n Confirmar\n </button>\n </div>\n }\n </div>\n</ng-template>\n", styles: [".av-date-picker{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-date-picker__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-date-picker__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;line-height:1.25;min-height:2.5rem;padding:.5rem 1rem .5rem 2.5rem;position:relative;text-align:left;touch-action:manipulation;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-date-picker__trigger:hover{border-color:var(--av-color-border-hover)}.av-date-picker__trigger:focus{outline:none}.av-date-picker__trigger--open,.av-date-picker__trigger:focus{border-color:var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-date-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-date-accent) 24%,transparent)}.av-date-picker__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-date-picker__trigger--invalid,.av-date-picker__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-date-picker__trigger-icon{color:var(--av-color-text-subtle);display:flex;left:.75rem;pointer-events:none;position:absolute}.av-date-picker__trigger-value{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%}.av-date-picker__trigger-value--placeholder{color:var(--av-color-text-subtle)}.av-date-picker__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-date-picker__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-sizing:border-box;box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;max-height:calc(100dvh - 1rem);max-width:calc(100vw - 1rem);overflow:hidden;width:min(20rem,calc(100vw - 1rem))}.av-date-picker__tabs{background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.25rem;padding:.25rem}.av-date-picker__tab{border-radius:var(--av-radius-md);color:var(--av-color-text-muted);flex:1;font-size:.75rem;font-weight:600;padding:.375rem 0;transition:background-color .2s ease,color .2s ease}.av-date-picker__tab--active{background:var(--av-color-surface);color:var(--av-date-accent-strong)}.av-date-picker__calendar,.av-date-picker__time{padding:1rem}.av-date-picker__time{display:flex;flex-direction:column;gap:.875rem}.av-date-picker__month-nav{align-items:center;display:flex;justify-content:space-between;margin-bottom:1rem}.av-date-picker__nav-button{align-items:center;border-radius:var(--av-radius-full);color:var(--av-color-text-muted);display:flex;height:2rem;justify-content:center;touch-action:manipulation;transition:background-color .2s ease,color .2s ease;width:2rem}.av-date-picker__nav-button:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__month-label{color:var(--av-color-text);font-size:.875rem;font-weight:600;text-transform:capitalize}.av-date-picker__weekdays,.av-date-picker__days{display:grid;gap:.25rem;grid-template-columns:repeat(7,minmax(0,1fr));text-align:center}.av-date-picker__weekdays{margin-bottom:.5rem}.av-date-picker__weekday{color:var(--av-color-text-subtle);font-size:.75rem;font-weight:600}.av-date-picker__day,.av-date-picker__time-option{align-items:center;border-radius:var(--av-radius-md);color:var(--av-color-text);display:flex;font-size:.75rem;font-weight:600;justify-content:center;transition:background-color .2s ease,color .2s ease}.av-date-picker__day,.av-date-picker__day-spacer{height:2rem;width:2rem}.av-date-picker__day:hover,.av-date-picker__time-option:hover{background:var(--av-date-accent-soft);color:var(--av-date-accent-strong)}.av-date-picker__day--selected,.av-date-picker__time-option--selected{background:var(--av-date-accent);color:var(--av-white)}.av-date-picker__digital-time{align-items:center;background:var(--av-color-surface-muted);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-lg);color:var(--av-color-text);display:flex;font-size:1.5rem;font-weight:700;gap:.25rem;justify-content:center;padding:.5rem 1rem}.av-date-picker__time-section{display:flex;flex-direction:column;gap:.375rem}.av-date-picker__time-label{color:var(--av-color-text-muted);font-size:.75rem;font-weight:700}.av-date-picker__time-grid{display:grid;gap:.375rem;grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-grid--hours{grid-template-columns:repeat(6,minmax(0,1fr))}.av-date-picker__time-option{border:1px solid var(--av-color-border-soft);height:2rem;touch-action:manipulation}.av-date-picker__confirm{background:var(--av-date-accent);border-radius:var(--av-radius-md);color:var(--av-white);font-size:.875rem;font-weight:600;margin-top:.125rem;min-height:2.5rem;padding:.5rem 0;touch-action:manipulation;transition:background-color .2s ease;width:100%}.av-date-picker__confirm:hover{background:var(--av-date-accent-strong)}@media(pointer:coarse),(max-width:640px){.av-date-picker__trigger,.av-date-picker__confirm{min-height:2.75rem}.av-date-picker__calendar,.av-date-picker__time{padding:.75rem}.av-date-picker__nav-button,.av-date-picker__day,.av-date-picker__day-spacer,.av-date-picker__time-option{min-height:2.5rem}.av-date-picker__day,.av-date-picker__day-spacer{height:auto;width:auto}}\n"] }]
|
|
2403
2591
|
}], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
|
|
2404
2592
|
type: Optional
|
|
2405
2593
|
}, {
|
|
@@ -2600,11 +2788,11 @@ class AvMultiSelect {
|
|
|
2600
2788
|
this.disabled.set(isDisabled);
|
|
2601
2789
|
}
|
|
2602
2790
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvMultiSelect, deps: [{ token: i1$1.NgControl, optional: true, self: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
2603
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvMultiSelect, isStandalone: true, selector: "av-multiselect, av-multi-select", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, labelFormat: { classPropertyName: "labelFormat", publicName: "labelFormat", isSignal: true, isRequired: false, transformFunction: null }, valueKey: { classPropertyName: "valueKey", publicName: "valueKey", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ringColor: { classPropertyName: "ringColor", publicName: "ringColor", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, onSearch: { classPropertyName: "onSearch", publicName: "onSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div class=\"av-multi-select\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-multi-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n role=\"combobox\"\n class=\"av-multi-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-multi-select__trigger--with-icon]=\"icon()\"\n [class.av-multi-select__trigger--without-icon]=\"!icon()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon()) {\n <div class=\"av-multi-select__icon\">\n <span av-icon [name]=\"icon()\"></span>\n </div>\n }\n\n <div class=\"av-multi-select__chips\">\n @for (item of selectedOptions(); track getItemValue(item)) {\n <span class=\"av-multi-select__chip\">\n {{ getItemLabel(item) }}\n <button\n type=\"button\"\n (click)=\"removeOption($event, item)\"\n class=\"av-multi-select__chip-remove\"\n aria-label=\"Remover op\u00E7\u00E3o\"\n >\n <span av-icon name=\"close\" class=\"av-multi-select__chip-remove-icon\"></span>\n </button>\n </span>\n } @empty {\n <span class=\"av-multi-select__placeholder\">\n {{ placeholder() }}\n </span>\n }\n </div>\n\n <div\n class=\"av-multi-select__chevron\"\n [class.av-multi-select__chevron--open]=\"isOpen()\"\n >\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-multi-select__error\">\n {{ errorMessage() || 'Selecione ao menos uma op\u00E7\u00E3o' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-multi-select__panel\"\n [ngStyle]=\"themeVars()\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-multi-select__search\">\n <span av-icon name=\"search\" class=\"av-multi-select__search-icon\"></span>\n <input\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-multi-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-multi-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"toggleOption(item)\"\n class=\"av-multi-select__option\"\n [class.av-multi-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-multi-select__option-label\" [class.av-multi-select__option-label--selected]=\"isSelected(item)\">\n {{ getItemLabel(item) }}\n </span>\n\n <div\n class=\"av-multi-select__option-check\"\n [class.av-multi-select__option-check--selected]=\"isSelected(item)\"\n >\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-multi-select__option-check-icon\"></span>\n }\n </div>\n </li>\n } @empty {\n <li class=\"av-multi-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-multi-select{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-multi-select__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-multi-select__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;min-height:42px;padding:.375rem 2.5rem .375rem .75rem;position:relative;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-multi-select__trigger:hover{border-color:var(--av-color-border-hover)}.av-multi-select__trigger:focus{outline:none}.av-multi-select__trigger--with-icon{padding-left:2.5rem}.av-multi-select__trigger--without-icon{padding-left:.75rem}.av-multi-select__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-multi-select__trigger--open,.av-multi-select__trigger:focus{border-color:var(--av-multi-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-multi-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-multi-accent) 24%,transparent)}.av-multi-select__trigger--invalid,.av-multi-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-multi-select__icon,.av-multi-select__chevron{color:var(--av-color-text-subtle);display:flex;pointer-events:none;position:absolute;top:.625rem}.av-multi-select__icon{left:.75rem}.av-multi-select__chevron{right:.75rem;transition:transform .2s ease}.av-multi-select__chevron--open{transform:rotate(180deg)}.av-multi-select__chips{align-items:center;display:flex;flex-wrap:wrap;gap:.375rem;width:100%}.av-multi-select__chip{align-items:center;background:var(--av-multi-selected-bg);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-md);color:var(--av-multi-selected-color);display:inline-flex;font-size:.75rem;font-weight:600;gap:.25rem;max-width:100%;padding:.125rem .5rem}.av-multi-select__chip-remove{align-items:center;border-radius:var(--av-radius-full);color:inherit;display:inline-flex;justify-content:center;transition:color .2s ease}.av-multi-select__chip-remove:hover{color:var(--av-color-danger)}.av-multi-select__placeholder{color:var(--av-color-text-subtle);font-size:.875rem}.av-multi-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-multi-select__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;max-height:15rem;overflow:hidden}.av-multi-select__search{align-items:center;background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.5rem;padding:.5rem}.av-multi-select__search-icon{color:var(--av-color-text-subtle);font-size:.875rem}.av-multi-select__search-input{background:transparent;border:0;color:var(--av-color-text);font-size:.875rem;outline:0;width:100%}.av-multi-select__search-input::placeholder{color:var(--av-color-text-subtle)}.av-multi-select__options{flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-multi-select__option{align-items:center;color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;padding:.5rem 1rem;transition:background-color .2s ease,color .2s ease;-webkit-user-select:none;user-select:none}.av-multi-select__option:hover{background:var(--av-multi-soft);color:var(--av-multi-selected-color)}.av-multi-select__option--selected{background:var(--av-multi-selected-bg);color:var(--av-multi-selected-color)}.av-multi-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-multi-select__option-label--selected{font-weight:600}.av-multi-select__option-check{align-items:center;border:1px solid var(--av-color-border);border-radius:var(--av-radius-sm);display:flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.av-multi-select__option-check--selected{background:var(--av-multi-accent);border-color:var(--av-multi-accent);color:var(--av-white)}.av-multi-select__option-check-icon{color:var(--av-white);font-size:.75rem}.av-multi-select__empty{color:var(--av-color-text-subtle);font-size:.875rem;padding:.75rem 1rem;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2791
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvMultiSelect, isStandalone: true, selector: "av-multiselect, av-multi-select", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: true, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null }, labelKey: { classPropertyName: "labelKey", publicName: "labelKey", isSignal: true, isRequired: false, transformFunction: null }, labelFormat: { classPropertyName: "labelFormat", publicName: "labelFormat", isSignal: true, isRequired: false, transformFunction: null }, valueKey: { classPropertyName: "valueKey", publicName: "valueKey", isSignal: true, isRequired: false, transformFunction: null }, label: { classPropertyName: "label", publicName: "label", isSignal: true, isRequired: false, transformFunction: null }, icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, searchPlaceholder: { classPropertyName: "searchPlaceholder", publicName: "searchPlaceholder", isSignal: true, isRequired: false, transformFunction: null }, searchable: { classPropertyName: "searchable", publicName: "searchable", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, ringColor: { classPropertyName: "ringColor", publicName: "ringColor", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, errorMessage: { classPropertyName: "errorMessage", publicName: "errorMessage", isSignal: true, isRequired: false, transformFunction: null }, onSearch: { classPropertyName: "onSearch", publicName: "onSearch", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "triggerEl", first: true, predicate: ["triggerEl"], descendants: true }], ngImport: i0, template: "<div class=\"av-multi-select\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-multi-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n role=\"combobox\"\n class=\"av-multi-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-multi-select__trigger--with-icon]=\"icon()\"\n [class.av-multi-select__trigger--without-icon]=\"!icon()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon()) {\n <div class=\"av-multi-select__icon\">\n <span av-icon [name]=\"icon()\"></span>\n </div>\n }\n\n <div class=\"av-multi-select__chips\">\n @for (item of selectedOptions(); track getItemValue(item)) {\n <span class=\"av-multi-select__chip\">\n {{ getItemLabel(item) }}\n <button\n type=\"button\"\n (click)=\"removeOption($event, item)\"\n class=\"av-multi-select__chip-remove\"\n aria-label=\"Remover op\u00E7\u00E3o\"\n >\n <span av-icon name=\"close\" class=\"av-multi-select__chip-remove-icon\"></span>\n </button>\n </span>\n } @empty {\n <span class=\"av-multi-select__placeholder\">\n {{ placeholder() }}\n </span>\n }\n </div>\n\n <div\n class=\"av-multi-select__chevron\"\n [class.av-multi-select__chevron--open]=\"isOpen()\"\n >\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-multi-select__error\">\n {{ errorMessage() || 'Selecione ao menos uma op\u00E7\u00E3o' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-multi-select__panel\"\n [ngStyle]=\"themeVars()\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-multi-select__search\">\n <span av-icon name=\"search\" class=\"av-multi-select__search-icon\"></span>\n <input\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-multi-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-multi-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"toggleOption(item)\"\n class=\"av-multi-select__option\"\n [class.av-multi-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-multi-select__option-label\" [class.av-multi-select__option-label--selected]=\"isSelected(item)\">\n {{ getItemLabel(item) }}\n </span>\n\n <div\n class=\"av-multi-select__option-check\"\n [class.av-multi-select__option-check--selected]=\"isSelected(item)\"\n >\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-multi-select__option-check-icon\"></span>\n }\n </div>\n </li>\n } @empty {\n <li class=\"av-multi-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-multi-select{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-multi-select__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-multi-select__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;min-height:2.625rem;padding:.375rem 2.5rem .375rem .75rem;position:relative;touch-action:manipulation;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-multi-select__trigger:hover{border-color:var(--av-color-border-hover)}.av-multi-select__trigger:focus{outline:none}.av-multi-select__trigger--with-icon{padding-left:2.5rem}.av-multi-select__trigger--without-icon{padding-left:.75rem}.av-multi-select__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-multi-select__trigger--open,.av-multi-select__trigger:focus{border-color:var(--av-multi-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-multi-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-multi-accent) 24%,transparent)}.av-multi-select__trigger--invalid,.av-multi-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-multi-select__icon,.av-multi-select__chevron{color:var(--av-color-text-subtle);display:flex;pointer-events:none;position:absolute;top:.625rem}.av-multi-select__icon{left:.75rem}.av-multi-select__chevron{right:.75rem;transition:transform .2s ease}.av-multi-select__chevron--open{transform:rotate(180deg)}.av-multi-select__chips{align-items:center;display:flex;flex-wrap:wrap;gap:.375rem;width:100%}.av-multi-select__chip{align-items:center;background:var(--av-multi-selected-bg);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-md);color:var(--av-multi-selected-color);display:inline-flex;font-size:.75rem;font-weight:600;gap:.25rem;max-width:100%;padding:.125rem .5rem}.av-multi-select__chip-remove{align-items:center;background:transparent;border:0;border-radius:var(--av-radius-full);color:inherit;cursor:pointer;display:inline-flex;height:1.5rem;justify-content:center;min-width:1.5rem;transition:color .2s ease}.av-multi-select__chip-remove:hover{color:var(--av-color-danger)}.av-multi-select__placeholder{color:var(--av-color-text-subtle);font-size:.875rem}.av-multi-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-multi-select__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-sizing:border-box;box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;max-height:min(15rem,calc(100dvh - 1rem));max-width:calc(100vw - 1rem);overflow:hidden;overscroll-behavior:contain}.av-multi-select__search{align-items:center;background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.5rem;padding:.5rem}.av-multi-select__search-icon{color:var(--av-color-text-subtle);font-size:.875rem}.av-multi-select__search-input{background:transparent;border:0;color:var(--av-color-text);font-size:.875rem;outline:0;width:100%}.av-multi-select__search-input::placeholder{color:var(--av-color-text-subtle)}.av-multi-select__options{-webkit-overflow-scrolling:touch;flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-multi-select__option{align-items:center;color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;min-height:2.5rem;padding:.5rem 1rem;touch-action:manipulation;transition:background-color .2s ease,color .2s ease;-webkit-user-select:none;user-select:none}.av-multi-select__option:hover{background:var(--av-multi-soft);color:var(--av-multi-selected-color)}.av-multi-select__option--selected{background:var(--av-multi-selected-bg);color:var(--av-multi-selected-color)}.av-multi-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-multi-select__option-label--selected{font-weight:600}.av-multi-select__option-check{align-items:center;border:1px solid var(--av-color-border);border-radius:var(--av-radius-sm);display:flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.av-multi-select__option-check--selected{background:var(--av-multi-accent);border-color:var(--av-multi-accent);color:var(--av-white)}.av-multi-select__option-check-icon{color:var(--av-white);font-size:.75rem}.av-multi-select__empty{color:var(--av-color-text-subtle);font-size:.875rem;padding:.75rem 1rem;text-align:center}@media(pointer:coarse),(max-width:640px){.av-multi-select__trigger,.av-multi-select__option{min-height:2.75rem}.av-multi-select__search-input{font-size:1rem}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation", "cdkConnectedOverlayUsePopover", "cdkConnectedOverlayMatchWidth", "cdkConnectedOverlay"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2604
2792
|
}
|
|
2605
2793
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvMultiSelect, decorators: [{
|
|
2606
2794
|
type: Component,
|
|
2607
|
-
args: [{ selector: 'av-multiselect, av-multi-select', standalone: true, imports: [CommonModule, OverlayModule, AvIcon], template: "<div class=\"av-multi-select\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-multi-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n role=\"combobox\"\n class=\"av-multi-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-multi-select__trigger--with-icon]=\"icon()\"\n [class.av-multi-select__trigger--without-icon]=\"!icon()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon()) {\n <div class=\"av-multi-select__icon\">\n <span av-icon [name]=\"icon()\"></span>\n </div>\n }\n\n <div class=\"av-multi-select__chips\">\n @for (item of selectedOptions(); track getItemValue(item)) {\n <span class=\"av-multi-select__chip\">\n {{ getItemLabel(item) }}\n <button\n type=\"button\"\n (click)=\"removeOption($event, item)\"\n class=\"av-multi-select__chip-remove\"\n aria-label=\"Remover op\u00E7\u00E3o\"\n >\n <span av-icon name=\"close\" class=\"av-multi-select__chip-remove-icon\"></span>\n </button>\n </span>\n } @empty {\n <span class=\"av-multi-select__placeholder\">\n {{ placeholder() }}\n </span>\n }\n </div>\n\n <div\n class=\"av-multi-select__chevron\"\n [class.av-multi-select__chevron--open]=\"isOpen()\"\n >\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-multi-select__error\">\n {{ errorMessage() || 'Selecione ao menos uma op\u00E7\u00E3o' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-multi-select__panel\"\n [ngStyle]=\"themeVars()\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-multi-select__search\">\n <span av-icon name=\"search\" class=\"av-multi-select__search-icon\"></span>\n <input\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-multi-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-multi-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"toggleOption(item)\"\n class=\"av-multi-select__option\"\n [class.av-multi-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-multi-select__option-label\" [class.av-multi-select__option-label--selected]=\"isSelected(item)\">\n {{ getItemLabel(item) }}\n </span>\n\n <div\n class=\"av-multi-select__option-check\"\n [class.av-multi-select__option-check--selected]=\"isSelected(item)\"\n >\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-multi-select__option-check-icon\"></span>\n }\n </div>\n </li>\n } @empty {\n <li class=\"av-multi-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-multi-select{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-multi-select__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-multi-select__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;min-height:
|
|
2795
|
+
args: [{ selector: 'av-multiselect, av-multi-select', standalone: true, imports: [CommonModule, OverlayModule, AvIcon], template: "<div class=\"av-multi-select\" [ngStyle]=\"themeVars()\">\n @if (label()) {\n <label class=\"av-multi-select__label\">\n {{ label() }}\n </label>\n }\n\n <div\n #triggerEl\n cdkOverlayOrigin\n #trigger=\"cdkOverlayOrigin\"\n (click)=\"toggleDropdown()\"\n tabindex=\"0\"\n role=\"combobox\"\n class=\"av-multi-select__trigger\"\n [style.border-radius]=\"roundedStyle\"\n [class.av-multi-select__trigger--with-icon]=\"icon()\"\n [class.av-multi-select__trigger--without-icon]=\"!icon()\"\n [ngClass]=\"triggerClasses\"\n >\n @if (icon()) {\n <div class=\"av-multi-select__icon\">\n <span av-icon [name]=\"icon()\"></span>\n </div>\n }\n\n <div class=\"av-multi-select__chips\">\n @for (item of selectedOptions(); track getItemValue(item)) {\n <span class=\"av-multi-select__chip\">\n {{ getItemLabel(item) }}\n <button\n type=\"button\"\n (click)=\"removeOption($event, item)\"\n class=\"av-multi-select__chip-remove\"\n aria-label=\"Remover op\u00E7\u00E3o\"\n >\n <span av-icon name=\"close\" class=\"av-multi-select__chip-remove-icon\"></span>\n </button>\n </span>\n } @empty {\n <span class=\"av-multi-select__placeholder\">\n {{ placeholder() }}\n </span>\n }\n </div>\n\n <div\n class=\"av-multi-select__chevron\"\n [class.av-multi-select__chevron--open]=\"isOpen()\"\n >\n <span av-icon name=\"expand_more\"></span>\n </div>\n </div>\n\n @if (isInvalid || errorMessage()) {\n <span class=\"av-multi-select__error\">\n {{ errorMessage() || 'Selecione ao menos uma op\u00E7\u00E3o' }}\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"trigger\"\n [cdkConnectedOverlayOpen]=\"isOpen()\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n [cdkConnectedOverlayPush]=\"true\"\n [cdkConnectedOverlayViewportMargin]=\"8\"\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n (backdropClick)=\"closeDropdown()\"\n>\n <div\n class=\"av-multi-select__panel\"\n [ngStyle]=\"themeVars()\"\n [style.width.px]=\"triggerEl.offsetWidth\"\n [style.border-radius]=\"roundedStyle\"\n >\n @if (searchable()) {\n <div class=\"av-multi-select__search\">\n <span av-icon name=\"search\" class=\"av-multi-select__search-icon\"></span>\n <input\n type=\"text\"\n [placeholder]=\"searchPlaceholder()\"\n [value]=\"searchTerm()\"\n (input)=\"handleSearchInput($event)\"\n class=\"av-multi-select__search-input\"\n />\n </div>\n }\n\n <ul class=\"av-multi-select__options\">\n @for (item of filteredData(); track getItemValue(item)) {\n <li\n (click)=\"toggleOption(item)\"\n class=\"av-multi-select__option\"\n [class.av-multi-select__option--selected]=\"isSelected(item)\"\n >\n <span class=\"av-multi-select__option-label\" [class.av-multi-select__option-label--selected]=\"isSelected(item)\">\n {{ getItemLabel(item) }}\n </span>\n\n <div\n class=\"av-multi-select__option-check\"\n [class.av-multi-select__option-check--selected]=\"isSelected(item)\"\n >\n @if (isSelected(item)) {\n <span av-icon name=\"check\" class=\"av-multi-select__option-check-icon\"></span>\n }\n </div>\n </li>\n } @empty {\n <li class=\"av-multi-select__empty\">Nenhuma op\u00E7\u00E3o encontrada</li>\n }\n </ul>\n </div>\n</ng-template>\n", styles: [".av-multi-select{display:flex;flex-direction:column;gap:.25rem;width:100%;color:var(--av-color-text)}.av-multi-select__label{color:var(--av-color-text);font-size:.875rem;font-weight:700;text-align:start}.av-multi-select__trigger{align-items:center;background:var(--av-color-surface);border:2px solid var(--av-color-border);box-sizing:border-box;box-shadow:var(--av-shadow-control);color:var(--av-color-text);cursor:pointer;display:flex;min-height:2.625rem;padding:.375rem 2.5rem .375rem .75rem;position:relative;touch-action:manipulation;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease;width:100%}.av-multi-select__trigger:hover{border-color:var(--av-color-border-hover)}.av-multi-select__trigger:focus{outline:none}.av-multi-select__trigger--with-icon{padding-left:2.5rem}.av-multi-select__trigger--without-icon{padding-left:.75rem}.av-multi-select__trigger--disabled{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);cursor:not-allowed;opacity:.72}.av-multi-select__trigger--open,.av-multi-select__trigger:focus{border-color:var(--av-multi-accent);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-multi-accent);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-multi-accent) 24%,transparent)}.av-multi-select__trigger--invalid,.av-multi-select__trigger--invalid:focus{border-color:var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 2px var(--av-color-danger);box-shadow:var(--av-shadow-control),0 0 0 3px color-mix(in srgb,var(--av-color-danger) 24%,transparent);color:var(--av-color-danger-text)}.av-multi-select__icon,.av-multi-select__chevron{color:var(--av-color-text-subtle);display:flex;pointer-events:none;position:absolute;top:.625rem}.av-multi-select__icon{left:.75rem}.av-multi-select__chevron{right:.75rem;transition:transform .2s ease}.av-multi-select__chevron--open{transform:rotate(180deg)}.av-multi-select__chips{align-items:center;display:flex;flex-wrap:wrap;gap:.375rem;width:100%}.av-multi-select__chip{align-items:center;background:var(--av-multi-selected-bg);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-md);color:var(--av-multi-selected-color);display:inline-flex;font-size:.75rem;font-weight:600;gap:.25rem;max-width:100%;padding:.125rem .5rem}.av-multi-select__chip-remove{align-items:center;background:transparent;border:0;border-radius:var(--av-radius-full);color:inherit;cursor:pointer;display:inline-flex;height:1.5rem;justify-content:center;min-width:1.5rem;transition:color .2s ease}.av-multi-select__chip-remove:hover{color:var(--av-color-danger)}.av-multi-select__placeholder{color:var(--av-color-text-subtle);font-size:.875rem}.av-multi-select__error{color:var(--av-color-danger);font-size:.75rem;font-weight:500}.av-multi-select__panel{background:var(--av-color-surface-raised);border:1px solid var(--av-color-border-soft);box-sizing:border-box;box-shadow:var(--av-shadow-raised);color:var(--av-color-text);display:flex;flex-direction:column;margin-top:.25rem;max-height:min(15rem,calc(100dvh - 1rem));max-width:calc(100vw - 1rem);overflow:hidden;overscroll-behavior:contain}.av-multi-select__search{align-items:center;background:var(--av-color-surface-muted);border-bottom:1px solid var(--av-color-border-soft);display:flex;gap:.5rem;padding:.5rem}.av-multi-select__search-icon{color:var(--av-color-text-subtle);font-size:.875rem}.av-multi-select__search-input{background:transparent;border:0;color:var(--av-color-text);font-size:.875rem;outline:0;width:100%}.av-multi-select__search-input::placeholder{color:var(--av-color-text-subtle)}.av-multi-select__options{-webkit-overflow-scrolling:touch;flex:1;list-style:none;margin:0;overflow-y:auto;padding:.25rem 0}.av-multi-select__option{align-items:center;color:var(--av-color-text);cursor:pointer;display:flex;font-size:.875rem;justify-content:space-between;min-height:2.5rem;padding:.5rem 1rem;touch-action:manipulation;transition:background-color .2s ease,color .2s ease;-webkit-user-select:none;user-select:none}.av-multi-select__option:hover{background:var(--av-multi-soft);color:var(--av-multi-selected-color)}.av-multi-select__option--selected{background:var(--av-multi-selected-bg);color:var(--av-multi-selected-color)}.av-multi-select__option-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-multi-select__option-label--selected{font-weight:600}.av-multi-select__option-check{align-items:center;border:1px solid var(--av-color-border);border-radius:var(--av-radius-sm);display:flex;flex-shrink:0;height:1rem;justify-content:center;width:1rem}.av-multi-select__option-check--selected{background:var(--av-multi-accent);border-color:var(--av-multi-accent);color:var(--av-white)}.av-multi-select__option-check-icon{color:var(--av-white);font-size:.75rem}.av-multi-select__empty{color:var(--av-color-text-subtle);font-size:.875rem;padding:.75rem 1rem;text-align:center}@media(pointer:coarse),(max-width:640px){.av-multi-select__trigger,.av-multi-select__option{min-height:2.75rem}.av-multi-select__search-input{font-size:1rem}}\n"] }]
|
|
2608
2796
|
}], ctorParameters: () => [{ type: i1$1.NgControl, decorators: [{
|
|
2609
2797
|
type: Optional
|
|
2610
2798
|
}, {
|
|
@@ -2668,6 +2856,69 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
2668
2856
|
}, template: "<ng-content></ng-content>\n", styles: [":host{align-items:start;display:grid;gap:var(--av-grid-gap, .5rem);grid-template-columns:repeat(var(--av-grid-cols-xs, 1),minmax(0,1fr));justify-content:start;width:100%}:host(.av-grid--empty){align-items:center;display:flex;justify-content:center;min-height:8rem}@media(min-width:640px){:host{grid-template-columns:repeat(var(--av-grid-cols-sm, var(--av-grid-cols-xs, 1)),minmax(0,1fr))}}@media(min-width:768px){:host{grid-template-columns:repeat(var(--av-grid-cols-md, var(--av-grid-cols-sm, 1)),minmax(0,1fr))}}@media(min-width:1024px){:host{grid-template-columns:repeat(var(--av-grid-cols-lg, var(--av-grid-cols-md, 1)),minmax(0,1fr))}}@media(min-width:1280px){:host{grid-template-columns:repeat(var(--av-grid-cols-xl, var(--av-grid-cols-lg, 1)),minmax(0,1fr))}}@media(min-width:1536px){:host{grid-template-columns:repeat(var(--av-grid-cols-2xl, var(--av-grid-cols-xl, 1)),minmax(0,1fr))}}\n"] }]
|
|
2669
2857
|
}], propDecorators: { cols: [{ type: i0.Input, args: [{ isSignal: true, alias: "cols", required: false }] }], empty: [{ type: i0.Input, args: [{ isSignal: true, alias: "empty", required: false }] }], gap: [{ type: i0.Input, args: [{ isSignal: true, alias: "gap", required: false }] }] } });
|
|
2670
2858
|
|
|
2859
|
+
class AvCard {
|
|
2860
|
+
config = inject(VISUALS_CONFIG);
|
|
2861
|
+
themeService = inject(ThemeService);
|
|
2862
|
+
appearance = input('outlined', /* @ts-ignore */
|
|
2863
|
+
...(ngDevMode ? [{ debugName: "appearance" }] : /* istanbul ignore next */ []));
|
|
2864
|
+
padding = input('md', /* @ts-ignore */
|
|
2865
|
+
...(ngDevMode ? [{ debugName: "padding" }] : /* istanbul ignore next */ []));
|
|
2866
|
+
rounded = input('md', /* @ts-ignore */
|
|
2867
|
+
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
2868
|
+
variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
|
|
2869
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
2870
|
+
themeVars = computed(() => {
|
|
2871
|
+
const variant = this.variant();
|
|
2872
|
+
const isDark = this.themeService.dark();
|
|
2873
|
+
const accent = `var(--av-${variant}-${isDark ? 400 : 500})`;
|
|
2874
|
+
return {
|
|
2875
|
+
'--av-card-accent': accent,
|
|
2876
|
+
'--av-card-accent-soft': isDark
|
|
2877
|
+
? `color-mix(in srgb, var(--av-${variant}-400) 14%, transparent)`
|
|
2878
|
+
: `var(--av-${variant}-50)`,
|
|
2879
|
+
'--av-card-bg': 'var(--av-color-surface)',
|
|
2880
|
+
'--av-card-border': 'var(--av-color-border-soft)',
|
|
2881
|
+
'--av-card-muted': 'var(--av-color-text-muted)',
|
|
2882
|
+
'--av-card-padding': this.paddingStyle(),
|
|
2883
|
+
'--av-card-radius': this.roundedStyle(),
|
|
2884
|
+
'--av-card-shadow': 'var(--av-shadow-control)',
|
|
2885
|
+
'--av-card-text': 'var(--av-color-text)',
|
|
2886
|
+
};
|
|
2887
|
+
}, /* @ts-ignore */
|
|
2888
|
+
...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
|
|
2889
|
+
isFilled = computed(() => this.appearance() === 'filled', /* @ts-ignore */
|
|
2890
|
+
...(ngDevMode ? [{ debugName: "isFilled" }] : /* istanbul ignore next */ []));
|
|
2891
|
+
isElevated = computed(() => this.appearance() === 'elevated', /* @ts-ignore */
|
|
2892
|
+
...(ngDevMode ? [{ debugName: "isElevated" }] : /* istanbul ignore next */ []));
|
|
2893
|
+
paddingStyle() {
|
|
2894
|
+
const padding = this.padding();
|
|
2895
|
+
if (typeof padding === 'number') {
|
|
2896
|
+
return `${padding}px`;
|
|
2897
|
+
}
|
|
2898
|
+
const sizes = {
|
|
2899
|
+
none: '0',
|
|
2900
|
+
xs: '.5rem',
|
|
2901
|
+
sm: '.75rem',
|
|
2902
|
+
md: '1rem',
|
|
2903
|
+
lg: '1.25rem',
|
|
2904
|
+
xl: '1.5rem',
|
|
2905
|
+
};
|
|
2906
|
+
return sizes[padding] ?? sizes.md;
|
|
2907
|
+
}
|
|
2908
|
+
roundedStyle() {
|
|
2909
|
+
const rounded = this.rounded();
|
|
2910
|
+
return typeof rounded === 'string'
|
|
2911
|
+
? `var(--av-radius-${rounded})`
|
|
2912
|
+
: `${rounded}px`;
|
|
2913
|
+
}
|
|
2914
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCard, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2915
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvCard, isStandalone: true, selector: "av-card", inputs: { appearance: { classPropertyName: "appearance", publicName: "appearance", isSignal: true, isRequired: false, transformFunction: null }, padding: { classPropertyName: "padding", publicName: "padding", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<article\n class=\"av-card\"\n [class.av-card--filled]=\"isFilled()\"\n [class.av-card--elevated]=\"isElevated()\"\n [ngStyle]=\"themeVars()\"\n>\n <div class=\"av-card__header\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"av-card__content\">\n <ng-content select=\"[content]\"></ng-content>\n <ng-content></ng-content>\n </div>\n\n <div class=\"av-card__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</article>\n", styles: [":host{display:block;min-width:0}.av-card{background:var(--av-card-bg, var(--av-color-surface));border:1px solid var(--av-card-border, var(--av-color-border-soft));border-radius:var(--av-card-radius, var(--av-radius-md));box-shadow:var(--av-card-shadow, var(--av-shadow-control));color:var(--av-card-text, var(--av-color-text));display:flex;flex-direction:column;min-width:0;overflow:hidden;position:relative;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease}.av-card:before{background:var(--av-card-accent);content:\"\";flex:0 0 3px}.av-card--filled{background:var(--av-card-accent-soft);border-color:color-mix(in srgb,var(--av-card-accent) 26%,var(--av-card-border))}.av-card--elevated{border-color:transparent;box-shadow:var(--av-shadow-raised)}.av-card__header,.av-card__content,.av-card__footer{min-width:0;padding:var(--av-card-padding, 1rem)}.av-card__header{color:var(--av-card-text, var(--av-color-text));font-weight:600}.av-card__footer{color:var(--av-card-muted, var(--av-color-text-muted))}.av-card__header:not(:empty){border-bottom:1px solid var(--av-card-border, var(--av-color-border-soft))}.av-card__footer:not(:empty){border-top:1px solid var(--av-card-border, var(--av-color-border-soft))}.av-card__header:empty,.av-card__content:empty,.av-card__footer:empty{display:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
|
|
2916
|
+
}
|
|
2917
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCard, decorators: [{
|
|
2918
|
+
type: Component,
|
|
2919
|
+
args: [{ imports: [CommonModule], selector: 'av-card', standalone: true, template: "<article\n class=\"av-card\"\n [class.av-card--filled]=\"isFilled()\"\n [class.av-card--elevated]=\"isElevated()\"\n [ngStyle]=\"themeVars()\"\n>\n <div class=\"av-card__header\">\n <ng-content select=\"[header]\"></ng-content>\n </div>\n\n <div class=\"av-card__content\">\n <ng-content select=\"[content]\"></ng-content>\n <ng-content></ng-content>\n </div>\n\n <div class=\"av-card__footer\">\n <ng-content select=\"[footer]\"></ng-content>\n </div>\n</article>\n", styles: [":host{display:block;min-width:0}.av-card{background:var(--av-card-bg, var(--av-color-surface));border:1px solid var(--av-card-border, var(--av-color-border-soft));border-radius:var(--av-card-radius, var(--av-radius-md));box-shadow:var(--av-card-shadow, var(--av-shadow-control));color:var(--av-card-text, var(--av-color-text));display:flex;flex-direction:column;min-width:0;overflow:hidden;position:relative;transition:background-color .2s ease,border-color .2s ease,box-shadow .2s ease,color .2s ease}.av-card:before{background:var(--av-card-accent);content:\"\";flex:0 0 3px}.av-card--filled{background:var(--av-card-accent-soft);border-color:color-mix(in srgb,var(--av-card-accent) 26%,var(--av-card-border))}.av-card--elevated{border-color:transparent;box-shadow:var(--av-shadow-raised)}.av-card__header,.av-card__content,.av-card__footer{min-width:0;padding:var(--av-card-padding, 1rem)}.av-card__header{color:var(--av-card-text, var(--av-color-text));font-weight:600}.av-card__footer{color:var(--av-card-muted, var(--av-color-text-muted))}.av-card__header:not(:empty){border-bottom:1px solid var(--av-card-border, var(--av-color-border-soft))}.av-card__footer:not(:empty){border-top:1px solid var(--av-card-border, var(--av-color-border-soft))}.av-card__header:empty,.av-card__content:empty,.av-card__footer:empty{display:none}\n"] }]
|
|
2920
|
+
}], propDecorators: { appearance: [{ type: i0.Input, args: [{ isSignal: true, alias: "appearance", required: false }] }], padding: [{ type: i0.Input, args: [{ isSignal: true, alias: "padding", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }] } });
|
|
2921
|
+
|
|
2671
2922
|
class AvButton {
|
|
2672
2923
|
config = inject(VISUALS_CONFIG);
|
|
2673
2924
|
icon = input(/* @ts-ignore */
|
|
@@ -2699,11 +2950,11 @@ class AvButton {
|
|
|
2699
2950
|
return `var(--av-${this.variant()}-500)`;
|
|
2700
2951
|
}
|
|
2701
2952
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvButton, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2702
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvButton, isStandalone: true, selector: "button[av-button], a[av-button]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.border-radius": "this.roundedClass", "style.--av-button-light-bg": "this.lightBackground", "style.--av-button-light-hover-bg": "this.lightHoverBackground", "style.--av-button-dark-bg": "this.darkBackground", "style.--av-button-dark-hover-bg": "this.darkHoverBackground" } }, ngImport: i0, template: "@if(icon() || loading()) {<span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>}\n<div>\n <ng-content></ng-content>\n</div>\n", styles: [":host{--av-button-focus-color: var(--av-button-light-bg);--av-button-shadow: rgba(50, 50, 93, .25) 0 6px 12px -2px, rgba(0, 0, 0, .3) 0 3px 7px -3px;display:inline-flex;width:fit-content;flex-shrink:0;align-items:center;justify-content:center;gap:5px;padding:8px 16px;font-size:14px;font-weight:500;background-color:var(--av-button-light-bg);color:var(--av-white);transition:background-color .15s ease,color .15s ease,transform .15s ease;cursor:pointer;box-shadow:var(--av-button-shadow)}:host:hover{background-color:var(--av-button-light-hover-bg)}:host:active{transform:scale(.95)}:host:focus-visible{outline:none;box-shadow:var(--av-button-shadow),0 0 0 2px var(--av-button-focus-color);box-shadow:var(--av-button-shadow),0 0 0 3px color-mix(in srgb,var(--av-button-focus-color) 28%,transparent)}:host-context([data-av-theme=\"dark\"]){--av-button-focus-color: var(--av-button-dark-hover-bg);--av-button-shadow: 0 12px 24px -12px rgb(0 0 0 / .62), 0 4px 10px -6px rgb(0 0 0 / .5);background-color:var(--av-button-dark-bg)}:host-context([data-av-theme=\"dark\"]):hover{background-color:var(--av-button-dark-hover-bg)}\n"], dependencies: [{ kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2953
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvButton, isStandalone: true, selector: "button[av-button], a[av-button]", inputs: { icon: { classPropertyName: "icon", publicName: "icon", isSignal: true, isRequired: false, transformFunction: null }, loadingIcon: { classPropertyName: "loadingIcon", publicName: "loadingIcon", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null } }, host: { properties: { "style.border-radius": "this.roundedClass", "style.--av-button-light-bg": "this.lightBackground", "style.--av-button-light-hover-bg": "this.lightHoverBackground", "style.--av-button-dark-bg": "this.darkBackground", "style.--av-button-dark-hover-bg": "this.darkHoverBackground" } }, ngImport: i0, template: "@if(icon() || loading()) {<span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>}\n<div class=\"btn-content\">\n <ng-content></ng-content>\n</div>\n", styles: [":host{--av-button-focus-color: var(--av-button-light-bg);--av-button-shadow: rgba(50, 50, 93, .25) 0 6px 12px -2px, rgba(0, 0, 0, .3) 0 3px 7px -3px;display:inline-flex;width:fit-content;flex-shrink:0;box-sizing:border-box;align-items:center;justify-content:center;gap:5px;min-height:2.5rem;padding:8px 16px;font-size:14px;line-height:1.2;font-weight:500;background-color:var(--av-button-light-bg);color:var(--av-white);transition:background-color .15s ease,color .15s ease,transform .15s ease;cursor:pointer;box-shadow:var(--av-button-shadow);touch-action:manipulation}:host:hover{background-color:var(--av-button-light-hover-bg)}:host:active{transform:scale(.95)}:host:focus-visible{outline:none;box-shadow:var(--av-button-shadow),0 0 0 2px var(--av-button-focus-color);box-shadow:var(--av-button-shadow),0 0 0 3px color-mix(in srgb,var(--av-button-focus-color) 28%,transparent)}:host-context([data-av-theme=\"dark\"]){--av-button-focus-color: var(--av-button-dark-hover-bg);--av-button-shadow: 0 12px 24px -12px rgb(0 0 0 / .62), 0 4px 10px -6px rgb(0 0 0 / .5);background-color:var(--av-button-dark-bg)}:host-context([data-av-theme=\"dark\"]):hover{background-color:var(--av-button-dark-hover-bg)}.btn-content{display:flex;align-items:center;justify-content:center;min-width:0}@media(pointer:coarse),(max-width:640px){:host{min-height:2.75rem}}\n"], dependencies: [{ kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2703
2954
|
}
|
|
2704
2955
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvButton, decorators: [{
|
|
2705
2956
|
type: Component,
|
|
2706
|
-
args: [{ imports: [AvIcon], selector: 'button[av-button], a[av-button]', template: "@if(icon() || loading()) {<span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>}\n<div>\n <ng-content></ng-content>\n</div>\n", styles: [":host{--av-button-focus-color: var(--av-button-light-bg);--av-button-shadow: rgba(50, 50, 93, .25) 0 6px 12px -2px, rgba(0, 0, 0, .3) 0 3px 7px -3px;display:inline-flex;width:fit-content;flex-shrink:0;align-items:center;justify-content:center;gap:5px;padding:8px 16px;font-size:14px;font-weight:500;background-color:var(--av-button-light-bg);color:var(--av-white);transition:background-color .15s ease,color .15s ease,transform .15s ease;cursor:pointer;box-shadow:var(--av-button-shadow)}:host:hover{background-color:var(--av-button-light-hover-bg)}:host:active{transform:scale(.95)}:host:focus-visible{outline:none;box-shadow:var(--av-button-shadow),0 0 0 2px var(--av-button-focus-color);box-shadow:var(--av-button-shadow),0 0 0 3px color-mix(in srgb,var(--av-button-focus-color) 28%,transparent)}:host-context([data-av-theme=\"dark\"]){--av-button-focus-color: var(--av-button-dark-hover-bg);--av-button-shadow: 0 12px 24px -12px rgb(0 0 0 / .62), 0 4px 10px -6px rgb(0 0 0 / .5);background-color:var(--av-button-dark-bg)}:host-context([data-av-theme=\"dark\"]):hover{background-color:var(--av-button-dark-hover-bg)}\n"] }]
|
|
2957
|
+
args: [{ imports: [AvIcon], selector: 'button[av-button], a[av-button]', template: "@if(icon() || loading()) {<span av-icon [name]=\"loading()? loadingIcon()!: icon()!\"></span>}\n<div class=\"btn-content\">\n <ng-content></ng-content>\n</div>\n", styles: [":host{--av-button-focus-color: var(--av-button-light-bg);--av-button-shadow: rgba(50, 50, 93, .25) 0 6px 12px -2px, rgba(0, 0, 0, .3) 0 3px 7px -3px;display:inline-flex;width:fit-content;flex-shrink:0;box-sizing:border-box;align-items:center;justify-content:center;gap:5px;min-height:2.5rem;padding:8px 16px;font-size:14px;line-height:1.2;font-weight:500;background-color:var(--av-button-light-bg);color:var(--av-white);transition:background-color .15s ease,color .15s ease,transform .15s ease;cursor:pointer;box-shadow:var(--av-button-shadow);touch-action:manipulation}:host:hover{background-color:var(--av-button-light-hover-bg)}:host:active{transform:scale(.95)}:host:focus-visible{outline:none;box-shadow:var(--av-button-shadow),0 0 0 2px var(--av-button-focus-color);box-shadow:var(--av-button-shadow),0 0 0 3px color-mix(in srgb,var(--av-button-focus-color) 28%,transparent)}:host-context([data-av-theme=\"dark\"]){--av-button-focus-color: var(--av-button-dark-hover-bg);--av-button-shadow: 0 12px 24px -12px rgb(0 0 0 / .62), 0 4px 10px -6px rgb(0 0 0 / .5);background-color:var(--av-button-dark-bg)}:host-context([data-av-theme=\"dark\"]):hover{background-color:var(--av-button-dark-hover-bg)}.btn-content{display:flex;align-items:center;justify-content:center;min-width:0}@media(pointer:coarse),(max-width:640px){:host{min-height:2.75rem}}\n"] }]
|
|
2707
2958
|
}], propDecorators: { icon: [{ type: i0.Input, args: [{ isSignal: true, alias: "icon", required: false }] }], loadingIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "loadingIcon", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], roundedClass: [{
|
|
2708
2959
|
type: HostBinding,
|
|
2709
2960
|
args: ['style.border-radius']
|
|
@@ -2751,11 +3002,11 @@ class AvPaginator {
|
|
|
2751
3002
|
this.pageChanged.emit(nextPage);
|
|
2752
3003
|
}
|
|
2753
3004
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvPaginator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
2754
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvPaginator, isStandalone: true, selector: "av-paginator", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: true, transformFunction: null }, totalPages: { classPropertyName: "totalPages", publicName: "totalPages", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { pageChanged: "pageChanged" }, ngImport: i0, template: "<nav class=\"av-paginator\" aria-label=\"Pagina\u00E7\u00E3o\">\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(0)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"Primeira p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_left\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() - 1)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"P\u00E1gina anterior\"\n >\n <span av-icon name=\"arrow_left\" size=\"sm\"></span>\n </button>\n\n <span class=\"av-paginator__page\">\n P\u00E1gina {{ safeTotalPages() === 0 ? 0 : currentPage() + 1 }} de {{ safeTotalPages() }}\n </span>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() + 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"Pr\u00F3xima p\u00E1gina\"\n >\n <span av-icon name=\"arrow_right\" size=\"sm\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(safeTotalPages() - 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"\u00DAltima p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_right\"></span>\n </button>\n</nav>\n", styles: [":host{display:block;width:100%}.av-paginator{align-items:stretch;display:grid;gap:.25rem;grid-template-columns:auto auto minmax(8rem,1fr) auto auto;width:100%}.av-paginator [av-button]{min-height:2.25rem;padding-inline:.75rem}.av-paginator [av-button]:disabled{cursor:not-allowed;opacity:.48;transform:none}.av-paginator__page{align-items:center;color:var(--av-color-text-muted);display:flex;font-size:.875rem;font-weight:700;justify-content:center;padding-inline:.75rem;text-align:center}\n"], dependencies: [{ kind: "component", type: AvButton, selector: "button[av-button], a[av-button]", inputs: ["icon", "loadingIcon", "loading", "variant", "rounded"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
3005
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "22.1.6", type: AvPaginator, isStandalone: true, selector: "av-paginator", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: true, transformFunction: null }, totalPages: { classPropertyName: "totalPages", publicName: "totalPages", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { pageChanged: "pageChanged" }, ngImport: i0, template: "<nav class=\"av-paginator\" aria-label=\"Pagina\u00E7\u00E3o\">\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(0)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"Primeira p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_left\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() - 1)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"P\u00E1gina anterior\"\n >\n <span av-icon name=\"arrow_left\" size=\"sm\"></span>\n </button>\n\n <span class=\"av-paginator__page\">\n P\u00E1gina {{ safeTotalPages() === 0 ? 0 : currentPage() + 1 }} de {{ safeTotalPages() }}\n </span>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() + 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"Pr\u00F3xima p\u00E1gina\"\n >\n <span av-icon name=\"arrow_right\" size=\"sm\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(safeTotalPages() - 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"\u00DAltima p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_right\"></span>\n </button>\n</nav>\n", styles: [":host{display:block;width:100%}.av-paginator{align-items:stretch;display:grid;gap:.25rem;grid-template-columns:auto auto minmax(8rem,1fr) auto auto;min-width:0;width:100%}.av-paginator [av-button]{min-height:2.25rem;padding-inline:.75rem}.av-paginator [av-button]:disabled{cursor:not-allowed;opacity:.48;transform:none}.av-paginator__page{align-items:center;color:var(--av-color-text-muted);display:flex;font-size:.875rem;font-weight:700;justify-content:center;padding-inline:.75rem;text-align:center}@media(max-width:420px){.av-paginator{grid-template-columns:repeat(4,minmax(0,1fr))}.av-paginator [av-button]:nth-of-type(1){grid-column:1;grid-row:2}.av-paginator [av-button]:nth-of-type(2){grid-column:2;grid-row:2}.av-paginator [av-button]:nth-of-type(3){grid-column:3;grid-row:2}.av-paginator [av-button]:nth-of-type(4){grid-column:4;grid-row:2}.av-paginator__page{grid-column:1 / -1;grid-row:1;min-height:2rem;padding-inline:.25rem}}\n"], dependencies: [{ kind: "component", type: AvButton, selector: "button[av-button], a[av-button]", inputs: ["icon", "loadingIcon", "loading", "variant", "rounded"] }, { kind: "component", type: AvIcon, selector: "span[av-icon], i[av-icon]", inputs: ["name", "size"] }] });
|
|
2755
3006
|
}
|
|
2756
3007
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvPaginator, decorators: [{
|
|
2757
3008
|
type: Component,
|
|
2758
|
-
args: [{ selector: 'av-paginator', standalone: true, imports: [AvButton, AvIcon], template: "<nav class=\"av-paginator\" aria-label=\"Pagina\u00E7\u00E3o\">\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(0)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"Primeira p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_left\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() - 1)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"P\u00E1gina anterior\"\n >\n <span av-icon name=\"arrow_left\" size=\"sm\"></span>\n </button>\n\n <span class=\"av-paginator__page\">\n P\u00E1gina {{ safeTotalPages() === 0 ? 0 : currentPage() + 1 }} de {{ safeTotalPages() }}\n </span>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() + 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"Pr\u00F3xima p\u00E1gina\"\n >\n <span av-icon name=\"arrow_right\" size=\"sm\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(safeTotalPages() - 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"\u00DAltima p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_right\"></span>\n </button>\n</nav>\n", styles: [":host{display:block;width:100%}.av-paginator{align-items:stretch;display:grid;gap:.25rem;grid-template-columns:auto auto minmax(8rem,1fr) auto auto;width:100%}.av-paginator [av-button]{min-height:2.25rem;padding-inline:.75rem}.av-paginator [av-button]:disabled{cursor:not-allowed;opacity:.48;transform:none}.av-paginator__page{align-items:center;color:var(--av-color-text-muted);display:flex;font-size:.875rem;font-weight:700;justify-content:center;padding-inline:.75rem;text-align:center}\n"] }]
|
|
3009
|
+
args: [{ selector: 'av-paginator', standalone: true, imports: [AvButton, AvIcon], template: "<nav class=\"av-paginator\" aria-label=\"Pagina\u00E7\u00E3o\">\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(0)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"Primeira p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_left\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() - 1)\"\n [disabled]=\"!canGoBack()\"\n aria-label=\"P\u00E1gina anterior\"\n >\n <span av-icon name=\"arrow_left\" size=\"sm\"></span>\n </button>\n\n <span class=\"av-paginator__page\">\n P\u00E1gina {{ safeTotalPages() === 0 ? 0 : currentPage() + 1 }} de {{ safeTotalPages() }}\n </span>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(currentPage() + 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"Pr\u00F3xima p\u00E1gina\"\n >\n <span av-icon name=\"arrow_right\" size=\"sm\"></span>\n </button>\n\n <button\n av-button\n [variant]=\"variant()\"\n type=\"button\"\n (click)=\"changePage(safeTotalPages() - 1)\"\n [disabled]=\"!canGoForward()\"\n aria-label=\"\u00DAltima p\u00E1gina\"\n >\n <span av-icon name=\"double_arrow_right\"></span>\n </button>\n</nav>\n", styles: [":host{display:block;width:100%}.av-paginator{align-items:stretch;display:grid;gap:.25rem;grid-template-columns:auto auto minmax(8rem,1fr) auto auto;min-width:0;width:100%}.av-paginator [av-button]{min-height:2.25rem;padding-inline:.75rem}.av-paginator [av-button]:disabled{cursor:not-allowed;opacity:.48;transform:none}.av-paginator__page{align-items:center;color:var(--av-color-text-muted);display:flex;font-size:.875rem;font-weight:700;justify-content:center;padding-inline:.75rem;text-align:center}@media(max-width:420px){.av-paginator{grid-template-columns:repeat(4,minmax(0,1fr))}.av-paginator [av-button]:nth-of-type(1){grid-column:1;grid-row:2}.av-paginator [av-button]:nth-of-type(2){grid-column:2;grid-row:2}.av-paginator [av-button]:nth-of-type(3){grid-column:3;grid-row:2}.av-paginator [av-button]:nth-of-type(4){grid-column:4;grid-row:2}.av-paginator__page{grid-column:1 / -1;grid-row:1;min-height:2rem;padding-inline:.25rem}}\n"] }]
|
|
2759
3010
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], pageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageIndex", required: true }] }], totalPages: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalPages", required: true }] }], pageChanged: [{ type: i0.Output, args: ["pageChanged"] }] } });
|
|
2760
3011
|
|
|
2761
3012
|
class AvProgressBarCircle {
|
|
@@ -3086,11 +3337,11 @@ class AvStepper {
|
|
|
3086
3337
|
return Math.min(Math.max(index, 0), total - 1);
|
|
3087
3338
|
}
|
|
3088
3339
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvStepper, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3089
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvStepper, isStandalone: true, selector: "av-stepper", inputs: { canSetStep: { classPropertyName: "canSetStep", publicName: "canSetStep", isSignal: true, isRequired: false, transformFunction: null }, noContent: { classPropertyName: "noContent", publicName: "noContent", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, currentStep: { classPropertyName: "currentStep", publicName: "currentStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepChange: "stepChange" }, queries: [{ propertyName: "items", predicate: AvStep, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"av-stepper\" [ngStyle]=\"themeVars()\">\n <div class=\"av-stepper__header\">\n @for (item of items(); track $index) {\n <div\n class=\"av-stepper__item\"\n [class.av-stepper__item--stretch]=\"$index + 1 < items().length\"\n >\n <div class=\"av-stepper__row\">\n <button\n type=\"button\"\n (click)=\"changeTo($index)\"\n class=\"av-stepper__bullet\"\n [class.av-stepper__bullet--clickable]=\"canSetStep()\"\n [class.av-stepper__bullet--active]=\"isActive($index)\"\n [class.av-stepper__bullet--done]=\"isDone($index)\"\n [class.av-stepper__bullet--error]=\"item.hasError()\"\n [disabled]=\"!canSetStep() && !isActive($index)\"\n [attr.aria-current]=\"isActive($index) ? 'step' : null\"\n >\n @if (item.hasError()) {\n <span av-icon name=\"close\" size=\"sm\"></span>\n } @else if (isDone($index)) {\n <span av-icon name=\"check\" size=\"sm\"></span>\n } @else if (item.icon()) {\n <span av-icon [name]=\"item.icon()\" size=\"sm\"></span>\n } @else {\n {{ $index + 1 }}\n }\n </button>\n\n <div\n class=\"av-stepper__line\"\n [class.av-stepper__line--hidden]=\"$index + 1 >= items().length\"\n >\n <div class=\"av-stepper__line-track\">\n <div\n class=\"av-stepper__line-fill\"\n [class.av-stepper__line-fill--complete]=\"isDone($index)\"\n [class.av-stepper__line-fill--error]=\"item.hasError()\"\n ></div>\n </div>\n </div>\n </div>\n\n <div class=\"av-stepper__caption\">\n <span>{{ item.title() }}</span>\n </div>\n </div>\n }\n </div>\n\n <div class=\"av-stepper__content\" [class.av-stepper__content--hidden]=\"noContent()\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;width:100%}.av-stepper{color:var(--av-color-text);display:flex;flex-direction:column;gap:.75rem;height:100%;width:100%}.av-stepper__header,.av-stepper__row{align-items:center;display:flex}.av-stepper__item{display:flex;flex-direction:column;min-width:2.5rem}.av-stepper__item--stretch,.av-stepper__line{flex:1}.av-stepper__bullet{align-items:center;aspect-ratio:1;background:var(--av-color-surface);border:2px solid var(--av-color-border);border-radius:var(--av-radius-full);box-shadow:var(--av-shadow-control);color:var(--av-color-text-muted);display:flex;font-weight:700;height:2.5rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease;z-index:1}.av-stepper__bullet--clickable{cursor:pointer}.av-stepper__bullet:disabled{cursor:default}.av-stepper__bullet--active{background:var(--av-stepper-accent-soft);border-color:var(--av-stepper-accent);color:var(--av-stepper-accent)}.av-stepper__bullet--done{background:var(--av-stepper-accent);border-color:var(--av-stepper-accent);color:var(--av-white)}.av-stepper__bullet--error{background:var(--av-color-danger-soft);border-color:var(--av-color-danger);color:var(--av-color-danger)}.av-stepper__line{height:.5rem;position:relative}.av-stepper__line--hidden,.av-stepper__content--hidden{display:none}.av-stepper__line-track{background:var(--av-stepper-track);border-radius:var(--av-radius-full);height:100%;overflow:hidden;transform:translate(-5%);width:110%}.av-stepper__line-fill{background:var(--av-stepper-accent);height:100%;transform:translate(-100%);transition:transform .2s ease,background-color .2s ease;width:100%}.av-stepper__line-fill--complete{transform:translate(0)}.av-stepper__line-fill--error{background:var(--av-color-danger)}.av-stepper__caption{color:var(--av-color-text-muted);display:flex;flex-direction:column;font-size:.875rem;font-weight:600;line-height:1.25;margin-top:.375rem}.av-stepper__content{height:100%;min-height:0;width:100%}\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"] }] });
|
|
3340
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvStepper, isStandalone: true, selector: "av-stepper", inputs: { canSetStep: { classPropertyName: "canSetStep", publicName: "canSetStep", isSignal: true, isRequired: false, transformFunction: null }, noContent: { classPropertyName: "noContent", publicName: "noContent", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, currentStep: { classPropertyName: "currentStep", publicName: "currentStep", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { stepChange: "stepChange" }, queries: [{ propertyName: "items", predicate: AvStep, descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"av-stepper\" [ngStyle]=\"themeVars()\">\n <div class=\"av-stepper__header\">\n @for (item of items(); track $index) {\n <div\n class=\"av-stepper__item\"\n [class.av-stepper__item--stretch]=\"$index + 1 < items().length\"\n >\n <div class=\"av-stepper__row\">\n <button\n type=\"button\"\n (click)=\"changeTo($index)\"\n class=\"av-stepper__bullet\"\n [class.av-stepper__bullet--clickable]=\"canSetStep()\"\n [class.av-stepper__bullet--active]=\"isActive($index)\"\n [class.av-stepper__bullet--done]=\"isDone($index)\"\n [class.av-stepper__bullet--error]=\"item.hasError()\"\n [disabled]=\"!canSetStep() && !isActive($index)\"\n [attr.aria-current]=\"isActive($index) ? 'step' : null\"\n >\n @if (item.hasError()) {\n <span av-icon name=\"close\" size=\"sm\"></span>\n } @else if (isDone($index)) {\n <span av-icon name=\"check\" size=\"sm\"></span>\n } @else if (item.icon()) {\n <span av-icon [name]=\"item.icon()\" size=\"sm\"></span>\n } @else {\n {{ $index + 1 }}\n }\n </button>\n\n <div\n class=\"av-stepper__line\"\n [class.av-stepper__line--hidden]=\"$index + 1 >= items().length\"\n >\n <div class=\"av-stepper__line-track\">\n <div\n class=\"av-stepper__line-fill\"\n [class.av-stepper__line-fill--complete]=\"isDone($index)\"\n [class.av-stepper__line-fill--error]=\"item.hasError()\"\n ></div>\n </div>\n </div>\n </div>\n\n <div class=\"av-stepper__caption\">\n <span>{{ item.title() }}</span>\n </div>\n </div>\n }\n </div>\n\n <div class=\"av-stepper__content\" [class.av-stepper__content--hidden]=\"noContent()\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;width:100%}.av-stepper{color:var(--av-color-text);display:flex;flex-direction:column;gap:.75rem;height:100%;width:100%}.av-stepper__header,.av-stepper__row{align-items:center;display:flex}.av-stepper__header{-webkit-overflow-scrolling:touch;overflow-x:auto;overscroll-behavior-inline:contain;padding-bottom:.125rem}.av-stepper__item{display:flex;flex-direction:column;min-width:2.5rem}.av-stepper__item--stretch,.av-stepper__line{flex:1}.av-stepper__bullet{align-items:center;aspect-ratio:1;background:var(--av-color-surface);border:2px solid var(--av-color-border);border-radius:var(--av-radius-full);box-shadow:var(--av-shadow-control);color:var(--av-color-text-muted);display:flex;font-weight:700;height:2.5rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease;z-index:1}.av-stepper__bullet--clickable{cursor:pointer;touch-action:manipulation}.av-stepper__bullet:disabled{cursor:default}.av-stepper__bullet--active{background:var(--av-stepper-accent-soft);border-color:var(--av-stepper-accent);color:var(--av-stepper-accent)}.av-stepper__bullet--done{background:var(--av-stepper-accent);border-color:var(--av-stepper-accent);color:var(--av-white)}.av-stepper__bullet--error{background:var(--av-color-danger-soft);border-color:var(--av-color-danger);color:var(--av-color-danger)}.av-stepper__line{height:.5rem;position:relative}.av-stepper__line--hidden,.av-stepper__content--hidden{display:none}.av-stepper__line-track{background:var(--av-stepper-track);border-radius:var(--av-radius-full);height:100%;overflow:hidden;transform:translate(-5%);width:110%}.av-stepper__line-fill{background:var(--av-stepper-accent);height:100%;transform:translate(-100%);transition:transform .2s ease,background-color .2s ease;width:100%}.av-stepper__line-fill--complete{transform:translate(0)}.av-stepper__line-fill--error{background:var(--av-color-danger)}.av-stepper__caption{color:var(--av-color-text-muted);display:flex;flex-direction:column;font-size:.875rem;font-weight:600;line-height:1.25;margin-top:.375rem}@media(max-width:640px){.av-stepper__caption{max-width:5.5rem}.av-stepper__caption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.av-stepper__content{height:100%;min-height:0;width:100%}\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"] }] });
|
|
3090
3341
|
}
|
|
3091
3342
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvStepper, decorators: [{
|
|
3092
3343
|
type: Component,
|
|
3093
|
-
args: [{ selector: 'av-stepper', standalone: true, imports: [CommonModule, AvIcon], template: "<div class=\"av-stepper\" [ngStyle]=\"themeVars()\">\n <div class=\"av-stepper__header\">\n @for (item of items(); track $index) {\n <div\n class=\"av-stepper__item\"\n [class.av-stepper__item--stretch]=\"$index + 1 < items().length\"\n >\n <div class=\"av-stepper__row\">\n <button\n type=\"button\"\n (click)=\"changeTo($index)\"\n class=\"av-stepper__bullet\"\n [class.av-stepper__bullet--clickable]=\"canSetStep()\"\n [class.av-stepper__bullet--active]=\"isActive($index)\"\n [class.av-stepper__bullet--done]=\"isDone($index)\"\n [class.av-stepper__bullet--error]=\"item.hasError()\"\n [disabled]=\"!canSetStep() && !isActive($index)\"\n [attr.aria-current]=\"isActive($index) ? 'step' : null\"\n >\n @if (item.hasError()) {\n <span av-icon name=\"close\" size=\"sm\"></span>\n } @else if (isDone($index)) {\n <span av-icon name=\"check\" size=\"sm\"></span>\n } @else if (item.icon()) {\n <span av-icon [name]=\"item.icon()\" size=\"sm\"></span>\n } @else {\n {{ $index + 1 }}\n }\n </button>\n\n <div\n class=\"av-stepper__line\"\n [class.av-stepper__line--hidden]=\"$index + 1 >= items().length\"\n >\n <div class=\"av-stepper__line-track\">\n <div\n class=\"av-stepper__line-fill\"\n [class.av-stepper__line-fill--complete]=\"isDone($index)\"\n [class.av-stepper__line-fill--error]=\"item.hasError()\"\n ></div>\n </div>\n </div>\n </div>\n\n <div class=\"av-stepper__caption\">\n <span>{{ item.title() }}</span>\n </div>\n </div>\n }\n </div>\n\n <div class=\"av-stepper__content\" [class.av-stepper__content--hidden]=\"noContent()\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;width:100%}.av-stepper{color:var(--av-color-text);display:flex;flex-direction:column;gap:.75rem;height:100%;width:100%}.av-stepper__header,.av-stepper__row{align-items:center;display:flex}.av-stepper__item{display:flex;flex-direction:column;min-width:2.5rem}.av-stepper__item--stretch,.av-stepper__line{flex:1}.av-stepper__bullet{align-items:center;aspect-ratio:1;background:var(--av-color-surface);border:2px solid var(--av-color-border);border-radius:var(--av-radius-full);box-shadow:var(--av-shadow-control);color:var(--av-color-text-muted);display:flex;font-weight:700;height:2.5rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease;z-index:1}.av-stepper__bullet--clickable{cursor:pointer}.av-stepper__bullet:disabled{cursor:default}.av-stepper__bullet--active{background:var(--av-stepper-accent-soft);border-color:var(--av-stepper-accent);color:var(--av-stepper-accent)}.av-stepper__bullet--done{background:var(--av-stepper-accent);border-color:var(--av-stepper-accent);color:var(--av-white)}.av-stepper__bullet--error{background:var(--av-color-danger-soft);border-color:var(--av-color-danger);color:var(--av-color-danger)}.av-stepper__line{height:.5rem;position:relative}.av-stepper__line--hidden,.av-stepper__content--hidden{display:none}.av-stepper__line-track{background:var(--av-stepper-track);border-radius:var(--av-radius-full);height:100%;overflow:hidden;transform:translate(-5%);width:110%}.av-stepper__line-fill{background:var(--av-stepper-accent);height:100%;transform:translate(-100%);transition:transform .2s ease,background-color .2s ease;width:100%}.av-stepper__line-fill--complete{transform:translate(0)}.av-stepper__line-fill--error{background:var(--av-color-danger)}.av-stepper__caption{color:var(--av-color-text-muted);display:flex;flex-direction:column;font-size:.875rem;font-weight:600;line-height:1.25;margin-top:.375rem}.av-stepper__content{height:100%;min-height:0;width:100%}\n"] }]
|
|
3344
|
+
args: [{ selector: 'av-stepper', standalone: true, imports: [CommonModule, AvIcon], template: "<div class=\"av-stepper\" [ngStyle]=\"themeVars()\">\n <div class=\"av-stepper__header\">\n @for (item of items(); track $index) {\n <div\n class=\"av-stepper__item\"\n [class.av-stepper__item--stretch]=\"$index + 1 < items().length\"\n >\n <div class=\"av-stepper__row\">\n <button\n type=\"button\"\n (click)=\"changeTo($index)\"\n class=\"av-stepper__bullet\"\n [class.av-stepper__bullet--clickable]=\"canSetStep()\"\n [class.av-stepper__bullet--active]=\"isActive($index)\"\n [class.av-stepper__bullet--done]=\"isDone($index)\"\n [class.av-stepper__bullet--error]=\"item.hasError()\"\n [disabled]=\"!canSetStep() && !isActive($index)\"\n [attr.aria-current]=\"isActive($index) ? 'step' : null\"\n >\n @if (item.hasError()) {\n <span av-icon name=\"close\" size=\"sm\"></span>\n } @else if (isDone($index)) {\n <span av-icon name=\"check\" size=\"sm\"></span>\n } @else if (item.icon()) {\n <span av-icon [name]=\"item.icon()\" size=\"sm\"></span>\n } @else {\n {{ $index + 1 }}\n }\n </button>\n\n <div\n class=\"av-stepper__line\"\n [class.av-stepper__line--hidden]=\"$index + 1 >= items().length\"\n >\n <div class=\"av-stepper__line-track\">\n <div\n class=\"av-stepper__line-fill\"\n [class.av-stepper__line-fill--complete]=\"isDone($index)\"\n [class.av-stepper__line-fill--error]=\"item.hasError()\"\n ></div>\n </div>\n </div>\n </div>\n\n <div class=\"av-stepper__caption\">\n <span>{{ item.title() }}</span>\n </div>\n </div>\n }\n </div>\n\n <div class=\"av-stepper__content\" [class.av-stepper__content--hidden]=\"noContent()\">\n <ng-content></ng-content>\n </div>\n</div>\n", styles: [":host{display:block;height:100%;width:100%}.av-stepper{color:var(--av-color-text);display:flex;flex-direction:column;gap:.75rem;height:100%;width:100%}.av-stepper__header,.av-stepper__row{align-items:center;display:flex}.av-stepper__header{-webkit-overflow-scrolling:touch;overflow-x:auto;overscroll-behavior-inline:contain;padding-bottom:.125rem}.av-stepper__item{display:flex;flex-direction:column;min-width:2.5rem}.av-stepper__item--stretch,.av-stepper__line{flex:1}.av-stepper__bullet{align-items:center;aspect-ratio:1;background:var(--av-color-surface);border:2px solid var(--av-color-border);border-radius:var(--av-radius-full);box-shadow:var(--av-shadow-control);color:var(--av-color-text-muted);display:flex;font-weight:700;height:2.5rem;justify-content:center;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease;z-index:1}.av-stepper__bullet--clickable{cursor:pointer;touch-action:manipulation}.av-stepper__bullet:disabled{cursor:default}.av-stepper__bullet--active{background:var(--av-stepper-accent-soft);border-color:var(--av-stepper-accent);color:var(--av-stepper-accent)}.av-stepper__bullet--done{background:var(--av-stepper-accent);border-color:var(--av-stepper-accent);color:var(--av-white)}.av-stepper__bullet--error{background:var(--av-color-danger-soft);border-color:var(--av-color-danger);color:var(--av-color-danger)}.av-stepper__line{height:.5rem;position:relative}.av-stepper__line--hidden,.av-stepper__content--hidden{display:none}.av-stepper__line-track{background:var(--av-stepper-track);border-radius:var(--av-radius-full);height:100%;overflow:hidden;transform:translate(-5%);width:110%}.av-stepper__line-fill{background:var(--av-stepper-accent);height:100%;transform:translate(-100%);transition:transform .2s ease,background-color .2s ease;width:100%}.av-stepper__line-fill--complete{transform:translate(0)}.av-stepper__line-fill--error{background:var(--av-color-danger)}.av-stepper__caption{color:var(--av-color-text-muted);display:flex;flex-direction:column;font-size:.875rem;font-weight:600;line-height:1.25;margin-top:.375rem}@media(max-width:640px){.av-stepper__caption{max-width:5.5rem}.av-stepper__caption span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}.av-stepper__content{height:100%;min-height:0;width:100%}\n"] }]
|
|
3094
3345
|
}], ctorParameters: () => [], propDecorators: { canSetStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "canSetStep", required: false }] }], noContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "noContent", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], currentStep: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentStep", required: false }] }], stepChange: [{ type: i0.Output, args: ["stepChange"] }], items: [{ type: i0.ContentChildren, args: [i0.forwardRef(() => AvStep), { ...{ descendants: true }, isSignal: true }] }] } });
|
|
3095
3346
|
|
|
3096
3347
|
class AvTab {
|
|
@@ -3254,13 +3505,377 @@ class AvTable {
|
|
|
3254
3505
|
this.onPage.emit({ page: 0, pageSize: newSize });
|
|
3255
3506
|
}
|
|
3256
3507
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvTable, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3257
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvTable, isStandalone: true, selector: "av-table", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, currentPageLabel: { classPropertyName: "currentPageLabel", publicName: "currentPageLabel", isSignal: true, isRequired: false, transformFunction: null }, sortField: { classPropertyName: "sortField", publicName: "sortField", isSignal: true, isRequired: false, transformFunction: null }, sortOrder: { classPropertyName: "sortOrder", publicName: "sortOrder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSort: "onSort", onPage: "onPage" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"av-table\">\n <div class=\"av-table__scroll\">\n <table class=\"av-table__table\">\n @if (headerTemplate()) {\n <thead class=\"av-table__header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\"></ng-container>\n </thead>\n }\n\n <tbody class=\"av-table__body\">\n @if (bodyTemplate()) {\n @for (item of value(); track $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()!; context: { $implicit: item, index: $index }\"></ng-container>\n } @empty {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n } @else {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (paginator()) {\n <div class=\"av-table__pagination\">\n @if (currentPageLabel() !== '') {\n <div class=\"av-table__page-label\">\n <span>{{ formattedPageLabel() }}</span>\n </div>\n }\n\n <div class=\"av-table__pagination-controls\">\n @if (rowsPerPageOptions().length > 0) {\n <div class=\"av-table__page-size\">\n <span>Itens por p\u00E1gina:</span>\n <av-select\n [data]=\"pageSizeOptions()\"\n [searchable]=\"false\"\n [value]=\"pageSize()\"\n [variant]=\"variant()\"\n (valueChange)=\"changePageSize($event)\"\n />\n </div>\n }\n\n <av-paginator\n [variant]=\"variant()\"\n [pageIndex]=\"pageIndex()\"\n [totalPages]=\"totalPages()\"\n (pageChanged)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%}.av-table{background:var(--av-color-surface);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-xl);box-shadow:var(--av-shadow-control);color:var(--av-color-text);display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.av-table__header{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.av-table__header tr{border-bottom:1px solid var(--av-color-border-soft)}.av-table__scroll{flex:1;min-height:0;overflow:auto}.av-table__table{border-collapse:collapse;color:var(--av-color-text);font-size:.875rem;text-align:left;width:
|
|
3508
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvTable, isStandalone: true, selector: "av-table", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, emptyMessage: { classPropertyName: "emptyMessage", publicName: "emptyMessage", isSignal: true, isRequired: false, transformFunction: null }, paginator: { classPropertyName: "paginator", publicName: "paginator", isSignal: true, isRequired: false, transformFunction: null }, pageSize: { classPropertyName: "pageSize", publicName: "pageSize", isSignal: true, isRequired: false, transformFunction: null }, pageIndex: { classPropertyName: "pageIndex", publicName: "pageIndex", isSignal: true, isRequired: false, transformFunction: null }, totalRecords: { classPropertyName: "totalRecords", publicName: "totalRecords", isSignal: true, isRequired: false, transformFunction: null }, rowsPerPageOptions: { classPropertyName: "rowsPerPageOptions", publicName: "rowsPerPageOptions", isSignal: true, isRequired: false, transformFunction: null }, currentPageLabel: { classPropertyName: "currentPageLabel", publicName: "currentPageLabel", isSignal: true, isRequired: false, transformFunction: null }, sortField: { classPropertyName: "sortField", publicName: "sortField", isSignal: true, isRequired: false, transformFunction: null }, sortOrder: { classPropertyName: "sortOrder", publicName: "sortOrder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onSort: "onSort", onPage: "onPage" }, queries: [{ propertyName: "headerTemplate", first: true, predicate: ["header"], descendants: true, isSignal: true }, { propertyName: "bodyTemplate", first: true, predicate: ["body"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"av-table\">\n <div class=\"av-table__scroll\">\n <table class=\"av-table__table\">\n @if (headerTemplate()) {\n <thead class=\"av-table__header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\"></ng-container>\n </thead>\n }\n\n <tbody class=\"av-table__body\">\n @if (bodyTemplate()) {\n @for (item of value(); track $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()!; context: { $implicit: item, index: $index }\"></ng-container>\n } @empty {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n } @else {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (paginator()) {\n <div class=\"av-table__pagination\">\n @if (currentPageLabel() !== '') {\n <div class=\"av-table__page-label\">\n <span>{{ formattedPageLabel() }}</span>\n </div>\n }\n\n <div class=\"av-table__pagination-controls\">\n @if (rowsPerPageOptions().length > 0) {\n <div class=\"av-table__page-size\">\n <span>Itens por p\u00E1gina:</span>\n <av-select\n [data]=\"pageSizeOptions()\"\n [searchable]=\"false\"\n [value]=\"pageSize()\"\n [variant]=\"variant()\"\n (valueChange)=\"changePageSize($event)\"\n />\n </div>\n }\n\n <av-paginator\n [variant]=\"variant()\"\n [pageIndex]=\"pageIndex()\"\n [totalPages]=\"totalPages()\"\n (pageChanged)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%}.av-table{background:var(--av-color-surface);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-xl);box-shadow:var(--av-shadow-control);color:var(--av-color-text);display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.av-table__header{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.av-table__header tr{border-bottom:1px solid var(--av-color-border-soft)}.av-table__scroll{-webkit-overflow-scrolling:touch;flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}.av-table__table{border-collapse:collapse;color:var(--av-color-text);font-size:.875rem;min-width:100%;text-align:left;width:max-content}.av-table__body tr+tr{border-top:1px solid var(--av-color-border-soft)}.av-table__empty{color:var(--av-color-text-subtle);padding:2rem 1.5rem;text-align:center}.av-table__pagination{align-items:center;background:var(--av-color-surface-muted);border-top:1px solid var(--av-color-border-soft);color:var(--av-color-text-muted);display:flex;flex-wrap:wrap;font-size:.75rem;gap:.75rem;justify-content:space-between;padding:.75rem 1rem}.av-table__pagination-controls,.av-table__page-size{align-items:center;display:flex}.av-table__pagination-controls{flex:1;gap:1rem;justify-content:flex-end;min-width:min(18rem,100%)}.av-table__page-size{gap:.5rem;white-space:nowrap}.av-table__page-size av-select{min-width:5rem}@media(max-width:640px){.av-table__pagination{align-items:stretch;flex-direction:column}.av-table__pagination-controls{align-items:stretch;flex-direction:column;gap:.75rem;min-width:0}.av-table__page-size{justify-content:space-between}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: AvSelect, selector: "av-select", inputs: ["data", "placeholder", "labelKey", "labelFormat", "valueKey", "label", "icon", "searchPlaceholder", "searchable", "loading", "loadingIcon", "variant", "rounded", "errorMessage", "value", "onSearch"], outputs: ["valueChange"] }, { kind: "component", type: AvPaginator, selector: "av-paginator", inputs: ["variant", "pageIndex", "totalPages"], outputs: ["pageChanged"] }] });
|
|
3258
3509
|
}
|
|
3259
3510
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvTable, decorators: [{
|
|
3260
3511
|
type: Component,
|
|
3261
|
-
args: [{ selector: 'av-table', standalone: true, imports: [CommonModule, AvSelect, AvPaginator], template: "<div class=\"av-table\">\n <div class=\"av-table__scroll\">\n <table class=\"av-table__table\">\n @if (headerTemplate()) {\n <thead class=\"av-table__header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\"></ng-container>\n </thead>\n }\n\n <tbody class=\"av-table__body\">\n @if (bodyTemplate()) {\n @for (item of value(); track $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()!; context: { $implicit: item, index: $index }\"></ng-container>\n } @empty {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n } @else {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (paginator()) {\n <div class=\"av-table__pagination\">\n @if (currentPageLabel() !== '') {\n <div class=\"av-table__page-label\">\n <span>{{ formattedPageLabel() }}</span>\n </div>\n }\n\n <div class=\"av-table__pagination-controls\">\n @if (rowsPerPageOptions().length > 0) {\n <div class=\"av-table__page-size\">\n <span>Itens por p\u00E1gina:</span>\n <av-select\n [data]=\"pageSizeOptions()\"\n [searchable]=\"false\"\n [value]=\"pageSize()\"\n [variant]=\"variant()\"\n (valueChange)=\"changePageSize($event)\"\n />\n </div>\n }\n\n <av-paginator\n [variant]=\"variant()\"\n [pageIndex]=\"pageIndex()\"\n [totalPages]=\"totalPages()\"\n (pageChanged)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%}.av-table{background:var(--av-color-surface);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-xl);box-shadow:var(--av-shadow-control);color:var(--av-color-text);display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.av-table__header{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.av-table__header tr{border-bottom:1px solid var(--av-color-border-soft)}.av-table__scroll{flex:1;min-height:0;overflow:auto}.av-table__table{border-collapse:collapse;color:var(--av-color-text);font-size:.875rem;text-align:left;width:
|
|
3512
|
+
args: [{ selector: 'av-table', standalone: true, imports: [CommonModule, AvSelect, AvPaginator], template: "<div class=\"av-table\">\n <div class=\"av-table__scroll\">\n <table class=\"av-table__table\">\n @if (headerTemplate()) {\n <thead class=\"av-table__header\">\n <ng-container *ngTemplateOutlet=\"headerTemplate()!\"></ng-container>\n </thead>\n }\n\n <tbody class=\"av-table__body\">\n @if (bodyTemplate()) {\n @for (item of value(); track $index) {\n <ng-container *ngTemplateOutlet=\"bodyTemplate()!; context: { $implicit: item, index: $index }\"></ng-container>\n } @empty {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n } @else {\n <tr>\n <td colspan=\"100%\" class=\"av-table__empty\">\n {{ emptyMessage() }}\n </td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n\n @if (paginator()) {\n <div class=\"av-table__pagination\">\n @if (currentPageLabel() !== '') {\n <div class=\"av-table__page-label\">\n <span>{{ formattedPageLabel() }}</span>\n </div>\n }\n\n <div class=\"av-table__pagination-controls\">\n @if (rowsPerPageOptions().length > 0) {\n <div class=\"av-table__page-size\">\n <span>Itens por p\u00E1gina:</span>\n <av-select\n [data]=\"pageSizeOptions()\"\n [searchable]=\"false\"\n [value]=\"pageSize()\"\n [variant]=\"variant()\"\n (valueChange)=\"changePageSize($event)\"\n />\n </div>\n }\n\n <av-paginator\n [variant]=\"variant()\"\n [pageIndex]=\"pageIndex()\"\n [totalPages]=\"totalPages()\"\n (pageChanged)=\"changePage($event)\"\n />\n </div>\n </div>\n }\n</div>\n", styles: [":host{display:block;width:100%}.av-table{background:var(--av-color-surface);border:1px solid var(--av-color-border-soft);border-radius:var(--av-radius-xl);box-shadow:var(--av-shadow-control);color:var(--av-color-text);display:flex;flex-direction:column;height:100%;overflow:hidden;width:100%}.av-table__header{background:var(--av-color-surface-muted);color:var(--av-color-text-muted);font-size:.75rem;font-weight:700;text-transform:uppercase}.av-table__header tr{border-bottom:1px solid var(--av-color-border-soft)}.av-table__scroll{-webkit-overflow-scrolling:touch;flex:1;min-height:0;overflow:auto;overscroll-behavior:contain}.av-table__table{border-collapse:collapse;color:var(--av-color-text);font-size:.875rem;min-width:100%;text-align:left;width:max-content}.av-table__body tr+tr{border-top:1px solid var(--av-color-border-soft)}.av-table__empty{color:var(--av-color-text-subtle);padding:2rem 1.5rem;text-align:center}.av-table__pagination{align-items:center;background:var(--av-color-surface-muted);border-top:1px solid var(--av-color-border-soft);color:var(--av-color-text-muted);display:flex;flex-wrap:wrap;font-size:.75rem;gap:.75rem;justify-content:space-between;padding:.75rem 1rem}.av-table__pagination-controls,.av-table__page-size{align-items:center;display:flex}.av-table__pagination-controls{flex:1;gap:1rem;justify-content:flex-end;min-width:min(18rem,100%)}.av-table__page-size{gap:.5rem;white-space:nowrap}.av-table__page-size av-select{min-width:5rem}@media(max-width:640px){.av-table__pagination{align-items:stretch;flex-direction:column}.av-table__pagination-controls{align-items:stretch;flex-direction:column;gap:.75rem;min-width:0}.av-table__page-size{justify-content:space-between}}\n"] }]
|
|
3262
3513
|
}], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], value: [{ type: i0.Input, args: [{ isSignal: true, alias: "value", required: false }] }], emptyMessage: [{ type: i0.Input, args: [{ isSignal: true, alias: "emptyMessage", required: false }] }], paginator: [{ type: i0.Input, args: [{ isSignal: true, alias: "paginator", required: false }] }], pageSize: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageSize", required: false }] }], pageIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "pageIndex", required: false }] }], totalRecords: [{ type: i0.Input, args: [{ isSignal: true, alias: "totalRecords", required: false }] }], rowsPerPageOptions: [{ type: i0.Input, args: [{ isSignal: true, alias: "rowsPerPageOptions", required: false }] }], currentPageLabel: [{ type: i0.Input, args: [{ isSignal: true, alias: "currentPageLabel", required: false }] }], sortField: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortField", required: false }] }], sortOrder: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortOrder", required: false }] }], onSort: [{ type: i0.Output, args: ["onSort"] }], onPage: [{ type: i0.Output, args: ["onPage"] }], headerTemplate: [{ type: i0.ContentChild, args: ['header', { isSignal: true }] }], bodyTemplate: [{ type: i0.ContentChild, args: ['body', { isSignal: true }] }] } });
|
|
3263
3514
|
|
|
3515
|
+
class AvCalendar {
|
|
3516
|
+
config = inject(VISUALS_CONFIG);
|
|
3517
|
+
themeService = inject(ThemeService);
|
|
3518
|
+
events = input([], /* @ts-ignore */
|
|
3519
|
+
...(ngDevMode ? [{ debugName: "events" }] : /* istanbul ignore next */ []));
|
|
3520
|
+
firstDayOfWeek = input(0, { ...(ngDevMode ? { debugName: "firstDayOfWeek" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
3521
|
+
locale = input('pt-BR', /* @ts-ignore */
|
|
3522
|
+
...(ngDevMode ? [{ debugName: "locale" }] : /* istanbul ignore next */ []));
|
|
3523
|
+
maxVisibleEvents = input(3, { ...(ngDevMode ? { debugName: "maxVisibleEvents" } : /* istanbul ignore next */ {}), transform: numberAttribute });
|
|
3524
|
+
rounded = input('md', /* @ts-ignore */
|
|
3525
|
+
...(ngDevMode ? [{ debugName: "rounded" }] : /* istanbul ignore next */ []));
|
|
3526
|
+
selectedDate = input(undefined, /* @ts-ignore */
|
|
3527
|
+
...(ngDevMode ? [{ debugName: "selectedDate" }] : /* istanbul ignore next */ []));
|
|
3528
|
+
showAdjacentDays = input(true, { ...(ngDevMode ? { debugName: "showAdjacentDays" } : /* istanbul ignore next */ {}), transform: booleanAttribute });
|
|
3529
|
+
variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
|
|
3530
|
+
...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
3531
|
+
view = input(undefined, /* @ts-ignore */
|
|
3532
|
+
...(ngDevMode ? [{ debugName: "view" }] : /* istanbul ignore next */ []));
|
|
3533
|
+
viewDate = input(undefined, /* @ts-ignore */
|
|
3534
|
+
...(ngDevMode ? [{ debugName: "viewDate" }] : /* istanbul ignore next */ []));
|
|
3535
|
+
weekdayFormat = input('short', /* @ts-ignore */
|
|
3536
|
+
...(ngDevMode ? [{ debugName: "weekdayFormat" }] : /* istanbul ignore next */ []));
|
|
3537
|
+
dateSelect = output();
|
|
3538
|
+
eventSelect = output();
|
|
3539
|
+
selectedDateChange = output();
|
|
3540
|
+
viewChange = output();
|
|
3541
|
+
viewDateChange = output();
|
|
3542
|
+
currentView = signal('month', /* @ts-ignore */
|
|
3543
|
+
...(ngDevMode ? [{ debugName: "currentView" }] : /* istanbul ignore next */ []));
|
|
3544
|
+
currentViewDate = signal(this.startOfMonth(new Date()), /* @ts-ignore */
|
|
3545
|
+
...(ngDevMode ? [{ debugName: "currentViewDate" }] : /* istanbul ignore next */ []));
|
|
3546
|
+
currentSelectedDate = signal(null, /* @ts-ignore */
|
|
3547
|
+
...(ngDevMode ? [{ debugName: "currentSelectedDate" }] : /* istanbul ignore next */ []));
|
|
3548
|
+
activeVariant = computed(() => this.variant(), /* @ts-ignore */
|
|
3549
|
+
...(ngDevMode ? [{ debugName: "activeVariant" }] : /* istanbul ignore next */ []));
|
|
3550
|
+
themeVars = computed(() => {
|
|
3551
|
+
const variant = this.activeVariant();
|
|
3552
|
+
const isDark = this.themeService.dark();
|
|
3553
|
+
const accent = `var(--av-${variant}-${isDark ? 400 : 500})`;
|
|
3554
|
+
return {
|
|
3555
|
+
'--av-calendar-accent': accent,
|
|
3556
|
+
'--av-calendar-accent-strong': `var(--av-${variant}-${isDark ? 300 : 700})`,
|
|
3557
|
+
'--av-calendar-accent-soft': isDark
|
|
3558
|
+
? `color-mix(in srgb, var(--av-${variant}-400) 16%, transparent)`
|
|
3559
|
+
: `var(--av-${variant}-50)`,
|
|
3560
|
+
'--av-calendar-bg': 'var(--av-color-surface)',
|
|
3561
|
+
'--av-calendar-border': 'var(--av-color-border-soft)',
|
|
3562
|
+
'--av-calendar-cell-bg': 'var(--av-color-surface)',
|
|
3563
|
+
'--av-calendar-cell-muted-bg': 'var(--av-color-surface-muted)',
|
|
3564
|
+
'--av-calendar-panel-bg': 'var(--av-color-surface-raised)',
|
|
3565
|
+
'--av-calendar-shadow': 'var(--av-shadow-raised)',
|
|
3566
|
+
'--av-calendar-text': 'var(--av-color-text)',
|
|
3567
|
+
'--av-calendar-muted': 'var(--av-color-text-muted)',
|
|
3568
|
+
'--av-calendar-radius': this.roundedStyle(),
|
|
3569
|
+
};
|
|
3570
|
+
}, /* @ts-ignore */
|
|
3571
|
+
...(ngDevMode ? [{ debugName: "themeVars" }] : /* istanbul ignore next */ []));
|
|
3572
|
+
eventEntries = computed(() => {
|
|
3573
|
+
return this.events()
|
|
3574
|
+
.map((event) => this.normalizeEvent(event))
|
|
3575
|
+
.filter((event) => event !== null)
|
|
3576
|
+
.sort((a, b) => a.start.getTime() - b.start.getTime());
|
|
3577
|
+
}, /* @ts-ignore */
|
|
3578
|
+
...(ngDevMode ? [{ debugName: "eventEntries" }] : /* istanbul ignore next */ []));
|
|
3579
|
+
weekdayLabels = computed(() => {
|
|
3580
|
+
const firstDay = this.safeFirstDayOfWeek();
|
|
3581
|
+
const formatter = new Intl.DateTimeFormat(this.locale(), { weekday: this.weekdayFormat() });
|
|
3582
|
+
const sunday = new Date(2026, 0, 4);
|
|
3583
|
+
return Array.from({ length: 7 }, (_, index) => {
|
|
3584
|
+
const date = this.addDays(sunday, firstDay + index);
|
|
3585
|
+
return formatter.format(date);
|
|
3586
|
+
});
|
|
3587
|
+
}, /* @ts-ignore */
|
|
3588
|
+
...(ngDevMode ? [{ debugName: "weekdayLabels" }] : /* istanbul ignore next */ []));
|
|
3589
|
+
monthLabel = computed(() => {
|
|
3590
|
+
return new Intl.DateTimeFormat(this.locale(), {
|
|
3591
|
+
month: 'long',
|
|
3592
|
+
year: 'numeric',
|
|
3593
|
+
}).format(this.currentViewDate());
|
|
3594
|
+
}, /* @ts-ignore */
|
|
3595
|
+
...(ngDevMode ? [{ debugName: "monthLabel" }] : /* istanbul ignore next */ []));
|
|
3596
|
+
yearLabel = computed(() => String(this.currentViewDate().getFullYear()), /* @ts-ignore */
|
|
3597
|
+
...(ngDevMode ? [{ debugName: "yearLabel" }] : /* istanbul ignore next */ []));
|
|
3598
|
+
monthDays = computed(() => {
|
|
3599
|
+
return this.buildMonthDays(this.currentViewDate());
|
|
3600
|
+
}, /* @ts-ignore */
|
|
3601
|
+
...(ngDevMode ? [{ debugName: "monthDays" }] : /* istanbul ignore next */ []));
|
|
3602
|
+
yearMonths = computed(() => {
|
|
3603
|
+
const year = this.currentViewDate().getFullYear();
|
|
3604
|
+
const monthFormatter = new Intl.DateTimeFormat(this.locale(), { month: 'long' });
|
|
3605
|
+
return Array.from({ length: 12 }, (_, month) => {
|
|
3606
|
+
const date = new Date(year, month, 1);
|
|
3607
|
+
const days = this.buildMonthDays(date);
|
|
3608
|
+
const events = this.eventEntries().filter(({ start, end }) => {
|
|
3609
|
+
const monthStart = this.startOfMonth(date);
|
|
3610
|
+
const monthEnd = this.endOfMonth(date);
|
|
3611
|
+
return start <= monthEnd && end >= monthStart;
|
|
3612
|
+
});
|
|
3613
|
+
return {
|
|
3614
|
+
date,
|
|
3615
|
+
days,
|
|
3616
|
+
eventCount: events.length,
|
|
3617
|
+
key: `${year}-${month}`,
|
|
3618
|
+
label: monthFormatter.format(date),
|
|
3619
|
+
};
|
|
3620
|
+
});
|
|
3621
|
+
}, /* @ts-ignore */
|
|
3622
|
+
...(ngDevMode ? [{ debugName: "yearMonths" }] : /* istanbul ignore next */ []));
|
|
3623
|
+
selectedSummary = computed(() => {
|
|
3624
|
+
const selectedDate = this.currentSelectedDate();
|
|
3625
|
+
if (!selectedDate)
|
|
3626
|
+
return null;
|
|
3627
|
+
return {
|
|
3628
|
+
date: selectedDate,
|
|
3629
|
+
events: this.eventsForDate(selectedDate),
|
|
3630
|
+
label: new Intl.DateTimeFormat(this.locale(), {
|
|
3631
|
+
day: '2-digit',
|
|
3632
|
+
month: 'long',
|
|
3633
|
+
year: 'numeric',
|
|
3634
|
+
}).format(selectedDate),
|
|
3635
|
+
};
|
|
3636
|
+
}, /* @ts-ignore */
|
|
3637
|
+
...(ngDevMode ? [{ debugName: "selectedSummary" }] : /* istanbul ignore next */ []));
|
|
3638
|
+
constructor() {
|
|
3639
|
+
effect(() => {
|
|
3640
|
+
const view = this.view();
|
|
3641
|
+
if (view !== undefined) {
|
|
3642
|
+
this.currentView.set(this.safeView(view));
|
|
3643
|
+
}
|
|
3644
|
+
});
|
|
3645
|
+
effect(() => {
|
|
3646
|
+
const date = this.viewDate();
|
|
3647
|
+
if (date !== undefined) {
|
|
3648
|
+
this.currentViewDate.set(this.startOfMonth(this.toDate(date) ?? new Date()));
|
|
3649
|
+
}
|
|
3650
|
+
});
|
|
3651
|
+
effect(() => {
|
|
3652
|
+
const date = this.selectedDate();
|
|
3653
|
+
if (date !== undefined) {
|
|
3654
|
+
this.currentSelectedDate.set(this.toDate(date));
|
|
3655
|
+
}
|
|
3656
|
+
});
|
|
3657
|
+
}
|
|
3658
|
+
get title() {
|
|
3659
|
+
return this.currentView() === 'year' ? this.yearLabel() : this.monthLabel();
|
|
3660
|
+
}
|
|
3661
|
+
previous() {
|
|
3662
|
+
const current = this.currentViewDate();
|
|
3663
|
+
const next = this.currentView() === 'year'
|
|
3664
|
+
? new Date(current.getFullYear() - 1, 0, 1)
|
|
3665
|
+
: new Date(current.getFullYear(), current.getMonth() - 1, 1);
|
|
3666
|
+
this.setViewDate(next);
|
|
3667
|
+
}
|
|
3668
|
+
next() {
|
|
3669
|
+
const current = this.currentViewDate();
|
|
3670
|
+
const next = this.currentView() === 'year'
|
|
3671
|
+
? new Date(current.getFullYear() + 1, 0, 1)
|
|
3672
|
+
: new Date(current.getFullYear(), current.getMonth() + 1, 1);
|
|
3673
|
+
this.setViewDate(next);
|
|
3674
|
+
}
|
|
3675
|
+
goToday() {
|
|
3676
|
+
const today = this.stripTime(new Date());
|
|
3677
|
+
this.setViewDate(today);
|
|
3678
|
+
this.selectDate(today);
|
|
3679
|
+
}
|
|
3680
|
+
setView(view) {
|
|
3681
|
+
const next = this.safeView(view);
|
|
3682
|
+
if (next === this.currentView())
|
|
3683
|
+
return;
|
|
3684
|
+
this.currentView.set(next);
|
|
3685
|
+
this.viewChange.emit(next);
|
|
3686
|
+
}
|
|
3687
|
+
openMonth(date) {
|
|
3688
|
+
this.setViewDate(date);
|
|
3689
|
+
this.setView('month');
|
|
3690
|
+
}
|
|
3691
|
+
selectDay(day) {
|
|
3692
|
+
if (day.isAdjacent && !this.showAdjacentDays())
|
|
3693
|
+
return;
|
|
3694
|
+
this.selectDate(day.date);
|
|
3695
|
+
}
|
|
3696
|
+
handleDayKeydown(event, day) {
|
|
3697
|
+
if (event.key !== 'Enter' && event.key !== ' ')
|
|
3698
|
+
return;
|
|
3699
|
+
event.preventDefault();
|
|
3700
|
+
this.selectDay(day);
|
|
3701
|
+
}
|
|
3702
|
+
selectEvent(event, date, mouseEvent) {
|
|
3703
|
+
mouseEvent.stopPropagation();
|
|
3704
|
+
if (event.disabled)
|
|
3705
|
+
return;
|
|
3706
|
+
this.eventSelect.emit({
|
|
3707
|
+
date: this.cloneDate(date),
|
|
3708
|
+
event,
|
|
3709
|
+
});
|
|
3710
|
+
}
|
|
3711
|
+
visibleEvents(events) {
|
|
3712
|
+
return events.slice(0, this.safeMaxVisibleEvents());
|
|
3713
|
+
}
|
|
3714
|
+
hiddenEventCount(events) {
|
|
3715
|
+
return Math.max(0, events.length - this.safeMaxVisibleEvents());
|
|
3716
|
+
}
|
|
3717
|
+
dotEvents(events) {
|
|
3718
|
+
return events.slice(0, 4);
|
|
3719
|
+
}
|
|
3720
|
+
eventColor(event) {
|
|
3721
|
+
if (event.color)
|
|
3722
|
+
return event.color;
|
|
3723
|
+
const variant = event.variant || this.activeVariant();
|
|
3724
|
+
const shade = this.themeService.dark() ? 400 : 500;
|
|
3725
|
+
return `var(--av-${variant}-${shade})`;
|
|
3726
|
+
}
|
|
3727
|
+
eventTimeLabel(event) {
|
|
3728
|
+
if (event.allDay)
|
|
3729
|
+
return 'Dia todo';
|
|
3730
|
+
const start = this.toDate(event.start);
|
|
3731
|
+
if (!start)
|
|
3732
|
+
return '';
|
|
3733
|
+
return new Intl.DateTimeFormat(this.locale(), {
|
|
3734
|
+
hour: '2-digit',
|
|
3735
|
+
minute: '2-digit',
|
|
3736
|
+
}).format(start);
|
|
3737
|
+
}
|
|
3738
|
+
dayAriaLabel(day) {
|
|
3739
|
+
const label = new Intl.DateTimeFormat(this.locale(), {
|
|
3740
|
+
day: 'numeric',
|
|
3741
|
+
month: 'long',
|
|
3742
|
+
year: 'numeric',
|
|
3743
|
+
}).format(day.date);
|
|
3744
|
+
if (!day.events.length)
|
|
3745
|
+
return label;
|
|
3746
|
+
return `${label}, ${day.events.length} evento${day.events.length === 1 ? '' : 's'}`;
|
|
3747
|
+
}
|
|
3748
|
+
trackEvent(_index, event) {
|
|
3749
|
+
return event.id;
|
|
3750
|
+
}
|
|
3751
|
+
trackDay(_index, day) {
|
|
3752
|
+
return day.key;
|
|
3753
|
+
}
|
|
3754
|
+
selectDate(date) {
|
|
3755
|
+
const selected = this.stripTime(date);
|
|
3756
|
+
const events = this.eventsForDate(selected);
|
|
3757
|
+
this.currentSelectedDate.set(selected);
|
|
3758
|
+
this.selectedDateChange.emit(this.cloneDate(selected));
|
|
3759
|
+
this.dateSelect.emit({
|
|
3760
|
+
date: this.cloneDate(selected),
|
|
3761
|
+
events,
|
|
3762
|
+
});
|
|
3763
|
+
}
|
|
3764
|
+
setViewDate(date) {
|
|
3765
|
+
const next = this.startOfMonth(date);
|
|
3766
|
+
this.currentViewDate.set(next);
|
|
3767
|
+
this.viewDateChange.emit(this.cloneDate(next));
|
|
3768
|
+
}
|
|
3769
|
+
buildMonthDays(date) {
|
|
3770
|
+
const monthStart = this.startOfMonth(date);
|
|
3771
|
+
const monthEnd = this.endOfMonth(date);
|
|
3772
|
+
const start = this.startOfWeek(monthStart);
|
|
3773
|
+
const end = this.endOfWeek(monthEnd);
|
|
3774
|
+
const days = [];
|
|
3775
|
+
for (let day = start; day <= end; day = this.addDays(day, 1)) {
|
|
3776
|
+
const dayDate = this.stripTime(day);
|
|
3777
|
+
const isCurrentMonth = dayDate.getMonth() === monthStart.getMonth();
|
|
3778
|
+
days.push({
|
|
3779
|
+
date: dayDate,
|
|
3780
|
+
events: this.eventsForDate(dayDate),
|
|
3781
|
+
isAdjacent: !isCurrentMonth,
|
|
3782
|
+
isCurrentMonth,
|
|
3783
|
+
isSelected: this.isSameDay(dayDate, this.currentSelectedDate()),
|
|
3784
|
+
isToday: this.isSameDay(dayDate, new Date()),
|
|
3785
|
+
key: this.dateKey(dayDate),
|
|
3786
|
+
});
|
|
3787
|
+
}
|
|
3788
|
+
return days;
|
|
3789
|
+
}
|
|
3790
|
+
eventsForDate(date) {
|
|
3791
|
+
const day = this.stripTime(date);
|
|
3792
|
+
return this.eventEntries()
|
|
3793
|
+
.filter(({ start, end }) => start <= day && end >= day)
|
|
3794
|
+
.map(({ event }) => event);
|
|
3795
|
+
}
|
|
3796
|
+
normalizeEvent(event) {
|
|
3797
|
+
const start = this.toDate(event.start);
|
|
3798
|
+
if (!start)
|
|
3799
|
+
return null;
|
|
3800
|
+
const end = this.toDate(event.end ?? event.start) ?? start;
|
|
3801
|
+
const startDay = this.stripTime(start);
|
|
3802
|
+
const endDay = this.stripTime(end);
|
|
3803
|
+
return {
|
|
3804
|
+
event,
|
|
3805
|
+
start: startDay,
|
|
3806
|
+
end: endDay >= startDay ? endDay : startDay,
|
|
3807
|
+
};
|
|
3808
|
+
}
|
|
3809
|
+
roundedStyle() {
|
|
3810
|
+
const rounded = this.rounded();
|
|
3811
|
+
return typeof rounded === 'string'
|
|
3812
|
+
? `var(--av-radius-${rounded})`
|
|
3813
|
+
: `${rounded}px`;
|
|
3814
|
+
}
|
|
3815
|
+
safeFirstDayOfWeek() {
|
|
3816
|
+
const firstDay = Math.trunc(Number(this.firstDayOfWeek()));
|
|
3817
|
+
if (!Number.isFinite(firstDay))
|
|
3818
|
+
return 0;
|
|
3819
|
+
return ((firstDay % 7) + 7) % 7;
|
|
3820
|
+
}
|
|
3821
|
+
safeMaxVisibleEvents() {
|
|
3822
|
+
const max = Math.trunc(Number(this.maxVisibleEvents()));
|
|
3823
|
+
return Number.isFinite(max) && max > 0 ? max : 3;
|
|
3824
|
+
}
|
|
3825
|
+
safeView(view) {
|
|
3826
|
+
return view === 'year' ? 'year' : 'month';
|
|
3827
|
+
}
|
|
3828
|
+
startOfMonth(date) {
|
|
3829
|
+
return new Date(date.getFullYear(), date.getMonth(), 1);
|
|
3830
|
+
}
|
|
3831
|
+
endOfMonth(date) {
|
|
3832
|
+
return new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
|
3833
|
+
}
|
|
3834
|
+
startOfWeek(date) {
|
|
3835
|
+
const day = this.stripTime(date);
|
|
3836
|
+
const offset = (day.getDay() - this.safeFirstDayOfWeek() + 7) % 7;
|
|
3837
|
+
return this.addDays(day, -offset);
|
|
3838
|
+
}
|
|
3839
|
+
endOfWeek(date) {
|
|
3840
|
+
return this.addDays(this.startOfWeek(date), 6);
|
|
3841
|
+
}
|
|
3842
|
+
addDays(date, days) {
|
|
3843
|
+
const next = this.cloneDate(date);
|
|
3844
|
+
next.setDate(next.getDate() + days);
|
|
3845
|
+
return next;
|
|
3846
|
+
}
|
|
3847
|
+
stripTime(date) {
|
|
3848
|
+
return new Date(date.getFullYear(), date.getMonth(), date.getDate());
|
|
3849
|
+
}
|
|
3850
|
+
cloneDate(date) {
|
|
3851
|
+
return new Date(date.getTime());
|
|
3852
|
+
}
|
|
3853
|
+
toDate(value) {
|
|
3854
|
+
if (value === null || value === undefined || value === '')
|
|
3855
|
+
return null;
|
|
3856
|
+
const date = value instanceof Date ? new Date(value.getTime()) : new Date(value);
|
|
3857
|
+
return Number.isNaN(date.getTime()) ? null : date;
|
|
3858
|
+
}
|
|
3859
|
+
isSameDay(first, second) {
|
|
3860
|
+
if (!first || !second)
|
|
3861
|
+
return false;
|
|
3862
|
+
return first.getDate() === second.getDate()
|
|
3863
|
+
&& first.getMonth() === second.getMonth()
|
|
3864
|
+
&& first.getFullYear() === second.getFullYear();
|
|
3865
|
+
}
|
|
3866
|
+
dateKey(date) {
|
|
3867
|
+
const month = String(date.getMonth() + 1).padStart(2, '0');
|
|
3868
|
+
const day = String(date.getDate()).padStart(2, '0');
|
|
3869
|
+
return `${date.getFullYear()}-${month}-${day}`;
|
|
3870
|
+
}
|
|
3871
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCalendar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
3872
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.1.6", type: AvCalendar, isStandalone: true, selector: "av-calendar", inputs: { events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, firstDayOfWeek: { classPropertyName: "firstDayOfWeek", publicName: "firstDayOfWeek", isSignal: true, isRequired: false, transformFunction: null }, locale: { classPropertyName: "locale", publicName: "locale", isSignal: true, isRequired: false, transformFunction: null }, maxVisibleEvents: { classPropertyName: "maxVisibleEvents", publicName: "maxVisibleEvents", isSignal: true, isRequired: false, transformFunction: null }, rounded: { classPropertyName: "rounded", publicName: "rounded", isSignal: true, isRequired: false, transformFunction: null }, selectedDate: { classPropertyName: "selectedDate", publicName: "selectedDate", isSignal: true, isRequired: false, transformFunction: null }, showAdjacentDays: { classPropertyName: "showAdjacentDays", publicName: "showAdjacentDays", isSignal: true, isRequired: false, transformFunction: null }, variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: true, isRequired: false, transformFunction: null }, viewDate: { classPropertyName: "viewDate", publicName: "viewDate", isSignal: true, isRequired: false, transformFunction: null }, weekdayFormat: { classPropertyName: "weekdayFormat", publicName: "weekdayFormat", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { dateSelect: "dateSelect", eventSelect: "eventSelect", selectedDateChange: "selectedDateChange", viewChange: "viewChange", viewDateChange: "viewDateChange" }, ngImport: i0, template: "<div class=\"av-calendar\" [ngStyle]=\"themeVars()\">\n <header class=\"av-calendar__header\">\n <div class=\"av-calendar__nav\">\n <button type=\"button\" class=\"av-calendar__nav-button\" (click)=\"previous()\" aria-label=\"Periodo anterior\">\n <span av-icon name=\"chevron_left\"></span>\n </button>\n\n <h2 class=\"av-calendar__title\">{{ title }}</h2>\n\n <button type=\"button\" class=\"av-calendar__nav-button\" (click)=\"next()\" aria-label=\"Proximo periodo\">\n <span av-icon name=\"chevron_right\"></span>\n </button>\n </div>\n\n <div class=\"av-calendar__actions\">\n <button type=\"button\" class=\"av-calendar__today\" (click)=\"goToday()\">Hoje</button>\n\n <div class=\"av-calendar__view-switch\" role=\"tablist\" aria-label=\"Visualizacao do calendario\">\n <button\n type=\"button\"\n class=\"av-calendar__view-button\"\n [class.av-calendar__view-button--active]=\"currentView() === 'month'\"\n [attr.aria-selected]=\"currentView() === 'month'\"\n role=\"tab\"\n (click)=\"setView('month')\"\n >\n Mes\n </button>\n\n <button\n type=\"button\"\n class=\"av-calendar__view-button\"\n [class.av-calendar__view-button--active]=\"currentView() === 'year'\"\n [attr.aria-selected]=\"currentView() === 'year'\"\n role=\"tab\"\n (click)=\"setView('year')\"\n >\n Ano\n </button>\n </div>\n </div>\n </header>\n\n @if (currentView() === 'month') {\n <section class=\"av-calendar__month\" [attr.aria-label]=\"monthLabel()\">\n <div class=\"av-calendar__weekdays\">\n @for (weekday of weekdayLabels(); track weekday) {\n <span class=\"av-calendar__weekday\">{{ weekday }}</span>\n }\n </div>\n\n <div class=\"av-calendar__month-grid\">\n @for (day of monthDays(); track trackDay($index, day)) {\n <div\n class=\"av-calendar__day\"\n [class.av-calendar__day--adjacent]=\"day.isAdjacent\"\n [class.av-calendar__day--hidden]=\"day.isAdjacent && !showAdjacentDays()\"\n [class.av-calendar__day--selected]=\"day.isSelected\"\n [class.av-calendar__day--today]=\"day.isToday\"\n [attr.aria-label]=\"dayAriaLabel(day)\"\n [attr.tabindex]=\"day.isAdjacent && !showAdjacentDays() ? -1 : 0\"\n role=\"button\"\n (click)=\"selectDay(day)\"\n (keydown)=\"handleDayKeydown($event, day)\"\n >\n <span class=\"av-calendar__day-number\">{{ day.date.getDate() }}</span>\n\n @if (day.events.length) {\n <div class=\"av-calendar__event-list\">\n @for (event of visibleEvents(day.events); track trackEvent($index, event)) {\n <button\n type=\"button\"\n class=\"av-calendar__event\"\n [class.av-calendar__event--disabled]=\"event.disabled\"\n [style.--av-calendar-event-color]=\"eventColor(event)\"\n [title]=\"event.title\"\n (click)=\"selectEvent(event, day.date, $event)\"\n >\n @if (!event.allDay) {\n <span class=\"av-calendar__event-time\">{{ eventTimeLabel(event) }}</span>\n }\n <span class=\"av-calendar__event-title\">{{ event.title }}</span>\n </button>\n }\n\n @if (hiddenEventCount(day.events) > 0) {\n <span class=\"av-calendar__event-more\">+{{ hiddenEventCount(day.events) }}</span>\n }\n </div>\n\n <div class=\"av-calendar__dots\" aria-hidden=\"true\">\n @for (event of dotEvents(day.events); track trackEvent($index, event)) {\n <span class=\"av-calendar__dot\" [style.background]=\"eventColor(event)\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n </section>\n } @else {\n <section class=\"av-calendar__year\" [attr.aria-label]=\"yearLabel()\">\n @for (month of yearMonths(); track month.key) {\n <article class=\"av-calendar__year-month\">\n <button type=\"button\" class=\"av-calendar__year-month-title\" (click)=\"openMonth(month.date)\">\n <span>{{ month.label }}</span>\n @if (month.eventCount) {\n <span class=\"av-calendar__year-month-count\">{{ month.eventCount }}</span>\n }\n </button>\n\n <div class=\"av-calendar__mini-weekdays\">\n @for (weekday of weekdayLabels(); track weekday) {\n <span>{{ weekday.slice(0, 1) }}</span>\n }\n </div>\n\n <div class=\"av-calendar__mini-grid\">\n @for (day of month.days; track trackDay($index, day)) {\n <button\n type=\"button\"\n class=\"av-calendar__mini-day\"\n [class.av-calendar__mini-day--adjacent]=\"day.isAdjacent\"\n [class.av-calendar__mini-day--selected]=\"day.isSelected\"\n [class.av-calendar__mini-day--today]=\"day.isToday\"\n [disabled]=\"day.isAdjacent\"\n [attr.aria-label]=\"dayAriaLabel(day)\"\n (click)=\"selectDay(day)\"\n >\n @if (!day.isAdjacent) {\n <span class=\"av-calendar__mini-day-number\">{{ day.date.getDate() }}</span>\n\n @if (day.events.length) {\n <span class=\"av-calendar__mini-dots\" aria-hidden=\"true\">\n @for (event of dotEvents(day.events); track trackEvent($index, event)) {\n <span class=\"av-calendar__mini-dot\" [style.background]=\"eventColor(event)\"></span>\n }\n </span>\n }\n }\n </button>\n }\n </div>\n </article>\n }\n </section>\n }\n\n @if (selectedSummary(); as selected) {\n <section class=\"av-calendar__selected\">\n <div class=\"av-calendar__selected-header\">\n <span class=\"av-calendar__selected-date\">{{ selected.label }}</span>\n <span class=\"av-calendar__selected-count\">{{ selected.events.length }}</span>\n </div>\n\n @if (selected.events.length) {\n <div class=\"av-calendar__selected-events\">\n @for (event of selected.events; track trackEvent($index, event)) {\n <button\n type=\"button\"\n class=\"av-calendar__selected-event\"\n [style.--av-calendar-event-color]=\"eventColor(event)\"\n (click)=\"selectEvent(event, selected.date, $event)\"\n >\n <span class=\"av-calendar__selected-event-body\">\n <span class=\"av-calendar__selected-event-title\">{{ event.title }}</span>\n <span class=\"av-calendar__selected-event-time\">{{ eventTimeLabel(event) }}</span>\n </span>\n </button>\n }\n </div>\n } @else {\n <span class=\"av-calendar__empty\">Sem eventos</span>\n }\n </section>\n }\n</div>\n", styles: [":host{container-type:inline-size;display:block}.av-calendar{background:var(--av-calendar-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-calendar-radius);box-sizing:border-box;color:var(--av-calendar-text);display:grid;gap:1rem;padding:1rem}.av-calendar__header{align-items:center;display:flex;gap:.75rem;justify-content:space-between}.av-calendar__nav,.av-calendar__actions{align-items:center;display:flex;gap:.5rem}.av-calendar__title{color:var(--av-calendar-text);font-size:1.05rem;font-weight:800;line-height:1.2;margin:0;text-transform:capitalize}.av-calendar__nav-button,.av-calendar__today,.av-calendar__view-button{align-items:center;background:var(--av-calendar-cell-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);color:var(--av-calendar-text);cursor:pointer;display:inline-flex;font:inherit;justify-content:center}.av-calendar__nav-button{height:2.25rem;padding:0;width:2.25rem}.av-calendar__today,.av-calendar__view-button{font-size:.8125rem;font-weight:800;min-height:2.25rem;padding:.45rem .7rem}.av-calendar__nav-button:hover,.av-calendar__today:hover,.av-calendar__view-button:hover,.av-calendar__view-button--active{background:var(--av-calendar-accent-soft);border-color:color-mix(in srgb,var(--av-calendar-accent) 34%,var(--av-calendar-border));color:var(--av-calendar-accent-strong)}.av-calendar__nav-button:focus-visible,.av-calendar__today:focus-visible,.av-calendar__view-button:focus-visible,.av-calendar__day:focus-visible,.av-calendar__mini-day:focus-visible,.av-calendar__event:focus-visible,.av-calendar__selected-event:focus-visible,.av-calendar__year-month-title:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-calendar-accent) 24%,transparent);outline:none}.av-calendar__view-switch{background:var(--av-calendar-cell-muted-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);display:inline-flex;padding:.125rem}.av-calendar__view-button{background:transparent;border-color:transparent;min-height:2rem;padding-inline:.65rem}.av-calendar__weekdays,.av-calendar__month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.av-calendar__weekdays{gap:.25rem;margin-bottom:.25rem}.av-calendar__weekday{color:var(--av-calendar-muted);font-size:.72rem;font-weight:800;padding:.25rem;text-align:center;text-transform:capitalize}.av-calendar__month-grid{background:var(--av-calendar-border);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);gap:1px;overflow:hidden}.av-calendar__day{background:var(--av-calendar-cell-bg);box-sizing:border-box;cursor:pointer;display:grid;grid-template-rows:auto 1fr auto;min-height:7rem;min-width:0;padding:.5rem}.av-calendar__day:hover{background:var(--av-calendar-accent-soft)}.av-calendar__day--adjacent{background:var(--av-calendar-cell-muted-bg);color:var(--av-calendar-muted)}.av-calendar__day--hidden{cursor:default;opacity:.28}.av-calendar__day--selected{box-shadow:inset 0 0 0 2px var(--av-calendar-accent)}.av-calendar__day--today .av-calendar__day-number,.av-calendar__mini-day--today .av-calendar__mini-day-number{background:var(--av-calendar-accent);color:var(--av-white)}.av-calendar__day-number{align-items:center;border-radius:var(--av-radius-full);display:inline-flex;font-size:.8125rem;font-weight:800;height:1.7rem;justify-content:center;justify-self:end;line-height:1;width:1.7rem}.av-calendar__event-list{align-content:start;display:grid;gap:.25rem;margin-top:.35rem;min-width:0}.av-calendar__event,.av-calendar__event-more{border-radius:var(--av-radius-xs);font-size:.72rem;line-height:1.2;min-width:0}.av-calendar__event{align-items:center;background:color-mix(in srgb,var(--av-calendar-event-color) 12%,transparent);border:0;border-left:3px solid var(--av-calendar-event-color);color:var(--av-calendar-text);cursor:pointer;display:flex;gap:.3rem;padding:.25rem .35rem;text-align:left}.av-calendar__event:hover{background:color-mix(in srgb,var(--av-calendar-event-color) 18%,transparent)}.av-calendar__event--disabled{cursor:not-allowed;opacity:.52}.av-calendar__event-time{color:var(--av-calendar-muted);flex:0 0 auto;font-weight:800}.av-calendar__event-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-calendar__event-more{color:var(--av-calendar-muted);font-weight:800;padding-inline:.35rem}.av-calendar__dots,.av-calendar__mini-dots{align-items:center;display:flex;gap:.16rem;justify-content:center}.av-calendar__dots{display:none;margin-top:.2rem}.av-calendar__dot,.av-calendar__mini-dot{border-radius:var(--av-radius-full);flex:0 0 auto;height:.34rem;width:.34rem}.av-calendar__year{display:grid;gap:.75rem;grid-template-columns:repeat(4,minmax(0,1fr))}.av-calendar__year-month{background:var(--av-calendar-panel-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);display:grid;gap:.35rem;padding:.625rem}.av-calendar__year-month-title{align-items:center;background:transparent;border:0;border-radius:var(--av-radius-sm);color:var(--av-calendar-text);cursor:pointer;display:flex;font:inherit;font-size:.85rem;font-weight:800;justify-content:space-between;min-height:2rem;padding:.25rem .35rem;text-align:left;text-transform:capitalize}.av-calendar__year-month-count{background:var(--av-calendar-accent);border-radius:var(--av-radius-full);color:var(--av-white);font-size:.68rem;padding:.25rem .35rem}.av-calendar__mini-weekdays,.av-calendar__mini-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.av-calendar__mini-weekdays{color:var(--av-calendar-muted);font-size:.64rem;font-weight:800;text-align:center}.av-calendar__mini-day{align-items:center;aspect-ratio:1;background:transparent;border:0;border-radius:var(--av-radius-sm);color:var(--av-calendar-text);cursor:pointer;display:grid;gap:.08rem;justify-items:center;padding:.12rem}.av-calendar__mini-day:not(:disabled):hover,.av-calendar__mini-day--selected{background:var(--av-calendar-accent-soft);color:var(--av-calendar-accent-strong)}.av-calendar__mini-day-number{align-items:center;border-radius:var(--av-radius-full);display:inline-flex;font-size:.68rem;font-weight:800;height:1.25rem;justify-content:center;line-height:1;width:1.25rem}@container (max-width: 56rem){.av-calendar__year{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (max-width: 42rem){.av-calendar__year{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (max-width: 28rem){.av-calendar__year{grid-template-columns:1fr}}.av-calendar__selected{border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);padding:.75rem}.av-calendar__selected-header,.av-calendar__selected-event{align-items:center;display:flex;gap:.5rem;justify-content:space-between}.av-calendar__selected-date,.av-calendar__selected-event-title{font-weight:800}.av-calendar__selected-event-body{min-width:0}.av-calendar__selected-event{background:transparent;border:0;border-left:3px solid var(--av-calendar-event-color);color:var(--av-calendar-text);cursor:pointer;font:inherit;padding:.4rem;text-align:left;width:100%}.av-calendar__selected-event:hover{background:color-mix(in srgb,var(--av-calendar-event-color) 12%,transparent)}.av-calendar__selected-event-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-calendar__selected-count,.av-calendar__selected-event-time,.av-calendar__empty{color:var(--av-calendar-muted);font-size:.75rem;font-weight:700}@media(max-width:640px){.av-calendar{gap:.75rem;padding:.75rem}.av-calendar__header{align-items:stretch;display:grid}.av-calendar__nav,.av-calendar__actions{justify-content:space-between}.av-calendar__title{font-size:.98rem}.av-calendar__weekday{font-size:.68rem;padding:.2rem 0}.av-calendar__day{align-content:start;aspect-ratio:1;gap:.12rem;min-height:0;padding:.3rem .18rem}.av-calendar__day-number{font-size:.75rem;height:1.45rem;justify-self:center;width:1.45rem}.av-calendar__event-list{display:none}.av-calendar__dots{display:flex}}\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"] }] });
|
|
3873
|
+
}
|
|
3874
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImport: i0, type: AvCalendar, decorators: [{
|
|
3875
|
+
type: Component,
|
|
3876
|
+
args: [{ imports: [CommonModule, AvIcon], selector: 'av-calendar', standalone: true, template: "<div class=\"av-calendar\" [ngStyle]=\"themeVars()\">\n <header class=\"av-calendar__header\">\n <div class=\"av-calendar__nav\">\n <button type=\"button\" class=\"av-calendar__nav-button\" (click)=\"previous()\" aria-label=\"Periodo anterior\">\n <span av-icon name=\"chevron_left\"></span>\n </button>\n\n <h2 class=\"av-calendar__title\">{{ title }}</h2>\n\n <button type=\"button\" class=\"av-calendar__nav-button\" (click)=\"next()\" aria-label=\"Proximo periodo\">\n <span av-icon name=\"chevron_right\"></span>\n </button>\n </div>\n\n <div class=\"av-calendar__actions\">\n <button type=\"button\" class=\"av-calendar__today\" (click)=\"goToday()\">Hoje</button>\n\n <div class=\"av-calendar__view-switch\" role=\"tablist\" aria-label=\"Visualizacao do calendario\">\n <button\n type=\"button\"\n class=\"av-calendar__view-button\"\n [class.av-calendar__view-button--active]=\"currentView() === 'month'\"\n [attr.aria-selected]=\"currentView() === 'month'\"\n role=\"tab\"\n (click)=\"setView('month')\"\n >\n Mes\n </button>\n\n <button\n type=\"button\"\n class=\"av-calendar__view-button\"\n [class.av-calendar__view-button--active]=\"currentView() === 'year'\"\n [attr.aria-selected]=\"currentView() === 'year'\"\n role=\"tab\"\n (click)=\"setView('year')\"\n >\n Ano\n </button>\n </div>\n </div>\n </header>\n\n @if (currentView() === 'month') {\n <section class=\"av-calendar__month\" [attr.aria-label]=\"monthLabel()\">\n <div class=\"av-calendar__weekdays\">\n @for (weekday of weekdayLabels(); track weekday) {\n <span class=\"av-calendar__weekday\">{{ weekday }}</span>\n }\n </div>\n\n <div class=\"av-calendar__month-grid\">\n @for (day of monthDays(); track trackDay($index, day)) {\n <div\n class=\"av-calendar__day\"\n [class.av-calendar__day--adjacent]=\"day.isAdjacent\"\n [class.av-calendar__day--hidden]=\"day.isAdjacent && !showAdjacentDays()\"\n [class.av-calendar__day--selected]=\"day.isSelected\"\n [class.av-calendar__day--today]=\"day.isToday\"\n [attr.aria-label]=\"dayAriaLabel(day)\"\n [attr.tabindex]=\"day.isAdjacent && !showAdjacentDays() ? -1 : 0\"\n role=\"button\"\n (click)=\"selectDay(day)\"\n (keydown)=\"handleDayKeydown($event, day)\"\n >\n <span class=\"av-calendar__day-number\">{{ day.date.getDate() }}</span>\n\n @if (day.events.length) {\n <div class=\"av-calendar__event-list\">\n @for (event of visibleEvents(day.events); track trackEvent($index, event)) {\n <button\n type=\"button\"\n class=\"av-calendar__event\"\n [class.av-calendar__event--disabled]=\"event.disabled\"\n [style.--av-calendar-event-color]=\"eventColor(event)\"\n [title]=\"event.title\"\n (click)=\"selectEvent(event, day.date, $event)\"\n >\n @if (!event.allDay) {\n <span class=\"av-calendar__event-time\">{{ eventTimeLabel(event) }}</span>\n }\n <span class=\"av-calendar__event-title\">{{ event.title }}</span>\n </button>\n }\n\n @if (hiddenEventCount(day.events) > 0) {\n <span class=\"av-calendar__event-more\">+{{ hiddenEventCount(day.events) }}</span>\n }\n </div>\n\n <div class=\"av-calendar__dots\" aria-hidden=\"true\">\n @for (event of dotEvents(day.events); track trackEvent($index, event)) {\n <span class=\"av-calendar__dot\" [style.background]=\"eventColor(event)\"></span>\n }\n </div>\n }\n </div>\n }\n </div>\n </section>\n } @else {\n <section class=\"av-calendar__year\" [attr.aria-label]=\"yearLabel()\">\n @for (month of yearMonths(); track month.key) {\n <article class=\"av-calendar__year-month\">\n <button type=\"button\" class=\"av-calendar__year-month-title\" (click)=\"openMonth(month.date)\">\n <span>{{ month.label }}</span>\n @if (month.eventCount) {\n <span class=\"av-calendar__year-month-count\">{{ month.eventCount }}</span>\n }\n </button>\n\n <div class=\"av-calendar__mini-weekdays\">\n @for (weekday of weekdayLabels(); track weekday) {\n <span>{{ weekday.slice(0, 1) }}</span>\n }\n </div>\n\n <div class=\"av-calendar__mini-grid\">\n @for (day of month.days; track trackDay($index, day)) {\n <button\n type=\"button\"\n class=\"av-calendar__mini-day\"\n [class.av-calendar__mini-day--adjacent]=\"day.isAdjacent\"\n [class.av-calendar__mini-day--selected]=\"day.isSelected\"\n [class.av-calendar__mini-day--today]=\"day.isToday\"\n [disabled]=\"day.isAdjacent\"\n [attr.aria-label]=\"dayAriaLabel(day)\"\n (click)=\"selectDay(day)\"\n >\n @if (!day.isAdjacent) {\n <span class=\"av-calendar__mini-day-number\">{{ day.date.getDate() }}</span>\n\n @if (day.events.length) {\n <span class=\"av-calendar__mini-dots\" aria-hidden=\"true\">\n @for (event of dotEvents(day.events); track trackEvent($index, event)) {\n <span class=\"av-calendar__mini-dot\" [style.background]=\"eventColor(event)\"></span>\n }\n </span>\n }\n }\n </button>\n }\n </div>\n </article>\n }\n </section>\n }\n\n @if (selectedSummary(); as selected) {\n <section class=\"av-calendar__selected\">\n <div class=\"av-calendar__selected-header\">\n <span class=\"av-calendar__selected-date\">{{ selected.label }}</span>\n <span class=\"av-calendar__selected-count\">{{ selected.events.length }}</span>\n </div>\n\n @if (selected.events.length) {\n <div class=\"av-calendar__selected-events\">\n @for (event of selected.events; track trackEvent($index, event)) {\n <button\n type=\"button\"\n class=\"av-calendar__selected-event\"\n [style.--av-calendar-event-color]=\"eventColor(event)\"\n (click)=\"selectEvent(event, selected.date, $event)\"\n >\n <span class=\"av-calendar__selected-event-body\">\n <span class=\"av-calendar__selected-event-title\">{{ event.title }}</span>\n <span class=\"av-calendar__selected-event-time\">{{ eventTimeLabel(event) }}</span>\n </span>\n </button>\n }\n </div>\n } @else {\n <span class=\"av-calendar__empty\">Sem eventos</span>\n }\n </section>\n }\n</div>\n", styles: [":host{container-type:inline-size;display:block}.av-calendar{background:var(--av-calendar-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-calendar-radius);box-sizing:border-box;color:var(--av-calendar-text);display:grid;gap:1rem;padding:1rem}.av-calendar__header{align-items:center;display:flex;gap:.75rem;justify-content:space-between}.av-calendar__nav,.av-calendar__actions{align-items:center;display:flex;gap:.5rem}.av-calendar__title{color:var(--av-calendar-text);font-size:1.05rem;font-weight:800;line-height:1.2;margin:0;text-transform:capitalize}.av-calendar__nav-button,.av-calendar__today,.av-calendar__view-button{align-items:center;background:var(--av-calendar-cell-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);color:var(--av-calendar-text);cursor:pointer;display:inline-flex;font:inherit;justify-content:center}.av-calendar__nav-button{height:2.25rem;padding:0;width:2.25rem}.av-calendar__today,.av-calendar__view-button{font-size:.8125rem;font-weight:800;min-height:2.25rem;padding:.45rem .7rem}.av-calendar__nav-button:hover,.av-calendar__today:hover,.av-calendar__view-button:hover,.av-calendar__view-button--active{background:var(--av-calendar-accent-soft);border-color:color-mix(in srgb,var(--av-calendar-accent) 34%,var(--av-calendar-border));color:var(--av-calendar-accent-strong)}.av-calendar__nav-button:focus-visible,.av-calendar__today:focus-visible,.av-calendar__view-button:focus-visible,.av-calendar__day:focus-visible,.av-calendar__mini-day:focus-visible,.av-calendar__event:focus-visible,.av-calendar__selected-event:focus-visible,.av-calendar__year-month-title:focus-visible{box-shadow:0 0 0 3px color-mix(in srgb,var(--av-calendar-accent) 24%,transparent);outline:none}.av-calendar__view-switch{background:var(--av-calendar-cell-muted-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);display:inline-flex;padding:.125rem}.av-calendar__view-button{background:transparent;border-color:transparent;min-height:2rem;padding-inline:.65rem}.av-calendar__weekdays,.av-calendar__month-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.av-calendar__weekdays{gap:.25rem;margin-bottom:.25rem}.av-calendar__weekday{color:var(--av-calendar-muted);font-size:.72rem;font-weight:800;padding:.25rem;text-align:center;text-transform:capitalize}.av-calendar__month-grid{background:var(--av-calendar-border);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);gap:1px;overflow:hidden}.av-calendar__day{background:var(--av-calendar-cell-bg);box-sizing:border-box;cursor:pointer;display:grid;grid-template-rows:auto 1fr auto;min-height:7rem;min-width:0;padding:.5rem}.av-calendar__day:hover{background:var(--av-calendar-accent-soft)}.av-calendar__day--adjacent{background:var(--av-calendar-cell-muted-bg);color:var(--av-calendar-muted)}.av-calendar__day--hidden{cursor:default;opacity:.28}.av-calendar__day--selected{box-shadow:inset 0 0 0 2px var(--av-calendar-accent)}.av-calendar__day--today .av-calendar__day-number,.av-calendar__mini-day--today .av-calendar__mini-day-number{background:var(--av-calendar-accent);color:var(--av-white)}.av-calendar__day-number{align-items:center;border-radius:var(--av-radius-full);display:inline-flex;font-size:.8125rem;font-weight:800;height:1.7rem;justify-content:center;justify-self:end;line-height:1;width:1.7rem}.av-calendar__event-list{align-content:start;display:grid;gap:.25rem;margin-top:.35rem;min-width:0}.av-calendar__event,.av-calendar__event-more{border-radius:var(--av-radius-xs);font-size:.72rem;line-height:1.2;min-width:0}.av-calendar__event{align-items:center;background:color-mix(in srgb,var(--av-calendar-event-color) 12%,transparent);border:0;border-left:3px solid var(--av-calendar-event-color);color:var(--av-calendar-text);cursor:pointer;display:flex;gap:.3rem;padding:.25rem .35rem;text-align:left}.av-calendar__event:hover{background:color-mix(in srgb,var(--av-calendar-event-color) 18%,transparent)}.av-calendar__event--disabled{cursor:not-allowed;opacity:.52}.av-calendar__event-time{color:var(--av-calendar-muted);flex:0 0 auto;font-weight:800}.av-calendar__event-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-calendar__event-more{color:var(--av-calendar-muted);font-weight:800;padding-inline:.35rem}.av-calendar__dots,.av-calendar__mini-dots{align-items:center;display:flex;gap:.16rem;justify-content:center}.av-calendar__dots{display:none;margin-top:.2rem}.av-calendar__dot,.av-calendar__mini-dot{border-radius:var(--av-radius-full);flex:0 0 auto;height:.34rem;width:.34rem}.av-calendar__year{display:grid;gap:.75rem;grid-template-columns:repeat(4,minmax(0,1fr))}.av-calendar__year-month{background:var(--av-calendar-panel-bg);border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);display:grid;gap:.35rem;padding:.625rem}.av-calendar__year-month-title{align-items:center;background:transparent;border:0;border-radius:var(--av-radius-sm);color:var(--av-calendar-text);cursor:pointer;display:flex;font:inherit;font-size:.85rem;font-weight:800;justify-content:space-between;min-height:2rem;padding:.25rem .35rem;text-align:left;text-transform:capitalize}.av-calendar__year-month-count{background:var(--av-calendar-accent);border-radius:var(--av-radius-full);color:var(--av-white);font-size:.68rem;padding:.25rem .35rem}.av-calendar__mini-weekdays,.av-calendar__mini-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.av-calendar__mini-weekdays{color:var(--av-calendar-muted);font-size:.64rem;font-weight:800;text-align:center}.av-calendar__mini-day{align-items:center;aspect-ratio:1;background:transparent;border:0;border-radius:var(--av-radius-sm);color:var(--av-calendar-text);cursor:pointer;display:grid;gap:.08rem;justify-items:center;padding:.12rem}.av-calendar__mini-day:not(:disabled):hover,.av-calendar__mini-day--selected{background:var(--av-calendar-accent-soft);color:var(--av-calendar-accent-strong)}.av-calendar__mini-day-number{align-items:center;border-radius:var(--av-radius-full);display:inline-flex;font-size:.68rem;font-weight:800;height:1.25rem;justify-content:center;line-height:1;width:1.25rem}@container (max-width: 56rem){.av-calendar__year{grid-template-columns:repeat(3,minmax(0,1fr))}}@container (max-width: 42rem){.av-calendar__year{grid-template-columns:repeat(2,minmax(0,1fr))}}@container (max-width: 28rem){.av-calendar__year{grid-template-columns:1fr}}.av-calendar__selected{border:1px solid var(--av-calendar-border);border-radius:var(--av-radius-sm);padding:.75rem}.av-calendar__selected-header,.av-calendar__selected-event{align-items:center;display:flex;gap:.5rem;justify-content:space-between}.av-calendar__selected-date,.av-calendar__selected-event-title{font-weight:800}.av-calendar__selected-event-body{min-width:0}.av-calendar__selected-event{background:transparent;border:0;border-left:3px solid var(--av-calendar-event-color);color:var(--av-calendar-text);cursor:pointer;font:inherit;padding:.4rem;text-align:left;width:100%}.av-calendar__selected-event:hover{background:color-mix(in srgb,var(--av-calendar-event-color) 12%,transparent)}.av-calendar__selected-event-title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.av-calendar__selected-count,.av-calendar__selected-event-time,.av-calendar__empty{color:var(--av-calendar-muted);font-size:.75rem;font-weight:700}@media(max-width:640px){.av-calendar{gap:.75rem;padding:.75rem}.av-calendar__header{align-items:stretch;display:grid}.av-calendar__nav,.av-calendar__actions{justify-content:space-between}.av-calendar__title{font-size:.98rem}.av-calendar__weekday{font-size:.68rem;padding:.2rem 0}.av-calendar__day{align-content:start;aspect-ratio:1;gap:.12rem;min-height:0;padding:.3rem .18rem}.av-calendar__day-number{font-size:.75rem;height:1.45rem;justify-self:center;width:1.45rem}.av-calendar__event-list{display:none}.av-calendar__dots{display:flex}}\n"] }]
|
|
3877
|
+
}], ctorParameters: () => [], propDecorators: { events: [{ type: i0.Input, args: [{ isSignal: true, alias: "events", required: false }] }], firstDayOfWeek: [{ type: i0.Input, args: [{ isSignal: true, alias: "firstDayOfWeek", required: false }] }], locale: [{ type: i0.Input, args: [{ isSignal: true, alias: "locale", required: false }] }], maxVisibleEvents: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxVisibleEvents", required: false }] }], rounded: [{ type: i0.Input, args: [{ isSignal: true, alias: "rounded", required: false }] }], selectedDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectedDate", required: false }] }], showAdjacentDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "showAdjacentDays", required: false }] }], variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], view: [{ type: i0.Input, args: [{ isSignal: true, alias: "view", required: false }] }], viewDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "viewDate", required: false }] }], weekdayFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "weekdayFormat", required: false }] }], dateSelect: [{ type: i0.Output, args: ["dateSelect"] }], eventSelect: [{ type: i0.Output, args: ["eventSelect"] }], selectedDateChange: [{ type: i0.Output, args: ["selectedDateChange"] }], viewChange: [{ type: i0.Output, args: ["viewChange"] }], viewDateChange: [{ type: i0.Output, args: ["viewDateChange"] }] } });
|
|
3878
|
+
|
|
3264
3879
|
class AvBadge {
|
|
3265
3880
|
config = inject(VISUALS_CONFIG);
|
|
3266
3881
|
variant = input(this.config.theme.defaultVariant, /* @ts-ignore */
|
|
@@ -3289,5 +3904,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.1.6", ngImpor
|
|
|
3289
3904
|
* Generated bundle index. Do not edit.
|
|
3290
3905
|
*/
|
|
3291
3906
|
|
|
3292
|
-
export { AvBadge, AvButton, AvCarousel, AvCarouselItem, AvCheckbox, AvCluster, AvCurrencyInput, AvDateTimePicker, AvDivider, AvDropdown, AvFileUpload, AvForm, AvGrid, AvIcon, AvIconRegistry, AvInline, AvInput, AvMultiSelect, AvNavLink, AvPaginator, AvProgressBar, AvProgressBarCircle, AvSelect, AvSidenav, AvSlider, AvStack, AvStep, AvStepper, AvSwitch, AvTab, AvTable, AvTabs, AvText, AvTextArea, AvTooltip, ThemeService, VISUALS_CONFIG, provideAngularVisuals };
|
|
3907
|
+
export { AvBadge, AvButton, AvCalendar, AvCard, AvCarousel, AvCarouselItem, AvCheckbox, AvCluster, AvCurrencyInput, AvDateTimePicker, AvDivider, AvDropdown, AvDropdownItem, AvFileUpload, AvForm, AvGrid, AvIcon, AvIconRegistry, AvInline, AvInput, AvMultiSelect, AvNavDropdown, AvNavLink, AvPaginator, AvProgressBar, AvProgressBarCircle, AvSelect, AvSidenav, AvSlider, AvStack, AvStep, AvStepper, AvSwitch, AvTab, AvTable, AvTabs, AvText, AvTextArea, AvTooltip, ThemeService, VISUALS_CONFIG, provideAngularVisuals };
|
|
3293
3908
|
//# sourceMappingURL=angular-visuals.mjs.map
|