@bravura/ui 3.8.1 → 4.0.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/CHANGELOG.md +579 -565
- package/LICENSE +6 -6
- package/README.md +56 -54
- package/alert/alert-container.component.d.ts +1 -1
- package/alert/alert-message.component.d.ts +1 -1
- package/behavior/await.directive.d.ts +1 -1
- package/behavior/observe-content-class.directive.d.ts +1 -1
- package/behavior/sizing.directive.d.ts +1 -1
- package/clip-note/clip-note.directive.d.ts +1 -1
- package/currency-input/currency-input.directive.d.ts +1 -1
- package/decimal-input/decimal-input.directive.d.ts +1 -1
- package/discrete-input/discrete-input.component.d.ts +1 -1
- package/esm2022/alert/alert-container.component.mjs +207 -0
- package/esm2022/alert/alert-message.component.mjs +101 -0
- package/esm2022/alert/alert.module.mjs +22 -0
- package/{esm2020 → esm2022}/alert/public-api.mjs +1 -1
- package/esm2022/alert/testing/test-api.mjs +44 -0
- package/{esm2020 → esm2022}/behavior/await.directive.mjs +6 -6
- package/esm2022/behavior/behavior.module.mjs +37 -0
- package/{esm2020 → esm2022}/behavior/observe-content-class.directive.mjs +5 -5
- package/{esm2020 → esm2022}/behavior/public-api.mjs +1 -1
- package/esm2022/behavior/sizing-monitor.directive.mjs +31 -0
- package/esm2022/behavior/sizing.directive.mjs +256 -0
- package/esm2022/clip-note/clip-note.component.mjs +216 -0
- package/esm2022/clip-note/clip-note.directive.mjs +141 -0
- package/esm2022/clip-note/clip-note.module.mjs +32 -0
- package/{esm2020 → esm2022}/clip-note/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/common/common-utils.mjs +1 -1
- package/{esm2020 → esm2022}/common/common.module.mjs +7 -7
- package/{esm2020 → esm2022}/common/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/currency-input/currency-input.directive.mjs +6 -6
- package/esm2022/currency-input/currency-input.module.mjs +19 -0
- package/{esm2020 → esm2022}/currency-input/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/decimal-input/decimal-input.directive.mjs +9 -9
- package/{esm2020 → esm2022}/decimal-input/decimal-input.module.mjs +5 -5
- package/esm2022/discrete-input/discrete-input.component.mjs +337 -0
- package/esm2022/discrete-input/discrete-input.module.mjs +21 -0
- package/{esm2020 → esm2022}/discrete-input/public-api.mjs +1 -1
- package/esm2022/file-upload/file-upload.component.mjs +400 -0
- package/esm2022/file-upload/file-upload.module.mjs +44 -0
- package/esm2022/file-upload/file-upload.service.mjs +29 -0
- package/{esm2020 → esm2022}/file-upload/public-api.mjs +1 -1
- package/esm2022/form-field/form-field.component.mjs +82 -0
- package/esm2022/form-field/form-field.module.mjs +33 -0
- package/{esm2020 → esm2022}/form-field/public-api.mjs +1 -1
- package/esm2022/icon-font/icon-font.module.mjs +22 -0
- package/{esm2020 → esm2022}/icon-font/icon.directive.mjs +5 -5
- package/{esm2020 → esm2022}/icon-font/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/icon-font/utilities.mjs +1 -1
- package/esm2022/panel/panel-section.component.mjs +41 -0
- package/esm2022/panel/panel.component.mjs +87 -0
- package/esm2022/panel/panel.module.mjs +23 -0
- package/{esm2020 → esm2022}/panel/public-api.mjs +1 -1
- package/esm2022/panel/tinted.directive.mjs +60 -0
- package/esm2022/phone-number/phone-number.directive.mjs +188 -0
- package/{esm2020 → esm2022}/phone-number/phone-number.module.mjs +5 -5
- package/{esm2020 → esm2022}/phone-number/phone-number.pipe.mjs +6 -6
- package/esm2022/phone-number/phone-number.validator.mjs +64 -0
- package/{esm2020 → esm2022}/phone-number/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +1 -1
- package/esm2022/radio-panel/radio-panel-item.component.mjs +93 -0
- package/esm2022/radio-panel/radio-panel.component.mjs +81 -0
- package/{esm2020 → esm2022}/radio-panel/radio-panel.module.mjs +5 -5
- package/esm2022/radio-panel/testing/test-api.mjs +46 -0
- package/{esm2020 → esm2022}/selection-panel/public-api.mjs +1 -1
- package/esm2022/selection-panel/selection-panel-item.component.mjs +166 -0
- package/esm2022/selection-panel/selection-panel.directive.mjs +119 -0
- package/esm2022/selection-panel/selection-panel.module.mjs +23 -0
- package/{esm2020 → esm2022}/skeletons/public-api.mjs +1 -1
- package/esm2022/skeletons/skeleton-loader-presets.directive.mjs +83 -0
- package/{esm2020 → esm2022}/skeletons/skeleton-loader.component.mjs +5 -5
- package/esm2022/skeletons/skeletons.module.mjs +35 -0
- package/{esm2020 → esm2022}/stepper/public-api.mjs +1 -1
- package/{esm2020 → esm2022}/stepper/stepper-animation.mjs +1 -1
- package/esm2022/stepper/stepper.component.mjs +176 -0
- package/esm2022/stepper/stepper.module.mjs +52 -0
- package/{esm2020 → esm2022}/tooltip/public-api.mjs +1 -1
- package/esm2022/tooltip/tooltip.component.mjs +63 -0
- package/esm2022/tooltip/tooltip.directive.mjs +148 -0
- package/esm2022/tooltip/tooltip.module.mjs +25 -0
- package/{fesm2020 → fesm2022}/bravura-ui-alert-testing.mjs +2 -2
- package/fesm2022/bravura-ui-alert-testing.mjs.map +1 -0
- package/fesm2022/bravura-ui-alert.mjs +327 -0
- package/fesm2022/bravura-ui-alert.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-behavior.mjs +45 -45
- package/fesm2022/bravura-ui-behavior.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-clip-note.mjs +70 -70
- package/fesm2022/bravura-ui-clip-note.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-common.mjs +6 -6
- package/fesm2022/bravura-ui-common.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-currency-input.mjs +11 -11
- package/fesm2022/bravura-ui-currency-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-decimal-input.mjs +12 -12
- package/fesm2022/bravura-ui-decimal-input.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-discrete-input.mjs +48 -48
- package/fesm2022/bravura-ui-discrete-input.mjs.map +1 -0
- package/fesm2022/bravura-ui-file-upload.mjs +474 -0
- package/fesm2022/bravura-ui-file-upload.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-form-field.mjs +19 -19
- package/fesm2022/bravura-ui-form-field.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-icon-font.mjs +8 -8
- package/fesm2022/bravura-ui-icon-font.mjs.map +1 -0
- package/fesm2022/bravura-ui-panel.mjs +206 -0
- package/fesm2022/bravura-ui-panel.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-phone-number.mjs +30 -30
- package/fesm2022/bravura-ui-phone-number.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-radio-panel-testing.mjs +5 -6
- package/fesm2022/bravura-ui-radio-panel-testing.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-radio-panel.mjs +31 -31
- package/fesm2022/bravura-ui-radio-panel.mjs.map +1 -0
- package/fesm2022/bravura-ui-selection-panel.mjs +306 -0
- package/fesm2022/bravura-ui-selection-panel.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-skeletons.mjs +43 -43
- package/fesm2022/bravura-ui-skeletons.mjs.map +1 -0
- package/fesm2022/bravura-ui-stepper.mjs +251 -0
- package/fesm2022/bravura-ui-stepper.mjs.map +1 -0
- package/{fesm2020 → fesm2022}/bravura-ui-tooltip.mjs +32 -24
- package/fesm2022/bravura-ui-tooltip.mjs.map +1 -0
- package/fesm2022/bravura-ui.mjs.map +1 -0
- package/file-upload/file-upload.component.d.ts +1 -1
- package/form-field/form-field.component.d.ts +1 -1
- package/icon-font/icon.directive.d.ts +1 -1
- package/package.json +76 -120
- package/panel/panel.component.d.ts +1 -1
- package/panel/tinted.directive.d.ts +1 -1
- package/phone-number/phone-number.directive.d.ts +1 -1
- package/phone-number/phone-number.validator.d.ts +2 -2
- package/radio-panel/radio-panel-item.component.d.ts +1 -1
- package/radio-panel/radio-panel.component.d.ts +1 -1
- package/radio-panel/testing/test-api.d.ts +2 -3
- package/selection-panel/selection-panel-item.component.d.ts +1 -1
- package/selection-panel/selection-panel.directive.d.ts +1 -1
- package/skeletons/skeleton-loader-presets.directive.d.ts +3 -3
- package/stepper/stepper.component.d.ts +1 -1
- package/theme/_bui-card.scss +56 -56
- package/theme/_ui-theme.scss +112 -112
- package/theme/global-style-by-bootstrap.scss +3 -3
- package/theme/global-style-by-tailwind.scss +3 -3
- package/theme/scrollbar.scss +40 -40
- package/tooltip/tooltip.component.d.ts +2 -0
- package/tooltip/tooltip.directive.d.ts +3 -5
- package/esm2020/alert/alert-container.component.mjs +0 -207
- package/esm2020/alert/alert-message.component.mjs +0 -102
- package/esm2020/alert/alert.module.mjs +0 -22
- package/esm2020/alert/testing/test-api.mjs +0 -44
- package/esm2020/behavior/behavior.module.mjs +0 -37
- package/esm2020/behavior/sizing-monitor.directive.mjs +0 -31
- package/esm2020/behavior/sizing.directive.mjs +0 -256
- package/esm2020/clip-note/clip-note.component.mjs +0 -216
- package/esm2020/clip-note/clip-note.directive.mjs +0 -141
- package/esm2020/clip-note/clip-note.module.mjs +0 -32
- package/esm2020/currency-input/currency-input.module.mjs +0 -19
- package/esm2020/discrete-input/discrete-input.component.mjs +0 -337
- package/esm2020/discrete-input/discrete-input.module.mjs +0 -21
- package/esm2020/file-upload/file-upload.component.mjs +0 -400
- package/esm2020/file-upload/file-upload.module.mjs +0 -44
- package/esm2020/file-upload/file-upload.service.mjs +0 -29
- package/esm2020/form-field/form-field.component.mjs +0 -82
- package/esm2020/form-field/form-field.module.mjs +0 -33
- package/esm2020/icon-font/icon-font.module.mjs +0 -22
- package/esm2020/panel/panel-section.component.mjs +0 -41
- package/esm2020/panel/panel.component.mjs +0 -87
- package/esm2020/panel/panel.module.mjs +0 -23
- package/esm2020/panel/tinted.directive.mjs +0 -60
- package/esm2020/phone-number/phone-number.directive.mjs +0 -188
- package/esm2020/phone-number/phone-number.validator.mjs +0 -64
- package/esm2020/radio-panel/radio-panel-item.component.mjs +0 -93
- package/esm2020/radio-panel/radio-panel.component.mjs +0 -81
- package/esm2020/radio-panel/testing/test-api.mjs +0 -47
- package/esm2020/selection-panel/selection-panel-item.component.mjs +0 -166
- package/esm2020/selection-panel/selection-panel.directive.mjs +0 -119
- package/esm2020/selection-panel/selection-panel.module.mjs +0 -23
- package/esm2020/skeletons/skeleton-loader-presets.directive.mjs +0 -83
- package/esm2020/skeletons/skeletons.module.mjs +0 -35
- package/esm2020/stepper/stepper.component.mjs +0 -176
- package/esm2020/stepper/stepper.module.mjs +0 -52
- package/esm2020/tooltip/tooltip.component.mjs +0 -54
- package/esm2020/tooltip/tooltip.directive.mjs +0 -149
- package/esm2020/tooltip/tooltip.module.mjs +0 -25
- package/fesm2015/bravura-ui-alert-testing.mjs +0 -64
- package/fesm2015/bravura-ui-alert-testing.mjs.map +0 -1
- package/fesm2015/bravura-ui-alert.mjs +0 -340
- package/fesm2015/bravura-ui-alert.mjs.map +0 -1
- package/fesm2015/bravura-ui-behavior.mjs +0 -515
- package/fesm2015/bravura-ui-behavior.mjs.map +0 -1
- package/fesm2015/bravura-ui-clip-note.mjs +0 -393
- package/fesm2015/bravura-ui-clip-note.mjs.map +0 -1
- package/fesm2015/bravura-ui-common.mjs +0 -96
- package/fesm2015/bravura-ui-common.mjs.map +0 -1
- package/fesm2015/bravura-ui-currency-input.mjs +0 -300
- package/fesm2015/bravura-ui-currency-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-decimal-input.mjs +0 -145
- package/fesm2015/bravura-ui-decimal-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-discrete-input.mjs +0 -365
- package/fesm2015/bravura-ui-discrete-input.mjs.map +0 -1
- package/fesm2015/bravura-ui-file-upload.mjs +0 -478
- package/fesm2015/bravura-ui-file-upload.mjs.map +0 -1
- package/fesm2015/bravura-ui-form-field.mjs +0 -120
- package/fesm2015/bravura-ui-form-field.mjs.map +0 -1
- package/fesm2015/bravura-ui-icon-font.mjs +0 -178
- package/fesm2015/bravura-ui-icon-font.mjs.map +0 -1
- package/fesm2015/bravura-ui-panel.mjs +0 -210
- package/fesm2015/bravura-ui-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-phone-number.mjs +0 -327
- package/fesm2015/bravura-ui-phone-number.mjs.map +0 -1
- package/fesm2015/bravura-ui-radio-panel-testing.mjs +0 -63
- package/fesm2015/bravura-ui-radio-panel-testing.mjs.map +0 -1
- package/fesm2015/bravura-ui-radio-panel.mjs +0 -200
- package/fesm2015/bravura-ui-radio-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-selection-panel.mjs +0 -311
- package/fesm2015/bravura-ui-selection-panel.mjs.map +0 -1
- package/fesm2015/bravura-ui-skeletons.mjs +0 -195
- package/fesm2015/bravura-ui-skeletons.mjs.map +0 -1
- package/fesm2015/bravura-ui-stepper.mjs +0 -253
- package/fesm2015/bravura-ui-stepper.mjs.map +0 -1
- package/fesm2015/bravura-ui-tooltip.mjs +0 -229
- package/fesm2015/bravura-ui-tooltip.mjs.map +0 -1
- package/fesm2015/bravura-ui.mjs.map +0 -1
- package/fesm2020/bravura-ui-alert-testing.mjs.map +0 -1
- package/fesm2020/bravura-ui-alert.mjs +0 -328
- package/fesm2020/bravura-ui-alert.mjs.map +0 -1
- package/fesm2020/bravura-ui-behavior.mjs.map +0 -1
- package/fesm2020/bravura-ui-clip-note.mjs.map +0 -1
- package/fesm2020/bravura-ui-common.mjs.map +0 -1
- package/fesm2020/bravura-ui-currency-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-decimal-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-discrete-input.mjs.map +0 -1
- package/fesm2020/bravura-ui-file-upload.mjs +0 -474
- package/fesm2020/bravura-ui-file-upload.mjs.map +0 -1
- package/fesm2020/bravura-ui-form-field.mjs.map +0 -1
- package/fesm2020/bravura-ui-icon-font.mjs.map +0 -1
- package/fesm2020/bravura-ui-panel.mjs +0 -206
- package/fesm2020/bravura-ui-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-phone-number.mjs.map +0 -1
- package/fesm2020/bravura-ui-radio-panel-testing.mjs.map +0 -1
- package/fesm2020/bravura-ui-radio-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-selection-panel.mjs +0 -306
- package/fesm2020/bravura-ui-selection-panel.mjs.map +0 -1
- package/fesm2020/bravura-ui-skeletons.mjs.map +0 -1
- package/fesm2020/bravura-ui-stepper.mjs +0 -251
- package/fesm2020/bravura-ui-stepper.mjs.map +0 -1
- package/fesm2020/bravura-ui-tooltip.mjs.map +0 -1
- package/fesm2020/bravura-ui.mjs +0 -8
- package/fesm2020/bravura-ui.mjs.map +0 -1
- /package/{esm2020 → esm2022}/alert/bravura-ui-alert.mjs +0 -0
- /package/{esm2020 → esm2022}/alert/testing/bravura-ui-alert-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/behavior/bravura-ui-behavior.mjs +0 -0
- /package/{esm2020 → esm2022}/bravura-ui.mjs +0 -0
- /package/{esm2020 → esm2022}/clip-note/bravura-ui-clip-note.mjs +0 -0
- /package/{esm2020 → esm2022}/common/bravura-ui-common.mjs +0 -0
- /package/{esm2020 → esm2022}/currency-input/bravura-ui-currency-input.mjs +0 -0
- /package/{esm2020 → esm2022}/decimal-input/bravura-ui-decimal-input.mjs +0 -0
- /package/{esm2020 → esm2022}/decimal-input/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/discrete-input/bravura-ui-discrete-input.mjs +0 -0
- /package/{esm2020 → esm2022}/file-upload/bravura-ui-file-upload.mjs +0 -0
- /package/{esm2020 → esm2022}/form-field/bravura-ui-form-field.mjs +0 -0
- /package/{esm2020 → esm2022}/icon-font/bravura-ui-icon-font.mjs +0 -0
- /package/{esm2020 → esm2022}/panel/bravura-ui-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/phone-number/bravura-ui-phone-number.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/bravura-ui-radio-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/public-api.mjs +0 -0
- /package/{esm2020 → esm2022}/radio-panel/testing/bravura-ui-radio-panel-testing.mjs +0 -0
- /package/{esm2020 → esm2022}/selection-panel/bravura-ui-selection-panel.mjs +0 -0
- /package/{esm2020 → esm2022}/skeletons/bravura-ui-skeletons.mjs +0 -0
- /package/{esm2020 → esm2022}/stepper/bravura-ui-stepper.mjs +0 -0
- /package/{esm2020 → esm2022}/tooltip/bravura-ui-tooltip.mjs +0 -0
- /package/{fesm2015 → fesm2022}/bravura-ui.mjs +0 -0
|
@@ -1,393 +0,0 @@
|
|
|
1
|
-
import * as i1 from '@angular/cdk/bidi';
|
|
2
|
-
import { BidiModule } from '@angular/cdk/bidi';
|
|
3
|
-
import * as i4 from '@angular/cdk/observers';
|
|
4
|
-
import { ObserversModule } from '@angular/cdk/observers';
|
|
5
|
-
import { CommonModule } from '@angular/common';
|
|
6
|
-
import * as i0 from '@angular/core';
|
|
7
|
-
import { EventEmitter, TemplateRef, ElementRef, ViewContainerRef, Component, ChangeDetectionStrategy, Host, ViewChild, InjectionToken, Directive, Inject, Input, Output, NgModule } from '@angular/core';
|
|
8
|
-
import * as i2 from '@angular/material/button';
|
|
9
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
10
|
-
import * as i3 from '@angular/material/icon';
|
|
11
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
12
|
-
import { BuiCommonModule } from '@bravura/ui/common';
|
|
13
|
-
import * as i5 from '@bravura/ui/icon-font';
|
|
14
|
-
import { IconFontModule } from '@bravura/ui/icon-font';
|
|
15
|
-
import { trigger, state, style, transition, group, animate, query, animateChild } from '@angular/animations';
|
|
16
|
-
import { Subject, takeUntil } from 'rxjs';
|
|
17
|
-
|
|
18
|
-
class ClipNoteComponent {
|
|
19
|
-
constructor(_cd, _dir, _elemRef) {
|
|
20
|
-
this._cd = _cd;
|
|
21
|
-
this._dir = _dir;
|
|
22
|
-
this._elemRef = _elemRef;
|
|
23
|
-
this.buttonText = '';
|
|
24
|
-
this.panelState = 'closed-ltr';
|
|
25
|
-
this.direction = 'ltr';
|
|
26
|
-
this._buttonAnimating = false;
|
|
27
|
-
this._hasContent = false;
|
|
28
|
-
this.opened = new EventEmitter();
|
|
29
|
-
this.closed = new EventEmitter();
|
|
30
|
-
this._hovering = false;
|
|
31
|
-
this._destroyed$ = new Subject();
|
|
32
|
-
this._toggleQueue = [];
|
|
33
|
-
}
|
|
34
|
-
get buttonState() {
|
|
35
|
-
if (this._hovering || this.panelState === 'open') {
|
|
36
|
-
return 'active';
|
|
37
|
-
}
|
|
38
|
-
return 'inactive';
|
|
39
|
-
}
|
|
40
|
-
get buttonIconState() {
|
|
41
|
-
if (this.panelState === 'open') {
|
|
42
|
-
return `open-${this.direction}`;
|
|
43
|
-
}
|
|
44
|
-
if (this.buttonState === 'active') {
|
|
45
|
-
return `active-${this.direction}`;
|
|
46
|
-
}
|
|
47
|
-
return 'inactive';
|
|
48
|
-
}
|
|
49
|
-
ngOnInit() {
|
|
50
|
-
const changeDir = () => {
|
|
51
|
-
this.direction = this._dir.value;
|
|
52
|
-
this.panelState = `closed-${this.direction}`;
|
|
53
|
-
this._cd.markForCheck();
|
|
54
|
-
};
|
|
55
|
-
this._dir.change.pipe(takeUntil(this._destroyed$)).subscribe(changeDir);
|
|
56
|
-
changeDir();
|
|
57
|
-
}
|
|
58
|
-
ngOnDestroy() {
|
|
59
|
-
this._destroyed$.next();
|
|
60
|
-
this._destroyed$.complete();
|
|
61
|
-
}
|
|
62
|
-
_mouseOverButton(hovering) {
|
|
63
|
-
if (this._hovering !== hovering) {
|
|
64
|
-
this._hovering = hovering;
|
|
65
|
-
this._cd.markForCheck();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
toggle() {
|
|
69
|
-
this.panelState = this.panelState === `closed-${this.direction}` ? 'open' : `closed-${this.direction}`;
|
|
70
|
-
this._cd.markForCheck();
|
|
71
|
-
}
|
|
72
|
-
_scheduleToggle() {
|
|
73
|
-
if (this._buttonAnimating) {
|
|
74
|
-
this._toggleQueue.push(true);
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
this.toggle();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
_checkToggle() {
|
|
81
|
-
if (this._toggleQueue.pop()) {
|
|
82
|
-
this.toggle();
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
open() {
|
|
86
|
-
this.panelState = 'open';
|
|
87
|
-
this._cd.markForCheck();
|
|
88
|
-
this._emit();
|
|
89
|
-
}
|
|
90
|
-
close() {
|
|
91
|
-
this.panelState = `closed-${this.direction}`;
|
|
92
|
-
this._cd.markForCheck();
|
|
93
|
-
this._emit();
|
|
94
|
-
}
|
|
95
|
-
_emit() {
|
|
96
|
-
if (this.panelState === 'open') {
|
|
97
|
-
this.opened.emit();
|
|
98
|
-
}
|
|
99
|
-
else {
|
|
100
|
-
this.closed.emit();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
_contentChanged(content) {
|
|
104
|
-
let template;
|
|
105
|
-
if (content instanceof TemplateRef) {
|
|
106
|
-
template = content;
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
template = this._fallbackTemplate;
|
|
110
|
-
this._content = content;
|
|
111
|
-
}
|
|
112
|
-
this._noteViewRef.clear();
|
|
113
|
-
const context = {};
|
|
114
|
-
this._contentView = this._noteViewRef.createEmbeddedView(template, context);
|
|
115
|
-
this._checkContent(true);
|
|
116
|
-
}
|
|
117
|
-
_checkContent(initial) {
|
|
118
|
-
var _a, _b;
|
|
119
|
-
(_a = this._contentView) === null || _a === void 0 ? void 0 : _a.detectChanges();
|
|
120
|
-
this._hasContent = !!((_b = this._viewDiv.nativeElement.textContent) === null || _b === void 0 ? void 0 : _b.trim());
|
|
121
|
-
const classList = this._elemRef.nativeElement.classList;
|
|
122
|
-
const cls = 'bui-clip-note-hidden';
|
|
123
|
-
const cls1 = 'bui-clip-note-reveal';
|
|
124
|
-
if (this._hasContent) {
|
|
125
|
-
classList.remove(cls);
|
|
126
|
-
if (!initial && this.panelState !== 'open') {
|
|
127
|
-
classList.add(cls1);
|
|
128
|
-
}
|
|
129
|
-
this._elemRef.nativeElement.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
classList.add(cls);
|
|
133
|
-
classList.remove(cls1);
|
|
134
|
-
this.close();
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
_assignColor(color) {
|
|
138
|
-
this._color = color;
|
|
139
|
-
this._cd.markForCheck();
|
|
140
|
-
}
|
|
141
|
-
_assignButtonText(text) {
|
|
142
|
-
this.buttonText = text;
|
|
143
|
-
this._cd.markForCheck();
|
|
144
|
-
}
|
|
145
|
-
_assignButtonIcon(icon) {
|
|
146
|
-
this._icon = icon;
|
|
147
|
-
this._cd.markForCheck();
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
ClipNoteComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Directionality }, { token: i0.ElementRef, host: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
ClipNoteComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.6", type: ClipNoteComponent, selector: "bui-clip-note", host: { classAttribute: "bui-clip-note bui-host" }, viewQueries: [{ propertyName: "_viewDiv", first: true, predicate: ["viewDiv"], descendants: true, read: ElementRef, static: true }, { propertyName: "_noteViewRef", first: true, predicate: ["noteViewRef"], descendants: true, read: ViewContainerRef, static: true }, { propertyName: "_fallbackTemplate", first: true, predicate: ["fallbackTemplate"], descendants: true, static: true }], ngImport: i0, template: "<div class=\"bui-clip-note-wrapper\">\n\t<div\n\t\tclass=\"bui-clip-note-content bui-border-{{ _color }} mat-elevation-z3\"\n\t\t[@panelAnimation]=\"panelState\"\n\t\t#viewDiv\n\t\t(cdkObserveContent)=\"_checkContent()\"\n\t>\n\t\t<ng-container #noteViewRef></ng-container>\n\t</div>\n\n\t<button\n\t\tmat-raised-button\n\t\tclass=\"bui-clip-note-trigger bui-clip-note-trigger-{{ buttonIconState }}\"\n\t\t[color]=\"_color\"\n\t\t[@buttonAnimation]=\"buttonState\"\n\t\t(mouseenter)=\"_mouseOverButton(true)\"\n\t\t(mouseleave)=\"_mouseOverButton(false)\"\n\t\t(click)=\"_scheduleToggle()\"\n\t>\n\t\t<mat-icon\n\t\t\t[@buttonIconAnimation]=\"_icon ? 'disabled' : buttonIconState\"\n\t\t\t(@buttonIconAnimation.start)=\"_buttonAnimating = true\"\n\t\t\t(@buttonIconAnimation.done)=\"_buttonAnimating = false; _checkToggle()\"\n\t\t\t[buiIcon]=\"_icon || (direction === 'rtl' ? 'chevron_right' : 'chevron_left')\"\n\t\t\tstyle=\"margin: 0\"\n\t\t>\n\t\t</mat-icon>\n\t\t<span [@buttonTextAnimation]=\"buttonState\" class=\"bui-clip-note-button-text\"> {{ buttonText }}</span>\n\t</button>\n</div>\n\n<ng-template #fallbackTemplate>\n\t<div [innerHTML]=\"_content\"></div>\n</ng-template>\n", styles: [":host{position:absolute;top:2rem;box-sizing:border-box;z-index:var(--bui-clip-note-z-index, 100)}:host(.bui-clip-note-hidden){display:none}:host-context(:not([dir=rtl])){right:0}:host-context(:not([dir=rtl])) .bui-clip-note-trigger{right:-18px}:host-context([dir=rtl]){left:0;right:unset}:host-context([dir=rtl]) .bui-clip-note-trigger{left:-18px;right:unset}.bui-clip-note-trigger{border-radius:18px;overflow:hidden;position:absolute;top:-1rem}.bui-clip-note-button-text{display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:middle}.bui-clip-note-wrapper{position:relative}.bui-clip-note-content{max-width:320px;min-width:150px;background-color:var(--bui-bg-body);border-radius:6px;border-width:1px;border-style:solid;padding:1rem;overflow-y:hidden}@keyframes rubber-band{0%{transform:scaleZ(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleZ(1)}}:host(.bui-clip-note-reveal) .bui-clip-note-trigger{animation:rubber-band .8s ease}\n"], dependencies: [{ kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.CdkObserveContent, selector: "[cdkObserveContent]", inputs: ["cdkObserveContentDisabled", "debounce"], outputs: ["cdkObserveContent"], exportAs: ["cdkObserveContent"] }, { kind: "directive", type: i5.IconDirective, selector: "[buiIcon]", inputs: ["buiIcon", "size", "variant"] }], animations: [
|
|
152
|
-
trigger('buttonAnimation', [
|
|
153
|
-
state('*', style({ width: '36px', minWidth: 0, padding: 0 })),
|
|
154
|
-
state('active', style({})),
|
|
155
|
-
transition('inactive <=> active', [
|
|
156
|
-
group([animate('250ms cubic-bezier(.56,.14,.18,.91)'), query('@buttonTextAnimation', animateChild())]),
|
|
157
|
-
query('@buttonIconAnimation', animateChild())
|
|
158
|
-
])
|
|
159
|
-
]),
|
|
160
|
-
trigger('buttonTextAnimation', [
|
|
161
|
-
state('inactive', style({ opacity: 0, width: 0 })),
|
|
162
|
-
state('active', style({ opacity: 1 })),
|
|
163
|
-
transition('inactive => active', animate('250ms cubic-bezier(.88,.15,.63,.61)')),
|
|
164
|
-
transition('active => inactive', animate('250ms cubic-bezier(.05,.72,.44,.92)'))
|
|
165
|
-
]),
|
|
166
|
-
trigger('buttonIconAnimation', [
|
|
167
|
-
state('active-ltr', style({ transform: 'rotate(-90deg)' })),
|
|
168
|
-
state('active-rtl', style({ transform: 'rotate(90deg)' })),
|
|
169
|
-
state('open-ltr', style({ transform: 'rotate(90deg)' })),
|
|
170
|
-
state('open-rtl', style({ transform: 'rotate(270deg)' })),
|
|
171
|
-
state('inactive', style({})),
|
|
172
|
-
transition('inactive <=> *, * <=> open-ltr, * <=> open-rtl', animate('250ms cubic-bezier(0.25, 0.8, 0.25, 1)'))
|
|
173
|
-
]),
|
|
174
|
-
trigger('panelAnimation', [
|
|
175
|
-
state('open', style({})),
|
|
176
|
-
state('closed-rtl', style({ transform: 'scale(0) translate(-80%, -70%)', padding: 0, opacity: 0 })),
|
|
177
|
-
state('closed-ltr', style({ transform: 'scale(0) translate(80%, -70%)', padding: 0, opacity: 0 })),
|
|
178
|
-
transition('open <=> *', animate('300ms cubic-bezier(.69,.12,.6,.62)'))
|
|
179
|
-
])
|
|
180
|
-
], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
181
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteComponent, decorators: [{
|
|
182
|
-
type: Component,
|
|
183
|
-
args: [{ selector: 'bui-clip-note', host: { class: 'bui-clip-note bui-host' }, animations: [
|
|
184
|
-
trigger('buttonAnimation', [
|
|
185
|
-
state('*', style({ width: '36px', minWidth: 0, padding: 0 })),
|
|
186
|
-
state('active', style({})),
|
|
187
|
-
transition('inactive <=> active', [
|
|
188
|
-
group([animate('250ms cubic-bezier(.56,.14,.18,.91)'), query('@buttonTextAnimation', animateChild())]),
|
|
189
|
-
query('@buttonIconAnimation', animateChild())
|
|
190
|
-
])
|
|
191
|
-
]),
|
|
192
|
-
trigger('buttonTextAnimation', [
|
|
193
|
-
state('inactive', style({ opacity: 0, width: 0 })),
|
|
194
|
-
state('active', style({ opacity: 1 })),
|
|
195
|
-
transition('inactive => active', animate('250ms cubic-bezier(.88,.15,.63,.61)')),
|
|
196
|
-
transition('active => inactive', animate('250ms cubic-bezier(.05,.72,.44,.92)'))
|
|
197
|
-
]),
|
|
198
|
-
trigger('buttonIconAnimation', [
|
|
199
|
-
state('active-ltr', style({ transform: 'rotate(-90deg)' })),
|
|
200
|
-
state('active-rtl', style({ transform: 'rotate(90deg)' })),
|
|
201
|
-
state('open-ltr', style({ transform: 'rotate(90deg)' })),
|
|
202
|
-
state('open-rtl', style({ transform: 'rotate(270deg)' })),
|
|
203
|
-
state('inactive', style({})),
|
|
204
|
-
transition('inactive <=> *, * <=> open-ltr, * <=> open-rtl', animate('250ms cubic-bezier(0.25, 0.8, 0.25, 1)'))
|
|
205
|
-
]),
|
|
206
|
-
trigger('panelAnimation', [
|
|
207
|
-
state('open', style({})),
|
|
208
|
-
state('closed-rtl', style({ transform: 'scale(0) translate(-80%, -70%)', padding: 0, opacity: 0 })),
|
|
209
|
-
state('closed-ltr', style({ transform: 'scale(0) translate(80%, -70%)', padding: 0, opacity: 0 })),
|
|
210
|
-
transition('open <=> *', animate('300ms cubic-bezier(.69,.12,.6,.62)'))
|
|
211
|
-
])
|
|
212
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"bui-clip-note-wrapper\">\n\t<div\n\t\tclass=\"bui-clip-note-content bui-border-{{ _color }} mat-elevation-z3\"\n\t\t[@panelAnimation]=\"panelState\"\n\t\t#viewDiv\n\t\t(cdkObserveContent)=\"_checkContent()\"\n\t>\n\t\t<ng-container #noteViewRef></ng-container>\n\t</div>\n\n\t<button\n\t\tmat-raised-button\n\t\tclass=\"bui-clip-note-trigger bui-clip-note-trigger-{{ buttonIconState }}\"\n\t\t[color]=\"_color\"\n\t\t[@buttonAnimation]=\"buttonState\"\n\t\t(mouseenter)=\"_mouseOverButton(true)\"\n\t\t(mouseleave)=\"_mouseOverButton(false)\"\n\t\t(click)=\"_scheduleToggle()\"\n\t>\n\t\t<mat-icon\n\t\t\t[@buttonIconAnimation]=\"_icon ? 'disabled' : buttonIconState\"\n\t\t\t(@buttonIconAnimation.start)=\"_buttonAnimating = true\"\n\t\t\t(@buttonIconAnimation.done)=\"_buttonAnimating = false; _checkToggle()\"\n\t\t\t[buiIcon]=\"_icon || (direction === 'rtl' ? 'chevron_right' : 'chevron_left')\"\n\t\t\tstyle=\"margin: 0\"\n\t\t>\n\t\t</mat-icon>\n\t\t<span [@buttonTextAnimation]=\"buttonState\" class=\"bui-clip-note-button-text\"> {{ buttonText }}</span>\n\t</button>\n</div>\n\n<ng-template #fallbackTemplate>\n\t<div [innerHTML]=\"_content\"></div>\n</ng-template>\n", styles: [":host{position:absolute;top:2rem;box-sizing:border-box;z-index:var(--bui-clip-note-z-index, 100)}:host(.bui-clip-note-hidden){display:none}:host-context(:not([dir=rtl])){right:0}:host-context(:not([dir=rtl])) .bui-clip-note-trigger{right:-18px}:host-context([dir=rtl]){left:0;right:unset}:host-context([dir=rtl]) .bui-clip-note-trigger{left:-18px;right:unset}.bui-clip-note-trigger{border-radius:18px;overflow:hidden;position:absolute;top:-1rem}.bui-clip-note-button-text{display:inline-block;overflow:hidden;white-space:nowrap;vertical-align:middle}.bui-clip-note-wrapper{position:relative}.bui-clip-note-content{max-width:320px;min-width:150px;background-color:var(--bui-bg-body);border-radius:6px;border-width:1px;border-style:solid;padding:1rem;overflow-y:hidden}@keyframes rubber-band{0%{transform:scaleZ(1)}30%{transform:scale3d(1.25,.75,1)}40%{transform:scale3d(.75,1.25,1)}50%{transform:scale3d(1.15,.85,1)}65%{transform:scale3d(.95,1.05,1)}75%{transform:scale3d(1.05,.95,1)}to{transform:scaleZ(1)}}:host(.bui-clip-note-reveal) .bui-clip-note-trigger{animation:rubber-band .8s ease}\n"] }]
|
|
213
|
-
}], ctorParameters: function () {
|
|
214
|
-
return [{ type: i0.ChangeDetectorRef }, { type: i1.Directionality }, { type: i0.ElementRef, decorators: [{
|
|
215
|
-
type: Host
|
|
216
|
-
}] }];
|
|
217
|
-
}, propDecorators: { _viewDiv: [{
|
|
218
|
-
type: ViewChild,
|
|
219
|
-
args: ['viewDiv', { static: true, read: ElementRef }]
|
|
220
|
-
}], _noteViewRef: [{
|
|
221
|
-
type: ViewChild,
|
|
222
|
-
args: ['noteViewRef', { static: true, read: ViewContainerRef }]
|
|
223
|
-
}], _fallbackTemplate: [{
|
|
224
|
-
type: ViewChild,
|
|
225
|
-
args: ['fallbackTemplate', { static: true }]
|
|
226
|
-
}] } });
|
|
227
|
-
|
|
228
|
-
/** Used to provide default config for clip notes. */
|
|
229
|
-
const CLIP_NOTE_DEFAULT_CONFIG = new InjectionToken('bui-clip-note.default-config', {
|
|
230
|
-
factory: () => ({ color: 'primary', caption: 'More info' })
|
|
231
|
-
});
|
|
232
|
-
/**
|
|
233
|
-
* A clip note consists of a toggle button and a floating 'notepad' element, attached to the top end of the host element's
|
|
234
|
-
* viewable area. The 'notepad' normally collapses away and only reveals itself when the toggle button is active.
|
|
235
|
-
*
|
|
236
|
-
* The toggle button clips on the edge of the host element and expands to display the full caption when hovered. It hides itself
|
|
237
|
-
* automatically when there is no content provided via the `buiClipNote` property of the directive.
|
|
238
|
-
*
|
|
239
|
-
* The clip note component is suitable for large page container elements with visible boundaries. It can present contextual
|
|
240
|
-
* information regarding and in addition to the content displayed in the main view area.
|
|
241
|
-
*
|
|
242
|
-
* The properties `buiClipNoteColor` and `buiClipNoteCaption` customise the appearance of the clip note, the default values of which
|
|
243
|
-
* can optionally be provided by the `ClipNoteModule.forConfig()` method.
|
|
244
|
-
*
|
|
245
|
-
*/
|
|
246
|
-
class ClipNoteDirective {
|
|
247
|
-
constructor(_elementRef, _vc, _config) {
|
|
248
|
-
this._elementRef = _elementRef;
|
|
249
|
-
this._vc = _vc;
|
|
250
|
-
/** Emits when the panel opens */
|
|
251
|
-
this.buiClipNoteOpened = new EventEmitter();
|
|
252
|
-
/** Emits when the panel closes */
|
|
253
|
-
this.buiClipNoteClosed = new EventEmitter();
|
|
254
|
-
this._color = 'primary';
|
|
255
|
-
this._caption = _config.caption;
|
|
256
|
-
this._color = _config.color;
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Provide content to the clip note's floating notepad element.
|
|
260
|
-
* It accepts a `string` of HTML content or a `TemplateRef` object.
|
|
261
|
-
*/
|
|
262
|
-
get buiClipNote() {
|
|
263
|
-
return this._content;
|
|
264
|
-
}
|
|
265
|
-
set buiClipNote(note) {
|
|
266
|
-
this._content = note;
|
|
267
|
-
if (this._compRef) {
|
|
268
|
-
this._processContent();
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
/**
|
|
272
|
-
* Customise the theme color alias.
|
|
273
|
-
* @default 'primary'
|
|
274
|
-
*/
|
|
275
|
-
get buiClipNoteColor() {
|
|
276
|
-
return this._color;
|
|
277
|
-
}
|
|
278
|
-
set buiClipNoteColor(color) {
|
|
279
|
-
this._color = color;
|
|
280
|
-
if (this._compRef) {
|
|
281
|
-
this._compRef.instance._assignColor(this._color);
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Customise the icon on the toggle button. With this property specified, the animation on the icon
|
|
286
|
-
* will not be active.
|
|
287
|
-
*/
|
|
288
|
-
get buiClipNoteIcon() {
|
|
289
|
-
return this._icon;
|
|
290
|
-
}
|
|
291
|
-
set buiClipNoteIcon(icon) {
|
|
292
|
-
this._icon = icon;
|
|
293
|
-
if (this._compRef) {
|
|
294
|
-
this._compRef.instance._assignButtonIcon(this._icon);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
/**
|
|
298
|
-
* The caption of the toggle button when expanded.
|
|
299
|
-
*/
|
|
300
|
-
get buiClipNoteCaption() {
|
|
301
|
-
return this._caption;
|
|
302
|
-
}
|
|
303
|
-
set buiClipNoteCaption(text) {
|
|
304
|
-
this._caption = text;
|
|
305
|
-
if (this._compRef) {
|
|
306
|
-
this._compRef.instance._assignButtonText(this._caption);
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
ngAfterViewInit() {
|
|
310
|
-
setTimeout(() => {
|
|
311
|
-
this._compRef = this._vc.createComponent(ClipNoteComponent);
|
|
312
|
-
const childElement = this._compRef.location.nativeElement;
|
|
313
|
-
const element = this._elementRef.nativeElement;
|
|
314
|
-
element.style.position = 'relative';
|
|
315
|
-
element.appendChild(childElement);
|
|
316
|
-
this._compRef.instance._assignColor(this._color);
|
|
317
|
-
this._compRef.instance._assignButtonText(this._caption);
|
|
318
|
-
this._compRef.instance._assignButtonIcon(this._icon);
|
|
319
|
-
this._compRef.instance.opened.subscribe(this.buiClipNoteOpened.next.bind(this.buiClipNoteOpened));
|
|
320
|
-
this._compRef.instance.closed.subscribe(this.buiClipNoteClosed.next.bind(this.buiClipNoteClosed));
|
|
321
|
-
this._processContent();
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
ngOnDestroy() {
|
|
325
|
-
this._compRef.destroy();
|
|
326
|
-
}
|
|
327
|
-
/** Open the note panel */
|
|
328
|
-
open() {
|
|
329
|
-
this._compRef.instance.open();
|
|
330
|
-
}
|
|
331
|
-
/** Close the note panel */
|
|
332
|
-
close() {
|
|
333
|
-
this._compRef.instance.close();
|
|
334
|
-
}
|
|
335
|
-
_processContent() {
|
|
336
|
-
this._compRef.instance._contentChanged(this._content);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
ClipNoteDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteDirective, deps: [{ token: i0.ElementRef, host: true }, { token: i0.ViewContainerRef }, { token: CLIP_NOTE_DEFAULT_CONFIG }], target: i0.ɵɵFactoryTarget.Directive });
|
|
340
|
-
ClipNoteDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.6", type: ClipNoteDirective, selector: "[buiClipNote]", inputs: { buiClipNote: "buiClipNote", buiClipNoteColor: "buiClipNoteColor", buiClipNoteIcon: "buiClipNoteIcon", buiClipNoteCaption: "buiClipNoteCaption" }, outputs: { buiClipNoteOpened: "buiClipNoteOpened", buiClipNoteClosed: "buiClipNoteClosed" }, exportAs: ["buiClipNote"], ngImport: i0 });
|
|
341
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteDirective, decorators: [{
|
|
342
|
-
type: Directive,
|
|
343
|
-
args: [{
|
|
344
|
-
selector: '[buiClipNote]',
|
|
345
|
-
exportAs: 'buiClipNote'
|
|
346
|
-
}]
|
|
347
|
-
}], ctorParameters: function () {
|
|
348
|
-
return [{ type: i0.ElementRef, decorators: [{
|
|
349
|
-
type: Host
|
|
350
|
-
}] }, { type: i0.ViewContainerRef }, { type: undefined, decorators: [{
|
|
351
|
-
type: Inject,
|
|
352
|
-
args: [CLIP_NOTE_DEFAULT_CONFIG]
|
|
353
|
-
}] }];
|
|
354
|
-
}, propDecorators: { buiClipNote: [{
|
|
355
|
-
type: Input
|
|
356
|
-
}], buiClipNoteColor: [{
|
|
357
|
-
type: Input
|
|
358
|
-
}], buiClipNoteIcon: [{
|
|
359
|
-
type: Input
|
|
360
|
-
}], buiClipNoteCaption: [{
|
|
361
|
-
type: Input
|
|
362
|
-
}], buiClipNoteOpened: [{
|
|
363
|
-
type: Output
|
|
364
|
-
}], buiClipNoteClosed: [{
|
|
365
|
-
type: Output
|
|
366
|
-
}] } });
|
|
367
|
-
|
|
368
|
-
class ClipNoteModule {
|
|
369
|
-
static forConfig(config) {
|
|
370
|
-
return {
|
|
371
|
-
ngModule: ClipNoteModule,
|
|
372
|
-
providers: [{ provide: CLIP_NOTE_DEFAULT_CONFIG, useValue: config }]
|
|
373
|
-
};
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
ClipNoteModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
377
|
-
ClipNoteModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, declarations: [ClipNoteComponent, ClipNoteDirective], imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule], exports: [ClipNoteDirective] });
|
|
378
|
-
ClipNoteModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule] });
|
|
379
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: ClipNoteModule, decorators: [{
|
|
380
|
-
type: NgModule,
|
|
381
|
-
args: [{
|
|
382
|
-
declarations: [ClipNoteComponent, ClipNoteDirective],
|
|
383
|
-
imports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule],
|
|
384
|
-
exports: [ClipNoteDirective]
|
|
385
|
-
}]
|
|
386
|
-
}] });
|
|
387
|
-
|
|
388
|
-
/**
|
|
389
|
-
* Generated bundle index. Do not edit.
|
|
390
|
-
*/
|
|
391
|
-
|
|
392
|
-
export { ClipNoteDirective, ClipNoteModule };
|
|
393
|
-
//# sourceMappingURL=bravura-ui-clip-note.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bravura-ui-clip-note.mjs","sources":["../../../projects/ui/clip-note/clip-note.component.ts","../../../projects/ui/clip-note/clip-note.component.html","../../../projects/ui/clip-note/clip-note.directive.ts","../../../projects/ui/clip-note/clip-note.module.ts","../../../projects/ui/clip-note/bravura-ui-clip-note.ts"],"sourcesContent":["import { animate, animateChild, group, query, state, style, transition, trigger } from '@angular/animations';\nimport { Directionality } from '@angular/cdk/bidi';\nimport {\n\tChangeDetectionStrategy,\n\tChangeDetectorRef,\n\tComponent,\n\tElementRef,\n\tEmbeddedViewRef,\n\tEventEmitter,\n\tHost,\n\tOnDestroy,\n\tOnInit,\n\tTemplateRef,\n\tViewChild,\n\tViewContainerRef\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Component({\n\tselector: 'bui-clip-note',\n\ttemplateUrl: './clip-note.component.html',\n\tstyleUrls: ['./clip-note.component.scss'],\n\thost: { class: 'bui-clip-note bui-host' },\n\tanimations: [\n\t\ttrigger('buttonAnimation', [\n\t\t\tstate('*', style({ width: '36px', minWidth: 0, padding: 0 })),\n\t\t\tstate('active', style({})),\n\t\t\ttransition('inactive <=> active', [\n\t\t\t\tgroup([animate('250ms cubic-bezier(.56,.14,.18,.91)'), query('@buttonTextAnimation', animateChild())]),\n\t\t\t\tquery('@buttonIconAnimation', animateChild())\n\t\t\t])\n\t\t]),\n\t\ttrigger('buttonTextAnimation', [\n\t\t\tstate('inactive', style({ opacity: 0, width: 0 })),\n\t\t\tstate('active', style({ opacity: 1 })),\n\t\t\ttransition('inactive => active', animate('250ms cubic-bezier(.88,.15,.63,.61)')),\n\t\t\ttransition('active => inactive', animate('250ms cubic-bezier(.05,.72,.44,.92)'))\n\t\t]),\n\t\ttrigger('buttonIconAnimation', [\n\t\t\tstate('active-ltr', style({ transform: 'rotate(-90deg)' })),\n\t\t\tstate('active-rtl', style({ transform: 'rotate(90deg)' })),\n\t\t\tstate('open-ltr', style({ transform: 'rotate(90deg)' })),\n\t\t\tstate('open-rtl', style({ transform: 'rotate(270deg)' })),\n\t\t\tstate('inactive', style({})),\n\t\t\ttransition('inactive <=> *, * <=> open-ltr, * <=> open-rtl', animate('250ms cubic-bezier(0.25, 0.8, 0.25, 1)'))\n\t\t]),\n\t\ttrigger('panelAnimation', [\n\t\t\tstate('open', style({})),\n\t\t\tstate('closed-rtl', style({ transform: 'scale(0) translate(-80%, -70%)', padding: 0, opacity: 0 })),\n\t\t\tstate('closed-ltr', style({ transform: 'scale(0) translate(80%, -70%)', padding: 0, opacity: 0 })),\n\t\t\ttransition('open <=> *', animate('300ms cubic-bezier(.69,.12,.6,.62)'))\n\t\t])\n\t],\n\tchangeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class ClipNoteComponent implements OnInit, OnDestroy {\n\tbuttonText = '';\n\n\tget buttonState(): string {\n\t\tif (this._hovering || this.panelState === 'open') {\n\t\t\treturn 'active';\n\t\t}\n\t\treturn 'inactive';\n\t}\n\n\tget buttonIconState(): string {\n\t\tif (this.panelState === 'open') {\n\t\t\treturn `open-${this.direction}`;\n\t\t}\n\t\tif (this.buttonState === 'active') {\n\t\t\treturn `active-${this.direction}`;\n\t\t}\n\t\treturn 'inactive';\n\t}\n\n\tpanelState: 'open' | 'closed-ltr' | 'closed-rtl' = 'closed-ltr';\n\n\tdirection = 'ltr';\n\t_contentView?: EmbeddedViewRef<any>;\n\t_content?: string;\n\t_color: ThemePalette;\n\t_buttonAnimating = false;\n\t_icon?: string;\n\t_hasContent = false;\n\n\treadonly opened = new EventEmitter<void>();\n\treadonly closed = new EventEmitter<void>();\n\n\tprivate _hovering = false;\n\tprivate _destroyed$ = new Subject<void>();\n\tprivate _toggleQueue: boolean[] = [];\n\n\t@ViewChild('viewDiv', { static: true, read: ElementRef })\n\tprivate _viewDiv!: ElementRef<HTMLDivElement>;\n\n\t@ViewChild('noteViewRef', { static: true, read: ViewContainerRef })\n\tprivate _noteViewRef!: ViewContainerRef;\n\n\t@ViewChild('fallbackTemplate', { static: true })\n\tprivate _fallbackTemplate!: TemplateRef<any>;\n\n\tconstructor(\n\t\tprivate _cd: ChangeDetectorRef,\n\t\tprivate _dir: Directionality,\n\t\t@Host() private _elemRef: ElementRef<HTMLElement>\n\t) {}\n\n\tngOnInit(): void {\n\t\tconst changeDir = () => {\n\t\t\tthis.direction = this._dir.value;\n\t\t\tthis.panelState = `closed-${this.direction}` as any;\n\t\t\tthis._cd.markForCheck();\n\t\t};\n\t\tthis._dir.change.pipe(takeUntil(this._destroyed$)).subscribe(changeDir);\n\t\tchangeDir();\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._destroyed$.next();\n\t\tthis._destroyed$.complete();\n\t}\n\n\t_mouseOverButton(hovering: boolean) {\n\t\tif (this._hovering !== hovering) {\n\t\t\tthis._hovering = hovering;\n\t\t\tthis._cd.markForCheck();\n\t\t}\n\t}\n\n\ttoggle() {\n\t\tthis.panelState = this.panelState === `closed-${this.direction}` ? 'open' : (`closed-${this.direction}` as any);\n\t\tthis._cd.markForCheck();\n\t}\n\n\t_scheduleToggle() {\n\t\tif (this._buttonAnimating) {\n\t\t\tthis._toggleQueue.push(true);\n\t\t} else {\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\t_checkToggle() {\n\t\tif (this._toggleQueue.pop()) {\n\t\t\tthis.toggle();\n\t\t}\n\t}\n\n\topen() {\n\t\tthis.panelState = 'open';\n\t\tthis._cd.markForCheck();\n\t\tthis._emit();\n\t}\n\n\tclose() {\n\t\tthis.panelState = `closed-${this.direction}` as any;\n\t\tthis._cd.markForCheck();\n\t\tthis._emit();\n\t}\n\n\t_emit() {\n\t\tif (this.panelState === 'open') {\n\t\t\tthis.opened.emit();\n\t\t} else {\n\t\t\tthis.closed.emit();\n\t\t}\n\t}\n\n\t_contentChanged(content?: string | TemplateRef<any>) {\n\t\tlet template: TemplateRef<any>;\n\n\t\tif (content instanceof TemplateRef) {\n\t\t\ttemplate = content;\n\t\t} else {\n\t\t\ttemplate = this._fallbackTemplate;\n\t\t\tthis._content = content;\n\t\t}\n\t\tthis._noteViewRef.clear();\n\t\tconst context = {};\n\t\tthis._contentView = this._noteViewRef.createEmbeddedView(template, context);\n\t\tthis._checkContent(true);\n\t}\n\n\t_checkContent(initial?: boolean) {\n\t\tthis._contentView?.detectChanges();\n\t\tthis._hasContent = !!this._viewDiv.nativeElement.textContent?.trim();\n\t\tconst classList = this._elemRef.nativeElement.classList;\n\t\tconst cls = 'bui-clip-note-hidden';\n\t\tconst cls1 = 'bui-clip-note-reveal';\n\t\tif (this._hasContent) {\n\t\t\tclassList.remove(cls);\n\t\t\tif (!initial && this.panelState !== 'open') {\n\t\t\t\tclassList.add(cls1);\n\t\t\t}\n\t\t\tthis._elemRef.nativeElement.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n\t\t} else {\n\t\t\tclassList.add(cls);\n\t\t\tclassList.remove(cls1);\n\t\t\tthis.close();\n\t\t}\n\t}\n\n\t_assignColor(color: ThemePalette) {\n\t\tthis._color = color;\n\t\tthis._cd.markForCheck();\n\t}\n\n\t_assignButtonText(text: string) {\n\t\tthis.buttonText = text;\n\t\tthis._cd.markForCheck();\n\t}\n\n\t_assignButtonIcon(icon?: string) {\n\t\tthis._icon = icon;\n\t\tthis._cd.markForCheck();\n\t}\n}\n","<div class=\"bui-clip-note-wrapper\">\n\t<div\n\t\tclass=\"bui-clip-note-content bui-border-{{ _color }} mat-elevation-z3\"\n\t\t[@panelAnimation]=\"panelState\"\n\t\t#viewDiv\n\t\t(cdkObserveContent)=\"_checkContent()\"\n\t>\n\t\t<ng-container #noteViewRef></ng-container>\n\t</div>\n\n\t<button\n\t\tmat-raised-button\n\t\tclass=\"bui-clip-note-trigger bui-clip-note-trigger-{{ buttonIconState }}\"\n\t\t[color]=\"_color\"\n\t\t[@buttonAnimation]=\"buttonState\"\n\t\t(mouseenter)=\"_mouseOverButton(true)\"\n\t\t(mouseleave)=\"_mouseOverButton(false)\"\n\t\t(click)=\"_scheduleToggle()\"\n\t>\n\t\t<mat-icon\n\t\t\t[@buttonIconAnimation]=\"_icon ? 'disabled' : buttonIconState\"\n\t\t\t(@buttonIconAnimation.start)=\"_buttonAnimating = true\"\n\t\t\t(@buttonIconAnimation.done)=\"_buttonAnimating = false; _checkToggle()\"\n\t\t\t[buiIcon]=\"_icon || (direction === 'rtl' ? 'chevron_right' : 'chevron_left')\"\n\t\t\tstyle=\"margin: 0\"\n\t\t>\n\t\t</mat-icon>\n\t\t<span [@buttonTextAnimation]=\"buttonState\" class=\"bui-clip-note-button-text\"> {{ buttonText }}</span>\n\t</button>\n</div>\n\n<ng-template #fallbackTemplate>\n\t<div [innerHTML]=\"_content\"></div>\n</ng-template>\n","import {\n\tAfterViewInit,\n\tComponentRef,\n\tDirective,\n\tElementRef,\n\tEventEmitter,\n\tHost,\n\tInject,\n\tInjectionToken,\n\tInput,\n\tOutput,\n\tTemplateRef,\n\tViewContainerRef\n} from '@angular/core';\nimport { ThemePalette } from '@angular/material/core';\nimport { ClipNoteComponent } from './clip-note.component';\n\nexport interface ClipNoteDefaultConfig {\n\tcolor: ThemePalette;\n\tcaption: string;\n}\n\n/** Used to provide default config for clip notes. */\nexport const CLIP_NOTE_DEFAULT_CONFIG = new InjectionToken<ClipNoteDefaultConfig>('bui-clip-note.default-config', {\n\tfactory: () => ({ color: 'primary', caption: 'More info' })\n});\n\n/**\n * A clip note consists of a toggle button and a floating 'notepad' element, attached to the top end of the host element's\n * viewable area. The 'notepad' normally collapses away and only reveals itself when the toggle button is active.\n *\n * The toggle button clips on the edge of the host element and expands to display the full caption when hovered. It hides itself\n * automatically when there is no content provided via the `buiClipNote` property of the directive.\n *\n * The clip note component is suitable for large page container elements with visible boundaries. It can present contextual\n * information regarding and in addition to the content displayed in the main view area.\n *\n * The properties `buiClipNoteColor` and `buiClipNoteCaption` customise the appearance of the clip note, the default values of which\n * can optionally be provided by the `ClipNoteModule.forConfig()` method.\n *\n */\n@Directive({\n\tselector: '[buiClipNote]',\n\texportAs: 'buiClipNote'\n})\nexport class ClipNoteDirective implements AfterViewInit {\n\t/**\n\t * Provide content to the clip note's floating notepad element.\n\t * It accepts a `string` of HTML content or a `TemplateRef` object.\n\t */\n\t@Input()\n\tget buiClipNote(): string | TemplateRef<any> | undefined {\n\t\treturn this._content;\n\t}\n\tset buiClipNote(note: string | TemplateRef<any> | undefined) {\n\t\tthis._content = note;\n\t\tif (this._compRef) {\n\t\t\tthis._processContent();\n\t\t}\n\t}\n\n\t/**\n\t * Customise the theme color alias.\n\t * @default 'primary'\n\t */\n\t@Input()\n\tget buiClipNoteColor(): ThemePalette {\n\t\treturn this._color;\n\t}\n\tset buiClipNoteColor(color: ThemePalette) {\n\t\tthis._color = color;\n\t\tif (this._compRef) {\n\t\t\tthis._compRef.instance._assignColor(this._color);\n\t\t}\n\t}\n\n\t/**\n\t * Customise the icon on the toggle button. With this property specified, the animation on the icon\n\t * will not be active.\n\t */\n\t@Input()\n\tget buiClipNoteIcon(): string | undefined {\n\t\treturn this._icon;\n\t}\n\tset buiClipNoteIcon(icon: string | undefined) {\n\t\tthis._icon = icon;\n\t\tif (this._compRef) {\n\t\t\tthis._compRef.instance._assignButtonIcon(this._icon);\n\t\t}\n\t}\n\n\t/**\n\t * The caption of the toggle button when expanded.\n\t */\n\t@Input()\n\tget buiClipNoteCaption(): string {\n\t\treturn this._caption;\n\t}\n\tset buiClipNoteCaption(text: string) {\n\t\tthis._caption = text;\n\t\tif (this._compRef) {\n\t\t\tthis._compRef.instance._assignButtonText(this._caption);\n\t\t}\n\t}\n\n\t/** Emits when the panel opens */\n\t@Output()\n\treadonly buiClipNoteOpened = new EventEmitter<void>();\n\n\t/** Emits when the panel closes */\n\t@Output()\n\treadonly buiClipNoteClosed = new EventEmitter<void>();\n\n\tprivate _content?: string | TemplateRef<any>;\n\tprivate _color: ThemePalette = 'primary';\n\tprivate _compRef!: ComponentRef<ClipNoteComponent>;\n\tprivate _caption: string;\n\tprivate _icon?: string;\n\n\tconstructor(\n\t\t@Host() private _elementRef: ElementRef<HTMLElement>,\n\t\tprivate _vc: ViewContainerRef,\n\t\t@Inject(CLIP_NOTE_DEFAULT_CONFIG) _config: ClipNoteDefaultConfig\n\t) {\n\t\tthis._caption = _config.caption;\n\t\tthis._color = _config.color;\n\t}\n\n\tngAfterViewInit(): void {\n\t\tsetTimeout(() => {\n\t\t\tthis._compRef = this._vc.createComponent(ClipNoteComponent);\n\t\t\tconst childElement: HTMLElement = this._compRef.location.nativeElement;\n\t\t\tconst element = this._elementRef.nativeElement;\n\t\t\telement.style.position = 'relative';\n\t\t\telement.appendChild(childElement);\n\t\t\tthis._compRef.instance._assignColor(this._color);\n\t\t\tthis._compRef.instance._assignButtonText(this._caption);\n\t\t\tthis._compRef.instance._assignButtonIcon(this._icon);\n\t\t\tthis._compRef.instance.opened.subscribe(this.buiClipNoteOpened.next.bind(this.buiClipNoteOpened));\n\t\t\tthis._compRef.instance.closed.subscribe(this.buiClipNoteClosed.next.bind(this.buiClipNoteClosed));\n\t\t\tthis._processContent();\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis._compRef.destroy();\n\t}\n\n\t/** Open the note panel */\n\topen() {\n\t\tthis._compRef.instance.open();\n\t}\n\n\t/** Close the note panel */\n\tclose() {\n\t\tthis._compRef.instance.close();\n\t}\n\n\tprivate _processContent() {\n\t\tthis._compRef.instance._contentChanged(this._content);\n\t}\n}\n","import { BidiModule } from '@angular/cdk/bidi';\nimport { ObserversModule } from '@angular/cdk/observers';\nimport { CommonModule } from '@angular/common';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { BuiCommonModule } from '@bravura/ui/common';\nimport { IconFontModule } from '@bravura/ui/icon-font';\nimport { ClipNoteComponent } from './clip-note.component';\nimport { ClipNoteDefaultConfig, ClipNoteDirective, CLIP_NOTE_DEFAULT_CONFIG } from './clip-note.directive';\n\n@NgModule({\n\tdeclarations: [ClipNoteComponent, ClipNoteDirective],\n\timports: [CommonModule, MatButtonModule, MatIconModule, BidiModule, BuiCommonModule, ObserversModule, IconFontModule],\n\texports: [ClipNoteDirective]\n})\nexport class ClipNoteModule {\n\tstatic forConfig(config: ClipNoteDefaultConfig): ModuleWithProviders<ClipNoteModule> {\n\t\treturn {\n\t\t\tngModule: ClipNoteModule,\n\t\t\tproviders: [{ provide: CLIP_NOTE_DEFAULT_CONFIG, useValue: config }]\n\t\t};\n\t}\n}\n\nexport { ClipNoteDirective };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
import * as i1 from '@angular/cdk/bidi';
|
|
2
|
-
import { BidiModule } from '@angular/cdk/bidi';
|
|
3
|
-
import { DOCUMENT } from '@angular/common';
|
|
4
|
-
import * as i0 from '@angular/core';
|
|
5
|
-
import { NgModule, Optional, SkipSelf, Inject } from '@angular/core';
|
|
6
|
-
|
|
7
|
-
function generateID() {
|
|
8
|
-
return Math.round(Math.random() * Math.pow(2, 50)).toString(36);
|
|
9
|
-
}
|
|
10
|
-
function isElementInViewport(el) {
|
|
11
|
-
const rect = el.getBoundingClientRect();
|
|
12
|
-
return (rect.top >= 0 &&
|
|
13
|
-
rect.left >= 0 &&
|
|
14
|
-
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
|
|
15
|
-
rect.right <= (window.innerWidth || document.documentElement.clientWidth));
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Uses canvas.measureText to compute and return the width of the given text of given font in pixels.
|
|
19
|
-
*
|
|
20
|
-
* @param {String} text The text to be rendered.
|
|
21
|
-
* @param el the element used to compute the font styles
|
|
22
|
-
*
|
|
23
|
-
* @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393
|
|
24
|
-
*/
|
|
25
|
-
function getTextWidth(text, el = document.body) {
|
|
26
|
-
function getCssStyle(element, prop) {
|
|
27
|
-
return window.getComputedStyle(element, null).getPropertyValue(prop);
|
|
28
|
-
}
|
|
29
|
-
const fontWeight = getCssStyle(el, 'font-weight') || 'normal';
|
|
30
|
-
const fontSize = getCssStyle(el, 'font-size') || '16px';
|
|
31
|
-
const fontFamily = getCssStyle(el, 'font-family') || 'Arial';
|
|
32
|
-
const font = `${fontWeight} ${fontSize} ${fontFamily}`;
|
|
33
|
-
// re-use canvas object for better performance
|
|
34
|
-
const canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement('canvas'));
|
|
35
|
-
const context = canvas.getContext('2d');
|
|
36
|
-
context.font = font;
|
|
37
|
-
const metrics = context.measureText(text);
|
|
38
|
-
return Math.round(metrics.width);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */
|
|
42
|
-
const RTL_LOCALE_PATTERN = /^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;
|
|
43
|
-
/** Resolves a string value to a specific direction. */
|
|
44
|
-
function _resolveDirectionality(rawValue) {
|
|
45
|
-
const value = (rawValue === null || rawValue === void 0 ? void 0 : rawValue.toLowerCase()) || '';
|
|
46
|
-
if (value === 'auto' && typeof navigator !== 'undefined' && (navigator === null || navigator === void 0 ? void 0 : navigator.language)) {
|
|
47
|
-
return RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';
|
|
48
|
-
}
|
|
49
|
-
return value === 'rtl' ? 'rtl' : 'ltr';
|
|
50
|
-
}
|
|
51
|
-
class BuiCommonModule {
|
|
52
|
-
constructor(dir, thisModule, document) {
|
|
53
|
-
if (!thisModule) {
|
|
54
|
-
const observer = new MutationObserver(() => {
|
|
55
|
-
const attr = document.documentElement.getAttribute('dir') || document.body.getAttribute('dir');
|
|
56
|
-
if (attr && dir.value !== attr) {
|
|
57
|
-
const d = _resolveDirectionality(attr);
|
|
58
|
-
dir.change.emit(d);
|
|
59
|
-
if (Object.getOwnPropertyNames(dir).includes('value')) {
|
|
60
|
-
dir.value = d;
|
|
61
|
-
}
|
|
62
|
-
setTimeout(() => dir.change.emit(d));
|
|
63
|
-
}
|
|
64
|
-
});
|
|
65
|
-
observer.observe(document.documentElement, { attributes: true });
|
|
66
|
-
observer.observe(document.body, { attributes: true });
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
BuiCommonModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BuiCommonModule, deps: [{ token: i1.Directionality }, { token: BuiCommonModule, optional: true, skipSelf: true }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.NgModule });
|
|
71
|
-
BuiCommonModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.6", ngImport: i0, type: BuiCommonModule, imports: [BidiModule], exports: [BidiModule] });
|
|
72
|
-
BuiCommonModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BuiCommonModule, imports: [BidiModule, BidiModule] });
|
|
73
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.6", ngImport: i0, type: BuiCommonModule, decorators: [{
|
|
74
|
-
type: NgModule,
|
|
75
|
-
args: [{
|
|
76
|
-
declarations: [],
|
|
77
|
-
imports: [BidiModule],
|
|
78
|
-
exports: [BidiModule]
|
|
79
|
-
}]
|
|
80
|
-
}], ctorParameters: function () {
|
|
81
|
-
return [{ type: i1.Directionality }, { type: BuiCommonModule, decorators: [{
|
|
82
|
-
type: Optional
|
|
83
|
-
}, {
|
|
84
|
-
type: SkipSelf
|
|
85
|
-
}] }, { type: Document, decorators: [{
|
|
86
|
-
type: Inject,
|
|
87
|
-
args: [DOCUMENT]
|
|
88
|
-
}] }];
|
|
89
|
-
} });
|
|
90
|
-
|
|
91
|
-
/**
|
|
92
|
-
* Generated bundle index. Do not edit.
|
|
93
|
-
*/
|
|
94
|
-
|
|
95
|
-
export { BuiCommonModule, _resolveDirectionality, generateID, getTextWidth, isElementInViewport };
|
|
96
|
-
//# sourceMappingURL=bravura-ui-common.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bravura-ui-common.mjs","sources":["../../../projects/ui/common/common-utils.ts","../../../projects/ui/common/common.module.ts","../../../projects/ui/common/bravura-ui-common.ts"],"sourcesContent":["export function generateID() {\n\treturn Math.round(Math.random() * Math.pow(2, 50)).toString(36);\n}\n\nexport function isElementInViewport(el: HTMLElement) {\n\tconst rect = el.getBoundingClientRect();\n\n\treturn (\n\t\trect.top >= 0 &&\n\t\trect.left >= 0 &&\n\t\trect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&\n\t\trect.right <= (window.innerWidth || document.documentElement.clientWidth)\n\t);\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {String} text The text to be rendered.\n * @param el the element used to compute the font styles\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, el: HTMLElement = document.body): number {\n\tfunction getCssStyle(element: HTMLElement, prop: string) {\n\t\treturn window.getComputedStyle(element, null).getPropertyValue(prop);\n\t}\n\n\tconst fontWeight = getCssStyle(el, 'font-weight') || 'normal';\n\tconst fontSize = getCssStyle(el, 'font-size') || '16px';\n\tconst fontFamily = getCssStyle(el, 'font-family') || 'Arial';\n\n\tconst font = `${fontWeight} ${fontSize} ${fontFamily}`;\n\n\t// re-use canvas object for better performance\n\tconst canvas = (getTextWidth as any).canvas || ((getTextWidth as any).canvas = document.createElement('canvas'));\n\tconst context = canvas.getContext('2d');\n\tcontext.font = font;\n\tconst metrics = context.measureText(text);\n\treturn Math.round(metrics.width);\n}\n","import { BidiModule, Direction, Directionality } from '@angular/cdk/bidi';\nimport { DOCUMENT } from '@angular/common';\nimport { Inject, NgModule, Optional, SkipSelf } from '@angular/core';\n\n/** Regex that matches locales with an RTL script. Taken from `goog.i18n.bidi.isRtlLanguage`. */\nconst RTL_LOCALE_PATTERN =\n\t/^(ar|ckb|dv|he|iw|fa|nqo|ps|sd|ug|ur|yi|.*[-_](Adlm|Arab|Hebr|Nkoo|Rohg|Thaa))(?!.*[-_](Latn|Cyrl)($|-|_))($|-|_)/i;\n\n/** Resolves a string value to a specific direction. */\nexport function _resolveDirectionality(rawValue: string): Direction {\n\tconst value = rawValue?.toLowerCase() || '';\n\n\tif (value === 'auto' && typeof navigator !== 'undefined' && navigator?.language) {\n\t\treturn RTL_LOCALE_PATTERN.test(navigator.language) ? 'rtl' : 'ltr';\n\t}\n\n\treturn value === 'rtl' ? 'rtl' : 'ltr';\n}\n\n@NgModule({\n\tdeclarations: [],\n\timports: [BidiModule],\n\texports: [BidiModule]\n})\nexport class BuiCommonModule {\n\tconstructor(\n\t\tdir: Directionality,\n\t\t@Optional()\n\t\t@SkipSelf()\n\t\tthisModule: BuiCommonModule,\n\t\t@Inject(DOCUMENT) document: Document\n\t) {\n\t\tif (!thisModule) {\n\t\t\tconst observer = new MutationObserver(() => {\n\t\t\t\tconst attr = document.documentElement.getAttribute('dir') || document.body.getAttribute('dir');\n\t\t\t\tif (attr && dir.value !== attr) {\n\t\t\t\t\tconst d = _resolveDirectionality(attr);\n\t\t\t\t\tdir.change.emit(d);\n\t\t\t\t\tif (Object.getOwnPropertyNames(dir).includes('value')) {\n\t\t\t\t\t\t(dir as any).value = d;\n\t\t\t\t\t}\n\t\t\t\t\tsetTimeout(() => dir.change.emit(d));\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tobserver.observe(document.documentElement, { attributes: true });\n\t\t\tobserver.observe(document.body, { attributes: true });\n\t\t}\n\t}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|