nw-style-guide 19.2.0 → 20.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/nw-style-guide-picker.mjs +3 -7
- package/fesm2022/nw-style-guide-picker.mjs.map +1 -1
- package/package.json +5 -9
- package/picker/picker.module.d.ts +1 -2
- package/sass/src/_buttons.scss +2 -3
- package/sass/src/_dropdowns.scss +61 -209
- package/sass/src/components/picker.component.scss +1 -1
- package/sass/src/mixins/_buttons.scss +1 -1
- package/sass/src/mixins/_dropdowns.scss +9 -7
- package/styles.css +1 -1
- package/dropdowns/dropdown-menu.directive.d.ts +0 -21
- package/dropdowns/dropdown-toggle.directive.d.ts +0 -24
- package/dropdowns/dropdown.directive.d.ts +0 -31
- package/dropdowns/dropdown.service.d.ts +0 -14
- package/dropdowns/dropdowns.module.d.ts +0 -10
- package/dropdowns/index.d.ts +0 -5
- package/dropdowns/package.json +0 -3
- package/dropdowns/public-api.d.ts +0 -4
- package/fesm2022/nw-style-guide-dropdowns.mjs +0 -335
- package/fesm2022/nw-style-guide-dropdowns.mjs.map +0 -1
|
@@ -2,7 +2,6 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { EventEmitter, ViewChild, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/common';
|
|
4
4
|
import { CommonModule } from '@angular/common';
|
|
5
|
-
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
|
|
6
5
|
import * as i2 from '@angular/forms';
|
|
7
6
|
import { FormControl, ReactiveFormsModule } from '@angular/forms';
|
|
8
7
|
import { trigger, transition, style, animate } from '@angular/animations';
|
|
@@ -596,19 +595,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImpo
|
|
|
596
595
|
class NwPickerModule {
|
|
597
596
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NwPickerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
598
597
|
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.2.14", ngImport: i0, type: NwPickerModule, declarations: [NwPickerComponent], imports: [CommonModule,
|
|
599
|
-
ReactiveFormsModule,
|
|
600
|
-
BrowserAnimationsModule], exports: [NwPickerComponent] }); }
|
|
598
|
+
ReactiveFormsModule], exports: [NwPickerComponent] }); }
|
|
601
599
|
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NwPickerModule, imports: [CommonModule,
|
|
602
|
-
ReactiveFormsModule
|
|
603
|
-
BrowserAnimationsModule] }); }
|
|
600
|
+
ReactiveFormsModule] }); }
|
|
604
601
|
}
|
|
605
602
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.14", ngImport: i0, type: NwPickerModule, decorators: [{
|
|
606
603
|
type: NgModule,
|
|
607
604
|
args: [{
|
|
608
605
|
imports: [
|
|
609
606
|
CommonModule,
|
|
610
|
-
ReactiveFormsModule
|
|
611
|
-
BrowserAnimationsModule
|
|
607
|
+
ReactiveFormsModule
|
|
612
608
|
],
|
|
613
609
|
declarations: [NwPickerComponent],
|
|
614
610
|
exports: [NwPickerComponent]
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nw-style-guide-picker.mjs","sources":["../../../projects/nw-style-guide/picker/picker.component.ts","../../../projects/nw-style-guide/picker/picker.module.ts","../../../projects/nw-style-guide/picker/nw-style-guide-picker.ts"],"sourcesContent":["import { Component, Input, Output, ChangeDetectorRef, ChangeDetectionStrategy, EventEmitter, ViewChild, ElementRef, OnInit, OnDestroy, SimpleChanges, OnChanges } from '@angular/core';\nimport { trigger, transition, animate, style } from '@angular/animations';\nimport { FormControl } from '@angular/forms';\nimport { IPickerItem } from './IPickerItem';\nimport { Subscription } from 'rxjs';\nimport { isUndefined } from 'lodash-es';\n\n@Component({\n selector: 'nw-angular-picker',\n template: `\n <div class=\"nw-picker\">\n <!-- START: NOT xs screen -->\n <div class=\"input-container hidden-xs\" [class.disabled]=\"isDisabled\">\n <input type=\"text\" #inputEl\n class=\"form-control search-input {{inputClasses}} text-ellipsis\"\n [formControl]=\"searchTerm\"\n (focus)=\"onFocus()\"\n (blur)=\"closeResults()\"\n (keyup.escape)=\"inputEl.blur()\"\n [placeholder]=\"inputPlaceholderText\"/>\n\n <div class=\"input-placeholder text-ellipsis\" [innerHTML]=\"getPlaceholderText()\"></div>\n\n <i *ngIf=\"!isChevronHidden\" (click)=\"showResults();inputEl.focus()\" class=\"caret dropdown-icon\"></i>\n </div>\n\n <!-- END: NOT xs screen -->\n\n <!-- START: IS xs screen -->\n <div (click)=\"showResults()\" class=\"form-control search-input hidden-sm hidden-md hidden-lg text-ellipsis\" [innerHTML]=\"getPlaceholderText()\"></div>\n <i (click)=\"showResults()\" class=\"caret dropdown-icon hidden-sm hidden-md hidden-lg\"></i>\n <!-- END: IS xs screen -->\n\n <button *ngIf=\"searchTerm.value\"\n (mousedown)=\"preventBlur($event)\"\n (click)=\"onReset($event);inputEl.focus()\" class=\"close reset-icon\">×</button>\n\n <div class=\"search-results\" *ngIf=\"canViewResults\"\n [@slideUpIn]=\"isMobileDisplay ? 'in' : false\"\n (mousedown)=\"preventBlur($event)\">\n\n <div class=\"results-header\">\n <button class=\"close\" (click)=\"closeResults()\" style=\"color: #000\">×</button>\n </div>\n\n <!-- Navigate up the tree -->\n <div class=\"results-actions\" *ngIf=\"parentId && displayItems.length && !searchTerm.value.length\">\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"ascend($event, getParentItem(parentId))\">\n <i class=\"fas fa-long-arrow-alt-left\" aria-hidden=\"true\"></i>\n {{getParentItem(parentId).displayName}}\n </a>\n </div>\n\n <div class=\"scroll-container\" #searchResultsScrollEl\n [style.max-height]=\"getMaxHeight(searchResultsScrollEl)\">\n\n <div class=\"results-actions\" *ngIf=\"shouldShowSelections && !selectionsAreShowing && parentId == null && !searchTerm.value.length\">\n <ng-container *ngIf=\"getSelections().length\">\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"editSelections($event)\">Edit selections</a>\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"clearSelections($event)\">Clear selections</a>\n </ng-container>\n\n <ng-container *ngIf=\"!getSelections().length\">\n <em>No selections</em>\n </ng-container>\n </div>\n\n <!-- DISPLAY THE SELECTED ITEMS -->\n <ng-container *ngIf=\"selectionsAreShowing\">\n <div class=\"results-actions\">\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"selectionsAreShowing = false\">\n <i class=\"fas fa-long-arrow-alt-left\" aria-hidden=\"true\"></i> Back\n </a>\n <a href=\"javascript:;\" class=\"picker-action\" *ngIf=\"getSelections().length\" (click)=\"clearSelections($event)\">Clear all</a>\n </div>\n\n <div class=\"selected-items\">\n <div class=\"search-result\"\n [ngClass]=\"{ 'active': item.added, 'excluded': item.excluded }\"\n *ngFor=\"let item of getSelections()\">\n\n <span class=\"result-item\">\n <span class=\"item-label\">{{item.displayName}}</span>\n\n <button class=\"close\" style=\"color: #000000\" (click)=\"clearSelection($event, item)\">\n ×\n </button>\n </span>\n\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!selectionsAreShowing\">\n <div class=\"search-result\" *ngFor=\"let item of displayItems\"\n [class.active]=\"item.added\"\n [class.excluded]=\"item.excluded\"\n [class.has-children]=\"hasChildren(item.id)\">\n\n <span class=\"result-item\">\n <div class=\"checkbox checkbox-placeholder\" *ngIf=\"isMultiSelect\">\n <input id=\"include-{{item.id}}\" type=\"checkbox\" (click)=\"toggleItemInclusion(item, $event)\" [checked]=\"item.added\">\n <label for=\"include-{{item.id}}\"></label>\n </div>\n\n <div class=\"checkbox checkbox-exclusion checkbox-placeholder\" *ngIf=\"canExclude && isMultiSelect\">\n <input id=\"exclude-{{item.id}}\" type=\"checkbox\" (click)=\"toggleItemExclusion(item, $event)\" [checked]=\"item.excluded\">\n <label for=\"exclude-{{item.id}}\"></label>\n </div>\n\n <span class=\"item-label\" title=\"{{item.displayName}}\" (click)=\"toggleItemInclusion(item, $event)\">\n {{item.displayName}}\n <ng-container *ngIf=\"searchTerm.value.length && item.searchValues?.length\">\n <span> -\n <em class=\"small\" *ngFor=\"let val of item.searchValues; let isLast=last\">{{val}}{{isLast ? '' : ', '}}</em>\n </span>\n </ng-container>\n </span>\n\n <button class=\"btn btn-ghost drilldown\" *ngIf=\"hasChildren(item.id)\" (click)=\"setDisplayItemsFromParentId(item.id, $event); desc.emit(getParentItem(parentId))\">\n <i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </span>\n\n </div>\n\n\n <div class=\"results-actions\" *ngIf=\"displayItems.length < 1\">\n <em>No results</em>\n </div>\n </ng-container>\n </div>\n\n <ng-content select=\".results-footer\"></ng-content>\n </div>\n </div>\n\t`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideUpIn', [\n transition('void => in', [\n style({ top: '100%', transform: 'scale(0)' }),\n animate(200, style({ top: 0, transform: 'scale(1)' }))\n ]),\n transition('in => void', [\n animate(200, style({ top: '100%', transform: 'scale(0)' }))\n ])\n ])\n ],\n standalone: false\n})\n\nexport class NwPickerComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() items: IPickerItem[];\n @Input() inputClasses: string = '';\n @Input() placeholderText: string = 'Search...';\n @Input() inputPlaceholderText: string = 'Search...';\n @Input() noSelectionsPlaceholderText: string = 'Search...';\n @Input() initialParentId: any = null;\n @Input() shouldShowSelections: boolean = true;\n @Input() canExclude: boolean = true;\n @Input() isHeightDynamic: boolean;\n @Input() isMultiSelect: boolean = true;\n @Input() isMobileDisplay: boolean = false;\n @Input() isDisabled: boolean = false;\n @Input() isChevronHidden: boolean = false;\n\n @Output() selections: EventEmitter<IPickerItem[]> = new EventEmitter<IPickerItem[]>();\n @Output() toggleInclude: EventEmitter<{ item: IPickerItem; searchTerm: string }> = new EventEmitter<{ item: IPickerItem; searchTerm: string }>();\n @Output() toggleExclude: EventEmitter<{ item: IPickerItem; searchTerm: string }> = new EventEmitter<{ item: IPickerItem; searchTerm: string }>();\n @Output() edit: EventEmitter<any> = new EventEmitter<any>();\n @Output() closed: EventEmitter<any> = new EventEmitter<any>();\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() focus: EventEmitter<ElementRef> = new EventEmitter<ElementRef>();\n @Output() clearAll: EventEmitter<any> = new EventEmitter<any>();\n @Output() clearSingle: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n @Output() clearSearch: EventEmitter<any> = new EventEmitter<any>();\n @Output() desc: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n @Output() asc: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n\n @ViewChild('inputEl', { static: true }) inputEl: ElementRef;\n\n public displayItems: IPickerItem[];\n public searchTerm: FormControl<string> = new FormControl();\n public canViewResults: boolean = false;\n public parentId: any;\n public selectionsAreShowing: boolean = false;\n public maxHeight: number = 400;\n private _subs: Subscription[] = [];\n\n constructor(public chRef: ChangeDetectorRef) { }\n\n ngOnInit() {\n this.parentId = this.initialParentId;\n this.subscribeToSearchTermChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isDisabled) {\n this.searchTerm.disable();\n }\n }\n\n subscribeToSearchTermChanges() {\n const sub = this.searchTerm.valueChanges.subscribe(val => {\n this.selectionsAreShowing = false;\n\n if (val.length) {\n const displayItems = this.items.filter(item => {\n return (item.searchValues || []).some(value => {\n return value.toLowerCase().includes(val.toLowerCase());\n }) || item.displayName.toLowerCase().includes(val.toLowerCase());\n });\n // remove duplicate items\n this.displayItems = displayItems.reduce((items, item) => items.find(x => x.id === item.id) ? [...items] : [...items, item], []);\n } else {\n this.setDisplayItemsFromParentId(this.parentId);\n }\n });\n\n this._subs.push(sub);\n }\n\n ascend(event: Event, item: IPickerItem) {\n event.stopPropagation();\n this.setDisplayItemsFromParentId(item.parentId);\n this.asc.emit(item);\n }\n\n setDisplayItemsFromParentId(parentId, e?: KeyboardEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n if (!this.hasChildren(parentId)) {\n return;\n }\n this.resetSearchTerm();\n this.parentId = parentId;\n this.displayItems = this.items.filter(i => i.parentId === this.parentId);\n }\n\n displaySelectedItems() {\n this.displayItems = this.getSelections();\n }\n\n getSelections() {\n return this.items.filter(ci => ci.added || ci.excluded);\n }\n\n getParentItem(parentId) {\n return this.items.find(i => i.id === parentId);\n }\n\n hasChildren(id) {\n return this.items.filter(i => i.parentId === id).length;\n }\n\n editSelections(event: Event) {\n event.stopPropagation();\n this.selectionsAreShowing = true;\n this.edit.emit(event);\n }\n\n clearSelection(event: Event, item: IPickerItem) {\n event.stopPropagation();\n item.added = false;\n item.excluded = false;\n\n this.clearSingle.emit(item);\n\n if (this.getSelections().length < 1) {\n this.setDisplayItemsFromParentId(null);\n this.selectionsAreShowing = false;\n }\n\n this.selections.emit(this.getSelections());\n }\n\n clearSelections(e?: KeyboardEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.items = this.items.map(ci => {\n ci.added = false;\n ci.excluded = false;\n\n return ci;\n });\n\n this.clearAll.emit();\n\n this.setDisplayItemsFromParentId(null);\n this.selectionsAreShowing = false;\n\n this.selections.emit(this.getSelections());\n }\n\n toggleItemInclusion(item: IPickerItem, e: KeyboardEvent) {\n e.stopPropagation();\n\n // we're assuming that if the component is not multiSelect, then only\n // one item can be selected at any time\n if (!this.isMultiSelect) {\n this.items.forEach(item => {\n item.added = false;\n item.excluded = false;\n });\n }\n item.added = this.isMultiSelect ? !item.added : true;\n item.excluded = false;\n\n // setting flag for duplicate id's as in case of location for selection and deselection on checkbox click\n if (this.isMultiSelect) {\n this.items.forEach(pickerItem => {\n if (item.id === pickerItem.id) {\n pickerItem.added = item.added;\n }\n });\n }\n\n this.toggleAncestors(item, false, false);\n this.toggleDescendants(item, false);\n\n this.toggleInclude.emit({ item: item, searchTerm: this.searchTerm.value });\n this.selections.emit(this.getSelections());\n\n if (!this.isMultiSelect) {\n this.inputEl.nativeElement.blur();\n }\n }\n\n toggleItemExclusion(item: IPickerItem, e: KeyboardEvent) {\n e.stopPropagation();\n\n item.added = false;\n item.excluded = !item.excluded;\n // setting flag for duplicate id's as in case of location for selection and deselection on checkbox click\n if (this.isMultiSelect) {\n this.items.forEach(pickerItem => {\n if (item.id === pickerItem.id) {\n pickerItem.excluded = item.excluded;\n }\n });\n }\n\n this.toggleDescendants(item, false, false);\n this.toggleAncestors(item, undefined, false);\n\n this.toggleExclude.emit({ item: item, searchTerm: this.searchTerm.value });\n this.selections.emit(this.getSelections());\n\n if (!this.isMultiSelect) {\n this.inputEl.nativeElement.blur();\n }\n }\n\n toggleDescendants(item: IPickerItem, add?: boolean, exclude?: boolean) {\n this.items.filter(ci => ci.parentId === item.id).forEach(ci => {\n if (!isUndefined(add)) {\n ci.added = add;\n }\n\n if (!isUndefined(exclude)) {\n ci.excluded = exclude;\n }\n\n this.toggleDescendants(ci, add, exclude);\n });\n }\n\n toggleAncestors(item: IPickerItem, add?: boolean, exclude?: boolean) {\n this.items.filter(ci => ci.id === item.parentId).forEach(ci => {\n if (!isUndefined(add)) {\n ci.added = add;\n }\n\n if (!isUndefined(exclude)) {\n ci.excluded = exclude;\n }\n\n this.toggleAncestors(ci, add, exclude);\n });\n }\n\n preventBlur(e: KeyboardEvent) {\n // prevent blurring of the search input\n e.preventDefault();\n }\n\n resetSearchTerm() {\n this.searchTerm.setValue('', { emitEvent: false });\n }\n\n onFocus() {\n if (!this.isDisabled) {\n this.showResults();\n this.focus.emit(this.inputEl);\n }\n }\n\n showResults() {\n if (!this.isDisabled) {\n this.parentId = this.initialParentId;\n this.canViewResults = true;\n\n this.setDisplayItemsFromParentId(this.parentId);\n }\n }\n\n close() {\n this.inputEl.nativeElement.blur();\n }\n\n closeResults() {\n this.canViewResults = false;\n this.searchTerm.setValue('');\n this.closed.emit();\n this.chRef.detectChanges();\n }\n\n onReset($event?: KeyboardEvent) {\n this.clearSearch.emit();\n this.searchTerm.setValue('');\n this.showResults();\n }\n\n getPlaceholderText() {\n return this.getSelections().length ?\n this.placeholderText :\n this.noSelectionsPlaceholderText;\n }\n\n getMaxHeight(el: HTMLElement) {\n // no dynamic height for mobile\n if (this.isMobileDisplay) {\n return;\n }\n\n if (this.isHeightDynamic) {\n const appContainer = document.querySelector('.app-container') as HTMLElement;\n const appContainerOffsetTop = appContainer.getBoundingClientRect().top;\n const elOffsetTop = el.getBoundingClientRect().top;\n const buffer = 50;\n\n const height = appContainer.offsetHeight - (elOffsetTop - appContainerOffsetTop);\n\n if (height < this.maxHeight) {\n return height - buffer + 'px';\n }\n }\n return;\n }\n\n ngOnDestroy() {\n this._subs.forEach(sub => sub.unsubscribe());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NwPickerComponent } from './picker.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule,\n BrowserAnimationsModule\n ],\n declarations: [NwPickerComponent],\n exports: [NwPickerComponent]\n})\nexport class NwPickerModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"nw-style-guide-picker.mjs","sources":["../../../projects/nw-style-guide/picker/picker.component.ts","../../../projects/nw-style-guide/picker/picker.module.ts","../../../projects/nw-style-guide/picker/nw-style-guide-picker.ts"],"sourcesContent":["import { Component, Input, Output, ChangeDetectorRef, ChangeDetectionStrategy, EventEmitter, ViewChild, ElementRef, OnInit, OnDestroy, SimpleChanges, OnChanges } from '@angular/core';\nimport { trigger, transition, animate, style } from '@angular/animations';\nimport { FormControl } from '@angular/forms';\nimport { IPickerItem } from './IPickerItem';\nimport { Subscription } from 'rxjs';\nimport { isUndefined } from 'lodash-es';\n\n@Component({\n selector: 'nw-angular-picker',\n template: `\n <div class=\"nw-picker\">\n <!-- START: NOT xs screen -->\n <div class=\"input-container hidden-xs\" [class.disabled]=\"isDisabled\">\n <input type=\"text\" #inputEl\n class=\"form-control search-input {{inputClasses}} text-ellipsis\"\n [formControl]=\"searchTerm\"\n (focus)=\"onFocus()\"\n (blur)=\"closeResults()\"\n (keyup.escape)=\"inputEl.blur()\"\n [placeholder]=\"inputPlaceholderText\"/>\n\n <div class=\"input-placeholder text-ellipsis\" [innerHTML]=\"getPlaceholderText()\"></div>\n\n <i *ngIf=\"!isChevronHidden\" (click)=\"showResults();inputEl.focus()\" class=\"caret dropdown-icon\"></i>\n </div>\n\n <!-- END: NOT xs screen -->\n\n <!-- START: IS xs screen -->\n <div (click)=\"showResults()\" class=\"form-control search-input hidden-sm hidden-md hidden-lg text-ellipsis\" [innerHTML]=\"getPlaceholderText()\"></div>\n <i (click)=\"showResults()\" class=\"caret dropdown-icon hidden-sm hidden-md hidden-lg\"></i>\n <!-- END: IS xs screen -->\n\n <button *ngIf=\"searchTerm.value\"\n (mousedown)=\"preventBlur($event)\"\n (click)=\"onReset($event);inputEl.focus()\" class=\"close reset-icon\">×</button>\n\n <div class=\"search-results\" *ngIf=\"canViewResults\"\n [@slideUpIn]=\"isMobileDisplay ? 'in' : false\"\n (mousedown)=\"preventBlur($event)\">\n\n <div class=\"results-header\">\n <button class=\"close\" (click)=\"closeResults()\" style=\"color: #000\">×</button>\n </div>\n\n <!-- Navigate up the tree -->\n <div class=\"results-actions\" *ngIf=\"parentId && displayItems.length && !searchTerm.value.length\">\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"ascend($event, getParentItem(parentId))\">\n <i class=\"fas fa-long-arrow-alt-left\" aria-hidden=\"true\"></i>\n {{getParentItem(parentId).displayName}}\n </a>\n </div>\n\n <div class=\"scroll-container\" #searchResultsScrollEl\n [style.max-height]=\"getMaxHeight(searchResultsScrollEl)\">\n\n <div class=\"results-actions\" *ngIf=\"shouldShowSelections && !selectionsAreShowing && parentId == null && !searchTerm.value.length\">\n <ng-container *ngIf=\"getSelections().length\">\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"editSelections($event)\">Edit selections</a>\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"clearSelections($event)\">Clear selections</a>\n </ng-container>\n\n <ng-container *ngIf=\"!getSelections().length\">\n <em>No selections</em>\n </ng-container>\n </div>\n\n <!-- DISPLAY THE SELECTED ITEMS -->\n <ng-container *ngIf=\"selectionsAreShowing\">\n <div class=\"results-actions\">\n <a href=\"javascript:;\" class=\"picker-action\" (click)=\"selectionsAreShowing = false\">\n <i class=\"fas fa-long-arrow-alt-left\" aria-hidden=\"true\"></i> Back\n </a>\n <a href=\"javascript:;\" class=\"picker-action\" *ngIf=\"getSelections().length\" (click)=\"clearSelections($event)\">Clear all</a>\n </div>\n\n <div class=\"selected-items\">\n <div class=\"search-result\"\n [ngClass]=\"{ 'active': item.added, 'excluded': item.excluded }\"\n *ngFor=\"let item of getSelections()\">\n\n <span class=\"result-item\">\n <span class=\"item-label\">{{item.displayName}}</span>\n\n <button class=\"close\" style=\"color: #000000\" (click)=\"clearSelection($event, item)\">\n ×\n </button>\n </span>\n\n </div>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"!selectionsAreShowing\">\n <div class=\"search-result\" *ngFor=\"let item of displayItems\"\n [class.active]=\"item.added\"\n [class.excluded]=\"item.excluded\"\n [class.has-children]=\"hasChildren(item.id)\">\n\n <span class=\"result-item\">\n <div class=\"checkbox checkbox-placeholder\" *ngIf=\"isMultiSelect\">\n <input id=\"include-{{item.id}}\" type=\"checkbox\" (click)=\"toggleItemInclusion(item, $event)\" [checked]=\"item.added\">\n <label for=\"include-{{item.id}}\"></label>\n </div>\n\n <div class=\"checkbox checkbox-exclusion checkbox-placeholder\" *ngIf=\"canExclude && isMultiSelect\">\n <input id=\"exclude-{{item.id}}\" type=\"checkbox\" (click)=\"toggleItemExclusion(item, $event)\" [checked]=\"item.excluded\">\n <label for=\"exclude-{{item.id}}\"></label>\n </div>\n\n <span class=\"item-label\" title=\"{{item.displayName}}\" (click)=\"toggleItemInclusion(item, $event)\">\n {{item.displayName}}\n <ng-container *ngIf=\"searchTerm.value.length && item.searchValues?.length\">\n <span> -\n <em class=\"small\" *ngFor=\"let val of item.searchValues; let isLast=last\">{{val}}{{isLast ? '' : ', '}}</em>\n </span>\n </ng-container>\n </span>\n\n <button class=\"btn btn-ghost drilldown\" *ngIf=\"hasChildren(item.id)\" (click)=\"setDisplayItemsFromParentId(item.id, $event); desc.emit(getParentItem(parentId))\">\n <i class=\"fas fa-chevron-right\" aria-hidden=\"true\"></i>\n </button>\n </span>\n\n </div>\n\n\n <div class=\"results-actions\" *ngIf=\"displayItems.length < 1\">\n <em>No results</em>\n </div>\n </ng-container>\n </div>\n\n <ng-content select=\".results-footer\"></ng-content>\n </div>\n </div>\n\t`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('slideUpIn', [\n transition('void => in', [\n style({ top: '100%', transform: 'scale(0)' }),\n animate(200, style({ top: 0, transform: 'scale(1)' }))\n ]),\n transition('in => void', [\n animate(200, style({ top: '100%', transform: 'scale(0)' }))\n ])\n ])\n ],\n standalone: false\n})\n\nexport class NwPickerComponent implements OnInit, OnChanges, OnDestroy {\n\n @Input() items: IPickerItem[];\n @Input() inputClasses: string = '';\n @Input() placeholderText: string = 'Search...';\n @Input() inputPlaceholderText: string = 'Search...';\n @Input() noSelectionsPlaceholderText: string = 'Search...';\n @Input() initialParentId: any = null;\n @Input() shouldShowSelections: boolean = true;\n @Input() canExclude: boolean = true;\n @Input() isHeightDynamic: boolean;\n @Input() isMultiSelect: boolean = true;\n @Input() isMobileDisplay: boolean = false;\n @Input() isDisabled: boolean = false;\n @Input() isChevronHidden: boolean = false;\n\n @Output() selections: EventEmitter<IPickerItem[]> = new EventEmitter<IPickerItem[]>();\n @Output() toggleInclude: EventEmitter<{ item: IPickerItem; searchTerm: string }> = new EventEmitter<{ item: IPickerItem; searchTerm: string }>();\n @Output() toggleExclude: EventEmitter<{ item: IPickerItem; searchTerm: string }> = new EventEmitter<{ item: IPickerItem; searchTerm: string }>();\n @Output() edit: EventEmitter<any> = new EventEmitter<any>();\n @Output() closed: EventEmitter<any> = new EventEmitter<any>();\n // eslint-disable-next-line @angular-eslint/no-output-native\n @Output() focus: EventEmitter<ElementRef> = new EventEmitter<ElementRef>();\n @Output() clearAll: EventEmitter<any> = new EventEmitter<any>();\n @Output() clearSingle: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n @Output() clearSearch: EventEmitter<any> = new EventEmitter<any>();\n @Output() desc: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n @Output() asc: EventEmitter<IPickerItem> = new EventEmitter<IPickerItem>();\n\n @ViewChild('inputEl', { static: true }) inputEl: ElementRef;\n\n public displayItems: IPickerItem[];\n public searchTerm: FormControl<string> = new FormControl();\n public canViewResults: boolean = false;\n public parentId: any;\n public selectionsAreShowing: boolean = false;\n public maxHeight: number = 400;\n private _subs: Subscription[] = [];\n\n constructor(public chRef: ChangeDetectorRef) { }\n\n ngOnInit() {\n this.parentId = this.initialParentId;\n this.subscribeToSearchTermChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.isDisabled) {\n this.searchTerm.disable();\n }\n }\n\n subscribeToSearchTermChanges() {\n const sub = this.searchTerm.valueChanges.subscribe(val => {\n this.selectionsAreShowing = false;\n\n if (val.length) {\n const displayItems = this.items.filter(item => {\n return (item.searchValues || []).some(value => {\n return value.toLowerCase().includes(val.toLowerCase());\n }) || item.displayName.toLowerCase().includes(val.toLowerCase());\n });\n // remove duplicate items\n this.displayItems = displayItems.reduce((items, item) => items.find(x => x.id === item.id) ? [...items] : [...items, item], []);\n } else {\n this.setDisplayItemsFromParentId(this.parentId);\n }\n });\n\n this._subs.push(sub);\n }\n\n ascend(event: Event, item: IPickerItem) {\n event.stopPropagation();\n this.setDisplayItemsFromParentId(item.parentId);\n this.asc.emit(item);\n }\n\n setDisplayItemsFromParentId(parentId, e?: KeyboardEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n if (!this.hasChildren(parentId)) {\n return;\n }\n this.resetSearchTerm();\n this.parentId = parentId;\n this.displayItems = this.items.filter(i => i.parentId === this.parentId);\n }\n\n displaySelectedItems() {\n this.displayItems = this.getSelections();\n }\n\n getSelections() {\n return this.items.filter(ci => ci.added || ci.excluded);\n }\n\n getParentItem(parentId) {\n return this.items.find(i => i.id === parentId);\n }\n\n hasChildren(id) {\n return this.items.filter(i => i.parentId === id).length;\n }\n\n editSelections(event: Event) {\n event.stopPropagation();\n this.selectionsAreShowing = true;\n this.edit.emit(event);\n }\n\n clearSelection(event: Event, item: IPickerItem) {\n event.stopPropagation();\n item.added = false;\n item.excluded = false;\n\n this.clearSingle.emit(item);\n\n if (this.getSelections().length < 1) {\n this.setDisplayItemsFromParentId(null);\n this.selectionsAreShowing = false;\n }\n\n this.selections.emit(this.getSelections());\n }\n\n clearSelections(e?: KeyboardEvent) {\n if (e) {\n e.stopPropagation();\n }\n\n this.items = this.items.map(ci => {\n ci.added = false;\n ci.excluded = false;\n\n return ci;\n });\n\n this.clearAll.emit();\n\n this.setDisplayItemsFromParentId(null);\n this.selectionsAreShowing = false;\n\n this.selections.emit(this.getSelections());\n }\n\n toggleItemInclusion(item: IPickerItem, e: KeyboardEvent) {\n e.stopPropagation();\n\n // we're assuming that if the component is not multiSelect, then only\n // one item can be selected at any time\n if (!this.isMultiSelect) {\n this.items.forEach(item => {\n item.added = false;\n item.excluded = false;\n });\n }\n item.added = this.isMultiSelect ? !item.added : true;\n item.excluded = false;\n\n // setting flag for duplicate id's as in case of location for selection and deselection on checkbox click\n if (this.isMultiSelect) {\n this.items.forEach(pickerItem => {\n if (item.id === pickerItem.id) {\n pickerItem.added = item.added;\n }\n });\n }\n\n this.toggleAncestors(item, false, false);\n this.toggleDescendants(item, false);\n\n this.toggleInclude.emit({ item: item, searchTerm: this.searchTerm.value });\n this.selections.emit(this.getSelections());\n\n if (!this.isMultiSelect) {\n this.inputEl.nativeElement.blur();\n }\n }\n\n toggleItemExclusion(item: IPickerItem, e: KeyboardEvent) {\n e.stopPropagation();\n\n item.added = false;\n item.excluded = !item.excluded;\n // setting flag for duplicate id's as in case of location for selection and deselection on checkbox click\n if (this.isMultiSelect) {\n this.items.forEach(pickerItem => {\n if (item.id === pickerItem.id) {\n pickerItem.excluded = item.excluded;\n }\n });\n }\n\n this.toggleDescendants(item, false, false);\n this.toggleAncestors(item, undefined, false);\n\n this.toggleExclude.emit({ item: item, searchTerm: this.searchTerm.value });\n this.selections.emit(this.getSelections());\n\n if (!this.isMultiSelect) {\n this.inputEl.nativeElement.blur();\n }\n }\n\n toggleDescendants(item: IPickerItem, add?: boolean, exclude?: boolean) {\n this.items.filter(ci => ci.parentId === item.id).forEach(ci => {\n if (!isUndefined(add)) {\n ci.added = add;\n }\n\n if (!isUndefined(exclude)) {\n ci.excluded = exclude;\n }\n\n this.toggleDescendants(ci, add, exclude);\n });\n }\n\n toggleAncestors(item: IPickerItem, add?: boolean, exclude?: boolean) {\n this.items.filter(ci => ci.id === item.parentId).forEach(ci => {\n if (!isUndefined(add)) {\n ci.added = add;\n }\n\n if (!isUndefined(exclude)) {\n ci.excluded = exclude;\n }\n\n this.toggleAncestors(ci, add, exclude);\n });\n }\n\n preventBlur(e: KeyboardEvent) {\n // prevent blurring of the search input\n e.preventDefault();\n }\n\n resetSearchTerm() {\n this.searchTerm.setValue('', { emitEvent: false });\n }\n\n onFocus() {\n if (!this.isDisabled) {\n this.showResults();\n this.focus.emit(this.inputEl);\n }\n }\n\n showResults() {\n if (!this.isDisabled) {\n this.parentId = this.initialParentId;\n this.canViewResults = true;\n\n this.setDisplayItemsFromParentId(this.parentId);\n }\n }\n\n close() {\n this.inputEl.nativeElement.blur();\n }\n\n closeResults() {\n this.canViewResults = false;\n this.searchTerm.setValue('');\n this.closed.emit();\n this.chRef.detectChanges();\n }\n\n onReset($event?: KeyboardEvent) {\n this.clearSearch.emit();\n this.searchTerm.setValue('');\n this.showResults();\n }\n\n getPlaceholderText() {\n return this.getSelections().length ?\n this.placeholderText :\n this.noSelectionsPlaceholderText;\n }\n\n getMaxHeight(el: HTMLElement) {\n // no dynamic height for mobile\n if (this.isMobileDisplay) {\n return;\n }\n\n if (this.isHeightDynamic) {\n const appContainer = document.querySelector('.app-container') as HTMLElement;\n const appContainerOffsetTop = appContainer.getBoundingClientRect().top;\n const elOffsetTop = el.getBoundingClientRect().top;\n const buffer = 50;\n\n const height = appContainer.offsetHeight - (elOffsetTop - appContainerOffsetTop);\n\n if (height < this.maxHeight) {\n return height - buffer + 'px';\n }\n }\n return;\n }\n\n ngOnDestroy() {\n this._subs.forEach(sub => sub.unsubscribe());\n }\n\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { NwPickerComponent } from './picker.component';\n\n@NgModule({\n imports: [\n CommonModule,\n ReactiveFormsModule\n ],\n declarations: [NwPickerComponent],\n exports: [NwPickerComponent]\n})\nexport class NwPickerModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nw-style-guide",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "20.0.1",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/NewsWhip/style-guide"
|
|
@@ -42,22 +42,18 @@
|
|
|
42
42
|
"types": "./charts/index.d.ts",
|
|
43
43
|
"default": "./fesm2022/nw-style-guide-charts.mjs"
|
|
44
44
|
},
|
|
45
|
-
"./dropdowns": {
|
|
46
|
-
"types": "./dropdowns/index.d.ts",
|
|
47
|
-
"default": "./fesm2022/nw-style-guide-dropdowns.mjs"
|
|
48
|
-
},
|
|
49
45
|
"./email-input": {
|
|
50
46
|
"types": "./email-input/index.d.ts",
|
|
51
47
|
"default": "./fesm2022/nw-style-guide-email-input.mjs"
|
|
52
48
|
},
|
|
53
|
-
"./feature-alerts": {
|
|
54
|
-
"types": "./feature-alerts/index.d.ts",
|
|
55
|
-
"default": "./fesm2022/nw-style-guide-feature-alerts.mjs"
|
|
56
|
-
},
|
|
57
49
|
"./loader": {
|
|
58
50
|
"types": "./loader/index.d.ts",
|
|
59
51
|
"default": "./fesm2022/nw-style-guide-loader.mjs"
|
|
60
52
|
},
|
|
53
|
+
"./feature-alerts": {
|
|
54
|
+
"types": "./feature-alerts/index.d.ts",
|
|
55
|
+
"default": "./fesm2022/nw-style-guide-feature-alerts.mjs"
|
|
56
|
+
},
|
|
61
57
|
"./picker": {
|
|
62
58
|
"types": "./picker/index.d.ts",
|
|
63
59
|
"default": "./fesm2022/nw-style-guide-picker.mjs"
|
|
@@ -2,9 +2,8 @@ import * as i0 from "@angular/core";
|
|
|
2
2
|
import * as i1 from "./picker.component";
|
|
3
3
|
import * as i2 from "@angular/common";
|
|
4
4
|
import * as i3 from "@angular/forms";
|
|
5
|
-
import * as i4 from "@angular/platform-browser/animations";
|
|
6
5
|
export declare class NwPickerModule {
|
|
7
6
|
static ɵfac: i0.ɵɵFactoryDeclaration<NwPickerModule, never>;
|
|
8
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<NwPickerModule, [typeof i1.NwPickerComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule
|
|
7
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<NwPickerModule, [typeof i1.NwPickerComponent], [typeof i2.CommonModule, typeof i3.ReactiveFormsModule], [typeof i1.NwPickerComponent]>;
|
|
9
8
|
static ɵinj: i0.ɵɵInjectorDeclaration<NwPickerModule>;
|
|
10
9
|
}
|
package/sass/src/_buttons.scss
CHANGED
|
@@ -243,12 +243,11 @@ input[type="button"] {
|
|
|
243
243
|
border: none;
|
|
244
244
|
margin: 0;
|
|
245
245
|
}
|
|
246
|
-
.dropdown
|
|
247
|
-
.dropup {
|
|
246
|
+
.dropdown {
|
|
248
247
|
.btn-block {
|
|
249
248
|
display: flex;
|
|
250
249
|
flex-direction: row;
|
|
251
250
|
align-items: center;
|
|
252
251
|
justify-content: space-between;
|
|
253
252
|
}
|
|
254
|
-
}
|
|
253
|
+
}
|
package/sass/src/_dropdowns.scss
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
@use "./variables";
|
|
2
2
|
@use "./mixins/nav-divider";
|
|
3
3
|
@use "./mixins/dropdowns";
|
|
4
|
+
@use "./mixins/scrollbars";
|
|
4
5
|
//
|
|
5
6
|
// Dropdown menus
|
|
6
7
|
// --------------------------------------------------
|
|
@@ -16,33 +17,22 @@
|
|
|
16
17
|
border-top: variables.$caret-width-base dashed;
|
|
17
18
|
border-right: variables.$caret-width-base solid transparent;
|
|
18
19
|
border-left: variables.$caret-width-base solid transparent;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// The dropdown wrapper (div)
|
|
22
|
-
.dropup,
|
|
23
|
-
.dropdown {
|
|
24
|
-
position: relative;
|
|
25
|
-
}
|
|
26
20
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
21
|
+
&.caret-up {
|
|
22
|
+
border-top: 0;
|
|
23
|
+
border-bottom: variables.$caret-width-base dashed;
|
|
24
|
+
content: "";
|
|
25
|
+
}
|
|
30
26
|
}
|
|
31
27
|
|
|
32
|
-
// The dropdown menu (ul)
|
|
33
28
|
.dropdown-menu {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
left: 0;
|
|
29
|
+
display: inline-flex;
|
|
30
|
+
flex-direction: column;
|
|
37
31
|
z-index: variables.$zindex-dropdown;
|
|
38
|
-
display: none; // none by default, but block on "open" of the menu
|
|
39
|
-
float: left;
|
|
40
32
|
min-width: 160px;
|
|
41
33
|
padding: 5px 0;
|
|
42
|
-
margin: 2px 0 0;
|
|
43
|
-
list-style: none;
|
|
34
|
+
margin: 2px 0 0;
|
|
44
35
|
font-size: 14px;
|
|
45
|
-
text-align: left; // Ensures proper alignment if parent has it changed (e.g., modal footer)
|
|
46
36
|
background-color: variables.$dropdown-bg;
|
|
47
37
|
border: 1px solid variables.$dropdown-border;
|
|
48
38
|
border-radius: variables.$border-radius-base;
|
|
@@ -51,165 +41,44 @@
|
|
|
51
41
|
|
|
52
42
|
// // Dividers (basically an hr) within the dropdown
|
|
53
43
|
.divider {
|
|
44
|
+
border: none;
|
|
54
45
|
@include nav-divider.nav-divider(variables.$dropdown-divider-bg);
|
|
55
46
|
}
|
|
56
47
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
pointer-events: none;
|
|
68
|
-
}
|
|
69
|
-
&:after {
|
|
70
|
-
border-bottom-color: variables.$dropdown-bg;
|
|
71
|
-
border-width: 7px;
|
|
72
|
-
margin-left: -7px;
|
|
73
|
-
}
|
|
74
|
-
&:before {
|
|
75
|
-
border-bottom-color: variables.$dropdown-border;
|
|
76
|
-
border-width: 8px;
|
|
77
|
-
margin-left: -8px;
|
|
78
|
-
}
|
|
79
|
-
&.dropdown-menu-right {
|
|
80
|
-
&:after, &:before {
|
|
81
|
-
right: 0;
|
|
82
|
-
margin-left: 0;
|
|
83
|
-
left: auto;
|
|
84
|
-
}
|
|
85
|
-
&:after {
|
|
86
|
-
margin-right: 10px;
|
|
87
|
-
}
|
|
88
|
-
&:before {
|
|
89
|
-
margin-right: 9px;
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
//
|
|
96
|
-
// The following is the full expected structure for nested dropdowns
|
|
97
|
-
//
|
|
98
|
-
// .dropdown
|
|
99
|
-
// .dropdown-toggle (class not required but some means of toggling the dropdown)
|
|
100
|
-
// .dropdown-menu
|
|
101
|
-
// li a
|
|
102
|
-
// li a
|
|
103
|
-
// ....
|
|
104
|
-
// ....
|
|
105
|
-
// ....
|
|
106
|
-
// li a
|
|
107
|
-
// ul.dropdown-submenu
|
|
108
|
-
// li (this will be the means of toggling if hover)
|
|
109
|
-
// a (this will be the means of toggling if clicking)
|
|
110
|
-
// .dropdown-menu
|
|
111
|
-
// li a
|
|
112
|
-
// li a
|
|
113
|
-
// ....
|
|
114
|
-
|
|
115
|
-
// Nested Dropdown
|
|
116
|
-
.dropdown-submenu {
|
|
117
|
-
position:relative;
|
|
118
|
-
padding: 0;
|
|
119
|
-
list-style: none;
|
|
120
|
-
|
|
121
|
-
> li > .dropdown-menu {
|
|
122
|
-
left: 100%;
|
|
123
|
-
top: -8px;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
&.submenu-left {
|
|
127
|
-
> li > .dropdown-menu {
|
|
128
|
-
transform: translateX(-100%);
|
|
129
|
-
left: 0;
|
|
130
|
-
}
|
|
48
|
+
// Dropdown section headers
|
|
49
|
+
.dropdown-header {
|
|
50
|
+
display: block;
|
|
51
|
+
padding: 3px 16px;
|
|
52
|
+
padding-top: 8px;
|
|
53
|
+
font-size: variables.$font-size-base;
|
|
54
|
+
line-height: variables.$line-height-base;
|
|
55
|
+
color: variables.$dropdown-header-color;
|
|
56
|
+
white-space: nowrap;
|
|
57
|
+
text-transform: uppercase;
|
|
131
58
|
}
|
|
132
|
-
}
|
|
133
59
|
|
|
134
|
-
|
|
135
|
-
.dropdown-menu,
|
|
136
|
-
.dropdown-submenu {
|
|
137
|
-
> li > a {
|
|
138
|
-
// Links within the dropdown menu
|
|
60
|
+
.menu-item {
|
|
139
61
|
@include dropdowns.dropdown-menu-link;
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
62
|
|
|
143
|
-
|
|
144
|
-
.dropdown-menu
|
|
145
|
-
|
|
146
|
-
> .active > a {
|
|
147
|
-
@include dropdowns.dropdown-menu-link-active;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// Disabled state
|
|
152
|
-
//
|
|
153
|
-
// Gray out text and ensure the hover/focus state remains gray
|
|
154
|
-
.dropdown-menu > .disabled > a,
|
|
155
|
-
.dropdown-submenu > .disabled > a {
|
|
156
|
-
&,
|
|
157
|
-
&:hover,
|
|
158
|
-
&:focus {
|
|
159
|
-
@include dropdowns.dropdown-menu-link-disabled;
|
|
160
|
-
}
|
|
161
|
-
}
|
|
63
|
+
&.active {
|
|
64
|
+
@include dropdowns.dropdown-menu-link-active;
|
|
65
|
+
}
|
|
162
66
|
|
|
163
|
-
//
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
outline: 0;
|
|
172
|
-
}
|
|
173
|
-
> .dropdown-backdrop {
|
|
174
|
-
display: block;
|
|
67
|
+
// Gray out text and ensure the hover/focus state remains gray
|
|
68
|
+
&[disabled], &.disabled {
|
|
69
|
+
&,
|
|
70
|
+
&:hover,
|
|
71
|
+
&:focus-visible {
|
|
72
|
+
@include dropdowns.dropdown-menu-link-disabled;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
175
75
|
}
|
|
176
76
|
}
|
|
177
77
|
|
|
178
|
-
// Menu positioning
|
|
179
|
-
//
|
|
180
|
-
// Add extra class to `.dropdown-menu` to flip the alignment of the dropdown
|
|
181
|
-
// menu with the parent.
|
|
182
|
-
.dropdown-menu-right {
|
|
183
|
-
left: auto; // Reset the default from `.dropdown-menu`
|
|
184
|
-
right: 0;
|
|
185
|
-
}
|
|
186
|
-
// With v3, we enabled auto-flipping if you have a dropdown within a right
|
|
187
|
-
// aligned nav component. To enable the undoing of that, we provide an override
|
|
188
|
-
// to restore the default dropdown menu alignment.
|
|
189
|
-
//
|
|
190
|
-
// This is only for left-aligning a dropdown menu within a `.navbar-right` or
|
|
191
|
-
// `.pull-right` nav component.
|
|
192
|
-
.dropdown-menu-left {
|
|
193
|
-
left: 0;
|
|
194
|
-
right: auto;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
78
|
.dropdown-menu-block {
|
|
198
79
|
width: 100%;
|
|
199
80
|
}
|
|
200
81
|
|
|
201
|
-
// Dropdown section headers
|
|
202
|
-
.dropdown-header {
|
|
203
|
-
display: block;
|
|
204
|
-
padding: 3px 16px;
|
|
205
|
-
padding-top: 8px;
|
|
206
|
-
font-size: variables.$font-size-base;
|
|
207
|
-
line-height: variables.$line-height-base;
|
|
208
|
-
color: variables.$dropdown-header-color;
|
|
209
|
-
white-space: nowrap; // as with > li > a
|
|
210
|
-
text-transform: uppercase;
|
|
211
|
-
}
|
|
212
|
-
|
|
213
82
|
// Backdrop to catch body clicks on mobile, etc.
|
|
214
83
|
.dropdown-backdrop {
|
|
215
84
|
position: fixed;
|
|
@@ -221,65 +90,39 @@
|
|
|
221
90
|
display: none;
|
|
222
91
|
}
|
|
223
92
|
|
|
224
|
-
.dropup {
|
|
225
|
-
// Reverse the caret
|
|
226
|
-
.caret {
|
|
227
|
-
border-top: 0;
|
|
228
|
-
border-bottom: variables.$caret-width-base dashed;
|
|
229
|
-
content: "";
|
|
230
|
-
}
|
|
231
|
-
// Different positioning for bottom up menu
|
|
232
|
-
.dropdown-menu {
|
|
233
|
-
top: auto;
|
|
234
|
-
bottom: 100%;
|
|
235
|
-
margin-bottom: 2px;
|
|
236
|
-
|
|
237
|
-
&.dropdown-menu-arrow {
|
|
238
|
-
&:after, &:before {
|
|
239
|
-
top: 100%;
|
|
240
|
-
transform: rotateZ(180deg);
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
// For nested dropdowns
|
|
244
|
-
> .dropdown-submenu > li > .dropdown-menu {
|
|
245
|
-
top: unset;
|
|
246
|
-
bottom: -8px;
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
|
|
251
93
|
.dropdown-menu-inverse {
|
|
252
94
|
$dropdown-inverse-link-color: variables.$level1;
|
|
253
95
|
$dropdown-inverese-link-active-bg: variables.get-color("primary", 3x-light);
|
|
254
|
-
|
|
255
96
|
background-color: #ffffff;
|
|
97
|
+
|
|
256
98
|
.dropdown-header {
|
|
257
99
|
color: variables.get-color("gray", x-light);
|
|
258
100
|
}
|
|
259
|
-
|
|
101
|
+
.menu-item {
|
|
260
102
|
color: $dropdown-inverse-link-color;
|
|
261
|
-
cursor: pointer;
|
|
262
103
|
|
|
263
104
|
&:hover,
|
|
264
|
-
&:focus {
|
|
105
|
+
&:focus-visible {
|
|
265
106
|
color: $dropdown-inverse-link-color;
|
|
266
|
-
background-color:
|
|
107
|
+
background-color: variables.get-color("coolgray", 5x-light);
|
|
267
108
|
}
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
109
|
+
|
|
110
|
+
&.active {
|
|
111
|
+
&,
|
|
112
|
+
&:hover,
|
|
113
|
+
&:focus-visible {
|
|
114
|
+
color: $dropdown-inverse-link-color;
|
|
115
|
+
background-color: $dropdown-inverese-link-active-bg;
|
|
116
|
+
}
|
|
275
117
|
}
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
118
|
+
|
|
119
|
+
&[disabled] {
|
|
120
|
+
&,
|
|
121
|
+
&:hover,
|
|
122
|
+
&:focus-visible {
|
|
123
|
+
color: $dropdown-inverse-link-color;
|
|
124
|
+
background-color: transparent;
|
|
125
|
+
}
|
|
283
126
|
}
|
|
284
127
|
}
|
|
285
128
|
.divider {
|
|
@@ -298,3 +141,12 @@
|
|
|
298
141
|
padding: 0;
|
|
299
142
|
}
|
|
300
143
|
}
|
|
144
|
+
|
|
145
|
+
.cdk-overlay-pane{
|
|
146
|
+
@include scrollbars.scrollbars();
|
|
147
|
+
|
|
148
|
+
.dropdown-menu.scrollable {
|
|
149
|
+
max-height: 200px;
|
|
150
|
+
overflow-y: auto;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
@use "../variables";
|
|
2
2
|
|
|
3
3
|
@mixin dropdown-menu-link {
|
|
4
|
-
display:
|
|
4
|
+
display: flex;
|
|
5
|
+
align-items: center;
|
|
6
|
+
flex-direction: row;
|
|
7
|
+
flex: 1;
|
|
8
|
+
background-color: transparent;
|
|
9
|
+
border: none;
|
|
10
|
+
user-select: none;
|
|
5
11
|
padding: 8px 16px;
|
|
6
|
-
clear: both;
|
|
7
12
|
font-weight: normal;
|
|
8
13
|
line-height: variables.$line-height-base;
|
|
9
14
|
color: variables.$dropdown-link-color;
|
|
10
|
-
white-space: nowrap; // prevent links from randomly breaking onto new lines
|
|
11
|
-
text-decoration: none;
|
|
12
15
|
cursor: pointer;
|
|
13
16
|
|
|
14
17
|
&:hover,
|
|
15
|
-
&:focus {
|
|
16
|
-
text-decoration: none;
|
|
18
|
+
&:focus-visible {
|
|
17
19
|
color: variables.$dropdown-link-hover-color;
|
|
18
20
|
background-color: variables.$dropdown-link-hover-bg;
|
|
19
21
|
}
|
|
@@ -22,7 +24,7 @@
|
|
|
22
24
|
@mixin dropdown-menu-link-active {
|
|
23
25
|
&,
|
|
24
26
|
&:hover,
|
|
25
|
-
&:focus {
|
|
27
|
+
&:focus-visible {
|
|
26
28
|
color: variables.$dropdown-link-active-color;
|
|
27
29
|
background-color: variables.$dropdown-link-active-bg;
|
|
28
30
|
}
|