@bootkit/ng0 0.0.0-alpha.30 → 0.0.0-alpha.32
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/components/list/index.d.ts +1 -0
- package/components/select/index.d.ts +11 -10
- package/components/sidenav/index.d.ts +95 -34
- package/fesm2022/bootkit-ng0-components-backdrop.mjs +4 -4
- package/fesm2022/bootkit-ng0-components-backdrop.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-list.mjs +4 -3
- package/fesm2022/bootkit-ng0-components-list.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-select.mjs +9 -8
- package/fesm2022/bootkit-ng0-components-select.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-components-sidenav.mjs +186 -58
- package/fesm2022/bootkit-ng0-components-sidenav.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-layouts-layout1.mjs +4 -29
- package/fesm2022/bootkit-ng0-layouts-layout1.mjs.map +1 -1
- package/fesm2022/bootkit-ng0-localization.mjs +119 -39
- package/fesm2022/bootkit-ng0-localization.mjs.map +1 -1
- package/layouts/layout1/index.d.ts +16 -27
- package/localization/index.d.ts +63 -8
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-select.mjs","sources":["../../../projects/ng0/components/select/select.component.ts","../../../projects/ng0/components/select/select.component.html","../../../projects/ng0/components/select/select.module.ts","../../../projects/ng0/components/select/public-api.ts","../../../projects/ng0/components/select/bootkit-ng0-components-select.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, input, signal, model, HostListener, inject, forwardRef, ViewChild, TemplateRef, ContentChild, ViewEncapsulation, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, computed, untracked, Output, EventEmitter } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataSource, DataSourceLike, DataRequest } from '@bootkit/ng0/data';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayModule, ScrollStrategy, ViewportRuler } from '@angular/cdk/overlay';\r\nimport { Subscription } from 'rxjs';\r\nimport { objectFormatterAttribute, defaultFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListComponent, ListModule, ListItemSelectEvent } from '@bootkit/ng0/components/list';\r\nimport {\r\n CssClassAttribute, equalityComparerAttribute, defaultEqualityComparer, valueWriterAttribute, defaultValueWriter,\r\n IdGeneratorAttribute, defaultFilter, filterPredicateAttribute\r\n} from '@bootkit/ng0/common';\r\n\r\n/**\r\n * Select component that allows users to choose an option from a dropdown list.\r\n */\r\n@Component({\r\n selector: 'ng0-select',\r\n exportAs: 'ng0Select',\r\n templateUrl: './select.component.html',\r\n styleUrl: './select.component.scss',\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, ListModule, OverlayModule],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-select-open]': 'open()',\r\n '[class.ng0-select-filterable]': 'filterable()',\r\n '[class.ng0-select-loading]': 'source().isLoading()',\r\n '[attr.disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.aria-disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.tabindex]': '_isDisabled() ? undefined : 0',\r\n }\r\n})\r\nexport class SelectComponent implements ControlValueAccessor {\r\n // private _resizeObserver?: ResizeObserver;\r\n private _viewpoerRulerSubscription?: Subscription;\r\n @ViewChild('filterInput') private _filterElementRef?: ElementRef;\r\n @ViewChild(ListComponent) private _listComponent?: ListComponent;\r\n private _changeCallback!: (value: any) => void;\r\n private _touchCallback!: () => void;\r\n protected readonly _sourceItems = signal<any[] | undefined>(undefined);\r\n protected readonly _selectedItems = new Set<any>();\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n protected _positionStrategy!: FlexibleConnectedPositionStrategy;\r\n protected _scrollStrategy!: ScrollStrategy;\r\n private _overlay = inject(Overlay);\r\n private _localizationService = inject(LocalizationService);\r\n protected _elementRef = inject(ElementRef<HTMLDivElement>);\r\n protected readonly _filterValue = signal('');\r\n private _renderer = inject(Renderer2);\r\n private _viewportRuler = inject(ViewportRuler);\r\n private _changeDetectorRef = inject(ChangeDetectorRef);\r\n private readonly _value = signal<any>(undefined);\r\n\r\n /**\r\n * Template for rendering each item in the select component.\r\n */\r\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showSelectionIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /** \r\n * Indicates whether the dropdown is open or closed.\r\n */\r\n public readonly open = model(false);\r\n\r\n /**\r\n * A comparer to compare items for selection.\r\n */\r\n public readonly compareBy = input(defaultEqualityComparer, {\r\n transform: equalityComparerAttribute\r\n });\r\n\r\n /**\r\n * A fromatter to convert each item to a string for display.\r\n */\r\n public readonly formatBy = input(defaultFormatter, {\r\n transform: objectFormatterAttribute(this._localizationService.get())\r\n });\r\n\r\n /**\r\n * Custom value writer to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueWriter, {\r\n transform: valueWriterAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether the select component is filterable.\r\n */\r\n public readonly filterable = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Custom filter function to filter items based on a filter value.\r\n * Default checks if the item contains the filter value (case-insensitive).\r\n */\r\n public readonly filterBy = input(defaultFilter, {\r\n transform: filterPredicateAttribute\r\n });\r\n\r\n /**\r\n * Placeholder text for the filter input field.\r\n */\r\n public readonly filterPlaceholder = input<string | undefined>(undefined);\r\n\r\n /**\r\n * CSS class or classes to apply to the items.\r\n */\r\n public readonly itemClass = input(undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n /**\r\n * A function that generates unique ids for each item in the list.\r\n * If set to a function, it will be called with the item as an argument to generate the id.\r\n * If set to undefined, no ids will be generated for the items.\r\n * @default undefined\r\n */\r\n public readonly idGenerator = input(undefined, {\r\n transform: IdGeneratorAttribute\r\n });\r\n\r\n /**\r\n * Event emitted when the selected value changes.\r\n */\r\n @Output() public readonly valueChange = new EventEmitter<SelectItemEvent>();\r\n\r\n constructor() {\r\n ['ng0-select', 'form-select'].forEach(c => this._renderer.addClass(this._elementRef.nativeElement, c));\r\n this._scrollStrategy = this._overlay.scrollStrategies.block();\r\n\r\n effect(() => {\r\n let source = this.source();\r\n source.load(new DataRequest()).subscribe(res => {\r\n untracked(() => {\r\n this._sourceItems.set(res.data);\r\n this._findAndSelectItems();\r\n this._changeDetectorRef.markForCheck();\r\n })\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Indicates whether the given value is selected.\r\n * @param item \r\n * @returns \r\n */\r\n public isSelected(value: any): boolean {\r\n return this._selectedItems.has(value);\r\n }\r\n\r\n /**\r\n * Selects the given value.\r\n * @param item \r\n */\r\n public select(value: any): void {\r\n if (this.multiple()) {\r\n if (!this._selectedItems.has(value)) {\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n } else {\r\n this._selectedItems.clear();\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n }\r\n\r\n /**\r\n * Deselects the given value.\r\n * @param item \r\n */\r\n public deselect(value: any): void {\r\n this._selectedItems.delete(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the given value.\r\n * @param item\r\n */\r\n public toggle(value: any): void {\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n }\r\n }\r\n\r\n writeValue(obj: any): void {\r\n if (this.multiple()) {\r\n if (obj === null || obj === undefined) {\r\n obj = [];\r\n } else if (!Array.isArray(obj)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n }\r\n\r\n this._value.set(obj);\r\n this._findAndSelectItems();\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._changeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._touchCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n private _findAndSelectItems(): void {\r\n let value = this._value();\r\n let compareBy = this.compareBy();\r\n let sourceItems = this._sourceItems();\r\n if (sourceItems == undefined) {\r\n return;\r\n }\r\n\r\n let findAndSelect = (v: any) => {\r\n let index = sourceItems.findIndex(sourceItem => compareBy(sourceItem, v));\r\n if (index > -1) {\r\n let item = sourceItems.at(index)!;\r\n this._selectedItems.add(item);\r\n }\r\n };\r\n\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(v => findAndSelect(v));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n }\r\n\r\n private _updateValue(): void {\r\n let value: any;\r\n\r\n if (this.multiple()) {\r\n let values: any[] = [];\r\n this._selectedItems.forEach(v => {\r\n values.push(this.writeBy()(v));\r\n });\r\n value = values;\r\n } else {\r\n if (this._selectedItems.size > 0) {\r\n let first = this._selectedItems.values().next().value;\r\n value = this.writeBy()(first);\r\n } else {\r\n value = undefined;\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n }\r\n\r\n protected _onOverlayAttach() {\r\n this._listenToResizeEvents();\r\n\r\n setTimeout(() => {\r\n if (this.filterable()) {\r\n this._filterElementRef?.nativeElement.focus();\r\n }\r\n\r\n this._listComponent!.writeValue(this._value());\r\n // if (this._activeOptionIndex() > -1) {\r\n // this._listComponent?.active(this._activeOptionIndex());\r\n // }\r\n }, 0);\r\n }\r\n\r\n protected _onOverlayDetach() {\r\n this._unlistenFromResizeEvents();\r\n this._elementRef!.nativeElement.focus();\r\n this._filterValue.set('');\r\n this.open.set(false);\r\n }\r\n\r\n protected _onListSelectionChange(e: ListItemSelectEvent) {\r\n let value = e.item.value();\r\n\r\n if (this.multiple()) {\r\n this.toggle(value);\r\n } else {\r\n this.select(value);\r\n }\r\n\r\n this.valueChange.emit({ value: e.value, select: this });\r\n this._changeDetectorRef.detectChanges();\r\n if (!this.multiple()) {\r\n this.open.set(false);\r\n }\r\n }\r\n\r\n protected _filterPredicate = computed(() => {\r\n let filterValue = this._filterValue();\r\n let filterBy = this.filterBy();\r\n\r\n return (item: any) => filterBy(item, filterValue);\r\n })\r\n\r\n protected _onFilterKeydown(e: KeyboardEvent) {\r\n let keys = ['ArrowDown', 'ArrowUp', 'Enter', 'Home', 'End'];\r\n\r\n if (e.key === 'Tab') {\r\n e.preventDefault();\r\n this.open.set(false);\r\n }\r\n\r\n if (keys.includes(e.key)) {\r\n e.preventDefault();\r\n const newEvent = new KeyboardEvent(e.type, e);\r\n this._listComponent?.elementRef.nativeElement.dispatchEvent(newEvent);\r\n }\r\n }\r\n\r\n private _listenToResizeEvents() {\r\n this._viewportRuler.change().subscribe(x => {\r\n this.open.set(false);\r\n });\r\n\r\n // this._resizeObserver = new ResizeObserver(e => {\r\n // // update overlay size\r\n // // const width = (e[0].target as HTMLDivElement).offsetWidth;\r\n // // this._connectedOverlay.overlayRef.updateSize({ width });\r\n // });\r\n\r\n // this._resizeObserver.observe(this._elementRef.nativeElement);\r\n }\r\n\r\n private _unlistenFromResizeEvents() {\r\n this._viewpoerRulerSubscription?.unsubscribe();\r\n this._viewpoerRulerSubscription = undefined;\r\n\r\n // this._resizeObserver?.disconnect();\r\n // this._resizeObserver = undefined;\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private _onHostKeydown(e: KeyboardEvent) {\r\n let sourceItems = this._sourceItems()\r\n let itemsCount = sourceItems?.length || 0;\r\n\r\n if (this._isDisabled() || !sourceItems || itemsCount === 0) {\r\n return;\r\n }\r\n\r\n if (this.open()) {\r\n const newEvent = new KeyboardEvent(e.type, e);\r\n this._listComponent?.elementRef.nativeElement.dispatchEvent(newEvent);\r\n return;\r\n } else {\r\n if (e.key == 'Enter') {\r\n this.open.set(true);\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n if (this.multiple()) {\r\n return;\r\n }\r\n\r\n let selectedItemindex: number;\r\n if (this._selectedItems.size == 0) {\r\n selectedItemindex = -1\r\n } else {\r\n let firstValue = this._selectedItems.values().next().value;\r\n selectedItemindex = sourceItems.findIndex(i => i === firstValue);\r\n }\r\n\r\n let newItemIndex = selectedItemindex;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (selectedItemindex < itemsCount - 1) {\r\n newItemIndex = selectedItemindex + 1;\r\n this.select(sourceItems[newItemIndex]);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (selectedItemindex > 0) {\r\n newItemIndex = selectedItemindex - 1;\r\n this.select(sourceItems[newItemIndex]);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Home':\r\n if (itemsCount > 0) {\r\n newItemIndex = 0;\r\n this.select(sourceItems[0]);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n if (itemsCount > 0) {\r\n newItemIndex = itemsCount - 1;\r\n this.select(sourceItems[newItemIndex]);\r\n }\r\n e.preventDefault();\r\n break;\r\n }\r\n\r\n if (selectedItemindex != newItemIndex!) {\r\n this.valueChange.emit({ value: sourceItems[newItemIndex], select: this });\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n private _onHostClick(e: MouseEvent) {\r\n if (this._isDisabled() || this.source().isLoading()) {\r\n return;\r\n }\r\n\r\n this.open.update(x => !x);\r\n this._touchCallback?.();\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Event emitted when the selection state of the select component changes by user interaction.\r\n */\r\nexport interface SelectItemEvent {\r\n /**\r\n * The value of the item that was selected or deselected.\r\n */\r\n value: any;\r\n\r\n /**\r\n * The select component that emitted the event.\r\n */\r\n readonly select: SelectComponent\r\n}\r\n","@if(multiple()) {\r\n\r\n@for(item of _selectedItems.values(); track $index; let last=$last) {\r\n{{formatBy()(item)}}@if(!last) {,}\r\n}\r\n\r\n} @else {\r\n@if(_selectedItems.size > 0) {\r\n{{formatBy()(_selectedItems.values().next().value)}}\r\n}\r\n}\r\n\r\n@if(source().isLoading()) {\r\n<div class=\"spinner-grow text-secondary spinner-grow-sm ng0-select-spinner\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n</div>\r\n\r\n <!-- This space is required to prevent layout shift after loading indicator hides. -->\r\n}\r\n\r\n<ng-template cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"_elementRef.nativeElement\"\r\n [cdkConnectedOverlayOpen]=\"open()\"\r\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\r\n [cdkConnectedOverlayPush]=\"false\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n [cdkConnectedOverlayPanelClass]=\"['ng0-select-dropdown']\"\r\n [cdkConnectedOverlayWidth]=\"_elementRef.nativeElement.clientWidth\"\r\n (overlayOutsideClick)=\"this.open.set(false)\"\r\n (attach)=\"_onOverlayAttach();\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n @if(filterable()) {\r\n <div class=\"ng0-select-filter-container\">\r\n <input #filterInput\r\n type=\"text\"\r\n class=\"ng0-select-filter-input\"\r\n [attr.placeholder]=\"filterPlaceholder()\"\r\n (input)=\"_filterValue.set($event.target.value)\"\r\n (keydown)=\"_onFilterKeydown($event)\">\r\n </div>\r\n }\r\n\r\n <ng0-select-list #list\r\n [source]=\"_sourceItems()\"\r\n [multiple]=\"multiple()\"\r\n [formatBy]=\"formatBy()\"\r\n [compareBy]=\"compareBy()\"\r\n [itemClass]=\"itemClass()\"\r\n [showSelectionIndicator]=\"showSelectionIndicator()\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [filterBy]=\"_filterPredicate()\"\r\n focusMode=\"none\"\r\n (mousedown)=\"$event.preventDefault(); $event.stopImmediatePropagation()\"\r\n (itemSelect)=\"_onListSelectionChange($event)\">\r\n </ng0-select-list>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { SelectComponent } from './select.component';\r\n\r\nconst Items = [SelectComponent]\r\n\r\n/**\r\n * Select module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class SelectModule { }\r\n","// export * from './types';\r\nexport * from './select.component';\r\nexport * from './select.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-select.mjs","sources":["../../../projects/ng0/components/select/select.component.ts","../../../projects/ng0/components/select/select.component.html","../../../projects/ng0/components/select/select.module.ts","../../../projects/ng0/components/select/public-api.ts","../../../projects/ng0/components/select/bootkit-ng0-components-select.ts"],"sourcesContent":["import { Component, ElementRef, Renderer2, input, signal, model, HostListener, inject, forwardRef, ViewChild, TemplateRef, ContentChild, ViewEncapsulation, ChangeDetectionStrategy, booleanAttribute, ChangeDetectorRef, effect, computed, untracked, Output, EventEmitter, EnvironmentInjector } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { dataSourceAttribute, DataSource, DataSourceLike, DataRequest } from '@bootkit/ng0/data';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\r\nimport { FlexibleConnectedPositionStrategy, Overlay, OverlayModule, ScrollStrategy, ViewportRuler } from '@angular/cdk/overlay';\r\nimport { Subscription } from 'rxjs';\r\nimport { objectFormatterAttribute, defaultFormatter, LocalizationService } from '@bootkit/ng0/localization';\r\nimport { ListComponent, ListModule, ListItemSelectEvent } from '@bootkit/ng0/components/list';\r\nimport {\r\n CssClassAttribute, equalityComparerAttribute, defaultEqualityComparer, valueWriterAttribute, defaultValueWriter,\r\n IdGeneratorAttribute, defaultFilter, filterPredicateAttribute\r\n} from '@bootkit/ng0/common';\r\n\r\n/**\r\n * Select component that allows users to choose an option from a dropdown list.\r\n */\r\n@Component({\r\n selector: 'ng0-select',\r\n exportAs: 'ng0Select',\r\n templateUrl: './select.component.html',\r\n styleUrl: './select.component.scss',\r\n standalone: true,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [CommonModule, ListModule, OverlayModule],\r\n providers: [{\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => SelectComponent),\r\n multi: true\r\n }],\r\n host: {\r\n '[class.ng0-select-open]': 'open()',\r\n '[class.ng0-select-filterable]': 'filterable()',\r\n '[class.ng0-select-loading]': 'source().isLoading()',\r\n '[attr.disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.aria-disabled]': '_isDisabled() ? \"\" : undefined',\r\n '[attr.tabindex]': '_isDisabled() ? undefined : 0',\r\n }\r\n})\r\nexport class SelectComponent implements ControlValueAccessor {\r\n // private _resizeObserver?: ResizeObserver;\r\n private _viewpoerRulerSubscription?: Subscription;\r\n private _injector = inject(EnvironmentInjector);\r\n @ViewChild('filterInput') private _filterElementRef?: ElementRef;\r\n @ViewChild(ListComponent) private _listComponent?: ListComponent;\r\n private _changeCallback!: (value: any) => void;\r\n private _touchCallback!: () => void;\r\n protected readonly _sourceItems = signal<any[] | undefined>(undefined);\r\n protected readonly _selectedItems = new Set<any>();\r\n protected readonly _isDisabled = signal<boolean>(false);\r\n protected _positionStrategy!: FlexibleConnectedPositionStrategy;\r\n protected _scrollStrategy!: ScrollStrategy;\r\n private readonly _overlay = inject(Overlay);\r\n private readonly _localizationService = inject(LocalizationService);\r\n protected readonly _elementRef = inject(ElementRef<HTMLDivElement>);\r\n protected readonly _filterValue = signal('');\r\n private readonly _renderer = inject(Renderer2);\r\n private readonly _viewportRuler = inject(ViewportRuler);\r\n private readonly _changeDetectorRef = inject(ChangeDetectorRef);\r\n private readonly _value = signal<any>(undefined);\r\n\r\n /**\r\n * Template for rendering each item in the select component.\r\n */\r\n @ContentChild(TemplateRef) public itemTemplate?: TemplateRef<any>;\r\n\r\n /**\r\n * The data source for the select component.\r\n * This can be an array of data, a function that returns an observable of data,\r\n * or an instance of DataSource.\r\n */\r\n public readonly source = input.required<DataSource<any>, DataSourceLike<any>>({\r\n transform: v => dataSourceAttribute(v)\r\n });\r\n\r\n /** \r\n * Indicates whether multi selection is enabled or not.\r\n */\r\n public readonly multiple = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether to show selection indicator (checkbox/radio) next to each item.\r\n * Default is false.\r\n */\r\n public readonly showSelectionIndicator = input(false, {\r\n transform: booleanAttribute\r\n });\r\n\r\n /** \r\n * Indicates whether the dropdown is open or closed.\r\n */\r\n public readonly open = model(false);\r\n\r\n /**\r\n * A comparer to compare items for selection.\r\n */\r\n public readonly compareBy = input(defaultEqualityComparer, {\r\n transform: equalityComparerAttribute\r\n });\r\n\r\n /**\r\n * A fromatter to convert each item to a string for display.\r\n */\r\n public readonly formatBy = input(defaultFormatter, {\r\n transform: objectFormatterAttribute(this._injector)\r\n });\r\n\r\n /**\r\n * Custom value writer to extract the value of any object while writing values.\r\n */\r\n public readonly writeBy = input(defaultValueWriter, {\r\n transform: valueWriterAttribute\r\n });\r\n\r\n /**\r\n * Indicates whether the select component is filterable.\r\n */\r\n public readonly filterable = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Custom filter function to filter items based on a filter value.\r\n * Default checks if the item contains the filter value (case-insensitive).\r\n */\r\n public readonly filterBy = input(defaultFilter, {\r\n transform: filterPredicateAttribute\r\n });\r\n\r\n /**\r\n * Placeholder text for the filter input field.\r\n */\r\n public readonly filterPlaceholder = input<string | undefined>(undefined);\r\n\r\n /**\r\n * CSS class or classes to apply to the items.\r\n */\r\n public readonly itemClass = input(undefined, {\r\n transform: CssClassAttribute\r\n });\r\n\r\n /**\r\n * A function that generates unique ids for each item in the list.\r\n * If set to a function, it will be called with the item as an argument to generate the id.\r\n * If set to undefined, no ids will be generated for the items.\r\n * @default undefined\r\n */\r\n public readonly idGenerator = input(undefined, {\r\n transform: IdGeneratorAttribute\r\n });\r\n\r\n /**\r\n * Event emitted when the selected value changes.\r\n */\r\n @Output() public readonly itemSelect = new EventEmitter<ItemSelectEvent>();\r\n\r\n constructor() {\r\n ['ng0-select', 'form-select'].forEach(c => this._renderer.addClass(this._elementRef.nativeElement, c));\r\n this._scrollStrategy = this._overlay.scrollStrategies.block();\r\n\r\n effect(() => {\r\n let source = this.source();\r\n source.load(new DataRequest()).subscribe(res => {\r\n untracked(() => {\r\n this._sourceItems.set(res.data);\r\n this._findAndSelectItems();\r\n this._changeDetectorRef.markForCheck();\r\n })\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Indicates whether the given value is selected.\r\n * @param item \r\n * @returns \r\n */\r\n public isSelected(value: any): boolean {\r\n return this._selectedItems.has(value);\r\n }\r\n\r\n /**\r\n * Selects the given value.\r\n * @param item \r\n */\r\n public select(value: any): void {\r\n if (this.multiple()) {\r\n if (!this._selectedItems.has(value)) {\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n } else {\r\n this._selectedItems.clear();\r\n this._selectedItems.add(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n }\r\n\r\n /**\r\n * Deselects the given value.\r\n * @param item \r\n */\r\n public deselect(value: any): void {\r\n this._selectedItems.delete(value);\r\n this._updateValue();\r\n this._changeCallback?.(this._value());\r\n }\r\n\r\n /**\r\n * Toggles the selection state of the given value.\r\n * @param item\r\n */\r\n public toggle(value: any): void {\r\n if (this.isSelected(value)) {\r\n this.deselect(value);\r\n } else {\r\n this.select(value);\r\n }\r\n }\r\n\r\n writeValue(obj: any): void {\r\n if (this.multiple()) {\r\n if (obj === null || obj === undefined) {\r\n obj = [];\r\n } else if (!Array.isArray(obj)) {\r\n throw Error('invalid value. Expected an array in multiple selection mode.');\r\n }\r\n }\r\n\r\n this._value.set(obj);\r\n this._findAndSelectItems();\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this._changeCallback = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this._touchCallback = fn;\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean): void {\r\n this._isDisabled.set(isDisabled);\r\n }\r\n\r\n private _findAndSelectItems(): void {\r\n let value = this._value();\r\n let compareBy = this.compareBy();\r\n let sourceItems = this._sourceItems();\r\n if (sourceItems == undefined) {\r\n return;\r\n }\r\n\r\n let findAndSelect = (v: any) => {\r\n let index = sourceItems.findIndex(sourceItem => compareBy(sourceItem, v));\r\n if (index > -1) {\r\n let item = sourceItems.at(index)!;\r\n this._selectedItems.add(item);\r\n }\r\n };\r\n\r\n if (this.multiple()) {\r\n if (Array.isArray(value)) {\r\n (value as any[]).forEach(v => findAndSelect(v));\r\n }\r\n } else {\r\n findAndSelect(value);\r\n }\r\n }\r\n\r\n private _updateValue(): void {\r\n let value: any;\r\n\r\n if (this.multiple()) {\r\n let values: any[] = [];\r\n this._selectedItems.forEach(v => {\r\n values.push(this.writeBy()(v));\r\n });\r\n value = values;\r\n } else {\r\n if (this._selectedItems.size > 0) {\r\n let first = this._selectedItems.values().next().value;\r\n value = this.writeBy()(first);\r\n } else {\r\n value = undefined;\r\n }\r\n }\r\n\r\n this._value.set(value);\r\n }\r\n\r\n protected _onOverlayAttach() {\r\n this._listenToResizeEvents();\r\n\r\n setTimeout(() => {\r\n if (this.filterable()) {\r\n this._filterElementRef?.nativeElement.focus();\r\n }\r\n\r\n this._listComponent!.writeValue(this._value());\r\n // if (this._activeOptionIndex() > -1) {\r\n // this._listComponent?.active(this._activeOptionIndex());\r\n // }\r\n }, 0);\r\n }\r\n\r\n protected _onOverlayDetach() {\r\n this._unlistenFromResizeEvents();\r\n this._elementRef!.nativeElement.focus();\r\n this._filterValue.set('');\r\n this.open.set(false);\r\n }\r\n\r\n protected _onListSelectionChange(e: ListItemSelectEvent) {\r\n let value = e.item.value();\r\n\r\n if (this.multiple()) {\r\n this.toggle(value);\r\n } else {\r\n this.select(value);\r\n }\r\n\r\n this.itemSelect.emit({ value: e.value, select: this });\r\n this._changeDetectorRef.detectChanges();\r\n if (!this.multiple()) {\r\n this.open.set(false);\r\n }\r\n }\r\n\r\n protected _filterPredicate = computed(() => {\r\n let filterValue = this._filterValue();\r\n let filterBy = this.filterBy();\r\n\r\n return (item: any) => filterBy(item, filterValue);\r\n })\r\n\r\n protected _onFilterKeydown(e: KeyboardEvent) {\r\n let keys = ['ArrowDown', 'ArrowUp', 'Enter', 'Home', 'End'];\r\n\r\n if (e.key === 'Tab') {\r\n e.preventDefault();\r\n this.open.set(false);\r\n }\r\n\r\n if (keys.includes(e.key)) {\r\n e.preventDefault();\r\n const newEvent = new KeyboardEvent(e.type, e);\r\n this._listComponent?.elementRef.nativeElement.dispatchEvent(newEvent);\r\n }\r\n }\r\n\r\n private _listenToResizeEvents() {\r\n this._viewportRuler.change().subscribe(x => {\r\n this.open.set(false);\r\n });\r\n\r\n // this._resizeObserver = new ResizeObserver(e => {\r\n // // update overlay size\r\n // // const width = (e[0].target as HTMLDivElement).offsetWidth;\r\n // // this._connectedOverlay.overlayRef.updateSize({ width });\r\n // });\r\n\r\n // this._resizeObserver.observe(this._elementRef.nativeElement);\r\n }\r\n\r\n private _unlistenFromResizeEvents() {\r\n this._viewpoerRulerSubscription?.unsubscribe();\r\n this._viewpoerRulerSubscription = undefined;\r\n\r\n // this._resizeObserver?.disconnect();\r\n // this._resizeObserver = undefined;\r\n }\r\n\r\n @HostListener('keydown', ['$event'])\r\n private _onHostKeydown(e: KeyboardEvent) {\r\n let sourceItems = this._sourceItems()\r\n let itemsCount = sourceItems?.length || 0;\r\n\r\n if (this._isDisabled() || !sourceItems || itemsCount === 0) {\r\n return;\r\n }\r\n\r\n if (this.open()) {\r\n const newEvent = new KeyboardEvent(e.type, e);\r\n this._listComponent?.elementRef.nativeElement.dispatchEvent(newEvent);\r\n return;\r\n } else {\r\n if (e.key == 'Enter') {\r\n this.open.set(true);\r\n e.preventDefault();\r\n return;\r\n }\r\n }\r\n\r\n if (this.multiple()) {\r\n return;\r\n }\r\n\r\n let selectedItemindex: number;\r\n if (this._selectedItems.size == 0) {\r\n selectedItemindex = -1\r\n } else {\r\n let firstValue = this._selectedItems.values().next().value;\r\n selectedItemindex = sourceItems.findIndex(i => i === firstValue);\r\n }\r\n\r\n let newItemIndex = selectedItemindex;\r\n\r\n switch (e.key) {\r\n case 'ArrowDown':\r\n if (selectedItemindex < itemsCount - 1) {\r\n newItemIndex = selectedItemindex + 1;\r\n this.select(sourceItems[newItemIndex]);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'ArrowUp':\r\n if (selectedItemindex > 0) {\r\n newItemIndex = selectedItemindex - 1;\r\n this.select(sourceItems[newItemIndex]);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'Home':\r\n if (itemsCount > 0) {\r\n newItemIndex = 0;\r\n this.select(sourceItems[0]);\r\n }\r\n e.preventDefault();\r\n break;\r\n case 'End':\r\n if (itemsCount > 0) {\r\n newItemIndex = itemsCount - 1;\r\n this.select(sourceItems[newItemIndex]);\r\n }\r\n e.preventDefault();\r\n break;\r\n }\r\n\r\n if (selectedItemindex != newItemIndex!) {\r\n this.itemSelect.emit({ value: sourceItems[newItemIndex], select: this });\r\n this._changeDetectorRef.markForCheck();\r\n }\r\n }\r\n\r\n @HostListener('click', ['$event'])\r\n private _onHostClick(e: MouseEvent) {\r\n if (this._isDisabled() || this.source().isLoading()) {\r\n return;\r\n }\r\n\r\n this.open.update(x => !x);\r\n this._touchCallback?.();\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Event emitted when the selection state of the select component changes by user interaction.\r\n */\r\nexport interface ItemSelectEvent {\r\n /**\r\n * The value of the item that was selected or deselected.\r\n */\r\n value: any;\r\n\r\n /**\r\n * The select component that emitted the event.\r\n */\r\n readonly select: SelectComponent\r\n}\r\n","@if(multiple()) {\r\n\r\n@for(item of _selectedItems.values(); track $index; let last=$last) {\r\n{{formatBy()(item)}}@if(!last) {,}\r\n}\r\n\r\n} @else {\r\n@if(_selectedItems.size > 0) {\r\n{{formatBy()(_selectedItems.values().next().value)}}\r\n}\r\n}\r\n\r\n@if(source().isLoading()) {\r\n<div class=\"spinner-grow text-secondary spinner-grow-sm ng0-select-spinner\" role=\"status\">\r\n <span class=\"visually-hidden\">Loading...</span>\r\n</div>\r\n\r\n <!-- This space is required to prevent layout shift after loading indicator hides. -->\r\n}\r\n\r\n<ng-template cdkConnectedOverlay\r\n [cdkConnectedOverlayOrigin]=\"_elementRef.nativeElement\"\r\n [cdkConnectedOverlayOpen]=\"open()\"\r\n [cdkConnectedOverlayScrollStrategy]=\"_scrollStrategy\"\r\n [cdkConnectedOverlayPush]=\"false\"\r\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\r\n [cdkConnectedOverlayPanelClass]=\"['ng0-select-dropdown']\"\r\n [cdkConnectedOverlayWidth]=\"_elementRef.nativeElement.clientWidth\"\r\n (overlayOutsideClick)=\"this.open.set(false)\"\r\n (attach)=\"_onOverlayAttach();\"\r\n (detach)=\"_onOverlayDetach()\">\r\n\r\n @if(filterable()) {\r\n <div class=\"ng0-select-filter-container\">\r\n <input #filterInput\r\n type=\"text\"\r\n class=\"ng0-select-filter-input\"\r\n [attr.placeholder]=\"filterPlaceholder()\"\r\n (input)=\"_filterValue.set($event.target.value)\"\r\n (keydown)=\"_onFilterKeydown($event)\">\r\n </div>\r\n }\r\n\r\n <ng0-select-list #list\r\n [source]=\"_sourceItems()\"\r\n [multiple]=\"multiple()\"\r\n [formatBy]=\"formatBy()\"\r\n [compareBy]=\"compareBy()\"\r\n [itemClass]=\"itemClass()\"\r\n [showSelectionIndicator]=\"showSelectionIndicator()\"\r\n [itemTemplate]=\"itemTemplate\"\r\n [filterBy]=\"_filterPredicate()\"\r\n focusMode=\"none\"\r\n (mousedown)=\"$event.preventDefault(); $event.stopImmediatePropagation()\"\r\n (itemSelect)=\"_onListSelectionChange($event)\">\r\n </ng0-select-list>\r\n</ng-template>","import { NgModule } from '@angular/core';\r\nimport { SelectComponent } from './select.component';\r\n\r\nconst Items = [SelectComponent]\r\n\r\n/**\r\n * Select module.\r\n */\r\n@NgModule({\r\n imports: Items,\r\n exports: Items\r\n})\r\nexport class SelectModule { }\r\n","// export * from './types';\r\nexport * from './select.component';\r\nexport * from './select.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,31 +1,69 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { input, booleanAttribute, EventEmitter, effect, Output, Component,
|
|
3
|
-
import {
|
|
2
|
+
import { inject, ViewContainerRef, Renderer2, PLATFORM_ID, ElementRef, input, booleanAttribute, numberAttribute, EventEmitter, effect, Output, ChangeDetectionStrategy, ViewEncapsulation, Component, ChangeDetectorRef, ContentChildren, NgModule } from '@angular/core';
|
|
3
|
+
import { isPlatformServer } from '@angular/common';
|
|
4
4
|
import { BackdropComponent } from '@bootkit/ng0/components/backdrop';
|
|
5
|
+
import { throttleTime, Observable } from 'rxjs';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
|
-
*
|
|
8
|
-
* It can be positioned on the left or right side of the screen.
|
|
9
|
-
* It can be opened or closed and can have a backdrop.
|
|
8
|
+
* A sidenav component that displays a sliding navigation panel.
|
|
10
9
|
*/
|
|
11
10
|
class SidenavComponent {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
_renderer;
|
|
15
|
-
|
|
11
|
+
_sidenavContainer = inject(SidenavContainerComponent);
|
|
12
|
+
_vcr = inject(ViewContainerRef);
|
|
13
|
+
_renderer = inject(Renderer2);
|
|
14
|
+
_backdropRef;
|
|
15
|
+
_backdropClickHandlerUnlisten;
|
|
16
|
+
_platformId = inject(PLATFORM_ID);
|
|
17
|
+
_isPlatformServer = isPlatformServer(this._platformId);
|
|
18
|
+
_resizeSubscription;
|
|
19
|
+
_elementRef = inject((ElementRef));
|
|
20
|
+
/**
|
|
21
|
+
* Whether the sidenav is open.
|
|
22
|
+
*/
|
|
23
|
+
open = input(false, ...(ngDevMode ? [{ debugName: "open", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
24
|
+
/**
|
|
25
|
+
* Sidenav mode.
|
|
26
|
+
* Determines how the sidenav is displayed.
|
|
27
|
+
* Can be either 'push' or 'over'.
|
|
28
|
+
* - 'push': The content is pushed aside to make room for the sidenav.
|
|
29
|
+
* - 'over': The sidenav is displayed on top of the content.
|
|
30
|
+
*/
|
|
16
31
|
mode = input('push', ...(ngDevMode ? [{ debugName: "mode" }] : []));
|
|
32
|
+
/**
|
|
33
|
+
* Whether the sidenav has a backdrop.
|
|
34
|
+
* The backdrop is shown only when the sidenav is open and mode is 'over'.
|
|
35
|
+
*/
|
|
17
36
|
hasBackdrop = input(true, ...(ngDevMode ? [{ debugName: "hasBackdrop", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
18
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Sidenav z-index.
|
|
39
|
+
* Determines the stack order of the sidenav.
|
|
40
|
+
*/
|
|
41
|
+
zIndex = input(undefined, ...(ngDevMode ? [{ debugName: "zIndex", transform: numberAttribute }] : [{ transform: numberAttribute }]));
|
|
42
|
+
/**
|
|
43
|
+
* Sidenav position.
|
|
44
|
+
* Determines the position of the sidenav.
|
|
45
|
+
* Can be either 'start', 'end', 'top', or 'bottom'.
|
|
46
|
+
*/
|
|
19
47
|
position = input('start', ...(ngDevMode ? [{ debugName: "position" }] : []));
|
|
20
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Sidenav size.
|
|
50
|
+
* Determines the size of the sidenav.
|
|
51
|
+
* Can be either 'small', 'medium', 'large', 'full', or a specific value.
|
|
52
|
+
* If a specific value is provided, it will be used as the width/height of the sidenav.
|
|
53
|
+
* @example
|
|
54
|
+
* - 100, '300px', '50%', '50vh', 'small', 'full', ...
|
|
55
|
+
*/
|
|
56
|
+
size = input(...(ngDevMode ? [undefined, { debugName: "size" }] : []));
|
|
57
|
+
/**
|
|
58
|
+
* Whether the sidenav is fixed in the viewport.
|
|
59
|
+
*/
|
|
21
60
|
fixedInViewport = input(false, ...(ngDevMode ? [{ debugName: "fixedInViewport", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));
|
|
61
|
+
elmentRef = inject(ElementRef);
|
|
62
|
+
/**
|
|
63
|
+
* Emits when the backdrop is clicked.
|
|
64
|
+
*/
|
|
22
65
|
backdropClick = new EventEmitter();
|
|
23
|
-
|
|
24
|
-
_backdropClickHandlerUnlisten;
|
|
25
|
-
constructor(_vcr, _elmentRef, _renderer) {
|
|
26
|
-
this._vcr = _vcr;
|
|
27
|
-
this._elmentRef = _elmentRef;
|
|
28
|
-
this._renderer = _renderer;
|
|
66
|
+
constructor() {
|
|
29
67
|
effect(() => {
|
|
30
68
|
var hasBackdrop = this.hasBackdrop();
|
|
31
69
|
var mode = this.mode();
|
|
@@ -37,8 +75,35 @@ class SidenavComponent {
|
|
|
37
75
|
this._destroyBackdrop();
|
|
38
76
|
}
|
|
39
77
|
});
|
|
78
|
+
if (!this._isPlatformServer) {
|
|
79
|
+
this._observeResize()
|
|
80
|
+
.pipe(throttleTime(100, undefined, { leading: true, trailing: true }))
|
|
81
|
+
.subscribe(entries => {
|
|
82
|
+
this._sidenavContainer.changeDetectorRef.markForCheck();
|
|
83
|
+
// console.log('Resized to:', entries[0].contentRect.width, entries[0].contentRect.height);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
_getFixedSize() {
|
|
88
|
+
let size = this.size();
|
|
89
|
+
let t = typeof size;
|
|
90
|
+
if (t == 'string') {
|
|
91
|
+
return ['small', 'medium', 'large', 'full'].includes(size) ? undefined : size;
|
|
92
|
+
}
|
|
93
|
+
else if (t == 'number') {
|
|
94
|
+
return `${size}px`;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
40
99
|
}
|
|
41
|
-
|
|
100
|
+
;
|
|
101
|
+
_observeResize() {
|
|
102
|
+
return new Observable(observer => {
|
|
103
|
+
const resizeObserver = new ResizeObserver(entries => observer.next(entries));
|
|
104
|
+
resizeObserver.observe(this._elementRef.nativeElement);
|
|
105
|
+
return () => resizeObserver.disconnect();
|
|
106
|
+
});
|
|
42
107
|
}
|
|
43
108
|
_createBackdrop() {
|
|
44
109
|
this._backdropRef = this._vcr.createComponent(BackdropComponent);
|
|
@@ -51,7 +116,7 @@ class SidenavComponent {
|
|
|
51
116
|
this.backdropClick.emit(e);
|
|
52
117
|
});
|
|
53
118
|
// Move backdrop element before Host element
|
|
54
|
-
const hostElm = this.
|
|
119
|
+
const hostElm = this.elmentRef.nativeElement;
|
|
55
120
|
const parentElm = hostElm.parentNode;
|
|
56
121
|
this._renderer.insertBefore(parentElm, backdropElm, hostElm);
|
|
57
122
|
}
|
|
@@ -63,84 +128,147 @@ class SidenavComponent {
|
|
|
63
128
|
}
|
|
64
129
|
ngOnDestroy() {
|
|
65
130
|
this._destroyBackdrop();
|
|
131
|
+
this._resizeSubscription?.unsubscribe();
|
|
66
132
|
}
|
|
67
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavComponent, deps: [
|
|
68
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.9", type: SidenavComponent, isStandalone: true, selector: "ng0-sidenav", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null },
|
|
133
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
134
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "20.3.9", type: SidenavComponent, isStandalone: true, selector: "ng0-sidenav", inputs: { open: { classPropertyName: "open", publicName: "open", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, hasBackdrop: { classPropertyName: "hasBackdrop", publicName: "hasBackdrop", isSignal: true, isRequired: false, transformFunction: null }, zIndex: { classPropertyName: "zIndex", publicName: "zIndex", isSignal: true, isRequired: false, transformFunction: null }, position: { classPropertyName: "position", publicName: "position", isSignal: true, isRequired: false, transformFunction: null }, size: { classPropertyName: "size", publicName: "size", isSignal: true, isRequired: false, transformFunction: null }, fixedInViewport: { classPropertyName: "fixedInViewport", publicName: "fixedInViewport", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.width": "position() == 'start' || position() == 'end' ? _getFixedSize() : undefined", "style.height": "undefined", "style.z-index": "zIndex()", "class.ng0-sidenav-start": "position() == 'start'", "class.ng0-sidenav-end": "position() == 'end'", "class.ng0-sidenav-top": "position() == 'top'", "class.ng0-sidenav-bottom": "position() == 'bottom'", "class.ng0-sidenav-open": "open()", "class.ng0-sidenav-small": "size() == 'small'", "class.ng0-sidenav-medium": "size() == 'medium'", "class.ng0-sidenav-large": "size() == 'large'", "class.ng0-sidenav-full": "size() == 'full'", "class.ng0-sidenav-fixed": "fixedInViewport()" } }, ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, styles: ["ng0-sidenav{display:block;position:absolute;will-change:transform,width,height;pointer-events:none}.ng0-sidenav-transition ng0-sidenav{transition:transform var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),width var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),height var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}.ng0-sidenav-fixed{position:fixed!important}.ng0-sidenav-top{left:0;right:0;top:0;transform:translateY(-100%)}.ng0-sidenav-top.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-bottom{left:0;right:0;bottom:0;transform:translateY(100%)}.ng0-sidenav-bottom.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-start{top:0;bottom:0;inset-inline-start:0;transform:translate(-100%)}:dir(rtl) .ng0-sidenav-start,body[dir=rtl] .ng0-sidenav-start{transform:translate(100%)}.ng0-sidenav-start.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-end{top:0;bottom:0;inset-inline-end:0;transform:translate(100%)}:dir(rtl) .ng0-sidenav-end,body[dir=rtl] .ng0-sidenav-end{transform:translate(-100%)}.ng0-sidenav-end.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-small.ng0-sidenav-start,.ng0-sidenav-small.ng0-sidenav-end{width:min(350px,95%)}.ng0-sidenav-small.ng0-sidenav-top,.ng0-sidenav-small.ng0-sidenav-bottom{height:min(350px,95%)}@media (min-width: 0){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(700px,95%)}}@media (min-height: 0){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-width: 0){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(700px,95%)}}@media (min-width: 992px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(900px,95%)}}@media (min-width: 1200px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(1200px,95%)}}@media (min-height: 0){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-height: 992px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(900px,95%)}}@media (min-height: 1200px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(1200px,95%)}}.ng0-sidenav-full{width:100%;height:100%}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
69
135
|
}
|
|
70
136
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavComponent, decorators: [{
|
|
71
137
|
type: Component,
|
|
72
|
-
args: [{ selector: 'ng0-sidenav',
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
"[style.width]": "sidenavWidth() + 'px'",
|
|
138
|
+
args: [{ selector: 'ng0-sidenav', template: `<ng-content></ng-content>`, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
|
|
139
|
+
"[style.width]": "position() == 'start' || position() == 'end' ? _getFixedSize() : undefined",
|
|
140
|
+
"[style.height]": "undefined",
|
|
76
141
|
"[style.z-index]": "zIndex()",
|
|
77
142
|
"[class.ng0-sidenav-start]": "position() == 'start'",
|
|
78
143
|
"[class.ng0-sidenav-end]": "position() == 'end'",
|
|
144
|
+
"[class.ng0-sidenav-top]": "position() == 'top'",
|
|
145
|
+
"[class.ng0-sidenav-bottom]": "position() == 'bottom'",
|
|
79
146
|
"[class.ng0-sidenav-open]": "open()",
|
|
80
|
-
"[class.ng0-sidenav-
|
|
147
|
+
"[class.ng0-sidenav-small]": "size() == 'small'",
|
|
148
|
+
"[class.ng0-sidenav-medium]": "size() == 'medium'",
|
|
149
|
+
"[class.ng0-sidenav-large]": "size() == 'large'",
|
|
150
|
+
"[class.ng0-sidenav-full]": "size() == 'full'",
|
|
81
151
|
"[class.ng0-sidenav-fixed]": "fixedInViewport()",
|
|
82
|
-
},
|
|
83
|
-
}], ctorParameters: () => [
|
|
152
|
+
}, styles: ["ng0-sidenav{display:block;position:absolute;will-change:transform,width,height;pointer-events:none}.ng0-sidenav-transition ng0-sidenav{transition:transform var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),width var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function),height var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}.ng0-sidenav-fixed{position:fixed!important}.ng0-sidenav-top{left:0;right:0;top:0;transform:translateY(-100%)}.ng0-sidenav-top.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-bottom{left:0;right:0;bottom:0;transform:translateY(100%)}.ng0-sidenav-bottom.ng0-sidenav-open{transform:translateY(0)!important}.ng0-sidenav-start{top:0;bottom:0;inset-inline-start:0;transform:translate(-100%)}:dir(rtl) .ng0-sidenav-start,body[dir=rtl] .ng0-sidenav-start{transform:translate(100%)}.ng0-sidenav-start.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-end{top:0;bottom:0;inset-inline-end:0;transform:translate(100%)}:dir(rtl) .ng0-sidenav-end,body[dir=rtl] .ng0-sidenav-end{transform:translate(-100%)}.ng0-sidenav-end.ng0-sidenav-open{transform:translate(0)!important}.ng0-sidenav-small.ng0-sidenav-start,.ng0-sidenav-small.ng0-sidenav-end{width:min(350px,95%)}.ng0-sidenav-small.ng0-sidenav-top,.ng0-sidenav-small.ng0-sidenav-bottom{height:min(350px,95%)}@media (min-width: 0){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-medium.ng0-sidenav-start,.ng0-sidenav-medium.ng0-sidenav-end{width:min(700px,95%)}}@media (min-height: 0){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-medium.ng0-sidenav-top,.ng0-sidenav-medium.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-width: 0){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(350px,95%)}}@media (min-width: 576px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(500px,95%)}}@media (min-width: 768px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(700px,95%)}}@media (min-width: 992px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(900px,95%)}}@media (min-width: 1200px){.ng0-sidenav-large.ng0-sidenav-start,.ng0-sidenav-large.ng0-sidenav-end{width:min(1200px,95%)}}@media (min-height: 0){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(350px,95%)}}@media (min-height: 576px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(500px,95%)}}@media (min-height: 768px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(700px,95%)}}@media (min-height: 992px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(900px,95%)}}@media (min-height: 1200px){.ng0-sidenav-large.ng0-sidenav-top,.ng0-sidenav-large.ng0-sidenav-bottom{height:min(1200px,95%)}}.ng0-sidenav-full{width:100%;height:100%}\n"] }]
|
|
153
|
+
}], ctorParameters: () => [], propDecorators: { open: [{ type: i0.Input, args: [{ isSignal: true, alias: "open", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], hasBackdrop: [{ type: i0.Input, args: [{ isSignal: true, alias: "hasBackdrop", required: false }] }], zIndex: [{ type: i0.Input, args: [{ isSignal: true, alias: "zIndex", required: false }] }], position: [{ type: i0.Input, args: [{ isSignal: true, alias: "position", required: false }] }], size: [{ type: i0.Input, args: [{ isSignal: true, alias: "size", required: false }] }], fixedInViewport: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixedInViewport", required: false }] }], backdropClick: [{
|
|
84
154
|
type: Output
|
|
85
155
|
}] } });
|
|
86
156
|
|
|
87
157
|
/**
|
|
88
|
-
*
|
|
158
|
+
* Sidenav container component
|
|
89
159
|
*/
|
|
90
160
|
class SidenavContainerComponent {
|
|
91
|
-
|
|
161
|
+
_platformId = inject(PLATFORM_ID);
|
|
162
|
+
_isPlatformServer = isPlatformServer(this._platformId);
|
|
163
|
+
_isTransitionEnabled = false;
|
|
92
164
|
_sidenavs;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
165
|
+
/**
|
|
166
|
+
* Emitted when the backdrop is clicked.
|
|
167
|
+
*/
|
|
168
|
+
backdropClick = new EventEmitter();
|
|
169
|
+
changeDetectorRef = inject(ChangeDetectorRef);
|
|
170
|
+
_getPadding(position) {
|
|
171
|
+
let openSidenavs = this._sidenavs.filter(x => x.open() && x.mode() == 'push');
|
|
172
|
+
let filteredSidenavs = openSidenavs.filter(x => x.position() == position);
|
|
173
|
+
if (filteredSidenavs.length == 0)
|
|
174
|
+
return undefined;
|
|
175
|
+
if (this._isPlatformServer) {
|
|
176
|
+
let hasDynamicSidenavs = openSidenavs.some(x => x._getFixedSize() == undefined);
|
|
177
|
+
if (hasDynamicSidenavs) {
|
|
178
|
+
// we cannot compute padding on the server
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
let fixedSizes = filteredSidenavs.map(x => x._getFixedSize());
|
|
183
|
+
return fixedSizes.length > 1 ? `max(${fixedSizes.join(', ')})` : fixedSizes[0];
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
else {
|
|
187
|
+
let horizontal = position == 'start' || position == 'end';
|
|
188
|
+
let sizes = filteredSidenavs.map(x => horizontal ? x.elmentRef.nativeElement.clientWidth : x.elmentRef.nativeElement.clientHeight);
|
|
189
|
+
return `${Math.max(...sizes)}px`;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
;
|
|
193
|
+
ngAfterViewInit() {
|
|
194
|
+
if (!this._isPlatformServer) {
|
|
195
|
+
setTimeout(() => this._isTransitionEnabled = true);
|
|
196
|
+
}
|
|
102
197
|
}
|
|
103
|
-
|
|
198
|
+
// In some modes the content is pushed based on the width of the opened sidenavs, however on
|
|
199
|
+
// the server we can't measure the sidenav-container padding, so the padding is always zero. This can cause the
|
|
200
|
+
// content to jump around when it's rendered on the server and hydrated on the client.
|
|
201
|
+
// We avoid it by hiding the content on the initial render and then showing it once the sidenav
|
|
202
|
+
// has been measured on the client.
|
|
203
|
+
_canComputePadding() {
|
|
204
|
+
if (this._isPlatformServer) {
|
|
205
|
+
let hasDynamicSizenavs = this._sidenavs.some(x => x.open() && x.mode() == 'push' && x._getFixedSize() == undefined);
|
|
206
|
+
return !hasDynamicSizenavs;
|
|
207
|
+
}
|
|
208
|
+
return true;
|
|
104
209
|
}
|
|
105
210
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContainerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
106
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContainerComponent, isStandalone: true, selector: "ng0-sidenav-container", outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.padding-inline-start": "
|
|
211
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContainerComponent, isStandalone: true, selector: "ng0-sidenav-container", outputs: { backdropClick: "backdropClick" }, host: { properties: { "style.padding-inline-start": "_getPadding('start')", "style.padding-inline-end": "_getPadding('end')", "style.padding-top": "_getPadding('top')", "style.padding-bottom": "_getPadding('bottom')", "class.ng0-sidenav-transition": "_isTransitionEnabled", "class.ng0-sidenav-content-hidden": "!_canComputePadding()" } }, queries: [{ propertyName: "_sidenavs", predicate: SidenavComponent }], ngImport: i0, template: "<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>", styles: [":root{--ng0-sidenav-transition-duration: .1s;--ng0-sidenav-transition-function: ease-in-out}ng0-sidenav-container{position:relative;display:block;overflow:hidden;will-change:padding}ng0-sidenav-container.ng0-sidenav-transition{transition:padding var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}ng0-sidenav-container.ng0-sidenav-content-hidden ng0-sidenav-content{opacity:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
107
212
|
}
|
|
108
213
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContainerComponent, decorators: [{
|
|
109
214
|
type: Component,
|
|
110
|
-
args: [{ selector: 'ng0-sidenav-container',
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
"[style.padding-
|
|
114
|
-
"[style.padding-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
215
|
+
args: [{ selector: 'ng0-sidenav-container', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, host: {
|
|
216
|
+
"[style.padding-inline-start]": "_getPadding('start')",
|
|
217
|
+
"[style.padding-inline-end]": "_getPadding('end')",
|
|
218
|
+
"[style.padding-top]": "_getPadding('top')",
|
|
219
|
+
"[style.padding-bottom]": "_getPadding('bottom')",
|
|
220
|
+
"[class.ng0-sidenav-transition]": "_isTransitionEnabled",
|
|
221
|
+
"[class.ng0-sidenav-content-hidden]": "!_canComputePadding()",
|
|
222
|
+
}, template: "<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>", styles: [":root{--ng0-sidenav-transition-duration: .1s;--ng0-sidenav-transition-function: ease-in-out}ng0-sidenav-container{position:relative;display:block;overflow:hidden;will-change:padding}ng0-sidenav-container.ng0-sidenav-transition{transition:padding var(--ng0-sidenav-transition-duration) var(--ng0-sidenav-transition-function)}ng0-sidenav-container.ng0-sidenav-content-hidden ng0-sidenav-content{opacity:0}\n"] }]
|
|
223
|
+
}], propDecorators: { _sidenavs: [{
|
|
119
224
|
type: ContentChildren,
|
|
120
225
|
args: [SidenavComponent]
|
|
226
|
+
}], backdropClick: [{
|
|
227
|
+
type: Output
|
|
121
228
|
}] } });
|
|
122
229
|
|
|
123
230
|
/**
|
|
124
|
-
*
|
|
231
|
+
* Sidenav content component
|
|
232
|
+
*/
|
|
233
|
+
class SidenavContentComponent {
|
|
234
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
235
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.9", type: SidenavContentComponent, isStandalone: true, selector: "ng0-sidenav-content", ngImport: i0, template: `<ng-content></ng-content>`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
236
|
+
}
|
|
237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavContentComponent, decorators: [{
|
|
238
|
+
type: Component,
|
|
239
|
+
args: [{
|
|
240
|
+
selector: 'ng0-sidenav-content',
|
|
241
|
+
template: `<ng-content></ng-content>`,
|
|
242
|
+
encapsulation: ViewEncapsulation.None,
|
|
243
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
244
|
+
standalone: true,
|
|
245
|
+
}]
|
|
246
|
+
}] });
|
|
247
|
+
|
|
248
|
+
/**
|
|
249
|
+
* Sidenav module
|
|
125
250
|
*/
|
|
126
251
|
class SidenavModule {
|
|
127
252
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
128
253
|
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.9", ngImport: i0, type: SidenavModule, imports: [SidenavContainerComponent,
|
|
129
|
-
SidenavComponent
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
254
|
+
SidenavComponent,
|
|
255
|
+
SidenavContentComponent], exports: [SidenavContainerComponent,
|
|
256
|
+
SidenavComponent,
|
|
257
|
+
SidenavContentComponent] });
|
|
258
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavModule });
|
|
133
259
|
}
|
|
134
260
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SidenavModule, decorators: [{
|
|
135
261
|
type: NgModule,
|
|
136
262
|
args: [{
|
|
137
263
|
imports: [
|
|
138
264
|
SidenavContainerComponent,
|
|
139
|
-
SidenavComponent
|
|
265
|
+
SidenavComponent,
|
|
266
|
+
SidenavContentComponent
|
|
140
267
|
],
|
|
141
268
|
exports: [
|
|
142
269
|
SidenavContainerComponent,
|
|
143
|
-
SidenavComponent
|
|
270
|
+
SidenavComponent,
|
|
271
|
+
SidenavContentComponent
|
|
144
272
|
]
|
|
145
273
|
}]
|
|
146
274
|
}] });
|
|
@@ -149,5 +277,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImpor
|
|
|
149
277
|
* Generated bundle index. Do not edit.
|
|
150
278
|
*/
|
|
151
279
|
|
|
152
|
-
export { SidenavComponent, SidenavContainerComponent, SidenavModule };
|
|
280
|
+
export { SidenavComponent, SidenavContainerComponent, SidenavContentComponent, SidenavModule };
|
|
153
281
|
//# sourceMappingURL=bootkit-ng0-components-sidenav.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootkit-ng0-components-sidenav.mjs","sources":["../../../projects/ng0/components/sidenav/sidenav.component.ts","../../../projects/ng0/components/sidenav/sidenav.component.html","../../../projects/ng0/components/sidenav/sidenav-container.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.html","../../../projects/ng0/components/sidenav/sidenav.module.ts","../../../projects/ng0/components/sidenav/bootkit-ng0-components-sidenav.ts"],"sourcesContent":["import { booleanAttribute, Component, ComponentRef, effect, ElementRef, EventEmitter, input, OnDestroy, OnInit, Output, Renderer2, ViewContainerRef } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SidenavMode, SidenavPosition } from './types';\r\nimport { BackdropComponent } from '@bootkit/ng0/components/backdrop';\r\n\r\n/**\r\n * This component is used to display a sidenav panel.\r\n * It can be positioned on the left or right side of the screen.\r\n * It can be opened or closed and can have a backdrop.\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav',\r\n templateUrl: './sidenav.component.html',\r\n styleUrls: ['./sidenav.component.scss'],\r\n providers: [],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ],\r\n host: {\r\n \"[style.width]\": \"sidenavWidth() + 'px'\",\r\n \"[style.z-index]\": \"zIndex()\",\r\n \"[class.ng0-sidenav-start]\": \"position() == 'start'\",\r\n \"[class.ng0-sidenav-end]\": \"position() == 'end'\",\r\n \"[class.ng0-sidenav-open]\": \"open()\",\r\n \"[class.ng0-sidenav-show-backdrop]\": \"true\",\r\n \"[class.ng0-sidenav-fixed]\": \"fixedInViewport()\",\r\n }\r\n})\r\nexport class SidenavComponent implements OnInit, OnDestroy {\r\n public open = input(true, { transform: booleanAttribute });\r\n public mode = input<SidenavMode>('push');\r\n public hasBackdrop = input(true, { transform: booleanAttribute });\r\n public zIndex = input<number>();\r\n public position = input<SidenavPosition>('start');\r\n public sidenavWidth = input.required<number>();\r\n public fixedInViewport = input(false, { transform: booleanAttribute });\r\n @Output() public backdropClick = new EventEmitter<MouseEvent>();\r\n private _backdropRef?: ComponentRef<BackdropComponent>;\r\n private _backdropClickHandlerUnlisten?: () => void;\r\n\r\n\r\n constructor(private _vcr: ViewContainerRef, private _elmentRef: ElementRef, private _renderer: Renderer2) {\r\n effect(() => {\r\n var hasBackdrop = this.hasBackdrop();\r\n var mode = this.mode();\r\n var open = this.open();\r\n\r\n if (mode == 'over' && hasBackdrop && open) {\r\n this._createBackdrop();\r\n } else {\r\n this._destroyBackdrop();\r\n }\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n }\r\n\r\n private _createBackdrop() {\r\n this._backdropRef = this._vcr.createComponent(BackdropComponent);\r\n const backdropElm = this._backdropRef.location.nativeElement;\r\n this._backdropRef.instance.fixed.set(this.fixedInViewport());\r\n if (this.zIndex() != undefined) {\r\n this._renderer.setStyle(backdropElm, 'z-index', this.zIndex());\r\n }\r\n this._backdropClickHandlerUnlisten = this._renderer.listen(backdropElm, 'click', (e) => {\r\n this.backdropClick.emit(e);\r\n });\r\n\r\n // Move backdrop element before Host element\r\n const hostElm = this._elmentRef.nativeElement;\r\n const parentElm = hostElm.parentNode;\r\n this._renderer.insertBefore(parentElm, backdropElm, hostElm);\r\n }\r\n\r\n private _destroyBackdrop() {\r\n this._backdropClickHandlerUnlisten?.();\r\n this._backdropRef?.destroy();\r\n\r\n this._backdropClickHandlerUnlisten = undefined;\r\n this._backdropRef = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyBackdrop();\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n\r\n<!-- @if(open() && mode() == 'over' && hasBackdrop()) {\r\n<div class=\"ng0-sidenav-backdrop\"></div>\r\n} -->","import { Component, computed, ContentChildren, EventEmitter, HostBinding, OnInit, Output, QueryList } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SidenavComponent } from './sidenav.component';\r\n\r\n/**\r\n * This component is used to contain multiple sidenav components and manage their layout.\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-container',\r\n templateUrl: './sidenav-container.component.html',\r\n styleUrls: ['./sidenav-container.component.scss'],\r\n providers: [],\r\n standalone: true,\r\n imports: [\r\n CommonModule,\r\n ],\r\n host: {\r\n \"[style.padding-inline-start]\": \"_contentPaddingStart()\",\r\n \"[style.padding-inline-end]\": \"_contentPaddingEnd()\",\r\n }\r\n})\r\nexport class SidenavContainerComponent implements OnInit {\r\n\r\n @Output() backdropClick = new EventEmitter();\r\n @ContentChildren(SidenavComponent) protected _sidenavs!: QueryList<SidenavComponent>;\r\n\r\n protected _contentPaddingStart = computed(() => {\r\n let widths = this._sidenavs.filter(x => x.open() && x.position() == 'start' && x.mode() == 'push').map(x => x.sidenavWidth());\r\n return widths.length == 0 ? '0' : `${Math.max(...widths)}px`;\r\n });\r\n\r\n protected _contentPaddingEnd = computed(() => {\r\n let widths = this._sidenavs.filter(x => x.open() && x.position() == 'end' && x.mode() == 'push').map(x => x.sidenavWidth());\r\n return widths.length == 0 ? '0' : `${Math.max(...widths)}px`;\r\n });\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n\r\n }\r\n}\r\n","<ng-content></ng-content>\r\n","import { NgModule } from '@angular/core';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { SidenavComponent } from './sidenav.component';\r\n\r\n/**\r\n * This module is used to contain the sidenav components and provide their functionality.\r\n */\r\n@NgModule({\r\n imports: [\r\n SidenavContainerComponent,\r\n SidenavComponent\r\n ],\r\n exports: [\r\n SidenavContainerComponent,\r\n SidenavComponent\r\n ]\r\n})\r\nexport class SidenavModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"bootkit-ng0-components-sidenav.mjs","sources":["../../../projects/ng0/components/sidenav/sidenav.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.ts","../../../projects/ng0/components/sidenav/sidenav-container.component.html","../../../projects/ng0/components/sidenav/sidenav-content.component.ts","../../../projects/ng0/components/sidenav/sidenav.module.ts","../../../projects/ng0/components/sidenav/bootkit-ng0-components-sidenav.ts"],"sourcesContent":["import { booleanAttribute, numberAttribute, Component, ComponentRef, effect, ElementRef, EventEmitter, input, OnDestroy, Output, Renderer2, ViewContainerRef, inject, ChangeDetectionStrategy, ViewEncapsulation, PLATFORM_ID } from '@angular/core';\r\nimport { SidenavMode, SidenavPosition } from './types';\r\nimport { BackdropComponent } from '@bootkit/ng0/components/backdrop';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { Observable, Subscription, throttleTime } from 'rxjs';\r\n\r\n/**\r\n * A sidenav component that displays a sliding navigation panel.\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav',\r\n template: `<ng-content></ng-content>`,\r\n styleUrls: ['./sidenav.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n host: {\r\n \"[style.width]\": \"position() == 'start' || position() == 'end' ? _getFixedSize() : undefined\",\r\n \"[style.height]\": \"undefined\",\r\n \"[style.z-index]\": \"zIndex()\",\r\n \"[class.ng0-sidenav-start]\": \"position() == 'start'\",\r\n \"[class.ng0-sidenav-end]\": \"position() == 'end'\",\r\n \"[class.ng0-sidenav-top]\": \"position() == 'top'\",\r\n \"[class.ng0-sidenav-bottom]\": \"position() == 'bottom'\",\r\n \"[class.ng0-sidenav-open]\": \"open()\",\r\n \"[class.ng0-sidenav-small]\": \"size() == 'small'\",\r\n \"[class.ng0-sidenav-medium]\": \"size() == 'medium'\",\r\n \"[class.ng0-sidenav-large]\": \"size() == 'large'\",\r\n \"[class.ng0-sidenav-full]\": \"size() == 'full'\",\r\n \"[class.ng0-sidenav-fixed]\": \"fixedInViewport()\",\r\n }\r\n})\r\nexport class SidenavComponent implements OnDestroy {\r\n private _sidenavContainer = inject(SidenavContainerComponent);\r\n private _vcr = inject(ViewContainerRef);\r\n private _renderer = inject(Renderer2);\r\n private _backdropRef?: ComponentRef<BackdropComponent>;\r\n private _backdropClickHandlerUnlisten?: () => void;\r\n private _platformId = inject(PLATFORM_ID);\r\n protected _isPlatformServer = isPlatformServer(this._platformId)\r\n private _resizeSubscription?: Subscription;\r\n private readonly _elementRef = inject(ElementRef<HTMLElement>);\r\n\r\n /**\r\n * Whether the sidenav is open.\r\n */\r\n public open = input(false, { transform: booleanAttribute });\r\n\r\n /**\r\n * Sidenav mode.\r\n * Determines how the sidenav is displayed.\r\n * Can be either 'push' or 'over'.\r\n * - 'push': The content is pushed aside to make room for the sidenav.\r\n * - 'over': The sidenav is displayed on top of the content.\r\n */\r\n public mode = input<SidenavMode>('push');\r\n\r\n /**\r\n * Whether the sidenav has a backdrop.\r\n * The backdrop is shown only when the sidenav is open and mode is 'over'.\r\n */\r\n public hasBackdrop = input(true, { transform: booleanAttribute });\r\n\r\n /**\r\n * Sidenav z-index.\r\n * Determines the stack order of the sidenav.\r\n */\r\n public zIndex = input(undefined, { transform: numberAttribute });\r\n\r\n /**\r\n * Sidenav position.\r\n * Determines the position of the sidenav.\r\n * Can be either 'start', 'end', 'top', or 'bottom'.\r\n */\r\n public position = input<SidenavPosition>('start');\r\n\r\n /**\r\n * Sidenav size.\r\n * Determines the size of the sidenav. \r\n * Can be either 'small', 'medium', 'large', 'full', or a specific value. \r\n * If a specific value is provided, it will be used as the width/height of the sidenav.\r\n * @example\r\n * - 100, '300px', '50%', '50vh', 'small', 'full', ...\r\n */\r\n public size = input<number | string | 'small' | 'medium' | 'large' | 'full' | undefined>();\r\n\r\n /**\r\n * Whether the sidenav is fixed in the viewport.\r\n */\r\n public fixedInViewport = input(false, { transform: booleanAttribute });\r\n\r\n public elmentRef = inject(ElementRef);\r\n\r\n /**\r\n * Emits when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter<MouseEvent>();\r\n\r\n constructor() {\r\n effect(() => {\r\n var hasBackdrop = this.hasBackdrop();\r\n var mode = this.mode();\r\n var open = this.open();\r\n\r\n if (mode == 'over' && hasBackdrop && open) {\r\n this._createBackdrop();\r\n } else {\r\n this._destroyBackdrop();\r\n }\r\n });\r\n\r\n if (!this._isPlatformServer) {\r\n this._observeResize()\r\n .pipe(throttleTime(100, undefined, { leading: true, trailing: true }))\r\n .subscribe(entries => {\r\n this._sidenavContainer.changeDetectorRef.markForCheck();\r\n // console.log('Resized to:', entries[0].contentRect.width, entries[0].contentRect.height);\r\n });\r\n }\r\n }\r\n\r\n _getFixedSize(): string | undefined {\r\n let size = this.size();\r\n let t = typeof size;\r\n if (t == 'string') {\r\n return ['small', 'medium', 'large', 'full'].includes(size as string) ? undefined : size as string;\r\n } else if (t == 'number') {\r\n return `${size}px`;\r\n } else {\r\n return undefined;\r\n }\r\n };\r\n\r\n private _observeResize(): Observable<ResizeObserverEntry[]> {\r\n return new Observable(observer => {\r\n const resizeObserver = new ResizeObserver(entries => observer.next(entries));\r\n resizeObserver.observe(this._elementRef.nativeElement);\r\n return () => resizeObserver.disconnect();\r\n });\r\n }\r\n\r\n private _createBackdrop() {\r\n this._backdropRef = this._vcr.createComponent(BackdropComponent);\r\n const backdropElm = this._backdropRef.location.nativeElement;\r\n this._backdropRef.instance.fixed.set(this.fixedInViewport());\r\n if (this.zIndex() != undefined) {\r\n this._renderer.setStyle(backdropElm, 'z-index', this.zIndex());\r\n }\r\n this._backdropClickHandlerUnlisten = this._renderer.listen(backdropElm, 'click', (e) => {\r\n this.backdropClick.emit(e);\r\n });\r\n\r\n // Move backdrop element before Host element\r\n const hostElm = this.elmentRef.nativeElement;\r\n const parentElm = hostElm.parentNode;\r\n this._renderer.insertBefore(parentElm, backdropElm, hostElm);\r\n }\r\n\r\n private _destroyBackdrop() {\r\n this._backdropClickHandlerUnlisten?.();\r\n this._backdropRef?.destroy();\r\n\r\n this._backdropClickHandlerUnlisten = undefined;\r\n this._backdropRef = undefined;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._destroyBackdrop();\r\n this._resizeSubscription?.unsubscribe();\r\n }\r\n}\r\n","import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, EventEmitter, inject, Output, PLATFORM_ID, QueryList, ViewEncapsulation } from '@angular/core';\r\nimport { isPlatformServer } from '@angular/common';\r\nimport { SidenavComponent } from './sidenav.component';\r\nimport { SidenavPosition } from './types';\r\n\r\n/**\r\n * Sidenav container component\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-container',\r\n templateUrl: './sidenav-container.component.html',\r\n styleUrls: ['./sidenav-container.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n host: {\r\n \"[style.padding-inline-start]\": \"_getPadding('start')\",\r\n \"[style.padding-inline-end]\": \"_getPadding('end')\",\r\n \"[style.padding-top]\": \"_getPadding('top')\",\r\n \"[style.padding-bottom]\": \"_getPadding('bottom')\",\r\n \"[class.ng0-sidenav-transition]\": \"_isTransitionEnabled\",\r\n \"[class.ng0-sidenav-content-hidden]\": \"!_canComputePadding()\",\r\n }\r\n})\r\nexport class SidenavContainerComponent implements AfterViewInit {\r\n private _platformId = inject(PLATFORM_ID);\r\n protected _isPlatformServer = isPlatformServer(this._platformId)\r\n protected _isTransitionEnabled = false;\r\n @ContentChildren(SidenavComponent) protected _sidenavs!: QueryList<SidenavComponent>;\r\n\r\n /**\r\n * Emitted when the backdrop is clicked.\r\n */\r\n @Output() public backdropClick = new EventEmitter();\r\n\r\n public changeDetectorRef = inject(ChangeDetectorRef);\r\n\r\n protected _getPadding(position: SidenavPosition) {\r\n let openSidenavs = this._sidenavs.filter(x => x.open() && x.mode() == 'push');\r\n let filteredSidenavs = openSidenavs.filter(x => x.position() == position);\r\n if(filteredSidenavs.length == 0) return undefined;\r\n\r\n if (this._isPlatformServer) {\r\n let hasDynamicSidenavs = openSidenavs.some(x => x._getFixedSize() == undefined);\r\n if (hasDynamicSidenavs) {\r\n // we cannot compute padding on the server\r\n return undefined;\r\n } else {\r\n let fixedSizes = filteredSidenavs.map(x => x._getFixedSize());\r\n return fixedSizes.length > 1 ? `max(${fixedSizes.join(', ')})` : fixedSizes[0];\r\n }\r\n } else {\r\n let horizontal = position == 'start' || position == 'end';\r\n let sizes = filteredSidenavs.map(x => horizontal ? x.elmentRef.nativeElement.clientWidth : x.elmentRef.nativeElement.clientHeight);\r\n return `${Math.max(...sizes)}px`;\r\n }\r\n };\r\n\r\n ngAfterViewInit() {\r\n if (!this._isPlatformServer) {\r\n setTimeout(() => this._isTransitionEnabled = true);\r\n }\r\n }\r\n\r\n // In some modes the content is pushed based on the width of the opened sidenavs, however on\r\n // the server we can't measure the sidenav-container padding, so the padding is always zero. This can cause the\r\n // content to jump around when it's rendered on the server and hydrated on the client.\r\n // We avoid it by hiding the content on the initial render and then showing it once the sidenav\r\n // has been measured on the client.\r\n protected _canComputePadding() {\r\n if (this._isPlatformServer) {\r\n let hasDynamicSizenavs = this._sidenavs.some(x => x.open() && x.mode() == 'push' && x._getFixedSize() == undefined);\r\n return !hasDynamicSizenavs;\r\n }\r\n\r\n return true;\r\n }\r\n}\r\n","<ng-content select=\"ng0-sidenav-content\"></ng-content>\r\n<ng-content></ng-content>","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\r\n\r\n/**\r\n * Sidenav content component\r\n */\r\n@Component({\r\n selector: 'ng0-sidenav-content',\r\n template: `<ng-content></ng-content>`,\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n})\r\nexport class SidenavContentComponent {\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { SidenavContainerComponent } from './sidenav-container.component';\r\nimport { SidenavComponent } from './sidenav.component';\r\nimport { SidenavContentComponent } from './sidenav-content.component';\r\n\r\n/**\r\n * Sidenav module\r\n */\r\n@NgModule({\r\n imports: [\r\n SidenavContainerComponent,\r\n SidenavComponent,\r\n SidenavContentComponent\r\n ],\r\n exports: [\r\n SidenavContainerComponent,\r\n SidenavComponent,\r\n SidenavContentComponent\r\n ]\r\n})\r\nexport class SidenavModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|