@taiga-ui/layout
Version:
A package with Taiga UI layout components
97 lines • 15.3 kB
JavaScript
import { ChangeDetectionStrategy, Component, inject, TemplateRef, ViewChild, } from '@angular/core';
import { TuiActiveZone } from '@taiga-ui/cdk/directives/active-zone';
import { TuiAnimated } from '@taiga-ui/cdk/directives/animated';
import { tuiIsHTMLElement } from '@taiga-ui/cdk/utils/dom';
import { tuiButtonOptionsProvider } from '@taiga-ui/core/components/button';
import { TuiScrollbar } from '@taiga-ui/core/components/scrollbar';
import { TUI_DROPDOWN_COMPONENT, tuiDropdown, TuiDropdownDirective, TuiDropdownOpen, TuiWithDropdownOpen, } from '@taiga-ui/core/directives/dropdown';
import { TuiIcons } from '@taiga-ui/core/directives/icons';
import { TUI_ANIMATIONS_SPEED, TUI_COMMON_ICONS, TUI_ICON_END, } from '@taiga-ui/core/tokens';
import { tuiToAnimationOptions } from '@taiga-ui/core/utils/miscellaneous';
import { TUI_LAYOUT_ICONS } from '@taiga-ui/layout/tokens';
import { PolymorpheusOutlet } from '@taiga-ui/polymorpheus';
import * as i0 from "@angular/core";
import * as i1 from "@taiga-ui/cdk/directives/active-zone";
import * as i2 from "@taiga-ui/cdk/directives/animated";
import * as i3 from "@taiga-ui/core/directives/dropdown";
class TuiDrawerComponent {
constructor() {
this.directive = inject(TuiDropdownDirective);
this.animation = tuiToAnimationOptions(inject(TUI_ANIMATIONS_SPEED));
this.top = tuiIsHTMLElement(this.directive.el.offsetParent) &&
tuiIsHTMLElement(this.directive.el.offsetParent.offsetParent)
? this.directive.el.offsetParent.getBoundingClientRect().bottom -
Math.max(this.directive.el.offsetParent.offsetParent.getBoundingClientRect().top, 0)
: 0;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDrawerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDrawerComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "tuiTheme": "dark" }, properties: { "style.top.px": "top" } }, hostDirectives: [{ directive: i1.TuiActiveZone }, { directive: i2.TuiAnimated }], ngImport: i0, template: `
<tui-scrollbar [style.height.%]="100">
<ng-container *polymorpheusOutlet="directive._content()" />
</tui-scrollbar>
`, isInline: true, styles: [":host{position:fixed;left:0;right:0;bottom:0;background:var(--tui-theme-color, #000);inline-size:14.375rem;color:var(--tui-text-primary);pointer-events:auto;--tui-from: translateX(-100%)}:host.tui-enter,:host.tui-leave{animation-name:tuiSlide}:host ::ng-deep tui-data-list [tuiOption]{justify-content:flex-start;gap:.75rem;margin:0;font:var(--tui-font-text-ui-s);font-weight:700}:host ::ng-deep tui-data-list tui-opt-group:before{font:var(--tui-font-text-xs);text-transform:uppercase;color:var(--tui-text-tertiary)}\n"], dependencies: [{ kind: "directive", type: PolymorpheusOutlet, selector: "[polymorpheusOutlet]", inputs: ["polymorpheusOutlet", "polymorpheusOutletContext"] }, { kind: "component", type: TuiScrollbar, selector: "tui-scrollbar", inputs: ["hidden"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDrawerComponent, decorators: [{
type: Component,
args: [{ standalone: true, imports: [PolymorpheusOutlet, TuiScrollbar], template: `
<tui-scrollbar [style.height.%]="100">
<ng-container *polymorpheusOutlet="directive._content()" />
</tui-scrollbar>
`, changeDetection: ChangeDetectionStrategy.OnPush, hostDirectives: [TuiActiveZone, TuiAnimated], host: {
tuiTheme: 'dark',
'[style.top.px]': 'top',
}, styles: [":host{position:fixed;left:0;right:0;bottom:0;background:var(--tui-theme-color, #000);inline-size:14.375rem;color:var(--tui-text-primary);pointer-events:auto;--tui-from: translateX(-100%)}:host.tui-enter,:host.tui-leave{animation-name:tuiSlide}:host ::ng-deep tui-data-list [tuiOption]{justify-content:flex-start;gap:.75rem;margin:0;font:var(--tui-font-text-ui-s);font-weight:700}:host ::ng-deep tui-data-list tui-opt-group:before{font:var(--tui-font-text-xs);text-transform:uppercase;color:var(--tui-text-tertiary)}\n"] }]
}] });
class TuiDrawerDirective {
constructor() {
this.x = inject(TUI_COMMON_ICONS).close;
this.icons = inject(TuiIcons);
this.dropdown = tuiDropdown(null);
this.open = inject(TuiDropdownOpen);
}
ngDoCheck() {
this.icons.iconStart.set(this.open.tuiDropdownOpen ? this.x : '');
}
set template(template) {
this.dropdown.set(template);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDrawerDirective, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: TuiDrawerDirective, isStandalone: true, selector: "[tuiIconButton][tuiNavigationDrawer]", providers: [
tuiButtonOptionsProvider({ appearance: 'secondary-grayscale' }),
{
provide: TUI_ICON_END,
useFactory: () => inject(TUI_LAYOUT_ICONS).grid,
},
{
provide: TUI_DROPDOWN_COMPONENT,
useValue: TuiDrawerComponent,
},
], viewQueries: [{ propertyName: "template", first: true, predicate: TemplateRef, descendants: true }], hostDirectives: [{ directive: i3.TuiDropdownDirective }, { directive: i3.TuiWithDropdownOpen }], ngImport: i0, template: '<ng-template><ng-content /></ng-template>', isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
}
export { TuiDrawerDirective };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiDrawerDirective, decorators: [{
type: Component,
args: [{
standalone: true,
// TODO: move to host directives
selector: '[tuiIconButton][tuiNavigationDrawer]',
template: '<ng-template><ng-content /></ng-template>',
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [
tuiButtonOptionsProvider({ appearance: 'secondary-grayscale' }),
{
provide: TUI_ICON_END,
useFactory: () => inject(TUI_LAYOUT_ICONS).grid,
},
{
provide: TUI_DROPDOWN_COMPONENT,
useValue: TuiDrawerComponent,
},
],
hostDirectives: [TuiDropdownDirective, TuiWithDropdownOpen],
}]
}], propDecorators: { template: [{
type: ViewChild,
args: [TemplateRef]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xheW91dC9jb21wb25lbnRzL25hdmlnYXRpb24vZHJhd2VyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDbkUsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzlELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBQyx3QkFBd0IsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzFFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUNqRSxPQUFPLEVBQ0gsc0JBQXNCLEVBQ3RCLFdBQVcsRUFDWCxvQkFBb0IsRUFDcEIsZUFBZSxFQUNmLG1CQUFtQixHQUN0QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUN6RCxPQUFPLEVBQ0gsb0JBQW9CLEVBQ3BCLGdCQUFnQixFQUNoQixZQUFZLEdBQ2YsTUFBTSx1QkFBdUIsQ0FBQztBQUMvQixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQTJCLGtCQUFrQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7Ozs7O0FBRXBGLE1BZ0JNLGtCQUFrQjtJQWhCeEI7UUFpQnVCLGNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUN6QyxjQUFTLEdBQUcs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QUMsb0JBQW9CLEVBQUUsbUJBQW1CLENBQUM7aUJBQzlEOzhCQVlpQixRQUFRO3NCQURyQixTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICB0eXBlIERvQ2hlY2ssXG4gICAgaW5qZWN0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1R1aUFjdGl2ZVpvbmV9IGZyb20gJ0B0YWlnYS11aS9jZGsvZGlyZWN0aXZlcy9hY3RpdmUtem9uZSc7XG5pbXBvcnQge1R1aUFuaW1hdGVkfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2RpcmVjdGl2ZXMvYW5pbWF0ZWQnO1xuaW1wb3J0IHt0dWlJc0hUTUxFbGVtZW50fSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2RvbSc7XG5pbXBvcnQge3R1aUJ1dHRvbk9wdGlvbnNQcm92aWRlcn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvY29tcG9uZW50cy9idXR0b24nO1xuaW1wb3J0IHtUdWlTY3JvbGxiYXJ9IGZyb20gJ0B0YWlnYS11aS9jb3JlL2NvbXBvbmVudHMvc2Nyb2xsYmFyJztcbmltcG9ydCB7XG4gICAgVFVJX0RST1BET1dOX0NPTVBPTkVOVCxcbiAgICB0dWlEcm9wZG93bixcbiAgICBUdWlEcm9wZG93bkRpcmVjdGl2ZSxcbiAgICBUdWlEcm9wZG93bk9wZW4sXG4gICAgVHVpV2l0aERyb3Bkb3duT3Blbixcbn0gZnJvbSAnQHRhaWdhLXVpL2NvcmUvZGlyZWN0aXZlcy9kcm9wZG93bic7XG5pbXBvcnQge1R1aUljb25zfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2ljb25zJztcbmltcG9ydCB7XG4gICAgVFVJX0FOSU1BVElPTlNfU1BFRUQsXG4gICAgVFVJX0NPTU1PTl9JQ09OUyxcbiAgICBUVUlfSUNPTl9FTkQsXG59IGZyb20gJ0B0YWlnYS11aS9jb3JlL3Rva2Vucyc7XG5pbXBvcnQge3R1aVRvQW5pbWF0aW9uT3B0aW9uc30gZnJvbSAnQHRhaWdhLXVpL2NvcmUvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge1RVSV9MQVlPVVRfSUNPTlN9IGZyb20gJ0B0YWlnYS11aS9sYXlvdXQvdG9rZW5zJztcbmltcG9ydCB7dHlwZSBQb2x5bW9ycGhldXNDb250ZW50LCBQb2x5bW9ycGhldXNPdXRsZXR9IGZyb20gJ0B0YWlnYS11aS9wb2x5bW9ycGhldXMnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtQb2x5bW9ycGhldXNPdXRsZXQsIFR1aVNjcm9sbGJhcl0sXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPHR1aS1zY3JvbGxiYXIgW3N0eWxlLmhlaWdodC4lXT1cIjEwMFwiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqcG9seW1vcnBoZXVzT3V0bGV0PVwiZGlyZWN0aXZlLl9jb250ZW50KClcIiAvPlxuICAgICAgICA8L3R1aS1zY3JvbGxiYXI+XG4gICAgYCxcbiAgICBzdHlsZVVybHM6IFsnLi9kcmF3ZXIuc3R5bGUubGVzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3REaXJlY3RpdmVzOiBbVHVpQWN0aXZlWm9uZSwgVHVpQW5pbWF0ZWRdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgdHVpVGhlbWU6ICdkYXJrJyxcbiAgICAgICAgJ1tzdHlsZS50b3AucHhdJzogJ3RvcCcsXG4gICAgfSxcbn0pXG5jbGFzcyBUdWlEcmF3ZXJDb21wb25lbnQge1xuICAgIHByb3RlY3RlZCByZWFkb25seSBkaXJlY3RpdmUgPSBpbmplY3QoVHVpRHJvcGRvd25EaXJlY3RpdmUpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSBhbmltYXRpb24gPSB0dWlUb0FuaW1hdGlvbk9wdGlvbnMoaW5qZWN0KFRVSV9BTklNQVRJT05TX1NQRUVEKSk7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHRvcCA9XG4gICAgICAgIHR1aUlzSFRNTEVsZW1lbnQodGhpcy5kaXJlY3RpdmUuZWwub2Zmc2V0UGFyZW50KSAmJlxuICAgICAgICB0dWlJc0hUTUxFbGVtZW50KHRoaXMuZGlyZWN0aXZlLmVsLm9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQpXG4gICAgICAgICAgICA/IHRoaXMuZGlyZWN0aXZlLmVsLm9mZnNldFBhcmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b20gLVxuICAgICAgICAgICAgICBNYXRoLm1heChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZGlyZWN0aXZlLmVsLm9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLFxuICAgICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiAwO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIC8vIFRPRE86IG1vdmUgdG8gaG9zdCBkaXJlY3RpdmVzXG4gICAgc2VsZWN0b3I6ICdbdHVpSWNvbkJ1dHRvbl1bdHVpTmF2aWdhdGlvbkRyYXdlcl0nLFxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlPjxuZy1jb250ZW50IC8+PC9uZy10ZW1wbGF0ZT4nLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB0dWlCdXR0b25PcHRpb25zUHJvdmlkZXIoe2FwcGVhcmFuY2U6ICdzZWNvbmRhcnktZ3JheXNjYWxlJ30pLFxuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBUVUlfSUNPTl9FTkQsXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoKSA9PiBpbmplY3QoVFVJX0xBWU9VVF9JQ09OUykuZ3JpZCxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogVFVJX0RST1BET1dOX0NPTVBPTkVOVCxcbiAgICAgICAgICAgIHVzZVZhbHVlOiBUdWlEcmF3ZXJDb21wb25lbnQsXG4gICAgICAgIH0sXG4gICAgXSxcbiAgICBob3N0RGlyZWN0aXZlczogW1R1aURyb3Bkb3duRGlyZWN0aXZlLCBUdWlXaXRoRHJvcGRvd25PcGVuXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpRHJhd2VyRGlyZWN0aXZlIGltcGxlbWVudHMgRG9DaGVjayB7XG4gICAgcHJpdmF0ZSByZWFkb25seSB4ID0gaW5qZWN0KFRVSV9DT01NT05fSUNPTlMpLmNsb3NlO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaWNvbnMgPSBpbmplY3QoVHVpSWNvbnMpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZHJvcGRvd24gPSB0dWlEcm9wZG93bihudWxsKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wZW4gPSBpbmplY3QoVHVpRHJvcGRvd25PcGVuKTtcblxuICAgIHB1YmxpYyBuZ0RvQ2hlY2soKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaWNvbnMuaWNvblN0YXJ0LnNldCh0aGlzLm9wZW4udHVpRHJvcGRvd25PcGVuID8gdGhpcy54IDogJycpO1xuICAgIH1cblxuICAgIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpXG4gICAgcHJvdGVjdGVkIHNldCB0ZW1wbGF0ZSh0ZW1wbGF0ZTogUG9seW1vcnBoZXVzQ29udGVudCkge1xuICAgICAgICB0aGlzLmRyb3Bkb3duLnNldCh0ZW1wbGF0ZSk7XG4gICAgfVxufVxuIl19