@bravobit/bb-foundation 0.55.6 → 0.56.0
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/dialog/index.d.ts +5 -4
- package/elements/index.d.ts +19 -20
- package/fesm2022/bravobit-bb-foundation-auth.mjs +22 -22
- package/fesm2022/bravobit-bb-foundation-collections.mjs +43 -43
- package/fesm2022/bravobit-bb-foundation-dashboard.mjs +25 -25
- package/fesm2022/bravobit-bb-foundation-dialog.mjs +36 -32
- package/fesm2022/bravobit-bb-foundation-dialog.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-elements.mjs +117 -127
- package/fesm2022/bravobit-bb-foundation-elements.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-http.mjs +10 -10
- package/fesm2022/bravobit-bb-foundation-localize.mjs +16 -16
- package/fesm2022/bravobit-bb-foundation-masking.mjs +16 -16
- package/fesm2022/bravobit-bb-foundation-notifications.mjs +16 -29
- package/fesm2022/bravobit-bb-foundation-notifications.mjs.map +1 -1
- package/fesm2022/bravobit-bb-foundation-permissions.mjs +10 -10
- package/fesm2022/bravobit-bb-foundation-recaptcha.mjs +10 -10
- package/fesm2022/bravobit-bb-foundation-select.mjs +22 -22
- package/fesm2022/bravobit-bb-foundation-storage.mjs +3 -3
- package/fesm2022/bravobit-bb-foundation-table.mjs +22 -22
- package/fesm2022/bravobit-bb-foundation-tooltip.mjs +10 -10
- package/fesm2022/bravobit-bb-foundation-utils.mjs +16 -16
- package/fesm2022/bravobit-bb-foundation.mjs +21 -21
- package/package.json +26 -30
- package/combobox/index.d.ts +0 -58
- package/fesm2022/bravobit-bb-foundation-combobox.mjs +0 -325
- package/fesm2022/bravobit-bb-foundation-combobox.mjs.map +0 -1
|
@@ -1,325 +0,0 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { HostBinding, ViewEncapsulation, ChangeDetectionStrategy, Component, Injector, HostListener, Optional, Inject, Directive, EventEmitter, TemplateRef, forwardRef, booleanAttribute, Output, Input, ContentChild } from '@angular/core';
|
|
3
|
-
import { Subscription, fromEvent, throttleTime, BehaviorSubject, isObservable } from 'rxjs';
|
|
4
|
-
import { trigger, transition, style, animate } from '@angular/animations';
|
|
5
|
-
import { NgTemplateOutlet, AsyncPipe } from '@angular/common';
|
|
6
|
-
import * as i3 from '@angular/cdk/a11y';
|
|
7
|
-
import { CdkTrapFocus } from '@angular/cdk/a11y';
|
|
8
|
-
import { ComponentPortal } from '@angular/cdk/portal';
|
|
9
|
-
import { WINDOW } from '@bravobit/bb-foundation';
|
|
10
|
-
import * as i1 from '@angular/cdk/overlay';
|
|
11
|
-
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
12
|
-
import { map, shareReplay } from 'rxjs/operators';
|
|
13
|
-
|
|
14
|
-
const comboboxPanelAnimation = trigger('comboboxPanelAnimation', [
|
|
15
|
-
transition(':enter', [
|
|
16
|
-
style({ opacity: 0, transform: 'translateY(5px)' }),
|
|
17
|
-
animate('300ms cubic-bezier(0, 0, .2, 1)', style({ opacity: 1, transform: 'none' }))
|
|
18
|
-
]),
|
|
19
|
-
transition(':leave', [
|
|
20
|
-
animate('300ms cubic-bezier(0, 0, .2, 1)', style({ opacity: 0, transform: 'translateY(5px)' }))
|
|
21
|
-
])
|
|
22
|
-
]);
|
|
23
|
-
|
|
24
|
-
class BbComboboxPanel {
|
|
25
|
-
_combobox;
|
|
26
|
-
_container;
|
|
27
|
-
// Readonly data.
|
|
28
|
-
items$;
|
|
29
|
-
optionTemplate;
|
|
30
|
-
// Host bindings.
|
|
31
|
-
animation = true;
|
|
32
|
-
constructor(_combobox, _container) {
|
|
33
|
-
this._combobox = _combobox;
|
|
34
|
-
this._container = _container;
|
|
35
|
-
this.items$ = this._combobox.items$;
|
|
36
|
-
this.optionTemplate = this._combobox?.optionTemplate ?? null;
|
|
37
|
-
}
|
|
38
|
-
select(item) {
|
|
39
|
-
this._combobox.select(item?.value ?? null);
|
|
40
|
-
this._container.close();
|
|
41
|
-
}
|
|
42
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxPanel, deps: [{ token: BbCombobox }, { token: BbComboboxContainer }], target: i0.ɵɵFactoryTarget.Component });
|
|
43
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.2.1", type: BbComboboxPanel, isStandalone: true, selector: "bb-combobox-panel", host: { attributes: { "role": "listbox" }, properties: { "@comboboxPanelAnimation": "this.animation" }, classAttribute: "bb-combobox-panel" }, hostDirectives: [{ directive: i3.CdkTrapFocus }], ngImport: i0, template: "@if (items$ | async; as items) {\n @for (item of items; track $index) {\n <div (click)=\"select(item)\"\n tabindex=\"0\"\n role=\"option\"\n class=\"bb-combobox-panel-item\">\n @if (optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: {item: item}\"></ng-container>\n } @else {\n {{ item?.label }}\n }\n </div>\n }\n\n}\n", styles: [".bb-combobox-panel{width:100%;display:block;padding:.5rem;overflow-y:auto;overflow-x:hidden;border-radius:.5rem;background-color:#fff;box-shadow:#00000014 0 10px 40px 10px}.bb-combobox-panel-item{cursor:pointer;border-radius:.5rem;padding:.75rem 1.5rem}.bb-combobox-panel-item:hover,.bb-combobox-panel-item:focus{background-color:orange}.bb-combobox-panel-item:active{background-color:red}\n"], dependencies: [{ kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: AsyncPipe, name: "async" }], animations: [comboboxPanelAnimation], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
44
|
-
}
|
|
45
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxPanel, decorators: [{
|
|
46
|
-
type: Component,
|
|
47
|
-
args: [{ selector: 'bb-combobox-panel', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: {
|
|
48
|
-
'class': 'bb-combobox-panel',
|
|
49
|
-
'role': 'listbox'
|
|
50
|
-
}, hostDirectives: [
|
|
51
|
-
{ directive: CdkTrapFocus }
|
|
52
|
-
], imports: [AsyncPipe, NgTemplateOutlet], animations: [comboboxPanelAnimation], template: "@if (items$ | async; as items) {\n @for (item of items; track $index) {\n <div (click)=\"select(item)\"\n tabindex=\"0\"\n role=\"option\"\n class=\"bb-combobox-panel-item\">\n @if (optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: {item: item}\"></ng-container>\n } @else {\n {{ item?.label }}\n }\n </div>\n }\n\n}\n", styles: [".bb-combobox-panel{width:100%;display:block;padding:.5rem;overflow-y:auto;overflow-x:hidden;border-radius:.5rem;background-color:#fff;box-shadow:#00000014 0 10px 40px 10px}.bb-combobox-panel-item{cursor:pointer;border-radius:.5rem;padding:.75rem 1.5rem}.bb-combobox-panel-item:hover,.bb-combobox-panel-item:focus{background-color:orange}.bb-combobox-panel-item:active{background-color:red}\n"] }]
|
|
53
|
-
}], ctorParameters: () => [{ type: BbCombobox }, { type: BbComboboxContainer }], propDecorators: { animation: [{
|
|
54
|
-
type: HostBinding,
|
|
55
|
-
args: ['@comboboxPanelAnimation']
|
|
56
|
-
}] } });
|
|
57
|
-
|
|
58
|
-
class BbComboboxContainer {
|
|
59
|
-
_overlay;
|
|
60
|
-
_combobox;
|
|
61
|
-
_viewContainerRef;
|
|
62
|
-
_elementRef;
|
|
63
|
-
_window;
|
|
64
|
-
// State.
|
|
65
|
-
_overlayRef = null;
|
|
66
|
-
// Subscriptions.
|
|
67
|
-
_subscription = new Subscription();
|
|
68
|
-
constructor(_overlay, _combobox, _viewContainerRef, _elementRef, _window) {
|
|
69
|
-
this._overlay = _overlay;
|
|
70
|
-
this._combobox = _combobox;
|
|
71
|
-
this._viewContainerRef = _viewContainerRef;
|
|
72
|
-
this._elementRef = _elementRef;
|
|
73
|
-
this._window = _window;
|
|
74
|
-
}
|
|
75
|
-
get width() {
|
|
76
|
-
return this._elementRef?.nativeElement?.clientWidth ?? 0;
|
|
77
|
-
}
|
|
78
|
-
ngOnInit() {
|
|
79
|
-
this.createOverlay();
|
|
80
|
-
this.handleResizing();
|
|
81
|
-
this.handleBackdropClick();
|
|
82
|
-
}
|
|
83
|
-
ngOnDestroy() {
|
|
84
|
-
this._subscription?.unsubscribe();
|
|
85
|
-
this._overlayRef?.dispose();
|
|
86
|
-
this._overlayRef = null;
|
|
87
|
-
}
|
|
88
|
-
toggle() {
|
|
89
|
-
if (!this._overlayRef) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
this._overlayRef?.hasAttached() ? this.close() : this.open();
|
|
93
|
-
}
|
|
94
|
-
open() {
|
|
95
|
-
const injector = Injector.create({
|
|
96
|
-
providers: [
|
|
97
|
-
{ provide: BbComboboxContainer, useValue: this },
|
|
98
|
-
{ provide: BbCombobox, useValue: this._combobox }
|
|
99
|
-
]
|
|
100
|
-
});
|
|
101
|
-
const component = new ComponentPortal(BbComboboxPanel, this._viewContainerRef, injector);
|
|
102
|
-
this._overlayRef.attach(component);
|
|
103
|
-
}
|
|
104
|
-
close() {
|
|
105
|
-
this._overlayRef?.detach();
|
|
106
|
-
}
|
|
107
|
-
getPositionStrategy() {
|
|
108
|
-
const positions = this.getPositions();
|
|
109
|
-
return this._overlay
|
|
110
|
-
.position()
|
|
111
|
-
.flexibleConnectedTo(this._elementRef)
|
|
112
|
-
.withFlexibleDimensions(true)
|
|
113
|
-
.withGrowAfterOpen(true)
|
|
114
|
-
.withPush(false)
|
|
115
|
-
.withViewportMargin(20)
|
|
116
|
-
.withPositions(positions);
|
|
117
|
-
}
|
|
118
|
-
getPositions() {
|
|
119
|
-
return [
|
|
120
|
-
{
|
|
121
|
-
originX: 'center',
|
|
122
|
-
originY: 'bottom',
|
|
123
|
-
overlayX: 'center',
|
|
124
|
-
overlayY: 'top',
|
|
125
|
-
offsetY: 10
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
originX: 'center',
|
|
129
|
-
originY: 'top',
|
|
130
|
-
overlayX: 'center',
|
|
131
|
-
overlayY: 'bottom',
|
|
132
|
-
offsetY: -10
|
|
133
|
-
}
|
|
134
|
-
];
|
|
135
|
-
}
|
|
136
|
-
resize() {
|
|
137
|
-
this._overlayRef.updateSize({ width: this.width });
|
|
138
|
-
}
|
|
139
|
-
createOverlay() {
|
|
140
|
-
const positionStrategy = this.getPositionStrategy();
|
|
141
|
-
const scrollStrategy = this._overlay.scrollStrategies.reposition();
|
|
142
|
-
this._overlayRef = this._overlay.create({
|
|
143
|
-
positionStrategy,
|
|
144
|
-
scrollStrategy,
|
|
145
|
-
hasBackdrop: true,
|
|
146
|
-
backdropClass: null,
|
|
147
|
-
disposeOnNavigation: true,
|
|
148
|
-
width: this.width
|
|
149
|
-
});
|
|
150
|
-
}
|
|
151
|
-
handleBackdropClick() {
|
|
152
|
-
if (!this._overlayRef) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
const subscription = this._overlayRef.backdropClick()
|
|
156
|
-
.subscribe(() => this.close());
|
|
157
|
-
this._subscription.add(subscription);
|
|
158
|
-
}
|
|
159
|
-
handleResizing() {
|
|
160
|
-
if (!this._window) {
|
|
161
|
-
return;
|
|
162
|
-
}
|
|
163
|
-
const resize$ = fromEvent(this._window, 'resize').pipe(throttleTime(20));
|
|
164
|
-
const subscription = resize$.subscribe(() => this.resize());
|
|
165
|
-
this._subscription.add(subscription);
|
|
166
|
-
}
|
|
167
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxContainer, deps: [{ token: i1.Overlay }, { token: BbCombobox }, { token: i0.ViewContainerRef }, { token: i0.ElementRef }, { token: WINDOW, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
|
|
168
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: BbComboboxContainer, isStandalone: true, selector: "[bbComboboxContainer]", host: { listeners: { "click": "toggle()" } }, ngImport: i0 });
|
|
169
|
-
}
|
|
170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxContainer, decorators: [{
|
|
171
|
-
type: Directive,
|
|
172
|
-
args: [{
|
|
173
|
-
selector: '[bbComboboxContainer]'
|
|
174
|
-
}]
|
|
175
|
-
}], ctorParameters: () => [{ type: i1.Overlay }, { type: BbCombobox }, { type: i0.ViewContainerRef }, { type: i0.ElementRef }, { type: Window, decorators: [{
|
|
176
|
-
type: Optional
|
|
177
|
-
}, {
|
|
178
|
-
type: Inject,
|
|
179
|
-
args: [WINDOW]
|
|
180
|
-
}] }], propDecorators: { toggle: [{
|
|
181
|
-
type: HostListener,
|
|
182
|
-
args: ['click']
|
|
183
|
-
}] } });
|
|
184
|
-
|
|
185
|
-
class BbComboboxOption {
|
|
186
|
-
static ngTemplateContextGuard(directive, context) {
|
|
187
|
-
return true;
|
|
188
|
-
}
|
|
189
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxOption, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
190
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: BbComboboxOption, isStandalone: true, selector: "ng-template[bbComboboxOption]", ngImport: i0 });
|
|
191
|
-
}
|
|
192
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxOption, decorators: [{
|
|
193
|
-
type: Directive,
|
|
194
|
-
args: [{
|
|
195
|
-
selector: 'ng-template[bbComboboxOption]'
|
|
196
|
-
}]
|
|
197
|
-
}] });
|
|
198
|
-
|
|
199
|
-
class BbComboboxLabel {
|
|
200
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxLabel, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
201
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "20.2.1", type: BbComboboxLabel, isStandalone: true, selector: "[bbComboboxLabel]", ngImport: i0 });
|
|
202
|
-
}
|
|
203
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbComboboxLabel, decorators: [{
|
|
204
|
-
type: Directive,
|
|
205
|
-
args: [{
|
|
206
|
-
selector: '[bbComboboxLabel]'
|
|
207
|
-
}]
|
|
208
|
-
}] });
|
|
209
|
-
|
|
210
|
-
class BbCombobox {
|
|
211
|
-
// Children.
|
|
212
|
-
labelComponent;
|
|
213
|
-
optionTemplate;
|
|
214
|
-
// Inputs.
|
|
215
|
-
value = null;
|
|
216
|
-
bindLabel = null;
|
|
217
|
-
bindValue = null;
|
|
218
|
-
disabled = false;
|
|
219
|
-
set data(items) {
|
|
220
|
-
this.handleData(items);
|
|
221
|
-
}
|
|
222
|
-
get data() {
|
|
223
|
-
return this._cache$.getValue();
|
|
224
|
-
}
|
|
225
|
-
// Outputs.
|
|
226
|
-
valueChange = new EventEmitter();
|
|
227
|
-
// State.
|
|
228
|
-
items$;
|
|
229
|
-
// Methods.
|
|
230
|
-
onChange = () => ({});
|
|
231
|
-
onTouched = () => ({});
|
|
232
|
-
// Cache.
|
|
233
|
-
_cache$ = new BehaviorSubject([]);
|
|
234
|
-
// Subscriptions.
|
|
235
|
-
_dataSubscription = new Subscription();
|
|
236
|
-
ngOnInit() {
|
|
237
|
-
this.setItems();
|
|
238
|
-
}
|
|
239
|
-
ngOnDestroy() {
|
|
240
|
-
this._dataSubscription?.unsubscribe();
|
|
241
|
-
}
|
|
242
|
-
registerOnChange(fn) {
|
|
243
|
-
this.onChange = fn;
|
|
244
|
-
}
|
|
245
|
-
registerOnTouched(fn) {
|
|
246
|
-
this.onTouched = fn;
|
|
247
|
-
}
|
|
248
|
-
setDisabledState(isDisabled) {
|
|
249
|
-
this.disabled = isDisabled;
|
|
250
|
-
}
|
|
251
|
-
writeValue(newValue) {
|
|
252
|
-
this.value = newValue;
|
|
253
|
-
}
|
|
254
|
-
select(value) {
|
|
255
|
-
this.value = value;
|
|
256
|
-
this.emitChangeEvent();
|
|
257
|
-
}
|
|
258
|
-
setItems() {
|
|
259
|
-
this.items$ = this._cache$.pipe(map(items => items.map(item => this.createComboboxItem(item))), shareReplay({ bufferSize: 1, refCount: true }));
|
|
260
|
-
}
|
|
261
|
-
createComboboxItem(data) {
|
|
262
|
-
return {
|
|
263
|
-
data,
|
|
264
|
-
label: !!this.bindLabel ? (data?.[this.bindLabel] ?? null) : data,
|
|
265
|
-
value: !!this.bindValue ? (data?.[this.bindValue] ?? null) : data
|
|
266
|
-
};
|
|
267
|
-
}
|
|
268
|
-
setCache(items) {
|
|
269
|
-
if (items === null || items === undefined) {
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
this._cache$.next(items);
|
|
273
|
-
}
|
|
274
|
-
handleData(items) {
|
|
275
|
-
if (isObservable(items)) {
|
|
276
|
-
return this.handleDataObservable(items);
|
|
277
|
-
}
|
|
278
|
-
return this.setCache(items);
|
|
279
|
-
}
|
|
280
|
-
handleDataObservable(items$) {
|
|
281
|
-
this._dataSubscription?.unsubscribe();
|
|
282
|
-
const subscription = items$.subscribe(items => this.setCache(items));
|
|
283
|
-
this._dataSubscription.add(subscription);
|
|
284
|
-
}
|
|
285
|
-
emitChangeEvent() {
|
|
286
|
-
this.onChange?.(this.value);
|
|
287
|
-
this.valueChange.emit(this.value);
|
|
288
|
-
}
|
|
289
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbCombobox, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
290
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "20.2.1", type: BbCombobox, isStandalone: true, selector: "bb-combobox", inputs: { value: "value", bindLabel: "bindLabel", bindValue: "bindValue", disabled: ["disabled", "disabled", booleanAttribute], data: "data" }, outputs: { valueChange: "valueChange" }, host: { classAttribute: "bb-combobox" }, providers: [
|
|
291
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCombobox), multi: true }
|
|
292
|
-
], queries: [{ propertyName: "labelComponent", first: true, predicate: BbComboboxLabel, descendants: true, read: TemplateRef }, { propertyName: "optionTemplate", first: true, predicate: BbComboboxOption, descendants: true, read: TemplateRef }], ngImport: i0, template: "<div bbComboboxContainer\n class=\"bb-combobox-container\">\n {{ value }}\n</div>\n", styles: [".bb-combobox{display:block}.bb-combobox-container{width:100%;height:2.5rem;display:block;padding:0 .75rem;line-height:2.5rem;border:1px solid black}\n"], dependencies: [{ kind: "directive", type: BbComboboxContainer, selector: "[bbComboboxContainer]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
293
|
-
}
|
|
294
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.1", ngImport: i0, type: BbCombobox, decorators: [{
|
|
295
|
-
type: Component,
|
|
296
|
-
args: [{ selector: 'bb-combobox', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, host: { 'class': 'bb-combobox' }, providers: [
|
|
297
|
-
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCombobox), multi: true }
|
|
298
|
-
], imports: [BbComboboxContainer], template: "<div bbComboboxContainer\n class=\"bb-combobox-container\">\n {{ value }}\n</div>\n", styles: [".bb-combobox{display:block}.bb-combobox-container{width:100%;height:2.5rem;display:block;padding:0 .75rem;line-height:2.5rem;border:1px solid black}\n"] }]
|
|
299
|
-
}], propDecorators: { labelComponent: [{
|
|
300
|
-
type: ContentChild,
|
|
301
|
-
args: [BbComboboxLabel, { read: TemplateRef, static: false }]
|
|
302
|
-
}], optionTemplate: [{
|
|
303
|
-
type: ContentChild,
|
|
304
|
-
args: [BbComboboxOption, { read: TemplateRef, static: false }]
|
|
305
|
-
}], value: [{
|
|
306
|
-
type: Input
|
|
307
|
-
}], bindLabel: [{
|
|
308
|
-
type: Input
|
|
309
|
-
}], bindValue: [{
|
|
310
|
-
type: Input
|
|
311
|
-
}], disabled: [{
|
|
312
|
-
type: Input,
|
|
313
|
-
args: [{ transform: booleanAttribute }]
|
|
314
|
-
}], data: [{
|
|
315
|
-
type: Input
|
|
316
|
-
}], valueChange: [{
|
|
317
|
-
type: Output
|
|
318
|
-
}] } });
|
|
319
|
-
|
|
320
|
-
/**
|
|
321
|
-
* Generated bundle index. Do not edit.
|
|
322
|
-
*/
|
|
323
|
-
|
|
324
|
-
export { BbCombobox, BbComboboxLabel, BbComboboxOption };
|
|
325
|
-
//# sourceMappingURL=bravobit-bb-foundation-combobox.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bravobit-bb-foundation-combobox.mjs","sources":["../../../projects/bb-foundation/combobox/src/combobox-panel/combobox-panel.animation.ts","../../../projects/bb-foundation/combobox/src/combobox-panel/combobox-panel.component.ts","../../../projects/bb-foundation/combobox/src/combobox-panel/combobox-panel.component.html","../../../projects/bb-foundation/combobox/src/combobox/combobox-container.directive.ts","../../../projects/bb-foundation/combobox/src/combobox-option.directive.ts","../../../projects/bb-foundation/combobox/src/combobox-label.directive.ts","../../../projects/bb-foundation/combobox/src/combobox/combobox.component.ts","../../../projects/bb-foundation/combobox/src/combobox/combobox.component.html","../../../projects/bb-foundation/combobox/src/bravobit-bb-foundation-combobox.ts"],"sourcesContent":["import {animate, style, transition, trigger} from '@angular/animations';\n\nexport const comboboxPanelAnimation = trigger('comboboxPanelAnimation', [\n transition(':enter', [\n style({opacity: 0, transform: 'translateY(5px)'}),\n animate('300ms cubic-bezier(0, 0, .2, 1)', style({opacity: 1, transform: 'none'}))\n ]),\n transition(':leave', [\n animate('300ms cubic-bezier(0, 0, .2, 1)', style({opacity: 0, transform: 'translateY(5px)'}))\n ])\n]);\n","import {ChangeDetectionStrategy, Component, HostBinding, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BbComboboxContainer} from '../combobox/combobox-container.directive';\nimport {ComboboxItem, ComboboxOptionContext} from '../combobox.interface';\nimport {comboboxPanelAnimation} from './combobox-panel.animation';\nimport {AsyncPipe, NgTemplateOutlet} from '@angular/common';\nimport {BbCombobox} from '../combobox/combobox.component';\nimport {CdkTrapFocus} from '@angular/cdk/a11y';\nimport {Observable} from 'rxjs';\n\n@Component({\n selector: 'bb-combobox-panel',\n templateUrl: './combobox-panel.component.html',\n styleUrls: ['./combobox-panel.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n 'class': 'bb-combobox-panel',\n 'role': 'listbox'\n },\n hostDirectives: [\n {directive: CdkTrapFocus}\n ],\n imports: [AsyncPipe, NgTemplateOutlet],\n animations: [comboboxPanelAnimation]\n})\nexport class BbComboboxPanel {\n\n // Readonly data.\n readonly items$: Observable<ComboboxItem<unknown>[]>;\n readonly optionTemplate: TemplateRef<ComboboxOptionContext>;\n\n // Host bindings.\n @HostBinding('@comboboxPanelAnimation') animation: boolean = true;\n\n constructor(private _combobox: BbCombobox,\n private _container: BbComboboxContainer) {\n this.items$ = this._combobox.items$;\n this.optionTemplate = this._combobox?.optionTemplate ?? null;\n }\n\n select(item: ComboboxItem<unknown>) {\n this._combobox.select(item?.value ?? null);\n this._container.close();\n }\n\n}\n","@if (items$ | async; as items) {\n @for (item of items; track $index) {\n <div (click)=\"select(item)\"\n tabindex=\"0\"\n role=\"option\"\n class=\"bb-combobox-panel-item\">\n @if (optionTemplate) {\n <ng-container *ngTemplateOutlet=\"optionTemplate; context: {item: item}\"></ng-container>\n } @else {\n {{ item?.label }}\n }\n </div>\n }\n\n}\n","import {Directive, ElementRef, HostListener, Inject, Injector, OnDestroy, OnInit, Optional, ViewContainerRef} from '@angular/core';\nimport {ConnectedPosition, Overlay, OverlayRef} from '@angular/cdk/overlay';\nimport {BbComboboxPanel} from '../combobox-panel/combobox-panel.component';\nimport {fromEvent, Subscription, throttleTime} from 'rxjs';\nimport {ComponentPortal} from '@angular/cdk/portal';\nimport {BbCombobox} from './combobox.component';\nimport {WINDOW} from '@bravobit/bb-foundation';\n\n@Directive({\n selector: '[bbComboboxContainer]'\n})\nexport class BbComboboxContainer implements OnInit, OnDestroy {\n\n // State.\n private _overlayRef: OverlayRef | null = null;\n\n // Subscriptions.\n private _subscription = new Subscription();\n\n constructor(private _overlay: Overlay,\n private _combobox: BbCombobox,\n private _viewContainerRef: ViewContainerRef,\n private _elementRef: ElementRef<HTMLElement>,\n @Optional() @Inject(WINDOW) private _window: Window) {\n }\n\n get width() {\n return this._elementRef?.nativeElement?.clientWidth ?? 0;\n }\n\n ngOnInit() {\n this.createOverlay();\n this.handleResizing();\n this.handleBackdropClick();\n }\n\n ngOnDestroy() {\n this._subscription?.unsubscribe();\n this._overlayRef?.dispose();\n this._overlayRef = null;\n }\n\n @HostListener('click')\n toggle() {\n if (!this._overlayRef) {\n return;\n }\n\n this._overlayRef?.hasAttached() ? this.close() : this.open();\n }\n\n open() {\n const injector = Injector.create({\n providers: [\n {provide: BbComboboxContainer, useValue: this},\n {provide: BbCombobox, useValue: this._combobox}\n ]\n });\n\n const component = new ComponentPortal(BbComboboxPanel, this._viewContainerRef, injector);\n this._overlayRef.attach(component);\n }\n\n close() {\n this._overlayRef?.detach();\n }\n\n private getPositionStrategy() {\n const positions = this.getPositions();\n return this._overlay\n .position()\n .flexibleConnectedTo(this._elementRef)\n .withFlexibleDimensions(true)\n .withGrowAfterOpen(true)\n .withPush(false)\n .withViewportMargin(20)\n .withPositions(positions);\n }\n\n private getPositions() {\n return [\n {\n originX: 'center',\n originY: 'bottom',\n overlayX: 'center',\n overlayY: 'top',\n offsetY: 10\n },\n {\n originX: 'center',\n originY: 'top',\n overlayX: 'center',\n overlayY: 'bottom',\n offsetY: -10\n }\n ] satisfies ConnectedPosition[];\n }\n\n private resize() {\n this._overlayRef.updateSize({width: this.width});\n }\n\n private createOverlay() {\n const positionStrategy = this.getPositionStrategy();\n const scrollStrategy = this._overlay.scrollStrategies.reposition();\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy,\n hasBackdrop: true,\n backdropClass: null,\n disposeOnNavigation: true,\n width: this.width\n });\n }\n\n private handleBackdropClick() {\n if (!this._overlayRef) {\n return;\n }\n\n const subscription = this._overlayRef.backdropClick()\n .subscribe(() => this.close());\n this._subscription.add(subscription);\n }\n\n private handleResizing() {\n if (!this._window) {\n return;\n }\n\n const resize$ = fromEvent(this._window, 'resize').pipe(\n throttleTime(20)\n );\n\n const subscription = resize$.subscribe(() => this.resize());\n this._subscription.add(subscription);\n }\n\n}\n","import {ComboboxOptionContext} from './combobox.interface';\nimport {Directive} from '@angular/core';\n\n@Directive({\n selector: 'ng-template[bbComboboxOption]'\n})\nexport class BbComboboxOption {\n\n static ngTemplateContextGuard(directive: BbComboboxOption, context: unknown): context is ComboboxOptionContext {\n return true;\n }\n\n}\n","import {Directive} from '@angular/core';\n\n@Directive({\n selector: '[bbComboboxLabel]'\n})\nexport class BbComboboxLabel {\n}\n","import {booleanAttribute, ChangeDetectionStrategy, Component, ContentChild, EventEmitter, forwardRef, Input, OnDestroy, OnInit, Output, TemplateRef, ViewEncapsulation} from '@angular/core';\nimport {BehaviorSubject, isObservable, Observable, Subscription} from 'rxjs';\nimport {ComboboxItem, ComboboxOptionContext} from '../combobox.interface';\nimport {BbComboboxContainer} from './combobox-container.directive';\nimport {BbComboboxOption} from '../combobox-option.directive';\nimport {BbComboboxLabel} from '../combobox-label.directive';\nimport {NG_VALUE_ACCESSOR} from '@angular/forms';\nimport {map, shareReplay} from 'rxjs/operators';\n\n@Component({\n selector: 'bb-combobox',\n templateUrl: './combobox.component.html',\n styleUrls: ['./combobox.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {'class': 'bb-combobox'},\n providers: [\n {provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => BbCombobox), multi: true}\n ],\n imports: [BbComboboxContainer]\n})\nexport class BbCombobox<T = unknown> implements OnInit, OnDestroy {\n\n // Children.\n @ContentChild(BbComboboxLabel, {read: TemplateRef, static: false}) labelComponent?: TemplateRef<BbComboboxLabel>;\n @ContentChild(BbComboboxOption, {read: TemplateRef, static: false}) optionTemplate?: TemplateRef<ComboboxOptionContext>;\n\n // Inputs.\n @Input() value: T | null = null;\n @Input() bindLabel: string | null = null;\n @Input() bindValue: string | null = null;\n @Input({transform: booleanAttribute}) disabled: boolean = false;\n\n @Input()\n set data(items: T[] | Observable<T[]>) {\n this.handleData(items);\n }\n\n get data() {\n return this._cache$.getValue();\n }\n\n // Outputs.\n @Output() valueChange = new EventEmitter<T>();\n\n // State.\n items$: Observable<ComboboxItem<T>[]>;\n\n // Methods.\n onChange: (newValue: T) => void = () => ({});\n onTouched: () => void = () => ({});\n\n // Cache.\n private _cache$ = new BehaviorSubject<T[]>([]);\n\n // Subscriptions.\n private _dataSubscription = new Subscription();\n\n ngOnInit() {\n this.setItems();\n }\n\n ngOnDestroy() {\n this._dataSubscription?.unsubscribe();\n }\n\n registerOnChange(fn: (newValue: T) => void) {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void) {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean) {\n this.disabled = isDisabled;\n }\n\n writeValue(newValue: T) {\n this.value = newValue;\n }\n\n select(value: T) {\n this.value = value;\n this.emitChangeEvent();\n }\n\n private setItems() {\n this.items$ = this._cache$.pipe(\n map(items => items.map(item => this.createComboboxItem(item))),\n shareReplay({bufferSize: 1, refCount: true})\n );\n }\n\n private createComboboxItem(data: T) {\n return <ComboboxItem<T>>{\n data,\n label: !!this.bindLabel ? (data?.[this.bindLabel] ?? null) : data,\n value: !!this.bindValue ? (data?.[this.bindValue] ?? null) : data\n };\n }\n\n private setCache(items: T[]) {\n if (items === null || items === undefined) {\n return;\n }\n this._cache$.next(items);\n }\n\n private handleData(items: T[] | Observable<T[]>) {\n if (isObservable(items)) {\n return this.handleDataObservable(items);\n }\n\n return this.setCache(items);\n }\n\n private handleDataObservable(items$: Observable<T[]>) {\n this._dataSubscription?.unsubscribe();\n const subscription = items$.subscribe(items => this.setCache(items));\n this._dataSubscription.add(subscription);\n }\n\n private emitChangeEvent() {\n this.onChange?.(this.value);\n this.valueChange.emit(this.value);\n }\n\n}\n","<div bbComboboxContainer\n class=\"bb-combobox-container\">\n {{ value }}\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1.BbCombobox","i2.BbComboboxContainer"],"mappings":"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"}
|