import {
ChangeDetectionStrategy,
Component,
ContentChildren,
EventEmitter,
forwardRef,
HostBinding,
Input,
Output,
QueryList
} from "@angular/core";
import { SdmListControl } from "./SdmListControl";
import { SdInputValidate } from "@simplysm/sd-angular";
import { IconProp } from "@fortawesome/fontawesome-svg-core";
import { faChevronDown } from "@fortawesome/pro-light-svg-icons";
@Component({
selector: "sdm-list-item",
changeDetection: ChangeDetectionStrategy.OnPush,
template: `
`,
styles: [/* language=SCSS */ `
@import "../../scss/mixins";
:host {
> ._content {
@include mobile-active-effect(true);
padding: var(--gap-sm) var(--gap-default);
> ._selected-icon {
color: transparent;
}
}
&[sd-layout=accordion] {
::ng-deep ._child > sdm-list {
padding: var(--gap-sm) 0;
}
}
&[sd-layout=flat] {
> ._content {
display: none;
}
&[sd-has-children=true] {
> ._content {
@include mobile-active-effect(false);
display: block;
background: transparent;
cursor: default;
font-size: var(--font-size-sm);
opacity: .7;
margin-top: var(--gap-sm);
}
}
}
&[sd-selected=true] {
> ._content {
background: var(--theme-color-primary-default);
color: var(--text-brightness-rev-default);
> ._selected-icon {
color: var(--theme-color-primary-default);
}
}
}
&[sd-has-selected-icon=true][sd-selected=true] {
> ._content {
background: transparent;
color: var(--text-brightness-default);
> ._selected-icon {
color: var(--theme-color-primary-default);
}
}
}
}
`]
})
export class SdmListItemControl {
public icons = {
falChevronDown: faChevronDown
};
@Input("content.style")
@SdInputValidate(String)
public contentStyle?: string;
@Input("content.class")
@SdInputValidate(String)
public contentClass?: string;
@Input()
@SdInputValidate({
type: String,
includes: ["accordion", "flat"],
notnull: true
})
@HostBinding("attr.sd-layout")
public layout: "accordion" | "flat" = "accordion";
@Input()
@SdInputValidate(Boolean)
@HostBinding("attr.sd-open")
public open?: boolean;
@Output()
public readonly openChange = new EventEmitter();
@Input()
@SdInputValidate(Boolean)
@HostBinding("attr.sd-selected")
public selected?: boolean;
@Input()
public selectedIcon?: IconProp;
@HostBinding("attr.sd-has-children")
public get hasChildren(): boolean {
return this.listControls !== undefined && this.listControls.length > 0;
}
@HostBinding("attr.sd-has-selected-icon")
public get hasSelectedIcon(): boolean {
return Boolean(this.selectedIcon);
}
@ContentChildren(forwardRef(() => SdmListControl))
public listControls?: QueryList;
public onContentClick(): void {
if (this.openChange.observed) {
this.openChange.emit(!this.open);
}
else {
this.open = !this.open;
}
}
}