@ifsworld/granite-components 7.0.4 → 7.1.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/date-picker/ifsworld-granite-components-date-picker.d.ts +5 -0
- package/date-picker/index.d.ts +4 -0
- package/date-picker/lib/date-picker-base.d.ts +34 -0
- package/date-picker/lib/date-picker-trigger-for.directive.d.ts +70 -0
- package/date-picker/lib/date-picker.component.d.ts +10 -0
- package/date-picker/lib/date-picker.module.d.ts +16 -0
- package/date-picker/lib/date-range-picker.component.d.ts +12 -0
- package/date-picker/package.json +19 -0
- package/esm2020/date-picker/ifsworld-granite-components-date-picker.mjs +5 -0
- package/esm2020/date-picker/index.mjs +5 -0
- package/esm2020/date-picker/lib/date-picker-base.mjs +53 -0
- package/esm2020/date-picker/lib/date-picker-trigger-for.directive.mjs +228 -0
- package/esm2020/date-picker/lib/date-picker.component.mjs +30 -0
- package/esm2020/date-picker/lib/date-picker.module.mjs +64 -0
- package/esm2020/date-picker/lib/date-range-picker.component.mjs +46 -0
- package/fesm2015/ifsworld-granite-components-date-picker.mjs +405 -0
- package/fesm2015/ifsworld-granite-components-date-picker.mjs.map +1 -0
- package/fesm2020/ifsworld-granite-components-date-picker.mjs +402 -0
- package/fesm2020/ifsworld-granite-components-date-picker.mjs.map +1 -0
- package/package.json +11 -3
- package/src/lib/core/style/_overlay.scss +10 -0
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ElementRef, EventEmitter, OnInit, TemplateRef } from '@angular/core';
|
|
2
|
+
import { Direction } from '@angular/cdk/bidi';
|
|
3
|
+
import { PrimeNGConfig } from 'primeng/api';
|
|
4
|
+
import { ClientInputInterface, ClientOutputInterface } from '@ifsworld/granite-components';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare type PositionX = 'before' | 'after';
|
|
7
|
+
export declare type PositionY = 'above' | 'below';
|
|
8
|
+
/** Base class with common functionality for date/date-range pickers. */
|
|
9
|
+
export declare class _DatePickerBase implements OnInit {
|
|
10
|
+
_elementRef: ElementRef;
|
|
11
|
+
config: PrimeNGConfig;
|
|
12
|
+
minDate: Date | null;
|
|
13
|
+
maxDate: Date | null;
|
|
14
|
+
firstDayOfWeek: number;
|
|
15
|
+
readonly pickerClosed: EventEmitter<any>;
|
|
16
|
+
templateRef: TemplateRef<any>;
|
|
17
|
+
xPosition: PositionX;
|
|
18
|
+
yPosition: PositionY;
|
|
19
|
+
direction: Direction;
|
|
20
|
+
/**
|
|
21
|
+
* Used for locating the panel in tests and setting the aria-control attribute
|
|
22
|
+
* for the picker trigger.
|
|
23
|
+
*/
|
|
24
|
+
readonly panelId: string;
|
|
25
|
+
/** Client input device information */
|
|
26
|
+
clientInput: ClientInputInterface;
|
|
27
|
+
/** Client output device information */
|
|
28
|
+
clientOutput: ClientOutputInterface;
|
|
29
|
+
constructor(_elementRef: ElementRef, config: PrimeNGConfig);
|
|
30
|
+
ngOnInit(): void;
|
|
31
|
+
_handleKeydown(event: KeyboardEvent): void;
|
|
32
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<_DatePickerBase, never>;
|
|
33
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<_DatePickerBase, never, never, { "minDate": "minDate"; "maxDate": "maxDate"; "firstDayOfWeek": "firstDayOfWeek"; }, { "pickerClosed": "pickerClosed"; }, never>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { AfterContentInit, ElementRef, OnDestroy, ViewContainerRef } from '@angular/core';
|
|
2
|
+
import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';
|
|
3
|
+
import { Directionality } from '@angular/cdk/bidi';
|
|
4
|
+
import { Overlay, OverlayOutsideClickDispatcher } from '@angular/cdk/overlay';
|
|
5
|
+
import { ClientInputInterface, ClientOutputInterface } from '@ifsworld/granite-components';
|
|
6
|
+
import { GraniteDatePickerComponent } from './date-picker.component';
|
|
7
|
+
import { GraniteDateRangePickerComponent } from './date-range-picker.component';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
export declare class GraniteDatePickerTriggerForDirective implements AfterContentInit, OnDestroy {
|
|
10
|
+
private _overlay;
|
|
11
|
+
private _element;
|
|
12
|
+
private _viewContainerRef;
|
|
13
|
+
private _outsideClickDispatcher;
|
|
14
|
+
/** Client input device information */
|
|
15
|
+
_clientInput: ClientInputInterface;
|
|
16
|
+
/** Client output device information */
|
|
17
|
+
_clientOutput: ClientOutputInterface;
|
|
18
|
+
private _dir;
|
|
19
|
+
private _focusMonitor;
|
|
20
|
+
/** References the picker instance that the trigger is associated with. */
|
|
21
|
+
picker: GraniteDatePickerComponent | GraniteDateRangePickerComponent;
|
|
22
|
+
/** Whether the associated picker is open */
|
|
23
|
+
_isPickerOpen: boolean;
|
|
24
|
+
private _pickerCloseSubscription;
|
|
25
|
+
private _portal;
|
|
26
|
+
private _overlayRef;
|
|
27
|
+
constructor(_overlay: Overlay, _element: ElementRef<HTMLElement>, _viewContainerRef: ViewContainerRef, _outsideClickDispatcher: OverlayOutsideClickDispatcher,
|
|
28
|
+
/** Client input device information */
|
|
29
|
+
_clientInput: ClientInputInterface,
|
|
30
|
+
/** Client output device information */
|
|
31
|
+
_clientOutput: ClientOutputInterface, _dir: Directionality, _focusMonitor: FocusMonitor);
|
|
32
|
+
ngAfterContentInit(): void;
|
|
33
|
+
ngOnDestroy(): void;
|
|
34
|
+
isOpen(): boolean;
|
|
35
|
+
openPicker(): void;
|
|
36
|
+
/** Toggles the picker between the open and closed states. */
|
|
37
|
+
togglePicker(): void;
|
|
38
|
+
/** Close the associated picker */
|
|
39
|
+
closePicker(): void;
|
|
40
|
+
/** Handles key presses on the trigger. */
|
|
41
|
+
_handleKeydown(event: KeyboardEvent): void;
|
|
42
|
+
/** Handles click events on the trigger. */
|
|
43
|
+
_handleClick(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Restores focus to the element that was focused before the picker was open.
|
|
46
|
+
*/
|
|
47
|
+
_restoreFocus(origin?: FocusOrigin, options?: FocusOptions): void;
|
|
48
|
+
/**
|
|
49
|
+
* Returns strategy for positioning the overlay for desktop devices:
|
|
50
|
+
*/
|
|
51
|
+
private _desktopPositionStrategy;
|
|
52
|
+
/**
|
|
53
|
+
* Sets the appropriate positions on a position strategy
|
|
54
|
+
* so the overlay connects with the trigger correctly.
|
|
55
|
+
* @param positionStrategy Strategy whose position to update.
|
|
56
|
+
*/
|
|
57
|
+
private _setPosition;
|
|
58
|
+
/**
|
|
59
|
+
* Returns strategy for positioning the overlay depending on what type of
|
|
60
|
+
* device the picker is being shown on
|
|
61
|
+
*/
|
|
62
|
+
private _positionStrategy;
|
|
63
|
+
/**
|
|
64
|
+
* Returns strategy for positioning the overlay for touch devices:
|
|
65
|
+
* Place centered in the screen.
|
|
66
|
+
*/
|
|
67
|
+
private _touchPositionStrategy;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDatePickerTriggerForDirective, [null, null, null, null, { optional: true; }, { optional: true; }, { optional: true; }, null]>;
|
|
69
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<GraniteDatePickerTriggerForDirective, "[graniteDatePickerTriggerFor]", never, { "picker": "graniteDatePickerTriggerFor"; }, {}, never>;
|
|
70
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { _DatePickerBase } from './date-picker-base';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GraniteDatePickerComponent extends _DatePickerBase {
|
|
5
|
+
selectedDate: Date | undefined;
|
|
6
|
+
readonly selectionChanged: EventEmitter<Date>;
|
|
7
|
+
dateSelectionChanged(newDate: Date): void;
|
|
8
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDatePickerComponent, never>;
|
|
9
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GraniteDatePickerComponent, "granite-date-picker", never, { "selectedDate": "selectedDate"; }, { "selectionChanged": "selectionChanged"; }, never, never>;
|
|
10
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import * as i0 from "@angular/core";
|
|
2
|
+
import * as i1 from "./date-picker.component";
|
|
3
|
+
import * as i2 from "./date-range-picker.component";
|
|
4
|
+
import * as i3 from "./date-picker-trigger-for.directive";
|
|
5
|
+
import * as i4 from "@angular/platform-browser";
|
|
6
|
+
import * as i5 from "@angular/cdk/overlay";
|
|
7
|
+
import * as i6 from "@angular/platform-browser/animations";
|
|
8
|
+
import * as i7 from "primeng/calendar";
|
|
9
|
+
import * as i8 from "@angular/forms";
|
|
10
|
+
import * as i9 from "@ifsworld/granite-components";
|
|
11
|
+
import * as i10 from "@angular/cdk/a11y";
|
|
12
|
+
export declare class GraniteDatePickerModule {
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDatePickerModule, never>;
|
|
14
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<GraniteDatePickerModule, [typeof i1.GraniteDatePickerComponent, typeof i2.GraniteDateRangePickerComponent, typeof i3.GraniteDatePickerTriggerForDirective], [typeof i4.BrowserModule, typeof i5.OverlayModule, typeof i6.BrowserAnimationsModule, typeof i7.CalendarModule, typeof i8.FormsModule, typeof i9.GraniteIconModule, typeof i9.GraniteButtonModule, typeof i10.A11yModule], [typeof i1.GraniteDatePickerComponent, typeof i2.GraniteDateRangePickerComponent, typeof i3.GraniteDatePickerTriggerForDirective]>;
|
|
15
|
+
static ɵinj: i0.ɵɵInjectorDeclaration<GraniteDatePickerModule>;
|
|
16
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { _DatePickerBase } from './date-picker-base';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare class GraniteDateRangePickerComponent extends _DatePickerBase implements OnChanges {
|
|
5
|
+
selectedDateRange: Date[];
|
|
6
|
+
readonly selectionChanged: EventEmitter<Date[]>;
|
|
7
|
+
_selectedDateRangeInternal: Date[];
|
|
8
|
+
ngOnChanges(changes: SimpleChanges): void;
|
|
9
|
+
dateRangeSelectionChanged(date: Date): void;
|
|
10
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GraniteDateRangePickerComponent, never>;
|
|
11
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GraniteDateRangePickerComponent, "granite-date-range-picker", never, { "selectedDateRange": "selectedDateRange"; }, { "selectionChanged": "selectionChanged"; }, never, never>;
|
|
12
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ifsworld/granite-components/date-picker",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Web components used across IFS products.",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"author": "IFS World Operations AB",
|
|
7
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
8
|
+
"peerDependencies": {
|
|
9
|
+
"primeng": ">=13.0.0",
|
|
10
|
+
"primeicons": ">=13.0.0"
|
|
11
|
+
},
|
|
12
|
+
"module": "../fesm2015/ifsworld-granite-components-date-picker.mjs",
|
|
13
|
+
"es2020": "../fesm2020/ifsworld-granite-components-date-picker.mjs",
|
|
14
|
+
"esm2020": "../esm2020/date-picker/ifsworld-granite-components-date-picker.mjs",
|
|
15
|
+
"fesm2020": "../fesm2020/ifsworld-granite-components-date-picker.mjs",
|
|
16
|
+
"fesm2015": "../fesm2015/ifsworld-granite-components-date-picker.mjs",
|
|
17
|
+
"typings": "ifsworld-granite-components-date-picker.d.ts",
|
|
18
|
+
"sideEffects": false
|
|
19
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWZzd29ybGQtZ3Jhbml0ZS1jb21wb25lbnRzLWRhdGUtcGlja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvZGF0ZS1waWNrZXIvc3JjL2lmc3dvcmxkLWdyYW5pdGUtY29tcG9uZW50cy1kYXRlLXBpY2tlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './lib/date-picker.module';
|
|
2
|
+
export * from './lib/date-picker.component';
|
|
3
|
+
export * from './lib/date-range-picker.component';
|
|
4
|
+
export * from './lib/date-picker-trigger-for.directive';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9kYXRlLXBpY2tlci9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywwQkFBMEIsQ0FBQztBQUN6QyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsbUNBQW1DLENBQUM7QUFDbEQsY0FBYyx5Q0FBeUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcGlja2VyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL2RhdGUtcGlja2VyLXRyaWdnZXItZm9yLmRpcmVjdGl2ZSc7XG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Directive, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild, } from '@angular/core';
|
|
2
|
+
// eslint-disable-next-line import/no-internal-modules
|
|
3
|
+
import { PrimeNGConfig } from 'primeng/api';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "primeng/api";
|
|
6
|
+
let pickerPanelUid = 0;
|
|
7
|
+
/** Base class with common functionality for date/date-range pickers. */
|
|
8
|
+
// eslint-disable-next-line @angular-eslint/directive-class-suffix
|
|
9
|
+
export class _DatePickerBase {
|
|
10
|
+
constructor(_elementRef, config) {
|
|
11
|
+
this._elementRef = _elementRef;
|
|
12
|
+
this.config = config;
|
|
13
|
+
this.minDate = null;
|
|
14
|
+
this.maxDate = null;
|
|
15
|
+
this.firstDayOfWeek = 0;
|
|
16
|
+
this.pickerClosed = new EventEmitter();
|
|
17
|
+
this.xPosition = 'before';
|
|
18
|
+
this.yPosition = 'below';
|
|
19
|
+
/**
|
|
20
|
+
* Used for locating the panel in tests and setting the aria-control attribute
|
|
21
|
+
* for the picker trigger.
|
|
22
|
+
*/
|
|
23
|
+
this.panelId = `granite-date-picker-panel-${pickerPanelUid++}`;
|
|
24
|
+
}
|
|
25
|
+
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
|
|
26
|
+
ngOnInit() {
|
|
27
|
+
this.config.setTranslation({
|
|
28
|
+
dayNamesMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
_handleKeydown(event) {
|
|
32
|
+
if (event.key === 'Escape') {
|
|
33
|
+
this.pickerClosed.emit();
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
_DatePickerBase.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: _DatePickerBase, deps: [{ token: i0.ElementRef }, { token: i1.PrimeNGConfig }], target: i0.ɵɵFactoryTarget.Directive });
|
|
38
|
+
_DatePickerBase.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: _DatePickerBase, inputs: { minDate: "minDate", maxDate: "maxDate", firstDayOfWeek: "firstDayOfWeek" }, outputs: { pickerClosed: "pickerClosed" }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], ngImport: i0 });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: _DatePickerBase, decorators: [{
|
|
40
|
+
type: Directive
|
|
41
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.PrimeNGConfig }]; }, propDecorators: { minDate: [{
|
|
42
|
+
type: Input
|
|
43
|
+
}], maxDate: [{
|
|
44
|
+
type: Input
|
|
45
|
+
}], firstDayOfWeek: [{
|
|
46
|
+
type: Input
|
|
47
|
+
}], pickerClosed: [{
|
|
48
|
+
type: Output
|
|
49
|
+
}], templateRef: [{
|
|
50
|
+
type: ViewChild,
|
|
51
|
+
args: [TemplateRef]
|
|
52
|
+
}] } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvZ3Jhbml0ZS1jb21wb25lbnRzL2RhdGUtcGlja2VyL3NyYy9saWIvZGF0ZS1waWNrZXItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBRXZCLHNEQUFzRDtBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFVNUMsSUFBSSxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBRXZCLHdFQUF3RTtBQUV4RSxrRUFBa0U7QUFDbEUsTUFBTSxPQUFPLGVBQWU7SUFnQzFCLFlBQW1CLFdBQXVCLEVBQVMsTUFBcUI7UUFBckQsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFBUyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBOUJ4RSxZQUFPLEdBQWdCLElBQUksQ0FBQztRQUc1QixZQUFPLEdBQWdCLElBQUksQ0FBQztRQUc1QixtQkFBYyxHQUFXLENBQUMsQ0FBQztRQUdsQixpQkFBWSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBSTlELGNBQVMsR0FBYyxRQUFRLENBQUM7UUFDaEMsY0FBUyxHQUFjLE9BQU8sQ0FBQztRQUkvQjs7O1dBR0c7UUFDTSxZQUFPLEdBQUcsNkJBQTZCLGNBQWMsRUFBRSxFQUFFLENBQUM7SUFRUSxDQUFDO0lBRTVFLDZFQUE2RTtJQUM3RSxRQUFRO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUM7WUFDekIsV0FBVyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDO1NBQ2pELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBb0I7UUFDakMsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxDQUFDO1NBQzFCO0lBQ0gsQ0FBQzs7NkdBN0NVLGVBQWU7aUdBQWYsZUFBZSx3TUFhZixXQUFXOzRGQWJYLGVBQWU7a0JBRjNCLFNBQVM7NkhBSVIsT0FBTztzQkFETixLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSztnQkFJTixjQUFjO3NCQURiLEtBQUs7Z0JBSUcsWUFBWTtzQkFEcEIsTUFBTTtnQkFHaUIsV0FBVztzQkFBbEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWludGVybmFsLW1vZHVsZXNcbmltcG9ydCB7IFByaW1lTkdDb25maWcgfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge1xuICBDbGllbnRJbnB1dEludGVyZmFjZSxcbiAgQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxufSBmcm9tICdAaWZzd29ybGQvZ3Jhbml0ZS1jb21wb25lbnRzJztcblxuZXhwb3J0IHR5cGUgUG9zaXRpb25YID0gJ2JlZm9yZScgfCAnYWZ0ZXInO1xuXG5leHBvcnQgdHlwZSBQb3NpdGlvblkgPSAnYWJvdmUnIHwgJ2JlbG93JztcblxubGV0IHBpY2tlclBhbmVsVWlkID0gMDtcblxuLyoqIEJhc2UgY2xhc3Mgd2l0aCBjb21tb24gZnVuY3Rpb25hbGl0eSBmb3IgZGF0ZS9kYXRlLXJhbmdlIHBpY2tlcnMuICovXG5ARGlyZWN0aXZlKClcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvZGlyZWN0aXZlLWNsYXNzLXN1ZmZpeFxuZXhwb3J0IGNsYXNzIF9EYXRlUGlja2VyQmFzZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpXG4gIG1pbkRhdGU6IERhdGUgfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKVxuICBtYXhEYXRlOiBEYXRlIHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KClcbiAgZmlyc3REYXlPZldlZWs6IG51bWJlciA9IDA7XG5cbiAgQE91dHB1dCgpXG4gIHJlYWRvbmx5IHBpY2tlckNsb3NlZDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQFZpZXdDaGlsZChUZW1wbGF0ZVJlZikgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgeFBvc2l0aW9uOiBQb3NpdGlvblggPSAnYmVmb3JlJztcbiAgeVBvc2l0aW9uOiBQb3NpdGlvblkgPSAnYmVsb3cnO1xuXG4gIGRpcmVjdGlvbjogRGlyZWN0aW9uO1xuXG4gIC8qKlxuICAgKiBVc2VkIGZvciBsb2NhdGluZyB0aGUgcGFuZWwgaW4gdGVzdHMgYW5kIHNldHRpbmcgdGhlIGFyaWEtY29udHJvbCBhdHRyaWJ1dGVcbiAgICogZm9yIHRoZSBwaWNrZXIgdHJpZ2dlci5cbiAgICovXG4gIHJlYWRvbmx5IHBhbmVsSWQgPSBgZ3Jhbml0ZS1kYXRlLXBpY2tlci1wYW5lbC0ke3BpY2tlclBhbmVsVWlkKyt9YDtcblxuICAvKiogQ2xpZW50IGlucHV0IGRldmljZSBpbmZvcm1hdGlvbiAqL1xuICBjbGllbnRJbnB1dDogQ2xpZW50SW5wdXRJbnRlcmZhY2U7XG5cbiAgLyoqIENsaWVudCBvdXRwdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gIGNsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBfZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcHVibGljIGNvbmZpZzogUHJpbWVOR0NvbmZpZykge31cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmNvbmZpZy5zZXRUcmFuc2xhdGlvbih7XG4gICAgICBkYXlOYW1lc01pbjogWydTJywgJ00nLCAnVCcsICdXJywgJ1QnLCAnRicsICdTJ10sXG4gICAgfSk7XG4gIH1cblxuICBfaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICB0aGlzLnBpY2tlckNsb3NlZC5lbWl0KCk7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
import { Directive, ElementRef, Inject, Input, Optional, ViewContainerRef, } from '@angular/core';
|
|
2
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
3
|
+
import { Directionality } from '@angular/cdk/bidi';
|
|
4
|
+
import { Overlay, OverlayConfig, OverlayOutsideClickDispatcher, } from '@angular/cdk/overlay';
|
|
5
|
+
import { TemplatePortal } from '@angular/cdk/portal';
|
|
6
|
+
import { merge, Subscription } from 'rxjs';
|
|
7
|
+
import { GRANITE_CLIENT_INPUT, GRANITE_CLIENT_OUTPUT, } from '@ifsworld/granite-components';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/cdk/overlay";
|
|
10
|
+
import * as i2 from "@angular/cdk/bidi";
|
|
11
|
+
import * as i3 from "@angular/cdk/a11y";
|
|
12
|
+
export class GraniteDatePickerTriggerForDirective {
|
|
13
|
+
constructor(_overlay, _element, _viewContainerRef, _outsideClickDispatcher,
|
|
14
|
+
/** Client input device information */
|
|
15
|
+
_clientInput,
|
|
16
|
+
/** Client output device information */
|
|
17
|
+
_clientOutput, _dir, _focusMonitor) {
|
|
18
|
+
this._overlay = _overlay;
|
|
19
|
+
this._element = _element;
|
|
20
|
+
this._viewContainerRef = _viewContainerRef;
|
|
21
|
+
this._outsideClickDispatcher = _outsideClickDispatcher;
|
|
22
|
+
this._clientInput = _clientInput;
|
|
23
|
+
this._clientOutput = _clientOutput;
|
|
24
|
+
this._dir = _dir;
|
|
25
|
+
this._focusMonitor = _focusMonitor;
|
|
26
|
+
/** Whether the associated picker is open */
|
|
27
|
+
this._isPickerOpen = false;
|
|
28
|
+
this._pickerCloseSubscription = Subscription.EMPTY;
|
|
29
|
+
this._portal = null;
|
|
30
|
+
this._overlayRef = null;
|
|
31
|
+
}
|
|
32
|
+
ngAfterContentInit() {
|
|
33
|
+
const selectionChanged = this.picker.selectionChanged;
|
|
34
|
+
const closed = this.picker.pickerClosed;
|
|
35
|
+
this._pickerCloseSubscription = merge(selectionChanged, closed).subscribe(() => {
|
|
36
|
+
this.closePicker();
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
ngOnDestroy() {
|
|
40
|
+
if (this._overlayRef) {
|
|
41
|
+
this._overlayRef.dispose();
|
|
42
|
+
this._overlayRef = null;
|
|
43
|
+
}
|
|
44
|
+
this._pickerCloseSubscription.unsubscribe();
|
|
45
|
+
}
|
|
46
|
+
isOpen() {
|
|
47
|
+
return this._isPickerOpen;
|
|
48
|
+
}
|
|
49
|
+
openPicker() {
|
|
50
|
+
if (this._isPickerOpen) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
this.picker.direction = this._dir.value === 'rtl' ? 'rtl' : 'ltr';
|
|
54
|
+
this.picker.clientInput = this._clientInput;
|
|
55
|
+
this.picker.clientOutput = this._clientOutput;
|
|
56
|
+
const panelClass = [];
|
|
57
|
+
if (this._clientOutput.device === 'touch') {
|
|
58
|
+
panelClass.push('granite-overlay-pane-center');
|
|
59
|
+
}
|
|
60
|
+
const scrollStrategy = this._clientOutput.device !== 'touch'
|
|
61
|
+
? this._overlay.scrollStrategies.reposition()
|
|
62
|
+
: this._overlay.scrollStrategies.block();
|
|
63
|
+
const hasBackdrop = this._clientOutput.device === 'touch';
|
|
64
|
+
if (!this._overlayRef) {
|
|
65
|
+
const config = new OverlayConfig({
|
|
66
|
+
positionStrategy: this._positionStrategy(),
|
|
67
|
+
backdropClass: 'granite-overlay-dark-glass-backdrop',
|
|
68
|
+
scrollStrategy,
|
|
69
|
+
direction: this._dir,
|
|
70
|
+
panelClass,
|
|
71
|
+
hasBackdrop,
|
|
72
|
+
});
|
|
73
|
+
this._overlayRef = this._overlay.create(config);
|
|
74
|
+
}
|
|
75
|
+
if (!this._portal || this._portal.templateRef !== this.picker.templateRef) {
|
|
76
|
+
this._portal = new TemplatePortal(this.picker.templateRef, this._viewContainerRef);
|
|
77
|
+
}
|
|
78
|
+
// Attach portal to overlay ref (which is a portal outlet)
|
|
79
|
+
this._overlayRef.attach(this._portal);
|
|
80
|
+
this._outsideClickDispatcher.add(this._overlayRef);
|
|
81
|
+
this._overlayRef.outsidePointerEvents().subscribe((event) => {
|
|
82
|
+
event.stopPropagation();
|
|
83
|
+
this.closePicker();
|
|
84
|
+
});
|
|
85
|
+
this._isPickerOpen = true;
|
|
86
|
+
}
|
|
87
|
+
/** Toggles the picker between the open and closed states. */
|
|
88
|
+
togglePicker() {
|
|
89
|
+
if (this._isPickerOpen) {
|
|
90
|
+
this.closePicker();
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
this.openPicker();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/** Close the associated picker */
|
|
97
|
+
closePicker() {
|
|
98
|
+
if (!this._overlayRef || !this._isPickerOpen) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
this._outsideClickDispatcher.remove(this._overlayRef);
|
|
102
|
+
this._overlayRef.detach();
|
|
103
|
+
this._restoreFocus();
|
|
104
|
+
this._isPickerOpen = false;
|
|
105
|
+
}
|
|
106
|
+
/** Handles key presses on the trigger. */
|
|
107
|
+
_handleKeydown(event) {
|
|
108
|
+
if (event.key === 'Enter') {
|
|
109
|
+
event.preventDefault();
|
|
110
|
+
this.togglePicker();
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/** Handles click events on the trigger. */
|
|
114
|
+
_handleClick() {
|
|
115
|
+
this.togglePicker();
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Restores focus to the element that was focused before the picker was open.
|
|
119
|
+
*/
|
|
120
|
+
_restoreFocus(origin = 'program', options) {
|
|
121
|
+
if (this._focusMonitor) {
|
|
122
|
+
this._focusMonitor.focusVia(this._element, origin, options);
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this._element.nativeElement.focus(options);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Returns strategy for positioning the overlay for desktop devices:
|
|
130
|
+
*/
|
|
131
|
+
_desktopPositionStrategy() {
|
|
132
|
+
const positionStrategy = this._overlay
|
|
133
|
+
.position()
|
|
134
|
+
.flexibleConnectedTo(this._element)
|
|
135
|
+
.withLockedPosition()
|
|
136
|
+
.withTransformOriginOn('.granite-date-picker')
|
|
137
|
+
.withPush(false);
|
|
138
|
+
this._setPosition(positionStrategy);
|
|
139
|
+
return positionStrategy;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Sets the appropriate positions on a position strategy
|
|
143
|
+
* so the overlay connects with the trigger correctly.
|
|
144
|
+
* @param positionStrategy Strategy whose position to update.
|
|
145
|
+
*/
|
|
146
|
+
_setPosition(positionStrategy) {
|
|
147
|
+
const [originX, originFallbackX] = this.picker.xPosition === 'before' ? ['end', 'start'] : ['start', 'end'];
|
|
148
|
+
const [overlayY, overlayFallbackY] = this.picker.yPosition === 'above' ? ['bottom', 'top'] : ['top', 'bottom'];
|
|
149
|
+
let [originY, originFallbackY] = [overlayY, overlayFallbackY];
|
|
150
|
+
const [overlayX, overlayFallbackX] = [originX, originFallbackX];
|
|
151
|
+
const offsetY = 0;
|
|
152
|
+
originY = overlayY === 'top' ? 'bottom' : 'top';
|
|
153
|
+
originFallbackY = overlayFallbackY === 'top' ? 'bottom' : 'top';
|
|
154
|
+
positionStrategy.withPositions([
|
|
155
|
+
{ originX, originY, overlayX, overlayY, offsetY },
|
|
156
|
+
{
|
|
157
|
+
originX: originFallbackX,
|
|
158
|
+
originY,
|
|
159
|
+
overlayX: overlayFallbackX,
|
|
160
|
+
overlayY,
|
|
161
|
+
offsetY,
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
originX,
|
|
165
|
+
originY: originFallbackY,
|
|
166
|
+
overlayX,
|
|
167
|
+
overlayY: overlayFallbackY,
|
|
168
|
+
offsetY: -offsetY,
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
originX: originFallbackX,
|
|
172
|
+
originY: originFallbackY,
|
|
173
|
+
overlayX: overlayFallbackX,
|
|
174
|
+
overlayY: overlayFallbackY,
|
|
175
|
+
offsetY: -offsetY,
|
|
176
|
+
},
|
|
177
|
+
]);
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Returns strategy for positioning the overlay depending on what type of
|
|
181
|
+
* device the picker is being shown on
|
|
182
|
+
*/
|
|
183
|
+
_positionStrategy() {
|
|
184
|
+
if (this._clientOutput.device !== 'touch') {
|
|
185
|
+
return this._desktopPositionStrategy();
|
|
186
|
+
}
|
|
187
|
+
return this._touchPositionStrategy();
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Returns strategy for positioning the overlay for touch devices:
|
|
191
|
+
* Place centered in the screen.
|
|
192
|
+
*/
|
|
193
|
+
_touchPositionStrategy() {
|
|
194
|
+
return this._overlay.position().global();
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
GraniteDatePickerTriggerForDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteDatePickerTriggerForDirective, deps: [{ token: i1.Overlay }, { token: i0.ElementRef }, { token: i0.ViewContainerRef }, { token: i1.OverlayOutsideClickDispatcher }, { token: GRANITE_CLIENT_INPUT, optional: true }, { token: GRANITE_CLIENT_OUTPUT, optional: true }, { token: i2.Directionality, optional: true }, { token: i3.FocusMonitor }], target: i0.ɵɵFactoryTarget.Directive });
|
|
198
|
+
GraniteDatePickerTriggerForDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: GraniteDatePickerTriggerForDirective, selector: "[graniteDatePickerTriggerFor]", inputs: { picker: ["graniteDatePickerTriggerFor", "picker"] }, host: { attributes: { "aria-haspopup": "true" }, listeners: { "keydown": "_handleKeydown($event)", "click": "_handleClick($event)" }, properties: { "attr.aria-expanded": "_isPickerOpen || null", "attr.aria-controls": "_isPickerOpen ? picker.panelId : null" }, classAttribute: "granite-date-picker-trigger" }, ngImport: i0 });
|
|
199
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteDatePickerTriggerForDirective, decorators: [{
|
|
200
|
+
type: Directive,
|
|
201
|
+
args: [{
|
|
202
|
+
selector: `[graniteDatePickerTriggerFor]`,
|
|
203
|
+
host: {
|
|
204
|
+
class: 'granite-date-picker-trigger',
|
|
205
|
+
'aria-haspopup': 'true',
|
|
206
|
+
'[attr.aria-expanded]': '_isPickerOpen || null',
|
|
207
|
+
'[attr.aria-controls]': '_isPickerOpen ? picker.panelId : null',
|
|
208
|
+
'(keydown)': '_handleKeydown($event)',
|
|
209
|
+
'(click)': '_handleClick($event)',
|
|
210
|
+
},
|
|
211
|
+
}]
|
|
212
|
+
}], ctorParameters: function () { return [{ type: i1.Overlay }, { type: i0.ElementRef }, { type: i0.ViewContainerRef }, { type: i1.OverlayOutsideClickDispatcher }, { type: undefined, decorators: [{
|
|
213
|
+
type: Inject,
|
|
214
|
+
args: [GRANITE_CLIENT_INPUT]
|
|
215
|
+
}, {
|
|
216
|
+
type: Optional
|
|
217
|
+
}] }, { type: undefined, decorators: [{
|
|
218
|
+
type: Inject,
|
|
219
|
+
args: [GRANITE_CLIENT_OUTPUT]
|
|
220
|
+
}, {
|
|
221
|
+
type: Optional
|
|
222
|
+
}] }, { type: i2.Directionality, decorators: [{
|
|
223
|
+
type: Optional
|
|
224
|
+
}] }, { type: i3.FocusMonitor }]; }, propDecorators: { picker: [{
|
|
225
|
+
type: Input,
|
|
226
|
+
args: ['graniteDatePickerTriggerFor']
|
|
227
|
+
}] } });
|
|
228
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXItdHJpZ2dlci1mb3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvZGF0ZS1waWNrZXIvc3JjL2xpYi9kYXRlLXBpY2tlci10cmlnZ2VyLWZvci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssRUFFTCxRQUFRLEVBQ1IsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxZQUFZLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUdMLE9BQU8sRUFDUCxhQUFhLEVBQ2IsNkJBQTZCLEdBSTlCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXJELE9BQU8sRUFBRSxLQUFLLEVBQWMsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZELE9BQU8sRUFHTCxvQkFBb0IsRUFDcEIscUJBQXFCLEdBQ3RCLE1BQU0sOEJBQThCLENBQUM7Ozs7O0FBZXRDLE1BQU0sT0FBTyxvQ0FBb0M7SUFnQi9DLFlBQ1UsUUFBaUIsRUFDakIsUUFBaUMsRUFDakMsaUJBQW1DLEVBQ25DLHVCQUFzRDtJQUU5RCxzQ0FBc0M7SUFHL0IsWUFBa0M7SUFFekMsdUNBQXVDO0lBR2hDLGFBQW9DLEVBR25DLElBQW9CLEVBRXBCLGFBQTJCO1FBbEIzQixhQUFRLEdBQVIsUUFBUSxDQUFTO1FBQ2pCLGFBQVEsR0FBUixRQUFRLENBQXlCO1FBQ2pDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBa0I7UUFDbkMsNEJBQXVCLEdBQXZCLHVCQUF1QixDQUErQjtRQUt2RCxpQkFBWSxHQUFa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Q0FBQztJQUVEOzs7T0FHRztJQUNLLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxLQUFLLE9BQU8sRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1NBQ3hDO1FBQ0QsT0FBTyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssc0JBQXNCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxDQUFDOztrSUEzT1Usb0NBQW9DLGdKQXVCckMsb0JBQW9CLDZCQUtwQixxQkFBcUI7c0hBNUJwQixvQ0FBb0M7NEZBQXBDLG9DQUFvQztrQkFYaEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsK0JBQStCO29CQUN6QyxJQUFJLEVBQUU7d0JBQ0osS0FBSyxFQUFFLDZCQUE2Qjt3QkFDcEMsZUFBZSxFQUFFLE1BQU07d0JBQ3ZCLHNCQUFzQixFQUFFLHVCQUF1Qjt3QkFDL0Msc0JBQXNCLEVBQUUsdUNBQXVDO3dCQUMvRCxXQUFXLEVBQUUsd0JBQXdCO3dCQUNyQyxTQUFTLEVBQUUsc0JBQXNCO3FCQUNsQztpQkFDRjs7MEJBd0JJLE1BQU07MkJBQUMsb0JBQW9COzswQkFDM0IsUUFBUTs7MEJBSVIsTUFBTTsyQkFBQyxxQkFBcUI7OzBCQUM1QixRQUFROzswQkFHUixRQUFRO3VFQTFCWCxNQUFNO3NCQURMLEtBQUs7dUJBQUMsNkJBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBJbmplY3QsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IERpcmVjdGlvbmFsaXR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2JpZGknO1xuaW1wb3J0IHtcbiAgRmxleGlibGVDb25uZWN0ZWRQb3NpdGlvblN0cmF0ZWd5LFxuICBIb3Jpem9udGFsQ29ubmVjdGlvblBvcyxcbiAgT3ZlcmxheSxcbiAgT3ZlcmxheUNvbmZpZyxcbiAgT3ZlcmxheU91dHNpZGVDbGlja0Rpc3BhdGNoZXIsXG4gIE92ZXJsYXlSZWYsXG4gIFBvc2l0aW9uU3RyYXRlZ3ksXG4gIFZlcnRpY2FsQ29ubmVjdGlvblBvcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY2RrL292ZXJsYXknO1xuaW1wb3J0IHsgVGVtcGxhdGVQb3J0YWwgfSBmcm9tICdAYW5ndWxhci9jZGsvcG9ydGFsJztcblxuaW1wb3J0IHsgbWVyZ2UsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBDbGllbnRJbnB1dEludGVyZmFjZSxcbiAgQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxuICBHUkFOSVRFX0NMSUVOVF9JTlBVVCxcbiAgR1JBTklURV9DTElFTlRfT1VUUFVULFxufSBmcm9tICdAaWZzd29ybGQvZ3Jhbml0ZS1jb21wb25lbnRzJztcbmltcG9ydCB7IEdyYW5pdGVEYXRlUGlja2VyQ29tcG9uZW50IH0gZnJvbSAnLi9kYXRlLXBpY2tlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3Jhbml0ZURhdGVSYW5nZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS1yYW5nZS1waWNrZXIuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiBgW2dyYW5pdGVEYXRlUGlja2VyVHJpZ2dlckZvcl1gLFxuICBob3N0OiB7XG4gICAgY2xhc3M6ICdncmFuaXRlLWRhdGUtcGlja2VyLXRyaWdnZXInLFxuICAgICdhcmlhLWhhc3BvcHVwJzogJ3RydWUnLFxuICAgICdbYXR0ci5hcmlhLWV4cGFuZGVkXSc6ICdfaXNQaWNrZXJPcGVuIHx8IG51bGwnLFxuICAgICdbYXR0ci5hcmlhLWNvbnRyb2xzXSc6ICdfaXNQaWNrZXJPcGVuID8gcGlja2VyLnBhbmVsSWQgOiBudWxsJyxcbiAgICAnKGtleWRvd24pJzogJ19oYW5kbGVLZXlkb3duKCRldmVudCknLFxuICAgICcoY2xpY2spJzogJ19oYW5kbGVDbGljaygkZXZlbnQpJyxcbiAgfSxcbn0pXG5leHBvcnQgY2xhc3MgR3Jhbml0ZURhdGVQaWNrZXJUcmlnZ2VyRm9yRGlyZWN0aXZlXG4gIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95XG57XG4gIC8qKiBSZWZlcmVuY2VzIHRoZSBwaWNrZXIgaW5zdGFuY2UgdGhhdCB0aGUgdHJpZ2dlciBpcyBhc3NvY2lhdGVkIHdpdGguICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAYW5ndWxhci1lc2xpbnQvbm8taW5wdXQtcmVuYW1lXG4gIEBJbnB1dCgnZ3Jhbml0ZURhdGVQaWNrZXJUcmlnZ2VyRm9yJylcbiAgcGlja2VyOiBHcmFuaXRlRGF0ZVBpY2tlckNvbXBvbmVudCB8IEdyYW5pdGVEYXRlUmFuZ2VQaWNrZXJDb21wb25lbnQ7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGFzc29jaWF0ZWQgcGlja2VyIGlzIG9wZW4gKi9cbiAgX2lzUGlja2VyT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX3BpY2tlckNsb3NlU3Vic2NyaXB0aW9uID0gU3Vic2NyaXB0aW9uLkVNUFRZO1xuXG4gIHByaXZhdGUgX3BvcnRhbDogVGVtcGxhdGVQb3J0YWwgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBfb3ZlcmxheVJlZjogT3ZlcmxheVJlZiB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX292ZXJsYXk6IE92ZXJsYXksXG4gICAgcHJpdmF0ZSBfZWxlbWVudDogRWxlbWVudFJlZjxIVE1MRWxlbWVudD4sXG4gICAgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwcml2YXRlIF9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyOiBPdmVybGF5T3V0c2lkZUNsaWNrRGlzcGF0Y2hlcixcblxuICAgIC8qKiBDbGllbnQgaW5wdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9JTlBVVClcbiAgICBAT3B0aW9uYWwoKVxuICAgIHB1YmxpYyBfY2xpZW50SW5wdXQ6IENsaWVudElucHV0SW50ZXJmYWNlLFxuXG4gICAgLyoqIENsaWVudCBvdXRwdXQgZGV2aWNlIGluZm9ybWF0aW9uICovXG4gICAgQEluamVjdChHUkFOSVRFX0NMSUVOVF9PVVRQVVQpXG4gICAgQE9wdGlvbmFsKClcbiAgICBwdWJsaWMgX2NsaWVudE91dHB1dDogQ2xpZW50T3V0cHV0SW50ZXJmYWNlLFxuXG4gICAgQE9wdGlvbmFsKClcbiAgICBwcml2YXRlIF9kaXI6IERpcmVjdGlvbmFsaXR5LFxuXG4gICAgcHJpdmF0ZSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3JcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5waWNrZXIuc2VsZWN0aW9uQ2hhbmdlZCBhcyBPYnNlcnZhYmxlPGFueT47XG4gICAgY29uc3QgY2xvc2VkID0gdGhpcy5waWNrZXIucGlja2VyQ2xvc2VkIGFzIE9ic2VydmFibGU8YW55PjtcblxuICAgIHRoaXMuX3BpY2tlckNsb3NlU3Vic2NyaXB0aW9uID0gbWVyZ2Uoc2VsZWN0aW9uQ2hhbmdlZCwgY2xvc2VkKS5zdWJzY3JpYmUoXG4gICAgICAoKSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2VQaWNrZXIoKTtcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX292ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuX292ZXJsYXlSZWYuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fb3ZlcmxheVJlZiA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuX3BpY2tlckNsb3NlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBpc09wZW4oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzUGlja2VyT3BlbjtcbiAgfVxuXG4gIG9wZW5QaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzUGlja2VyT3Blbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucGlja2VyLmRpcmVjdGlvbiA9IHRoaXMuX2Rpci52YWx1ZSA9PT0gJ3J0bCcgPyAncnRsJyA6ICdsdHInO1xuICAgIHRoaXMucGlja2VyLmNsaWVudElucHV0ID0gdGhpcy5fY2xpZW50SW5wdXQ7XG4gICAgdGhpcy5waWNrZXIuY2xpZW50T3V0cHV0ID0gdGhpcy5fY2xpZW50T3V0cHV0O1xuXG4gICAgY29uc3QgcGFuZWxDbGFzczogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAodGhpcy5fY2xpZW50T3V0cHV0LmRldmljZSA9PT0gJ3RvdWNoJykge1xuICAgICAgcGFuZWxDbGFzcy5wdXNoKCdncmFuaXRlLW92ZXJsYXktcGFuZS1jZW50ZXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxTdHJhdGVneSA9XG4gICAgICB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlICE9PSAndG91Y2gnXG4gICAgICAgID8gdGhpcy5fb3ZlcmxheS5zY3JvbGxTdHJhdGVnaWVzLnJlcG9zaXRpb24oKVxuICAgICAgICA6IHRoaXMuX292ZXJsYXkuc2Nyb2xsU3RyYXRlZ2llcy5ibG9jaygpO1xuXG4gICAgY29uc3QgaGFzQmFja2Ryb3AgPSB0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnO1xuXG4gICAgaWYgKCF0aGlzLl9vdmVybGF5UmVmKSB7XG4gICAgICBjb25zdCBjb25maWcgPSBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMuX3Bvc2l0aW9uU3RyYXRlZ3koKSxcbiAgICAgICAgYmFja2Ryb3BDbGFzczogJ2dyYW5pdGUtb3ZlcmxheS1kYXJrLWdsYXNzLWJhY2tkcm9wJyxcbiAgICAgICAgc2Nyb2xsU3RyYXRlZ3ksXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fZGlyLFxuICAgICAgICBwYW5lbENsYXNzLFxuICAgICAgICBoYXNCYWNrZHJvcCxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLl9vdmVybGF5UmVmID0gdGhpcy5fb3ZlcmxheS5jcmVhdGUoY29uZmlnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX3BvcnRhbCB8fCB0aGlzLl9wb3J0YWwudGVtcGxhdGVSZWYgIT09IHRoaXMucGlja2VyLnRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl9wb3J0YWwgPSBuZXcgVGVtcGxhdGVQb3J0YWwoXG4gICAgICAgIHRoaXMucGlja2VyLnRlbXBsYXRlUmVmLFxuICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmXG4gICAgICApO1xuICAgIH1cbiAgICAvLyBBdHRhY2ggcG9ydGFsIHRvIG92ZXJsYXkgcmVmICh3aGljaCBpcyBhIHBvcnRhbCBvdXRsZXQpXG4gICAgdGhpcy5fb3ZlcmxheVJlZi5hdHRhY2godGhpcy5fcG9ydGFsKTtcbiAgICB0aGlzLl9vdXRzaWRlQ2xpY2tEaXNwYXRjaGVyLmFkZCh0aGlzLl9vdmVybGF5UmVmKTtcbiAgICB0aGlzLl9vdmVybGF5UmVmLm91dHNpZGVQb2ludGVyRXZlbnRzKCkuc3Vic2NyaWJlKChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLmNsb3NlUGlja2VyKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9pc1BpY2tlck9wZW4gPSB0cnVlO1xuICB9XG5cbiAgLyoqIFRvZ2dsZXMgdGhlIHBpY2tlciBiZXR3ZWVuIHRoZSBvcGVuIGFuZCBjbG9zZWQgc3RhdGVzLiAqL1xuICB0b2dnbGVQaWNrZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2lzUGlja2VyT3Blbikge1xuICAgICAgdGhpcy5jbG9zZVBpY2tlcigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLm9wZW5QaWNrZXIoKTtcbiAgICB9XG4gIH1cblxuICAvKiogQ2xvc2UgdGhlIGFzc29jaWF0ZWQgcGlja2VyICovXG4gIGNsb3NlUGlja2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3ZlcmxheVJlZiB8fCAhdGhpcy5faXNQaWNrZXJPcGVuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0c2lkZUNsaWNrRGlzcGF0Y2hlci5yZW1vdmUodGhpcy5fb3ZlcmxheVJlZik7XG4gICAgdGhpcy5fb3ZlcmxheVJlZi5kZXRhY2goKTtcblxuICAgIHRoaXMuX3Jlc3RvcmVGb2N1cygpO1xuICAgIHRoaXMuX2lzUGlja2VyT3BlbiA9IGZhbHNlO1xuICB9XG5cbiAgLyoqIEhhbmRsZXMga2V5IHByZXNzZXMgb24gdGhlIHRyaWdnZXIuICovXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMudG9nZ2xlUGlja2VyKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEhhbmRsZXMgY2xpY2sgZXZlbnRzIG9uIHRoZSB0cmlnZ2VyLiAqL1xuICBfaGFuZGxlQ2xpY2soKTogdm9pZCB7XG4gICAgdGhpcy50b2dnbGVQaWNrZXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlcyBmb2N1cyB0byB0aGUgZWxlbWVudCB0aGF0IHdhcyBmb2N1c2VkIGJlZm9yZSB0aGUgcGlja2VyIHdhcyBvcGVuLlxuICAgKi9cbiAgX3Jlc3RvcmVGb2N1cyhvcmlnaW46IEZvY3VzT3JpZ2luID0gJ3Byb2dyYW0nLCBvcHRpb25zPzogRm9jdXNPcHRpb25zKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2ZvY3VzTW9uaXRvcikge1xuICAgICAgdGhpcy5fZm9jdXNNb25pdG9yLmZvY3VzVmlhKHRoaXMuX2VsZW1lbnQsIG9yaWdpbiwgb3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cyhvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBzdHJhdGVneSBmb3IgcG9zaXRpb25pbmcgdGhlIG92ZXJsYXkgZm9yIGRlc2t0b3AgZGV2aWNlczpcbiAgICovXG4gIHByaXZhdGUgX2Rlc2t0b3BQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIGNvbnN0IHBvc2l0aW9uU3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSA9IHRoaXMuX292ZXJsYXlcbiAgICAgIC5wb3NpdGlvbigpXG4gICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLl9lbGVtZW50KVxuICAgICAgLndpdGhMb2NrZWRQb3NpdGlvbigpXG4gICAgICAud2l0aFRyYW5zZm9ybU9yaWdpbk9uKCcuZ3Jhbml0ZS1kYXRlLXBpY2tlcicpXG4gICAgICAud2l0aFB1c2goZmFsc2UpO1xuXG4gICAgdGhpcy5fc2V0UG9zaXRpb24ocG9zaXRpb25TdHJhdGVneSk7XG4gICAgcmV0dXJuIHBvc2l0aW9uU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgYXBwcm9wcmlhdGUgcG9zaXRpb25zIG9uIGEgcG9zaXRpb24gc3RyYXRlZ3lcbiAgICogc28gdGhlIG92ZXJsYXkgY29ubmVjdHMgd2l0aCB0aGUgdHJpZ2dlciBjb3JyZWN0bHkuXG4gICAqIEBwYXJhbSBwb3NpdGlvblN0cmF0ZWd5IFN0cmF0ZWd5IHdob3NlIHBvc2l0aW9uIHRvIHVwZGF0ZS5cbiAgICovXG4gIHByaXZhdGUgX3NldFBvc2l0aW9uKHBvc2l0aW9uU3RyYXRlZ3k6IEZsZXhpYmxlQ29ubmVjdGVkUG9zaXRpb25TdHJhdGVneSkge1xuICAgIGNvbnN0IFtvcmlnaW5YLCBvcmlnaW5GYWxsYmFja1hdOiBIb3Jpem9udGFsQ29ubmVjdGlvblBvc1tdID1cbiAgICAgIHRoaXMucGlja2VyLnhQb3NpdGlvbiA9PT0gJ2JlZm9yZScgPyBbJ2VuZCcsICdzdGFydCddIDogWydzdGFydCcsICdlbmQnXTtcblxuICAgIGNvbnN0IFtvdmVybGF5WSwgb3ZlcmxheUZhbGxiYWNrWV06IFZlcnRpY2FsQ29ubmVjdGlvblBvc1tdID1cbiAgICAgIHRoaXMucGlja2VyLnlQb3NpdGlvbiA9PT0gJ2Fib3ZlJyA/IFsnYm90dG9tJywgJ3RvcCddIDogWyd0b3AnLCAnYm90dG9tJ107XG5cbiAgICBsZXQgW29yaWdpblksIG9yaWdpbkZhbGxiYWNrWV0gPSBbb3ZlcmxheVksIG92ZXJsYXlGYWxsYmFja1ldO1xuICAgIGNvbnN0IFtvdmVybGF5WCwgb3ZlcmxheUZhbGxiYWNrWF0gPSBbb3JpZ2luWCwgb3JpZ2luRmFsbGJhY2tYXTtcbiAgICBjb25zdCBvZmZzZXRZID0gMDtcblxuICAgIG9yaWdpblkgPSBvdmVybGF5WSA9PT0gJ3RvcCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICAgIG9yaWdpbkZhbGxiYWNrWSA9IG92ZXJsYXlGYWxsYmFja1kgPT09ICd0b3AnID8gJ2JvdHRvbScgOiAndG9wJztcblxuICAgIHBvc2l0aW9uU3RyYXRlZ3kud2l0aFBvc2l0aW9ucyhbXG4gICAgICB7IG9yaWdpblgsIG9yaWdpblksIG92ZXJsYXlYLCBvdmVybGF5WSwgb2Zmc2V0WSB9LFxuICAgICAge1xuICAgICAgICBvcmlnaW5YOiBvcmlnaW5GYWxsYmFja1gsXG4gICAgICAgIG9yaWdpblksXG4gICAgICAgIG92ZXJsYXlYOiBvdmVybGF5RmFsbGJhY2tYLFxuICAgICAgICBvdmVybGF5WSxcbiAgICAgICAgb2Zmc2V0WSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblgsXG4gICAgICAgIG9yaWdpblk6IG9yaWdpbkZhbGxiYWNrWSxcbiAgICAgICAgb3ZlcmxheVgsXG4gICAgICAgIG92ZXJsYXlZOiBvdmVybGF5RmFsbGJhY2tZLFxuICAgICAgICBvZmZzZXRZOiAtb2Zmc2V0WSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG9yaWdpblg6IG9yaWdpbkZhbGxiYWNrWCxcbiAgICAgICAgb3JpZ2luWTogb3JpZ2luRmFsbGJhY2tZLFxuICAgICAgICBvdmVybGF5WDogb3ZlcmxheUZhbGxiYWNrWCxcbiAgICAgICAgb3ZlcmxheVk6IG92ZXJsYXlGYWxsYmFja1ksXG4gICAgICAgIG9mZnNldFk6IC1vZmZzZXRZLFxuICAgICAgfSxcbiAgICBdKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHN0cmF0ZWd5IGZvciBwb3NpdGlvbmluZyB0aGUgb3ZlcmxheSBkZXBlbmRpbmcgb24gd2hhdCB0eXBlIG9mXG4gICAqIGRldmljZSB0aGUgcGlja2VyIGlzIGJlaW5nIHNob3duIG9uXG4gICAqL1xuICBwcml2YXRlIF9wb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIGlmICh0aGlzLl9jbGllbnRPdXRwdXQuZGV2aWNlICE9PSAndG91Y2gnKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGVza3RvcFBvc2l0aW9uU3RyYXRlZ3koKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RvdWNoUG9zaXRpb25TdHJhdGVneSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgc3RyYXRlZ3kgZm9yIHBvc2l0aW9uaW5nIHRoZSBvdmVybGF5IGZvciB0b3VjaCBkZXZpY2VzOlxuICAgKiBQbGFjZSBjZW50ZXJlZCBpbiB0aGUgc2NyZWVuLlxuICAgKi9cbiAgcHJpdmF0ZSBfdG91Y2hQb3NpdGlvblN0cmF0ZWd5KCk6IFBvc2l0aW9uU3RyYXRlZ3kge1xuICAgIHJldHVybiB0aGlzLl9vdmVybGF5LnBvc2l0aW9uKCkuZ2xvYmFsKCk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Input, Output, EventEmitter, ViewEncapsulation, } from '@angular/core';
|
|
2
|
+
// eslint-disable-next-line import/no-internal-modules
|
|
3
|
+
import { _DatePickerBase } from './date-picker-base';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "primeng/calendar";
|
|
6
|
+
import * as i2 from "@angular/cdk/a11y";
|
|
7
|
+
import * as i3 from "@angular/common";
|
|
8
|
+
import * as i4 from "@angular/forms";
|
|
9
|
+
export class GraniteDatePickerComponent extends _DatePickerBase {
|
|
10
|
+
constructor() {
|
|
11
|
+
super(...arguments);
|
|
12
|
+
this.selectedDate = undefined;
|
|
13
|
+
this.selectionChanged = new EventEmitter();
|
|
14
|
+
}
|
|
15
|
+
dateSelectionChanged(newDate) {
|
|
16
|
+
this.selectedDate = newDate;
|
|
17
|
+
this.selectionChanged.emit(newDate);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
GraniteDatePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteDatePickerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
21
|
+
GraniteDatePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: GraniteDatePickerComponent, selector: "granite-date-picker", inputs: { selectedDate: "selectedDate" }, outputs: { selectionChanged: "selectionChanged" }, usesInheritance: true, ngImport: i0, template: "<ng-template>\n <div class=\"granite-date-picker\" cdkTrapFocus>\n <div *ngIf=\"selectedDate; else notSelected\">\n <p-calendar\n [(ngModel)]=\"selectedDate\"\n [focusTrap]=\"true\"\n [showButtonBar]=\"true\"\n [inline]=\"true\"\n [showIcon]=\"false\"\n [clearButtonStyleClass]=\"'hideClearButton'\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [showWeek]=\"false\"\n [touchUI]=\"clientOutput.device === 'touch'\"\n (onSelect)=\"dateSelectionChanged($event)\"\n (keydown)=\"_handleKeydown($event)\"\n ></p-calendar>\n </div>\n <ng-template #notSelected>\n <p-calendar\n [focusTrap]=\"true\"\n [showButtonBar]=\"true\"\n [inline]=\"true\"\n [showIcon]=\"false\"\n [clearButtonStyleClass]=\"'hideClearButton'\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [showWeek]=\"false\"\n [touchUI]=\"clientOutput.device === 'touch'\"\n (onSelect)=\"dateSelectionChanged($event)\"\n (keydown)=\"_handleKeydown($event)\"\n ></p-calendar>\n </ng-template>\n </div>\n</ng-template>\n", styles: [".granite-date-picker .p-component{font-size:var(--granite-font-size-body);font-weight:400;border:0 none solid var(--granite-color-text)}.granite-date-picker .p-datepicker{padding:var(--granite-spacing-m);background:var(--granite-color-background);color:var(--granite-color-text);border:0px solid var(--granite-color-text);min-width:256px;border-radius:0;box-shadow:0 8px 16px #00000026}.granite-date-picker .p-datepicker table td{padding:0rem;font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker table td>span{width:var(--granite-spacing-xl);height:var(--granite-spacing-xl);border-radius:50%;transition:none;border:1px solid transparent}.granite-date-picker .p-datepicker table th{border-bottom:1px solid var(--granite-color-background-selected);color:var(--granite-color-text);font-weight:400;font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker table td.p-datepicker-today>span{background:var(--granite-color-background);color:var(--granite-color-text);border-color:var(--granite-color-background-active-hover);width:var(--granite-spacing-xl);height:var(--granite-spacing-xl);outline-offset:-1px}.granite-date-picker .p-datepicker .p-datepicker-header{padding:0rem;color:var(--granite-color-text);background:var(--granite-color-background);font-weight:400;margin:0;border-bottom:0px solid rgba(0,0,0,.12);border-top-right-radius:var(--granite-spacing-xs);border-top-left-radius:var(--granite-spacing-xs);font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker .p-yearpicker .p-yearpicker-year{padding:var(--granite-spacing-s);transition:none;border-radius:var(--granite-spacing-xl)}.granite-date-picker .p-yearpicker-year{width:25%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative;font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover{background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):active{outline-offset:-1px;outline:1px solid var(--granite-color-background-active);background:var(--granite-color-background-active);color:var(--granite-color-text-on-active)}.granite-date-picker .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{box-shadow:0 0;background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-monthpicker-month{font-size:var(--granite-font-size-body-small);width:25%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.granite-date-picker .p-datepicker .p-monthpicker .p-monthpicker-month{padding:var(--granite-spacing-s);transition:none;border-radius:var(--granite-spacing-xl)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):hover{background:var(--granite-color-background-hover);color:var(--granite-color-text);box-shadow:0 0}.granite-date-picker .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover{background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):active{outline-offset:-1px;outline:1px solid var(--granite-color-background-active);background:var(--granite-color-background-active);color:var(--granite-color-text-on-active)}.granite-date-picker .p-button{color:var(--granite-color-text);background:var(--granite-color-background);padding:var(--granite-spacing-s);font-size:var(--granite-font-size-body-small);transition:0;font-weight:400;border-radius:var(--granite-spacing-xs);min-width:0rem;border:1px solid var(--granite-color-background-selected)}.granite-date-picker .p-button-label{font-weight:400}.granite-date-picker .p-datepicker .p-datepicker-buttonbar{margin-top:var(--granite-spacing-m);padding:0rem;border-top:0px}.granite-date-picker .p-button.p-button-text{background-color:transparent;color:var(--granite-color-text);border-color:var(--granite-color-background-selected)}.granite-date-picker .p-button.p-button-text:enabled:hover,.granite-date-picker .p-button.p-button-outlined:enabled:hover{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active);outline:0 none}.granite-date-picker .p-button.p-button-text:enabled:active,.granite-date-picker .p-button.p-button-outlined:enabled:active{background:var(--granite-color-background-active-pressed);color:var(--granite-color-text-on-active);outline:0 none}.granite-date-picker .p-button.p-button-text:focus,.granite-date-picker .p-button.p-button-outlined:focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-datepicker table td>span.p-highlight{background:var(--granite-color-background-active);color:var(--granite-color-text-on-active);border:1px solid var(--granite-color-background-active)}.granite-date-picker .p-datepicker table td>span.p-highlight:enabled:hover{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active);border:1px solid var(--granite-color-background-active)}.granite-date-picker .p-datepicker table td.p-datepicker-today>span{box-shadow:0 0}.granite-date-picker .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-datepicker table td>span:focus{outline:0 none;outline-offset:0;box-shadow:0 0}.granite-date-picker .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:var(--granite-color-background-selected)}.granite-date-picker .pi{font-family:primeicons;font-style:normal;font-size:var(--granite-font-size-body-small);font-weight:200;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:0;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active);border:0 none;outline:0 none}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:active,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next:enabled:active{background:var(--granite-color-background-active-pressed);color:var(--granite-color-text-on-active);border:0 none}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev:focus,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next:focus{outline:0 none;outline-offset:0;border:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0}.granite-date-picker .p-datepicker-prev,.granite-date-picker .p-datepicker-next{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next{width:var(--granite-spacing-xl);height:var(--granite-spacing-xl);color:var(--granite-color-text);border:0 none;background:transparent;border-radius:var(--granite-spacing-xs);font-weight:300;padding:var(--granite-spacing-s)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev :focus-visible,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next :focus-visible{outline:-webkit-focus-ring-color auto 1px}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:var(--granite-color-text);font-weight:400;padding:var(--granite-spacing-s)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover{background:var(--granite-color-background-active-hover);outline:0 none;color:var(--granite-color-text-on-active)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:active,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:active{outline:0 none;background:var(--granite-color-background-active-pressed);color:var(--granite-color-text-on-active)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title{line-height:0rem}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{margin-inline-end:var(--granite-spacing-s)}.granite-date-picker .p-link{outline:.0625rem solid var(--granite-color-border-soft);outline-offset:-1px;padding:var(--granite-spacing-s);font-size:var(--granite-font-size-body-small);border-radius:var(--granite-spacing-xs)}.granite-date-picker .p-link:focus{outline-offset:-2px;outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0}.granite-date-picker.granite-date-range-picker .p-datepicker table td>span.p-highlight{background:var(--granite-color-background-info);color:var(--granite-color-text);border:none}.granite-date-picker .hideClearButton{display:none}\n"], components: [{ type: i1.Calendar, selector: "p-calendar", inputs: ["style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "view", "defaultDate", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }], directives: [{ type: i2.CdkTrapFocus, selector: "[cdkTrapFocus]", inputs: ["cdkTrapFocus", "cdkTrapFocusAutoCapture"], exportAs: ["cdkTrapFocus"] }, { type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: GraniteDatePickerComponent, decorators: [{
|
|
23
|
+
type: Component,
|
|
24
|
+
args: [{ selector: 'granite-date-picker', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-template>\n <div class=\"granite-date-picker\" cdkTrapFocus>\n <div *ngIf=\"selectedDate; else notSelected\">\n <p-calendar\n [(ngModel)]=\"selectedDate\"\n [focusTrap]=\"true\"\n [showButtonBar]=\"true\"\n [inline]=\"true\"\n [showIcon]=\"false\"\n [clearButtonStyleClass]=\"'hideClearButton'\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [showWeek]=\"false\"\n [touchUI]=\"clientOutput.device === 'touch'\"\n (onSelect)=\"dateSelectionChanged($event)\"\n (keydown)=\"_handleKeydown($event)\"\n ></p-calendar>\n </div>\n <ng-template #notSelected>\n <p-calendar\n [focusTrap]=\"true\"\n [showButtonBar]=\"true\"\n [inline]=\"true\"\n [showIcon]=\"false\"\n [clearButtonStyleClass]=\"'hideClearButton'\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [firstDayOfWeek]=\"firstDayOfWeek\"\n [showWeek]=\"false\"\n [touchUI]=\"clientOutput.device === 'touch'\"\n (onSelect)=\"dateSelectionChanged($event)\"\n (keydown)=\"_handleKeydown($event)\"\n ></p-calendar>\n </ng-template>\n </div>\n</ng-template>\n", styles: [".granite-date-picker .p-component{font-size:var(--granite-font-size-body);font-weight:400;border:0 none solid var(--granite-color-text)}.granite-date-picker .p-datepicker{padding:var(--granite-spacing-m);background:var(--granite-color-background);color:var(--granite-color-text);border:0px solid var(--granite-color-text);min-width:256px;border-radius:0;box-shadow:0 8px 16px #00000026}.granite-date-picker .p-datepicker table td{padding:0rem;font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker table td>span{width:var(--granite-spacing-xl);height:var(--granite-spacing-xl);border-radius:50%;transition:none;border:1px solid transparent}.granite-date-picker .p-datepicker table th{border-bottom:1px solid var(--granite-color-background-selected);color:var(--granite-color-text);font-weight:400;font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker table td.p-datepicker-today>span{background:var(--granite-color-background);color:var(--granite-color-text);border-color:var(--granite-color-background-active-hover);width:var(--granite-spacing-xl);height:var(--granite-spacing-xl);outline-offset:-1px}.granite-date-picker .p-datepicker .p-datepicker-header{padding:0rem;color:var(--granite-color-text);background:var(--granite-color-background);font-weight:400;margin:0;border-bottom:0px solid rgba(0,0,0,.12);border-top-right-radius:var(--granite-spacing-xs);border-top-left-radius:var(--granite-spacing-xs);font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker .p-yearpicker .p-yearpicker-year{padding:var(--granite-spacing-s);transition:none;border-radius:var(--granite-spacing-xl)}.granite-date-picker .p-yearpicker-year{width:25%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative;font-size:var(--granite-font-size-body-small)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):hover{background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):not(.p-highlight):active{outline-offset:-1px;outline:1px solid var(--granite-color-background-active);background:var(--granite-color-background-active);color:var(--granite-color-text-on-active)}.granite-date-picker .p-datepicker .p-yearpicker .p-yearpicker-year.p-highlight{box-shadow:0 0;background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-yearpicker .p-yearpicker-year:not(.p-disabled):focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-monthpicker-month{font-size:var(--granite-font-size-body-small);width:25%;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative}.granite-date-picker .p-datepicker .p-monthpicker .p-monthpicker-month{padding:var(--granite-spacing-s);transition:none;border-radius:var(--granite-spacing-xl)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):hover{background:var(--granite-color-background-hover);color:var(--granite-color-text);box-shadow:0 0}.granite-date-picker .p-datepicker .p-monthpicker .p-monthpicker-month.p-highlight{background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):hover{background:var(--granite-color-background-hover);color:var(--granite-color-text)}.granite-date-picker .p-datepicker:not(.p-disabled) .p-monthpicker .p-monthpicker-month:not(.p-disabled):not(.p-highlight):active{outline-offset:-1px;outline:1px solid var(--granite-color-background-active);background:var(--granite-color-background-active);color:var(--granite-color-text-on-active)}.granite-date-picker .p-button{color:var(--granite-color-text);background:var(--granite-color-background);padding:var(--granite-spacing-s);font-size:var(--granite-font-size-body-small);transition:0;font-weight:400;border-radius:var(--granite-spacing-xs);min-width:0rem;border:1px solid var(--granite-color-background-selected)}.granite-date-picker .p-button-label{font-weight:400}.granite-date-picker .p-datepicker .p-datepicker-buttonbar{margin-top:var(--granite-spacing-m);padding:0rem;border-top:0px}.granite-date-picker .p-button.p-button-text{background-color:transparent;color:var(--granite-color-text);border-color:var(--granite-color-background-selected)}.granite-date-picker .p-button.p-button-text:enabled:hover,.granite-date-picker .p-button.p-button-outlined:enabled:hover{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active);outline:0 none}.granite-date-picker .p-button.p-button-text:enabled:active,.granite-date-picker .p-button.p-button-outlined:enabled:active{background:var(--granite-color-background-active-pressed);color:var(--granite-color-text-on-active);outline:0 none}.granite-date-picker .p-button.p-button-text:focus,.granite-date-picker .p-button.p-button-outlined:focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-datepicker table td>span.p-highlight{background:var(--granite-color-background-active);color:var(--granite-color-text-on-active);border:1px solid var(--granite-color-background-active)}.granite-date-picker .p-datepicker table td>span.p-highlight:enabled:hover{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active);border:1px solid var(--granite-color-background-active)}.granite-date-picker .p-datepicker table td.p-datepicker-today>span{box-shadow:0 0}.granite-date-picker .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):focus{outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0;outline-offset:-2px}.granite-date-picker .p-datepicker table td>span:focus{outline:0 none;outline-offset:0;box-shadow:0 0}.granite-date-picker .p-datepicker:not(.p-disabled) table td span:not(.p-highlight):not(.p-disabled):hover{background:var(--granite-color-background-selected)}.granite-date-picker .pi{font-family:primeicons;font-style:normal;font-size:var(--granite-font-size-body-small);font-weight:200;font-feature-settings:normal;font-variant:normal;text-transform:none;line-height:0;display:inline-block;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:hover,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next:enabled:hover{background:var(--granite-color-background-active-hover);color:var(--granite-color-text-on-active);border:0 none;outline:0 none}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev:enabled:active,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next:enabled:active{background:var(--granite-color-background-active-pressed);color:var(--granite-color-text-on-active);border:0 none}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev:focus,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next:focus{outline:0 none;outline-offset:0;border:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0}.granite-date-picker .p-datepicker-prev,.granite-date-picker .p-datepicker-next{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;overflow:hidden;position:relative}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next{width:var(--granite-spacing-xl);height:var(--granite-spacing-xl);color:var(--granite-color-text);border:0 none;background:transparent;border-radius:var(--granite-spacing-xs);font-weight:300;padding:var(--granite-spacing-s)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-prev :focus-visible,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-next :focus-visible{outline:-webkit-focus-ring-color auto 1px}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{color:var(--granite-color-text);font-weight:400;padding:var(--granite-spacing-s)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:hover,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:hover{background:var(--granite-color-background-active-hover);outline:0 none;color:var(--granite-color-text-on-active)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-year:enabled:active,.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month:enabled:active{outline:0 none;background:var(--granite-color-background-active-pressed);color:var(--granite-color-text-on-active)}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title{line-height:0rem}.granite-date-picker .p-datepicker .p-datepicker-header .p-datepicker-title .p-datepicker-month{margin-inline-end:var(--granite-spacing-s)}.granite-date-picker .p-link{outline:.0625rem solid var(--granite-color-border-soft);outline-offset:-1px;padding:var(--granite-spacing-s);font-size:var(--granite-font-size-body-small);border-radius:var(--granite-spacing-xs)}.granite-date-picker .p-link:focus{outline-offset:-2px;outline:var(--granite-spacing-xxs) solid var(--granite-color-focus);box-shadow:0 0}.granite-date-picker.granite-date-range-picker .p-datepicker table td>span.p-highlight{background:var(--granite-color-background-info);color:var(--granite-color-text);border:none}.granite-date-picker .hideClearButton{display:none}\n"] }]
|
|
25
|
+
}], propDecorators: { selectedDate: [{
|
|
26
|
+
type: Input
|
|
27
|
+
}], selectionChanged: [{
|
|
28
|
+
type: Output
|
|
29
|
+
}] } });
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9ncmFuaXRlLWNvbXBvbmVudHMvZGF0ZS1waWNrZXIvc3JjL2xpYi9kYXRlLXBpY2tlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2dyYW5pdGUtY29tcG9uZW50cy9kYXRlLXBpY2tlci9zcmMvbGliL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixzREFBc0Q7QUFDdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7Ozs7QUFTckQsTUFBTSxPQUFPLDBCQUEyQixTQUFRLGVBQWU7SUFQL0Q7O1FBU0UsaUJBQVksR0FBcUIsU0FBUyxDQUFDO1FBR2xDLHFCQUFnQixHQUF1QixJQUFJLFlBQVksRUFBUSxDQUFDO0tBTTFFO0lBSkMsb0JBQW9CLENBQUMsT0FBYTtRQUNoQyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQztRQUM1QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RDLENBQUM7O3dIQVZVLDBCQUEwQjs0R0FBMUIsMEJBQTBCLCtLQ2xCdkMsaXZDQXFDQTs0RkRuQmEsMEJBQTBCO2tCQVB0QyxTQUFTOytCQUNFLHFCQUFxQixpQkFHaEIsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTs4QkFJL0MsWUFBWTtzQkFEWCxLQUFLO2dCQUlHLGdCQUFnQjtzQkFEeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEV2ZW50RW1pdHRlcixcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1pbnRlcm5hbC1tb2R1bGVzXG5pbXBvcnQgeyBfRGF0ZVBpY2tlckJhc2UgfSBmcm9tICcuL2RhdGUtcGlja2VyLWJhc2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdncmFuaXRlLWRhdGUtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhdGUtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZGF0ZS1waWNrZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEdyYW5pdGVEYXRlUGlja2VyQ29tcG9uZW50IGV4dGVuZHMgX0RhdGVQaWNrZXJCYXNlIHtcbiAgQElucHV0KClcbiAgc2VsZWN0ZWREYXRlOiBEYXRlIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIEBPdXRwdXQoKVxuICByZWFkb25seSBzZWxlY3Rpb25DaGFuZ2VkOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgZGF0ZVNlbGVjdGlvbkNoYW5nZWQobmV3RGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZWQuZW1pdChuZXdEYXRlKTtcbiAgfVxufVxuIiwiPG5nLXRlbXBsYXRlPlxuICA8ZGl2IGNsYXNzPVwiZ3Jhbml0ZS1kYXRlLXBpY2tlclwiIGNka1RyYXBGb2N1cz5cbiAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWREYXRlOyBlbHNlIG5vdFNlbGVjdGVkXCI+XG4gICAgICA8cC1jYWxlbmRhclxuICAgICAgICBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgIFtmb2N1c1RyYXBdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93QnV0dG9uQmFyXT1cInRydWVcIlxuICAgICAgICBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICBbc2hvd0ljb25dPVwiZmFsc2VcIlxuICAgICAgICBbY2xlYXJCdXR0b25TdHlsZUNsYXNzXT1cIidoaWRlQ2xlYXJCdXR0b24nXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICBbc2hvd1dlZWtdPVwiZmFsc2VcIlxuICAgICAgICBbdG91Y2hVSV09XCJjbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cImRhdGVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJfaGFuZGxlS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgPC9kaXY+XG4gICAgPG5nLXRlbXBsYXRlICNub3RTZWxlY3RlZD5cbiAgICAgIDxwLWNhbGVuZGFyXG4gICAgICAgIFtmb2N1c1RyYXBdPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93QnV0dG9uQmFyXT1cInRydWVcIlxuICAgICAgICBbaW5saW5lXT1cInRydWVcIlxuICAgICAgICBbc2hvd0ljb25dPVwiZmFsc2VcIlxuICAgICAgICBbY2xlYXJCdXR0b25TdHlsZUNsYXNzXT1cIidoaWRlQ2xlYXJCdXR0b24nXCJcbiAgICAgICAgW21pbkRhdGVdPVwibWluRGF0ZVwiXG4gICAgICAgIFttYXhEYXRlXT1cIm1heERhdGVcIlxuICAgICAgICBbZmlyc3REYXlPZldlZWtdPVwiZmlyc3REYXlPZldlZWtcIlxuICAgICAgICBbc2hvd1dlZWtdPVwiZmFsc2VcIlxuICAgICAgICBbdG91Y2hVSV09XCJjbGllbnRPdXRwdXQuZGV2aWNlID09PSAndG91Y2gnXCJcbiAgICAgICAgKG9uU2VsZWN0KT1cImRhdGVTZWxlY3Rpb25DaGFuZ2VkKCRldmVudClcIlxuICAgICAgICAoa2V5ZG93bik9XCJfaGFuZGxlS2V5ZG93bigkZXZlbnQpXCJcbiAgICAgID48L3AtY2FsZW5kYXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|