@tekus/design-system 5.1.3 → 5.3.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/assets/readme-images/tk-modal-anatomy.png +0 -0
- package/assets/readme-images/tk-modal-basic.png +0 -0
- package/assets/readme-images/tk-modal-full.png +0 -0
- package/components/date-picker/index.d.ts +5 -0
- package/components/date-picker/public-api.d.ts +1 -0
- package/components/date-picker/src/date-picker.component.d.ts +156 -0
- package/components/modal/index.d.ts +5 -0
- package/components/modal/public-api.d.ts +3 -0
- package/components/modal/src/modal.component.d.ts +83 -0
- package/components/modal/src/modal.types.d.ts +16 -0
- package/components/modal/src/services/modal.service.d.ts +16 -0
- package/fesm2022/tekus-design-system-components-button.mjs +2 -2
- package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-date-picker.mjs +266 -0
- package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -0
- package/fesm2022/tekus-design-system-components-fallback-view.mjs +2 -2
- package/fesm2022/tekus-design-system-components-fallback-view.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-modal.mjs +178 -0
- package/fesm2022/tekus-design-system-components-modal.mjs.map +1 -0
- package/fesm2022/tekus-design-system-core-types.mjs +83 -60
- package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
- package/fesm2022/tekus-design-system-core.mjs +83 -60
- package/fesm2022/tekus-design-system-core.mjs.map +1 -1
- package/package.json +9 -1
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './src/date-picker.component';
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { EventEmitter, OnInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { FormControl, ControlValueAccessor } from '@angular/forms';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export type DateValue = Date | [Date, Date] | null;
|
|
5
|
+
export declare class DatePickerComponent implements OnInit, OnDestroy, ControlValueAccessor {
|
|
6
|
+
/**
|
|
7
|
+
* @property {'single' | 'range'} selectionMode
|
|
8
|
+
* @description
|
|
9
|
+
* Defines how the datepicker behaves:
|
|
10
|
+
* - `'single'`: select one date
|
|
11
|
+
* - `'range'`: select a pair of dates [start, end]
|
|
12
|
+
* @default 'range'
|
|
13
|
+
*/
|
|
14
|
+
selectionMode: 'single' | 'range';
|
|
15
|
+
/**
|
|
16
|
+
* @property {boolean} readonlyInput
|
|
17
|
+
* @description
|
|
18
|
+
* Disables manual typing in the input and forces the user to select via the calendar.
|
|
19
|
+
* @default true
|
|
20
|
+
*/
|
|
21
|
+
readonlyInput: boolean;
|
|
22
|
+
/**
|
|
23
|
+
* @property {boolean} showClear
|
|
24
|
+
* @description
|
|
25
|
+
* Displays a clear button that resets the datepicker value.
|
|
26
|
+
* @default true
|
|
27
|
+
*/
|
|
28
|
+
showClear: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* @property {boolean} showIcon
|
|
31
|
+
* @description
|
|
32
|
+
* Shows the calendar icon inside the input.
|
|
33
|
+
* @default true
|
|
34
|
+
*/
|
|
35
|
+
showIcon: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* @property {string} dateFormat
|
|
38
|
+
* @description
|
|
39
|
+
* Format used by PrimeNG for displaying dates.
|
|
40
|
+
* @default 'mm/dd/yy'
|
|
41
|
+
*/
|
|
42
|
+
dateFormat: string;
|
|
43
|
+
/**
|
|
44
|
+
* @property {Date | null} maxDate
|
|
45
|
+
* @description
|
|
46
|
+
* Maximum selectable date. When set, the calendar will prevent selecting dates after this value.
|
|
47
|
+
* Provide a JavaScript Date object. Use `null` to allow any future date.
|
|
48
|
+
* @default null
|
|
49
|
+
*/
|
|
50
|
+
maxDate: Date | null;
|
|
51
|
+
/**
|
|
52
|
+
* @property {Date | null} minDate
|
|
53
|
+
* @description
|
|
54
|
+
* Minimum selectable date. When set, the calendar will prevent selecting dates before this value.
|
|
55
|
+
* Provide a JavaScript Date object. Use `null` to allow any past date.
|
|
56
|
+
* @default null
|
|
57
|
+
*/
|
|
58
|
+
minDate: Date | null;
|
|
59
|
+
/**
|
|
60
|
+
* @property {string} labelText
|
|
61
|
+
* @description
|
|
62
|
+
* Label shown by the float-label wrapper.
|
|
63
|
+
* @default 'Select a date'
|
|
64
|
+
*/
|
|
65
|
+
labelText: string;
|
|
66
|
+
/**
|
|
67
|
+
* @private
|
|
68
|
+
* @property {FormControl<DateValue>} internalControl
|
|
69
|
+
* @description
|
|
70
|
+
* The internal FormControl used in the template. It handles value synchronization
|
|
71
|
+
* for both CVA and the optional external control input.
|
|
72
|
+
*/
|
|
73
|
+
internalControl: FormControl<DateValue>;
|
|
74
|
+
/**
|
|
75
|
+
* @private
|
|
76
|
+
* @property {Subscription} sub
|
|
77
|
+
* @description Subscription to the valueChanges observable.
|
|
78
|
+
*/
|
|
79
|
+
private sub;
|
|
80
|
+
private onChange;
|
|
81
|
+
private onTouched;
|
|
82
|
+
/**
|
|
83
|
+
* @property {FormControl<DateValue> | null} control
|
|
84
|
+
* @description
|
|
85
|
+
* Allows passing an external FormControl (traditional Reactive Forms usage).
|
|
86
|
+
* If provided, it overrides the internal control.
|
|
87
|
+
*/
|
|
88
|
+
set control(ctrl: FormControl<DateValue> | null);
|
|
89
|
+
get control(): FormControl<DateValue>;
|
|
90
|
+
/**
|
|
91
|
+
* @event handleSelect
|
|
92
|
+
* @description
|
|
93
|
+
* Emitted when:
|
|
94
|
+
* - single mode → a valid Date is selected
|
|
95
|
+
* - range mode → both start and end dates are selected
|
|
96
|
+
*
|
|
97
|
+
* Payload:
|
|
98
|
+
* - Date (single mode)
|
|
99
|
+
* - [Date, Date] (completed range)
|
|
100
|
+
*/
|
|
101
|
+
handleSelect: EventEmitter<DateValue>;
|
|
102
|
+
/**
|
|
103
|
+
* @event handleClear
|
|
104
|
+
* @description
|
|
105
|
+
* Emitted when the control's value becomes `null`.
|
|
106
|
+
*/
|
|
107
|
+
handleClear: EventEmitter<void>;
|
|
108
|
+
/**
|
|
109
|
+
* @property faCalendarDay
|
|
110
|
+
* @description
|
|
111
|
+
* Icon displayed inside the datepicker input.
|
|
112
|
+
*/
|
|
113
|
+
faCalendarDay: import("@fortawesome/fontawesome-common-types").IconDefinition;
|
|
114
|
+
/**
|
|
115
|
+
* @method writeValue
|
|
116
|
+
* @description Writes a new value from the form model (ngModel or formControl) into the component.
|
|
117
|
+
*/
|
|
118
|
+
writeValue(value: DateValue): void;
|
|
119
|
+
/**
|
|
120
|
+
* @method registerOnChange
|
|
121
|
+
* @description Registers a callback function to be called when the control's value changes.
|
|
122
|
+
*/
|
|
123
|
+
registerOnChange(fn: (value: DateValue) => void): void;
|
|
124
|
+
/**
|
|
125
|
+
* @method registerOnTouched
|
|
126
|
+
* @description Registers a callback function to be called when the control receives a blur event (is touched).
|
|
127
|
+
*/
|
|
128
|
+
registerOnTouched(fn: () => void): void;
|
|
129
|
+
/**
|
|
130
|
+
* @method setDisabledState
|
|
131
|
+
* @description Called when the control should be disabled or enabled.
|
|
132
|
+
*/
|
|
133
|
+
setDisabledState(isDisabled: boolean): void;
|
|
134
|
+
/**
|
|
135
|
+
* @method ngOnInit
|
|
136
|
+
* @description
|
|
137
|
+
* Subscribes to the internal control's valueChanges:
|
|
138
|
+
* 1. Notifies the external form (CVA) via `this.onChange()`.
|
|
139
|
+
* 2. Emits the semantic events `handleSelect` or `handleClear`.
|
|
140
|
+
*/
|
|
141
|
+
ngOnInit(): void;
|
|
142
|
+
/**
|
|
143
|
+
* @method ngOnDestroy
|
|
144
|
+
* @description Cleans up the internal subscription when the component is destroyed.
|
|
145
|
+
*/
|
|
146
|
+
ngOnDestroy(): void;
|
|
147
|
+
/**
|
|
148
|
+
* @method clear
|
|
149
|
+
* @description
|
|
150
|
+
* Programmatically clears the control's value,
|
|
151
|
+
* which automatically triggers `handleClear`.
|
|
152
|
+
*/
|
|
153
|
+
clear(): void;
|
|
154
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatePickerComponent, never>;
|
|
155
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatePickerComponent, "tk-date-picker", never, { "selectionMode": { "alias": "selectionMode"; "required": false; }; "readonlyInput": { "alias": "readonlyInput"; "required": false; }; "showClear": { "alias": "showClear"; "required": false; }; "showIcon": { "alias": "showIcon"; "required": false; }; "dateFormat": { "alias": "dateFormat"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; "labelText": { "alias": "labelText"; "required": false; }; "control": { "alias": "control"; "required": false; }; }, { "handleSelect": "handleSelect"; "handleClear": "handleClear"; }, never, never, true, never>;
|
|
156
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { ModalFooterButton, ModalSizeType } from './modal.types';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* @component ModalComponent
|
|
6
|
+
* @description
|
|
7
|
+
* A programmatically controlled modal dialog used for displaying dynamic content, titles, and footer actions.
|
|
8
|
+
* The modal is not instantiated via template bindings, but rather opened through a service with a configuration object.
|
|
9
|
+
*
|
|
10
|
+
* This component supports:
|
|
11
|
+
* - Configurable title and content.
|
|
12
|
+
* - Optional footer buttons with callbacks and return values.
|
|
13
|
+
* - Multiple sizes: `'small' | 'large' | 'full'`.
|
|
14
|
+
* - Closable modal and outside-click behavior.
|
|
15
|
+
* - Passing arbitrary data to the modal instance.
|
|
16
|
+
*
|
|
17
|
+
* @usage
|
|
18
|
+
* ### Open a modal from TypeScript using the modal service
|
|
19
|
+
* ```ts
|
|
20
|
+
* this.modalService.open({
|
|
21
|
+
* title: 'Demo Modal',
|
|
22
|
+
* content: 'This modal is opened from TypeScript using the service.',
|
|
23
|
+
* footerButtons: [
|
|
24
|
+
* {
|
|
25
|
+
* label: 'Accept',
|
|
26
|
+
* severity: 'secondary',
|
|
27
|
+
* action: () => console.log('Accept clicked'),
|
|
28
|
+
* returnValue: true,
|
|
29
|
+
* },
|
|
30
|
+
* {
|
|
31
|
+
* label: 'Cancel',
|
|
32
|
+
* severity: 'danger',
|
|
33
|
+
* action: () => console.log('Cancel clicked'),
|
|
34
|
+
* returnValue: false,
|
|
35
|
+
* },
|
|
36
|
+
* ],
|
|
37
|
+
* size: 'small',
|
|
38
|
+
* closable: true,
|
|
39
|
+
* closeOnOutsideClick: false,
|
|
40
|
+
* }).subscribe((result) => {
|
|
41
|
+
* console.log('Modal closed with value:', result);
|
|
42
|
+
* });
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export declare class ModalComponent {
|
|
46
|
+
/** The title displayed at the top of the modal */
|
|
47
|
+
title: import("@angular/core").InputSignal<string>;
|
|
48
|
+
/** The main content of the modal */
|
|
49
|
+
content: import("@angular/core").InputSignal<string | null>;
|
|
50
|
+
/** Array of footer buttons with label, callback, and return value */
|
|
51
|
+
footerButtons: import("@angular/core").InputSignal<ModalFooterButton[]>;
|
|
52
|
+
/** Modal size: 'small', 'large', or 'full' */
|
|
53
|
+
size: import("@angular/core").InputSignal<ModalSizeType>;
|
|
54
|
+
/** Whether the modal can be closed by the user */
|
|
55
|
+
closable: import("@angular/core").InputSignal<boolean>;
|
|
56
|
+
/** Whether clicking outside closes the modal */
|
|
57
|
+
closeOnOutsideClick: import("@angular/core").InputSignal<boolean>;
|
|
58
|
+
/** Computed: whether the modal has footer buttons */
|
|
59
|
+
hasFooter: import("@angular/core").Signal<boolean>;
|
|
60
|
+
/** Computed: calculates modal width based on `size` */
|
|
61
|
+
modalWidth: import("@angular/core").Signal<"67.5rem" | "98vw" | "25rem">;
|
|
62
|
+
/** Visibility flag */
|
|
63
|
+
isOpened: boolean;
|
|
64
|
+
/** Emits when the modal closes, passing the return value from footer buttons or null */
|
|
65
|
+
readonly onClose: EventEmitter<unknown>;
|
|
66
|
+
private alreadyEmitted;
|
|
67
|
+
private returnValueOnClose;
|
|
68
|
+
/** Opens the modal */
|
|
69
|
+
open(): void;
|
|
70
|
+
/** Closes the modal and emits onClose with null */
|
|
71
|
+
handleClose(): void;
|
|
72
|
+
/** Closes the modal without emitting an event */
|
|
73
|
+
close(): void;
|
|
74
|
+
/**
|
|
75
|
+
* Handles footer button actions.
|
|
76
|
+
* Executes the action callback, emits `onClose` with the provided returnValue, then closes the modal.
|
|
77
|
+
* @param action Callback to execute when the button is clicked
|
|
78
|
+
* @param returnValue Value emitted on modal close
|
|
79
|
+
*/
|
|
80
|
+
handleAction(action: () => void, returnValue: unknown): void;
|
|
81
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModalComponent, never>;
|
|
82
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ModalComponent, "tk-modal", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; "content": { "alias": "content"; "required": false; "isSignal": true; }; "footerButtons": { "alias": "footerButtons"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "closable": { "alias": "closable"; "required": false; "isSignal": true; }; "closeOnOutsideClick": { "alias": "closeOnOutsideClick"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
83
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export type ModalSizeType = 'small' | 'large' | 'full';
|
|
2
|
+
export type SeverityType = 'primary' | 'secondary' | 'danger';
|
|
3
|
+
export interface ModalFooterButton {
|
|
4
|
+
label: string;
|
|
5
|
+
severity: SeverityType;
|
|
6
|
+
action: () => void;
|
|
7
|
+
returnValue?: unknown;
|
|
8
|
+
}
|
|
9
|
+
export interface ModalConfig {
|
|
10
|
+
title: string;
|
|
11
|
+
content?: string;
|
|
12
|
+
footerButtons?: ModalFooterButton[];
|
|
13
|
+
size?: ModalSizeType;
|
|
14
|
+
closable?: boolean;
|
|
15
|
+
closeOnOutsideClick?: boolean;
|
|
16
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { ApplicationRef, ComponentRef, Injector } from '@angular/core';
|
|
2
|
+
import { ModalComponent } from '../modal.component';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { ModalConfig } from '../modal.types';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class ModalService {
|
|
7
|
+
private readonly injector;
|
|
8
|
+
private readonly appRef;
|
|
9
|
+
private modalRef;
|
|
10
|
+
constructor(injector: Injector, appRef: ApplicationRef);
|
|
11
|
+
get _modalRefForTesting(): ComponentRef<ModalComponent> | null;
|
|
12
|
+
set _modalRefForTesting(ref: ComponentRef<ModalComponent> | null);
|
|
13
|
+
open(config: ModalConfig): Observable<unknown>;
|
|
14
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ModalService, never>;
|
|
15
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ModalService>;
|
|
16
|
+
}
|
|
@@ -102,11 +102,11 @@ class ButtonComponent {
|
|
|
102
102
|
this.clicked.emit('mouse');
|
|
103
103
|
}
|
|
104
104
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
105
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ButtonComponent, isStandalone: true, selector: "tk-button", inputs: { label: "label", disabled: "disabled", type: "type", severity: "severity", link: "link" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<p-button\n class=\"tk-button\"\n [label]=\"label\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [severity]=\"link ? null : severity\"\n [link]=\"link\"\n (click)=\"onButtonClick()\"\n (keydown.enter)=\"onButtonClick()\"\n (keydown.space)=\"onButtonClick()\">\n</p-button>\n", styles: [":host ::ng-deep .p-button.p-button-primary .p-button-label,:host ::ng-deep .p-button.p-button-
|
|
105
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: ButtonComponent, isStandalone: true, selector: "tk-button", inputs: { label: "label", disabled: "disabled", type: "type", severity: "severity", link: "link" }, outputs: { clicked: "clicked" }, ngImport: i0, template: "<p-button\n class=\"tk-button\"\n [label]=\"label\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [severity]=\"link ? null : severity\"\n [link]=\"link\"\n (click)=\"onButtonClick()\"\n (keydown.enter)=\"onButtonClick()\"\n (keydown.space)=\"onButtonClick()\">\n</p-button>\n", styles: [":host ::ng-deep .p-button.p-button-primary .p-button-label,:host ::ng-deep .p-button.p-button-danger .p-button-label{color:var(--tk-color-base-surface-0, #ffffff)!important}:host ::ng-deep .p-button.p-button-link .p-button-label{color:var(--tk-color-base-primary-500, #16006f)!important}:host ::ng-deep .p-button.p-button-link:hover .p-button-label{color:var(--tk-color-base-primary-400, #45338c)!important}:host ::ng-deep .p-button.p-button-secondary .p-button-label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .p-button.p-button-secondary .p-button-label,:host ::ng-deep .p-button.p-button-danger .p-button-label{font-weight:var(--tk-font-weight-400, 400)}\n"], dependencies: [{ kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i1.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "raised", "rounded", "text", "plain", "severity", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "fluid", "buttonProps"], outputs: ["onClick", "onFocus", "onBlur"] }] }); }
|
|
106
106
|
}
|
|
107
107
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ButtonComponent, decorators: [{
|
|
108
108
|
type: Component,
|
|
109
|
-
args: [{ selector: 'tk-button', standalone: true, imports: [ButtonModule], template: "<p-button\n class=\"tk-button\"\n [label]=\"label\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [severity]=\"link ? null : severity\"\n [link]=\"link\"\n (click)=\"onButtonClick()\"\n (keydown.enter)=\"onButtonClick()\"\n (keydown.space)=\"onButtonClick()\">\n</p-button>\n", styles: [":host ::ng-deep .p-button.p-button-primary .p-button-label,:host ::ng-deep .p-button.p-button-
|
|
109
|
+
args: [{ selector: 'tk-button', standalone: true, imports: [ButtonModule], template: "<p-button\n class=\"tk-button\"\n [label]=\"label\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [severity]=\"link ? null : severity\"\n [link]=\"link\"\n (click)=\"onButtonClick()\"\n (keydown.enter)=\"onButtonClick()\"\n (keydown.space)=\"onButtonClick()\">\n</p-button>\n", styles: [":host ::ng-deep .p-button.p-button-primary .p-button-label,:host ::ng-deep .p-button.p-button-danger .p-button-label{color:var(--tk-color-base-surface-0, #ffffff)!important}:host ::ng-deep .p-button.p-button-link .p-button-label{color:var(--tk-color-base-primary-500, #16006f)!important}:host ::ng-deep .p-button.p-button-link:hover .p-button-label{color:var(--tk-color-base-primary-400, #45338c)!important}:host ::ng-deep .p-button.p-button-secondary .p-button-label{color:var(--tk-color-base-surface-500, #8a8a8b)!important}:host ::ng-deep .p-button.p-button-secondary .p-button-label,:host ::ng-deep .p-button.p-button-danger .p-button-label{font-weight:var(--tk-font-weight-400, 400)}\n"] }]
|
|
110
110
|
}], propDecorators: { label: [{
|
|
111
111
|
type: Input
|
|
112
112
|
}], disabled: [{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tekus-design-system-components-button.mjs","sources":["../../../projects/design-system/components/button/src/button.component.ts","../../../projects/design-system/components/button/src/button.component.html","../../../projects/design-system/components/button/tekus-design-system-components-button.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\n\nexport type ButtonSeverity = 'primary' | 'secondary' | 'danger';\n\n/**\n * @component ButtonComponent\n * @description\n * Atomic button component that provides a reusable and customizable button element\n * across the application.\n * It uses PrimeNG’s `ButtonModule` under the hood and allows setting different visual\n * variants (severity), button types, and disabled states.\n *\n * This component ensures consistent design and behavior in all button interactions.\n * It is accessible via both mouse clicks and keyboard actions (Enter/Space).\n *\n * @usage\n * ```html\n * <tk-button\n * label=\"Save\"\n * [severity]=\"'primary'\"\n * [type]=\"'submit'\"\n * (clicked)=\"handleSave()\">\n * </tk-button>\n *\n * <tk-button\n * label=\"Cancel\"\n * [severity]=\"'secondary'\"\n * [disabled]=\"true\">\n * </tk-button>\n * ```\n */\n@Component({\n selector: 'tk-button',\n standalone: true,\n imports: [ButtonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent {\n /**\n * @property {string} label\n * @description\n * Text displayed inside the button.\n *\n * @default `'Label'`\n */\n @Input() label = 'Label';\n\n /**\n * @property {boolean} disabled\n * @description\n * Disables the button, preventing user interaction and applying a visual style\n * that indicates the inactive state.\n *\n * @default `false`\n */\n @Input() disabled = false;\n\n /**\n * @property {'button' | 'submit'} type\n * @description\n * Defines the button’s HTML type attribute.\n * - `'button'`: Standard clickable button (default).\n * - `'submit'`: Used to submit forms.\n *\n * @default `'button'`\n */\n @Input() type: 'button' | 'submit' = 'button';\n\n /**\n * @property {ButtonSeverity} severity\n * @description\n * Defines the visual importance or style of the button.\n * - `'primary'`: Default, neutral action.\n * - `'secondary'`: Secondary option.\n * - `'danger'`: Destructive or warning actions.\n *\n * @default `'secondary'`\n */\n @Input() severity: ButtonSeverity = 'primary';\n\n /**\n * @property {boolean} link\n * @description\n * When true, the button will be styled as a link (text only with underline).\n *\n * @default false\n */\n @Input() link = false;\n\n /**\n * @event clicked\n * @description\n * Emits when the button is activated via click or keyboard (Enter/Space),\n * unless the button is disabled.\n *\n * @example\n * ```html\n * <tk-button label=\"Click me\" (clicked)=\"handleClick()\"></tk-button>\n * ```\n */\n @Output() clicked = new EventEmitter<'mouse' | 'keyboard'>();\n\n /**\n * @method onButtonClick\n * @description\n * Handles the native click event. Emits the `clicked` event if the button\n * is not disabled.\n */\n onButtonClick(): void {\n if (!this.disabled) this.clicked.emit('mouse');\n }\n}\n","<p-button\n class=\"tk-button\"\n [label]=\"label\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [severity]=\"link ? null : severity\"\n [link]=\"link\"\n (click)=\"onButtonClick()\"\n (keydown.enter)=\"onButtonClick()\"\n (keydown.space)=\"onButtonClick()\">\n</p-button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MAQU,eAAe,CAAA;AAP5B,IAAA,WAAA,GAAA;AAQE;;;;;;AAMG;QACM,IAAK,CAAA,KAAA,GAAG,OAAO;AAExB;;;;;;;AAOG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;AAEzB;;;;;;;;AAQG;QACM,IAAI,CAAA,IAAA,GAAwB,QAAQ;AAE7C;;;;;;;;;AASG;QACM,IAAQ,CAAA,QAAA,GAAmB,SAAS;AAE7C;;;;;;AAMG;QACM,IAAI,CAAA,IAAA,GAAG,KAAK;AAErB;;;;;;;;;;AAUG;AACO,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAwB;AAW7D;AATC;;;;;AAKG;IACH,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;;+GAxErC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvC5B,8RAWA,EAAA,MAAA,EAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"tekus-design-system-components-button.mjs","sources":["../../../projects/design-system/components/button/src/button.component.ts","../../../projects/design-system/components/button/src/button.component.html","../../../projects/design-system/components/button/tekus-design-system-components-button.ts"],"sourcesContent":["import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { ButtonModule } from 'primeng/button';\n\nexport type ButtonSeverity = 'primary' | 'secondary' | 'danger';\n\n/**\n * @component ButtonComponent\n * @description\n * Atomic button component that provides a reusable and customizable button element\n * across the application.\n * It uses PrimeNG’s `ButtonModule` under the hood and allows setting different visual\n * variants (severity), button types, and disabled states.\n *\n * This component ensures consistent design and behavior in all button interactions.\n * It is accessible via both mouse clicks and keyboard actions (Enter/Space).\n *\n * @usage\n * ```html\n * <tk-button\n * label=\"Save\"\n * [severity]=\"'primary'\"\n * [type]=\"'submit'\"\n * (clicked)=\"handleSave()\">\n * </tk-button>\n *\n * <tk-button\n * label=\"Cancel\"\n * [severity]=\"'secondary'\"\n * [disabled]=\"true\">\n * </tk-button>\n * ```\n */\n@Component({\n selector: 'tk-button',\n standalone: true,\n imports: [ButtonModule],\n templateUrl: './button.component.html',\n styleUrls: ['./button.component.scss'],\n})\nexport class ButtonComponent {\n /**\n * @property {string} label\n * @description\n * Text displayed inside the button.\n *\n * @default `'Label'`\n */\n @Input() label = 'Label';\n\n /**\n * @property {boolean} disabled\n * @description\n * Disables the button, preventing user interaction and applying a visual style\n * that indicates the inactive state.\n *\n * @default `false`\n */\n @Input() disabled = false;\n\n /**\n * @property {'button' | 'submit'} type\n * @description\n * Defines the button’s HTML type attribute.\n * - `'button'`: Standard clickable button (default).\n * - `'submit'`: Used to submit forms.\n *\n * @default `'button'`\n */\n @Input() type: 'button' | 'submit' = 'button';\n\n /**\n * @property {ButtonSeverity} severity\n * @description\n * Defines the visual importance or style of the button.\n * - `'primary'`: Default, neutral action.\n * - `'secondary'`: Secondary option.\n * - `'danger'`: Destructive or warning actions.\n *\n * @default `'secondary'`\n */\n @Input() severity: ButtonSeverity = 'primary';\n\n /**\n * @property {boolean} link\n * @description\n * When true, the button will be styled as a link (text only with underline).\n *\n * @default false\n */\n @Input() link = false;\n\n /**\n * @event clicked\n * @description\n * Emits when the button is activated via click or keyboard (Enter/Space),\n * unless the button is disabled.\n *\n * @example\n * ```html\n * <tk-button label=\"Click me\" (clicked)=\"handleClick()\"></tk-button>\n * ```\n */\n @Output() clicked = new EventEmitter<'mouse' | 'keyboard'>();\n\n /**\n * @method onButtonClick\n * @description\n * Handles the native click event. Emits the `clicked` event if the button\n * is not disabled.\n */\n onButtonClick(): void {\n if (!this.disabled) this.clicked.emit('mouse');\n }\n}\n","<p-button\n class=\"tk-button\"\n [label]=\"label\"\n [disabled]=\"disabled\"\n [type]=\"type\"\n [severity]=\"link ? null : severity\"\n [link]=\"link\"\n (click)=\"onButtonClick()\"\n (keydown.enter)=\"onButtonClick()\"\n (keydown.space)=\"onButtonClick()\">\n</p-button>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAKA;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BG;MAQU,eAAe,CAAA;AAP5B,IAAA,WAAA,GAAA;AAQE;;;;;;AAMG;QACM,IAAK,CAAA,KAAA,GAAG,OAAO;AAExB;;;;;;;AAOG;QACM,IAAQ,CAAA,QAAA,GAAG,KAAK;AAEzB;;;;;;;;AAQG;QACM,IAAI,CAAA,IAAA,GAAwB,QAAQ;AAE7C;;;;;;;;;AASG;QACM,IAAQ,CAAA,QAAA,GAAmB,SAAS;AAE7C;;;;;;AAMG;QACM,IAAI,CAAA,IAAA,GAAG,KAAK;AAErB;;;;;;;;;;AAUG;AACO,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,YAAY,EAAwB;AAW7D;AATC;;;;;AAKG;IACH,aAAa,GAAA;QACX,IAAI,CAAC,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC;;+GAxErC,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;mGAAf,eAAe,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECvC5B,8RAWA,EAAA,MAAA,EAAA,CAAA,orBAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDwBY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,OAAA,EAAA,UAAA,EAAA,SAAA,EAAA,aAAA,EAAA,QAAA,EAAA,SAAA,EAAA,MAAA,EAAA,OAAA,EAAA,UAAA,EAAA,UAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,SAAA,EAAA,OAAA,EAAA,YAAA,EAAA,YAAA,EAAA,eAAA,EAAA,WAAA,EAAA,WAAA,EAAA,OAAA,EAAA,aAAA,CAAA,EAAA,OAAA,EAAA,CAAA,SAAA,EAAA,SAAA,EAAA,QAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;;4FAIX,eAAe,EAAA,UAAA,EAAA,CAAA;kBAP3B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,WAAW,EACT,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,CAAC,EAAA,QAAA,EAAA,8RAAA,EAAA,MAAA,EAAA,CAAA,orBAAA,CAAA,EAAA;8BAYd,KAAK,EAAA,CAAA;sBAAb;gBAUQ,QAAQ,EAAA,CAAA;sBAAhB;gBAWQ,IAAI,EAAA,CAAA;sBAAZ;gBAYQ,QAAQ,EAAA,CAAA;sBAAhB;gBASQ,IAAI,EAAA,CAAA;sBAAZ;gBAaS,OAAO,EAAA,CAAA;sBAAhB;;;AEtGH;;AAEG;;;;"}
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { forwardRef, EventEmitter, Output, Input, Component } from '@angular/core';
|
|
3
|
+
import * as i1 from '@angular/forms';
|
|
4
|
+
import { NG_VALUE_ACCESSOR, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import * as i2 from 'primeng/datepicker';
|
|
6
|
+
import { DatePickerModule } from 'primeng/datepicker';
|
|
7
|
+
import * as i3 from 'primeng/floatlabel';
|
|
8
|
+
import { FloatLabelModule } from 'primeng/floatlabel';
|
|
9
|
+
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
|
10
|
+
import { faCalendarDay } from '@fortawesome/pro-regular-svg-icons';
|
|
11
|
+
|
|
12
|
+
const TK_DATE_PICKER_VALUE_ACCESSOR = {
|
|
13
|
+
provide: NG_VALUE_ACCESSOR,
|
|
14
|
+
useExisting: forwardRef(() => DatePickerComponent),
|
|
15
|
+
multi: true,
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* @component DatePickerComponent
|
|
19
|
+
* @description
|
|
20
|
+
* A wrapper around PrimeNG's DatePicker component with support for single-date
|
|
21
|
+
* and range selection modes. It is compatible with both Reactive Forms (formControlName, [control])
|
|
22
|
+
* and Template-Driven Forms ([(ngModel)]).
|
|
23
|
+
*
|
|
24
|
+
* The component emits:
|
|
25
|
+
* - `handleSelect` when a valid single date or a completed date range is selected.
|
|
26
|
+
* - `handleClear` when the control is cleared (value becomes `null`).
|
|
27
|
+
*/
|
|
28
|
+
class DatePickerComponent {
|
|
29
|
+
constructor() {
|
|
30
|
+
/**
|
|
31
|
+
* @property {'single' | 'range'} selectionMode
|
|
32
|
+
* @description
|
|
33
|
+
* Defines how the datepicker behaves:
|
|
34
|
+
* - `'single'`: select one date
|
|
35
|
+
* - `'range'`: select a pair of dates [start, end]
|
|
36
|
+
* @default 'range'
|
|
37
|
+
*/
|
|
38
|
+
this.selectionMode = 'range';
|
|
39
|
+
/**
|
|
40
|
+
* @property {boolean} readonlyInput
|
|
41
|
+
* @description
|
|
42
|
+
* Disables manual typing in the input and forces the user to select via the calendar.
|
|
43
|
+
* @default true
|
|
44
|
+
*/
|
|
45
|
+
this.readonlyInput = true;
|
|
46
|
+
/**
|
|
47
|
+
* @property {boolean} showClear
|
|
48
|
+
* @description
|
|
49
|
+
* Displays a clear button that resets the datepicker value.
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
52
|
+
this.showClear = true;
|
|
53
|
+
/**
|
|
54
|
+
* @property {boolean} showIcon
|
|
55
|
+
* @description
|
|
56
|
+
* Shows the calendar icon inside the input.
|
|
57
|
+
* @default true
|
|
58
|
+
*/
|
|
59
|
+
this.showIcon = true;
|
|
60
|
+
/**
|
|
61
|
+
* @property {string} dateFormat
|
|
62
|
+
* @description
|
|
63
|
+
* Format used by PrimeNG for displaying dates.
|
|
64
|
+
* @default 'mm/dd/yy'
|
|
65
|
+
*/
|
|
66
|
+
this.dateFormat = 'mm/dd/yy';
|
|
67
|
+
/**
|
|
68
|
+
* @property {Date | null} maxDate
|
|
69
|
+
* @description
|
|
70
|
+
* Maximum selectable date. When set, the calendar will prevent selecting dates after this value.
|
|
71
|
+
* Provide a JavaScript Date object. Use `null` to allow any future date.
|
|
72
|
+
* @default null
|
|
73
|
+
*/
|
|
74
|
+
this.maxDate = null;
|
|
75
|
+
/**
|
|
76
|
+
* @property {Date | null} minDate
|
|
77
|
+
* @description
|
|
78
|
+
* Minimum selectable date. When set, the calendar will prevent selecting dates before this value.
|
|
79
|
+
* Provide a JavaScript Date object. Use `null` to allow any past date.
|
|
80
|
+
* @default null
|
|
81
|
+
*/
|
|
82
|
+
this.minDate = null;
|
|
83
|
+
/**
|
|
84
|
+
* @property {string} labelText
|
|
85
|
+
* @description
|
|
86
|
+
* Label shown by the float-label wrapper.
|
|
87
|
+
* @default 'Select a date'
|
|
88
|
+
*/
|
|
89
|
+
this.labelText = 'Select a date';
|
|
90
|
+
/**
|
|
91
|
+
* @private
|
|
92
|
+
* @property {FormControl<DateValue>} internalControl
|
|
93
|
+
* @description
|
|
94
|
+
* The internal FormControl used in the template. It handles value synchronization
|
|
95
|
+
* for both CVA and the optional external control input.
|
|
96
|
+
*/
|
|
97
|
+
this.internalControl = new FormControl(null);
|
|
98
|
+
// Functions registered by ControlValueAccessor to communicate with the outside form
|
|
99
|
+
this.onChange = () => { };
|
|
100
|
+
this.onTouched = () => { };
|
|
101
|
+
/**
|
|
102
|
+
* @event handleSelect
|
|
103
|
+
* @description
|
|
104
|
+
* Emitted when:
|
|
105
|
+
* - single mode → a valid Date is selected
|
|
106
|
+
* - range mode → both start and end dates are selected
|
|
107
|
+
*
|
|
108
|
+
* Payload:
|
|
109
|
+
* - Date (single mode)
|
|
110
|
+
* - [Date, Date] (completed range)
|
|
111
|
+
*/
|
|
112
|
+
this.handleSelect = new EventEmitter();
|
|
113
|
+
/**
|
|
114
|
+
* @event handleClear
|
|
115
|
+
* @description
|
|
116
|
+
* Emitted when the control's value becomes `null`.
|
|
117
|
+
*/
|
|
118
|
+
this.handleClear = new EventEmitter();
|
|
119
|
+
/**
|
|
120
|
+
* @property faCalendarDay
|
|
121
|
+
* @description
|
|
122
|
+
* Icon displayed inside the datepicker input.
|
|
123
|
+
*/
|
|
124
|
+
this.faCalendarDay = faCalendarDay;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @property {FormControl<DateValue> | null} control
|
|
128
|
+
* @description
|
|
129
|
+
* Allows passing an external FormControl (traditional Reactive Forms usage).
|
|
130
|
+
* If provided, it overrides the internal control.
|
|
131
|
+
*/
|
|
132
|
+
set control(ctrl) {
|
|
133
|
+
// If the user provides a control, we use that control for everything.
|
|
134
|
+
if (ctrl) {
|
|
135
|
+
this.internalControl = ctrl;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
get control() {
|
|
139
|
+
return this.internalControl;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @method writeValue
|
|
143
|
+
* @description Writes a new value from the form model (ngModel or formControl) into the component.
|
|
144
|
+
*/
|
|
145
|
+
writeValue(value) {
|
|
146
|
+
if (value !== undefined) {
|
|
147
|
+
// Use { emitEvent: false } to prevent an unnecessary valueChanges loop.
|
|
148
|
+
this.internalControl.setValue(value, { emitEvent: false });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* @method registerOnChange
|
|
153
|
+
* @description Registers a callback function to be called when the control's value changes.
|
|
154
|
+
*/
|
|
155
|
+
registerOnChange(fn) {
|
|
156
|
+
this.onChange = fn;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* @method registerOnTouched
|
|
160
|
+
* @description Registers a callback function to be called when the control receives a blur event (is touched).
|
|
161
|
+
*/
|
|
162
|
+
registerOnTouched(fn) {
|
|
163
|
+
this.onTouched = fn;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* @method setDisabledState
|
|
167
|
+
* @description Called when the control should be disabled or enabled.
|
|
168
|
+
*/
|
|
169
|
+
setDisabledState(isDisabled) {
|
|
170
|
+
const actionMap = {
|
|
171
|
+
true: () => this.internalControl.disable(),
|
|
172
|
+
false: () => this.internalControl.enable(),
|
|
173
|
+
};
|
|
174
|
+
actionMap[String(isDisabled)]();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* @method ngOnInit
|
|
178
|
+
* @description
|
|
179
|
+
* Subscribes to the internal control's valueChanges:
|
|
180
|
+
* 1. Notifies the external form (CVA) via `this.onChange()`.
|
|
181
|
+
* 2. Emits the semantic events `handleSelect` or `handleClear`.
|
|
182
|
+
*/
|
|
183
|
+
ngOnInit() {
|
|
184
|
+
this.sub = this.internalControl.valueChanges.subscribe(value => {
|
|
185
|
+
// Notify the CVA / External Form
|
|
186
|
+
this.onChange(value);
|
|
187
|
+
this.onTouched();
|
|
188
|
+
if (value === null) {
|
|
189
|
+
this.handleClear.emit();
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
// RANGE MODE
|
|
193
|
+
if (this.selectionMode === 'range') {
|
|
194
|
+
if (Array.isArray(value)) {
|
|
195
|
+
const [start, end] = value;
|
|
196
|
+
// Emit ONLY when both dates exist
|
|
197
|
+
if (start instanceof Date && end instanceof Date) {
|
|
198
|
+
this.handleSelect.emit([start, end]);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
// SINGLE MODE
|
|
204
|
+
if (this.selectionMode === 'single' && value instanceof Date) {
|
|
205
|
+
this.handleSelect.emit(value);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* @method ngOnDestroy
|
|
211
|
+
* @description Cleans up the internal subscription when the component is destroyed.
|
|
212
|
+
*/
|
|
213
|
+
ngOnDestroy() {
|
|
214
|
+
this.sub?.unsubscribe();
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* @method clear
|
|
218
|
+
* @description
|
|
219
|
+
* Programmatically clears the control's value,
|
|
220
|
+
* which automatically triggers `handleClear`.
|
|
221
|
+
*/
|
|
222
|
+
clear() {
|
|
223
|
+
this.internalControl.setValue(null);
|
|
224
|
+
}
|
|
225
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
226
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.15", type: DatePickerComponent, isStandalone: true, selector: "tk-date-picker", inputs: { selectionMode: "selectionMode", readonlyInput: "readonlyInput", showClear: "showClear", showIcon: "showIcon", dateFormat: "dateFormat", maxDate: "maxDate", minDate: "minDate", labelText: "labelText", control: "control" }, outputs: { handleSelect: "handleSelect", handleClear: "handleClear" }, providers: [TK_DATE_PICKER_VALUE_ACCESSOR], ngImport: i0, template: "<div class=\"datepicker-container\">\n <p-floatlabel>\n <p-datepicker\n inputId=\"datepicker\"\n iconDisplay=\"input\"\n [formControl]=\"internalControl\"\n [selectionMode]=\"selectionMode\"\n [readonlyInput]=\"readonlyInput\"\n [showClear]=\"showClear\"\n [showIcon]=\"showIcon\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [dateFormat]=\"dateFormat\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <fa-icon\n tabindex=\"0\"\n [icon]=\"faCalendarDay\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </fa-icon>\n </ng-template>\n </p-datepicker>\n\n <label for=\"datepicker\">{{ labelText }}</label>\n </p-floatlabel>\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-accent-default, #16006f)}:host ::ng-deep .p-datepicker-decade{color:var(--tk-color-text-default, #121214)}:host ::ng-deep .p-datepicker-clear-icon{color:var(--tk-surface-700, #424243);inset-inline-end:2.5rem!important}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400)}:host ::ng-deep .p-datepicker-day-selected-range{background-color:var(--tk-primary-100, #b7b0d2);color:var(--tk-primary-700, #10004f)}:host ::ng-deep .p-datepicker-panel{top:-383px!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "style", "styleClass", "inputStyle", "inputId", "name", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "disabled", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "fluid", "icon", "appendTo", "readonlyInput", "shortYearCutoff", "monthNavigator", "yearNavigator", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "required", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "variant", "size", "minDate", "maxDate", "disabledDates", "disabledDays", "yearRange", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "locale", "view", "defaultDate"], outputs: ["onFocus", "onBlur", "onClose", "onSelect", "onClear", "onInput", "onTodayClick", "onClearClick", "onMonthChange", "onYearChange", "onClickOutside", "onShow"] }, { kind: "ngmodule", type: FloatLabelModule }, { kind: "component", type: i3.FloatLabel, selector: "p-floatlabel, p-floatLabel, p-float-label", inputs: ["variant"] }, { kind: "component", type: FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "animation", "mask", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }] }); }
|
|
227
|
+
}
|
|
228
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
229
|
+
type: Component,
|
|
230
|
+
args: [{ selector: 'tk-date-picker', standalone: true, imports: [
|
|
231
|
+
FormsModule,
|
|
232
|
+
ReactiveFormsModule,
|
|
233
|
+
DatePickerModule,
|
|
234
|
+
FloatLabelModule,
|
|
235
|
+
FaIconComponent,
|
|
236
|
+
], providers: [TK_DATE_PICKER_VALUE_ACCESSOR], template: "<div class=\"datepicker-container\">\n <p-floatlabel>\n <p-datepicker\n inputId=\"datepicker\"\n iconDisplay=\"input\"\n [formControl]=\"internalControl\"\n [selectionMode]=\"selectionMode\"\n [readonlyInput]=\"readonlyInput\"\n [showClear]=\"showClear\"\n [showIcon]=\"showIcon\"\n [minDate]=\"minDate\"\n [maxDate]=\"maxDate\"\n [dateFormat]=\"dateFormat\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <fa-icon\n tabindex=\"0\"\n [icon]=\"faCalendarDay\"\n (keydown.enter)=\"clickCallBack($event)\"\n (keydown.space)=\"clickCallBack($event)\"\n (click)=\"clickCallBack($event)\">\n </fa-icon>\n </ng-template>\n </p-datepicker>\n\n <label for=\"datepicker\">{{ labelText }}</label>\n </p-floatlabel>\n</div>\n", styles: [":host ::ng-deep .p-datepicker{width:100%}:host ::ng-deep .p-datepicker-input{border:none;border-bottom:1px solid var(--tk-color-border-default, #cecdcd);border-radius:0}:host ::ng-deep .p-datepicker-input:focus{border-color:var(--tk-color-accent-default, #16006f)}:host ::ng-deep .p-datepicker-decade{color:var(--tk-color-text-default, #121214)}:host ::ng-deep .p-datepicker-clear-icon{color:var(--tk-surface-700, #424243);inset-inline-end:2.5rem!important}:host ::ng-deep .p-floatlabel:has(.p-inputwrapper-filled) label,:host ::ng-deep .p-floatlabel:has(input:focus) label{color:var(--tk-primary-500, #16006f)}:host ::ng-deep .p-floatlabel label{color:var(--tk-surface-700, #8a8a8b);font-family:var(--tk-font-family, Poppins, sans-serif);font-size:var(--tk-font-size-2xs, 1rem);font-weight:var(--tk-font-weight-400, 400)}:host ::ng-deep .p-datepicker-day-selected-range{background-color:var(--tk-primary-100, #b7b0d2);color:var(--tk-primary-700, #10004f)}:host ::ng-deep .p-datepicker-panel{top:-383px!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}\n"] }]
|
|
237
|
+
}], propDecorators: { selectionMode: [{
|
|
238
|
+
type: Input
|
|
239
|
+
}], readonlyInput: [{
|
|
240
|
+
type: Input
|
|
241
|
+
}], showClear: [{
|
|
242
|
+
type: Input
|
|
243
|
+
}], showIcon: [{
|
|
244
|
+
type: Input
|
|
245
|
+
}], dateFormat: [{
|
|
246
|
+
type: Input
|
|
247
|
+
}], maxDate: [{
|
|
248
|
+
type: Input
|
|
249
|
+
}], minDate: [{
|
|
250
|
+
type: Input
|
|
251
|
+
}], labelText: [{
|
|
252
|
+
type: Input
|
|
253
|
+
}], control: [{
|
|
254
|
+
type: Input
|
|
255
|
+
}], handleSelect: [{
|
|
256
|
+
type: Output
|
|
257
|
+
}], handleClear: [{
|
|
258
|
+
type: Output
|
|
259
|
+
}] } });
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Generated bundle index. Do not edit.
|
|
263
|
+
*/
|
|
264
|
+
|
|
265
|
+
export { DatePickerComponent };
|
|
266
|
+
//# sourceMappingURL=tekus-design-system-components-date-picker.mjs.map
|