@tekus/design-system 5.20.0 → 5.22.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/fesm2022/tekus-design-system-components-autocomplete.mjs +15 -15
- package/fesm2022/tekus-design-system-components-autocomplete.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-badge.mjs +8 -8
- package/fesm2022/tekus-design-system-components-badge.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-button.mjs +3 -3
- package/fesm2022/tekus-design-system-components-button.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-checkbox.mjs +14 -16
- package/fesm2022/tekus-design-system-components-checkbox.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-date-picker.mjs +166 -167
- package/fesm2022/tekus-design-system-components-date-picker.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-drawer.mjs +29 -29
- package/fesm2022/tekus-design-system-components-drawer.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-fallback-view.mjs +4 -5
- package/fesm2022/tekus-design-system-components-fallback-view.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-icon.mjs +13 -15
- package/fesm2022/tekus-design-system-components-icon.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-input-number.mjs +12 -14
- package/fesm2022/tekus-design-system-components-input-number.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-input-text.mjs +17 -18
- package/fesm2022/tekus-design-system-components-input-text.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-modal.mjs +31 -31
- package/fesm2022/tekus-design-system-components-modal.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-multiselect.mjs +19 -19
- package/fesm2022/tekus-design-system-components-multiselect.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-pagination.mjs +12 -12
- package/fesm2022/tekus-design-system-components-pagination.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-panel.mjs +3 -3
- package/fesm2022/tekus-design-system-components-panel.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-radio-button.mjs +13 -15
- package/fesm2022/tekus-design-system-components-radio-button.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-select.mjs +16 -16
- package/fesm2022/tekus-design-system-components-select.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-table.mjs +13 -13
- package/fesm2022/tekus-design-system-components-table.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-tabs.mjs +18 -21
- package/fesm2022/tekus-design-system-components-tabs.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-tag.mjs +11 -19
- package/fesm2022/tekus-design-system-components-tag.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-textarea.mjs +16 -18
- package/fesm2022/tekus-design-system-components-textarea.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-toolbar.mjs +18 -18
- package/fesm2022/tekus-design-system-components-toolbar.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-tooltip.mjs +6 -6
- package/fesm2022/tekus-design-system-components-tooltip.mjs.map +1 -1
- package/fesm2022/tekus-design-system-components-topbar.mjs +9 -9
- package/fesm2022/tekus-design-system-components-topbar.mjs.map +1 -1
- package/fesm2022/tekus-design-system-core-types.mjs +6 -6
- package/fesm2022/tekus-design-system-core-types.mjs.map +1 -1
- package/fesm2022/tekus-design-system-core.mjs +6 -6
- package/fesm2022/tekus-design-system-core.mjs.map +1 -1
- package/fesm2022/tekus-design-system-directives-gird-item.mjs +4 -4
- package/fesm2022/tekus-design-system-directives-gird-item.mjs.map +1 -1
- package/fesm2022/tekus-design-system-utils-sanitizer-utils.mjs.map +1 -1
- package/package.json +47 -42
- package/{components/autocomplete/src/autocomplete.component.d.ts → types/tekus-design-system-components-autocomplete.d.ts} +18 -16
- package/{components/badge/src/badge.component.d.ts → types/tekus-design-system-components-badge.d.ts} +12 -8
- package/{components/button/src/button.component.d.ts → types/tekus-design-system-components-button.d.ts} +8 -4
- package/{components/checkbox/src/checkbox.component.d.ts → types/tekus-design-system-components-checkbox.d.ts} +18 -15
- package/types/tekus-design-system-components-date-picker.d.ts +193 -0
- package/{components/drawer/src/drawer.component.d.ts → types/tekus-design-system-components-drawer.d.ts} +54 -19
- package/{components/fallback-view/src/fallback-view.component.d.ts → types/tekus-design-system-components-fallback-view.d.ts} +7 -3
- package/types/tekus-design-system-components-icon.d.ts +108 -0
- package/{components/input-number/src/input-number.component.d.ts → types/tekus-design-system-components-input-number.d.ts} +15 -12
- package/{components/input-text/src/input-text.component.d.ts → types/tekus-design-system-components-input-text.d.ts} +20 -17
- package/types/tekus-design-system-components-modal.d.ts +186 -0
- package/{components/multiselect/src/multiselect.component.d.ts → types/tekus-design-system-components-multiselect.d.ts} +30 -22
- package/{components/pagination/src/pagination.component.d.ts → types/tekus-design-system-components-pagination.d.ts} +16 -13
- package/{components/panel/src/panel.component.d.ts → types/tekus-design-system-components-panel.d.ts} +5 -2
- package/{components/radio-button/src/radio-button.component.d.ts → types/tekus-design-system-components-radio-button.d.ts} +16 -13
- package/{components/select/src/select.component.d.ts → types/tekus-design-system-components-select.d.ts} +20 -17
- package/{components/table/src/table.component.d.ts → types/tekus-design-system-components-table.d.ts} +30 -12
- package/{components/tabs/src/tabs.component.d.ts → types/tekus-design-system-components-tabs.d.ts} +23 -14
- package/{components/tag/src/tag.component.d.ts → types/tekus-design-system-components-tag.d.ts} +14 -10
- package/{components/textarea/src/textarea.component.d.ts → types/tekus-design-system-components-textarea.d.ts} +18 -15
- package/{components/toolbar/src/toolbar.component.d.ts → types/tekus-design-system-components-toolbar.d.ts} +21 -18
- package/types/tekus-design-system-components-tooltip.d.ts +39 -0
- package/types/tekus-design-system-components-topbar.d.ts +37 -0
- package/types/tekus-design-system-core-types.d.ts +182 -0
- package/types/tekus-design-system-core.d.ts +182 -0
- package/{directives/gird-item/src/grid-item.directive.d.ts → types/tekus-design-system-directives-gird-item.d.ts} +11 -7
- package/{utils/sanitizer-utils/src/sanitizer-utils.d.ts → types/tekus-design-system-utils-sanitizer-utils.d.ts} +5 -3
- package/types/tekus-design-system.d.ts +2 -0
- package/components/autocomplete/index.d.ts +0 -5
- package/components/autocomplete/public-api.d.ts +0 -1
- package/components/badge/index.d.ts +0 -5
- package/components/badge/public-api.d.ts +0 -1
- package/components/button/index.d.ts +0 -5
- package/components/button/public-api.d.ts +0 -1
- package/components/checkbox/index.d.ts +0 -5
- package/components/checkbox/public-api.d.ts +0 -1
- package/components/date-picker/index.d.ts +0 -5
- package/components/date-picker/public-api.d.ts +0 -1
- package/components/date-picker/src/date-picker.component.d.ts +0 -163
- package/components/drawer/index.d.ts +0 -5
- package/components/drawer/public-api.d.ts +0 -3
- package/components/drawer/src/drawer.types.d.ts +0 -22
- package/components/drawer/src/services/drawer.service.d.ts +0 -15
- package/components/fallback-view/index.d.ts +0 -5
- package/components/fallback-view/public-api.d.ts +0 -1
- package/components/icon/core/icon-catalog.d.ts +0 -76
- package/components/icon/core/icons/ads.icons.d.ts +0 -2
- package/components/icon/core/icons/angle.icons.d.ts +0 -2
- package/components/icon/core/icons/arrow.icons.d.ts +0 -2
- package/components/icon/core/icons/arrows-rotate.d.ts +0 -2
- package/components/icon/core/icons/bars.icons.d.ts +0 -2
- package/components/icon/core/icons/bolt.icons.d.ts +0 -2
- package/components/icon/core/icons/book.icons.d.ts +0 -2
- package/components/icon/core/icons/calendar.icons.d.ts +0 -2
- package/components/icon/core/icons/camera.icons.d.ts +0 -2
- package/components/icon/core/icons/chart.icons.d.ts +0 -2
- package/components/icon/core/icons/check.icons.d.ts +0 -2
- package/components/icon/core/icons/chevron.icons.d.ts +0 -2
- package/components/icon/core/icons/circle.icons.d.ts +0 -2
- package/components/icon/core/icons/clock.icons.d.ts +0 -2
- package/components/icon/core/icons/clone.icons.d.ts +0 -2
- package/components/icon/core/icons/download.icons.d.ts +0 -2
- package/components/icon/core/icons/edit.d.ts +0 -2
- package/components/icon/core/icons/ellipsis.icons.d.ts +0 -2
- package/components/icon/core/icons/eye.icons.d.ts +0 -2
- package/components/icon/core/icons/filter.icons.d.ts +0 -2
- package/components/icon/core/icons/folders.icons.d.ts +0 -2
- package/components/icon/core/icons/gears.icons.d.ts +0 -2
- package/components/icon/core/icons/globe-pointer.d.ts +0 -2
- package/components/icon/core/icons/grip-vertical.d.ts +0 -2
- package/components/icon/core/icons/hand.icons.d.ts +0 -2
- package/components/icon/core/icons/language.icons.d.ts +0 -2
- package/components/icon/core/icons/layer.icons.d.ts +0 -2
- package/components/icon/core/icons/link.icons.d.ts +0 -2
- package/components/icon/core/icons/list.icons.d.ts +0 -2
- package/components/icon/core/icons/location.icons.d.ts +0 -2
- package/components/icon/core/icons/lock.icons.d.ts +0 -2
- package/components/icon/core/icons/magnifying-glass.icons.d.ts +0 -2
- package/components/icon/core/icons/media.icons.d.ts +0 -2
- package/components/icon/core/icons/megaphone.icons.d.ts +0 -2
- package/components/icon/core/icons/money.icons.d.ts +0 -2
- package/components/icon/core/icons/pen.icons.d.ts +0 -2
- package/components/icon/core/icons/pencil.icons.d.ts +0 -2
- package/components/icon/core/icons/plug.icons.d.ts +0 -2
- package/components/icon/core/icons/plus.icons.d.ts +0 -2
- package/components/icon/core/icons/qr-code.icons.d.ts +0 -2
- package/components/icon/core/icons/screwdriver-wrench.icons.d.ts +0 -2
- package/components/icon/core/icons/shuffle.icons.d.ts +0 -2
- package/components/icon/core/icons/square.icons.d.ts +0 -2
- package/components/icon/core/icons/tag.icons.d.ts +0 -2
- package/components/icon/core/icons/thumbs.icons.d.ts +0 -2
- package/components/icon/core/icons/trash.icons.d.ts +0 -2
- package/components/icon/core/icons/triangle.icons.d.ts +0 -2
- package/components/icon/core/icons/user.icons.d.ts +0 -2
- package/components/icon/core/icons/xmark.icons.d.ts +0 -2
- package/components/icon/core/svg-icons/ads-icon.svg.d.ts +0 -2
- package/components/icon/core/svg-icons/index.d.ts +0 -1
- package/components/icon/index.d.ts +0 -5
- package/components/icon/public-api.d.ts +0 -2
- package/components/icon/src/icon.component.d.ts +0 -79
- package/components/input-number/index.d.ts +0 -5
- package/components/input-number/public-api.d.ts +0 -1
- package/components/input-text/index.d.ts +0 -5
- package/components/input-text/public-api.d.ts +0 -1
- package/components/modal/index.d.ts +0 -5
- package/components/modal/public-api.d.ts +0 -3
- package/components/modal/src/modal.component.d.ts +0 -118
- package/components/modal/src/modal.types.d.ts +0 -39
- package/components/modal/src/services/modal.service.d.ts +0 -31
- package/components/multiselect/index.d.ts +0 -5
- package/components/multiselect/public-api.d.ts +0 -2
- package/components/multiselect/src/multiselect.types.d.ts +0 -4
- package/components/pagination/index.d.ts +0 -5
- package/components/pagination/public-api.d.ts +0 -1
- package/components/panel/index.d.ts +0 -5
- package/components/panel/public-api.d.ts +0 -1
- package/components/radio-button/index.d.ts +0 -5
- package/components/radio-button/public-api.d.ts +0 -1
- package/components/select/index.d.ts +0 -5
- package/components/select/public-api.d.ts +0 -1
- package/components/table/index.d.ts +0 -5
- package/components/table/public-api.d.ts +0 -2
- package/components/table/src/table.interface.d.ts +0 -14
- package/components/tabs/index.d.ts +0 -5
- package/components/tabs/public-api.d.ts +0 -2
- package/components/tabs/src/tabs.interface.d.ts +0 -11
- package/components/tag/index.d.ts +0 -5
- package/components/tag/public-api.d.ts +0 -1
- package/components/textarea/index.d.ts +0 -5
- package/components/textarea/public-api.d.ts +0 -1
- package/components/toolbar/index.d.ts +0 -5
- package/components/toolbar/public-api.d.ts +0 -1
- package/components/tooltip/index.d.ts +0 -5
- package/components/tooltip/public-api.d.ts +0 -1
- package/components/tooltip/src/tooltip.component.d.ts +0 -35
- package/components/topbar/index.d.ts +0 -5
- package/components/topbar/public-api.d.ts +0 -2
- package/components/topbar/src/topbar.component.d.ts +0 -20
- package/components/topbar/src/topbar.types.d.ts +0 -13
- package/core/index.d.ts +0 -5
- package/core/public-api.d.ts +0 -1
- package/core/types/index.d.ts +0 -5
- package/core/types/public-api.d.ts +0 -10
- package/core/types/src/branding/branding.types.d.ts +0 -15
- package/core/types/src/branding/index.d.ts +0 -1
- package/core/types/src/breakpoints/breakpoints.d.ts +0 -10
- package/core/types/src/breakpoints/index.d.ts +0 -1
- package/core/types/src/grids/grid.enum.d.ts +0 -18
- package/core/types/src/grids/grid.model.d.ts +0 -10
- package/core/types/src/grids/grid.type.d.ts +0 -40
- package/core/types/src/grids/index.d.ts +0 -3
- package/core/types/src/illustration-config/illustration-config.model.d.ts +0 -4
- package/core/types/src/illustration-config/index.d.ts +0 -1
- package/core/types/src/interception/index.d.ts +0 -1
- package/core/types/src/interception/interception.types.d.ts +0 -21
- package/core/types/src/option/index.d.ts +0 -1
- package/core/types/src/option/option.model.d.ts +0 -8
- package/core/types/src/theme/theme.provider.d.ts +0 -1
- package/core/types/src/theme/tk-preset.d.ts +0 -1
- package/core/types/src/typography-styles/index.d.ts +0 -1
- package/core/types/src/typography-styles/typographyStyles.model.d.ts +0 -36
- package/core/types/src/validator-with-message/index.d.ts +0 -1
- package/core/types/src/validator-with-message/validator-with-message.model.d.ts +0 -5
- package/directives/gird-item/index.d.ts +0 -5
- package/directives/gird-item/public-api.d.ts +0 -1
- package/index.d.ts +0 -1
- package/utils/sanitizer-utils/index.d.ts +0 -5
- package/utils/sanitizer-utils/public-api.d.ts +0 -1
|
@@ -1,238 +1,261 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { inject, input, model, output, computed, Component } from '@angular/core';
|
|
3
3
|
import * as i1 from '@angular/forms';
|
|
4
|
-
import {
|
|
4
|
+
import { NgControl, FormControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { Subscription } from 'rxjs';
|
|
5
6
|
import * as i2 from 'primeng/datepicker';
|
|
6
7
|
import { DatePickerModule } from 'primeng/datepicker';
|
|
7
8
|
import * as i3 from 'primeng/floatlabel';
|
|
8
9
|
import { FloatLabelModule } from 'primeng/floatlabel';
|
|
9
10
|
import { FaIconComponent } from '@fortawesome/angular-fontawesome';
|
|
10
|
-
import { faCalendarDay } from '@fortawesome/pro-regular-svg-icons';
|
|
11
|
+
import { faCalendarDay, faClock } from '@fortawesome/pro-regular-svg-icons';
|
|
11
12
|
|
|
12
|
-
const TK_DATE_PICKER_VALUE_ACCESSOR = {
|
|
13
|
-
provide: NG_VALUE_ACCESSOR,
|
|
14
|
-
useExisting: forwardRef(() => DatePickerComponent),
|
|
15
|
-
multi: true,
|
|
16
|
-
};
|
|
17
13
|
/**
|
|
18
14
|
* @component DatePickerComponent
|
|
19
15
|
* @description
|
|
20
|
-
* A wrapper around PrimeNG's DatePicker component with support for single-date
|
|
21
|
-
*
|
|
22
|
-
* and
|
|
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`).
|
|
16
|
+
* A wrapper around PrimeNG's DatePicker component with support for single-date,
|
|
17
|
+
* range selection, and time-only modes. It uses Angular Signals for reactivity
|
|
18
|
+
* and strictly implements the ControlValueAccessor interface via NgControl.
|
|
27
19
|
*/
|
|
28
20
|
class DatePickerComponent {
|
|
29
21
|
constructor() {
|
|
22
|
+
/** Internal references and injections */
|
|
23
|
+
this.ngControl = inject(NgControl, { self: true, optional: true });
|
|
30
24
|
/**
|
|
31
|
-
* @property {'
|
|
25
|
+
* @property {InputSignal<'date' | 'time'>} variant
|
|
26
|
+
* @description
|
|
27
|
+
* Defines the visual and functional mode:
|
|
28
|
+
* - `'date'`: standard date/range picker
|
|
29
|
+
* - `'time'`: time-only picker
|
|
30
|
+
* @default 'date'
|
|
31
|
+
*/
|
|
32
|
+
this.variant = input('date', ...(ngDevMode ? [{ debugName: "variant" }] : /* istanbul ignore next */ []));
|
|
33
|
+
/**
|
|
34
|
+
* @property {InputSignal<'single' | 'range'>} selectionMode
|
|
32
35
|
* @description
|
|
33
36
|
* Defines how the datepicker behaves:
|
|
34
37
|
* - `'single'`: select one date
|
|
35
38
|
* - `'range'`: select a pair of dates [start, end]
|
|
36
39
|
* @default 'range'
|
|
37
40
|
*/
|
|
38
|
-
this.selectionMode = 'range';
|
|
41
|
+
this.selectionMode = input('range', ...(ngDevMode ? [{ debugName: "selectionMode" }] : /* istanbul ignore next */ []));
|
|
39
42
|
/**
|
|
40
|
-
* @property {boolean} readonlyInput
|
|
43
|
+
* @property {InputSignal<boolean>} readonlyInput
|
|
41
44
|
* @description
|
|
42
45
|
* Disables manual typing in the input and forces the user to select via the calendar.
|
|
43
46
|
* @default true
|
|
44
47
|
*/
|
|
45
|
-
this.readonlyInput = true;
|
|
46
|
-
/**
|
|
47
|
-
* @property {boolean} disabled
|
|
48
|
-
* @description
|
|
49
|
-
* Disables component.
|
|
50
|
-
* @default false
|
|
51
|
-
*/
|
|
52
|
-
this.disabled = false;
|
|
48
|
+
this.readonlyInput = input(true, ...(ngDevMode ? [{ debugName: "readonlyInput" }] : /* istanbul ignore next */ []));
|
|
53
49
|
/**
|
|
54
|
-
* @property {boolean} showClear
|
|
50
|
+
* @property {InputSignal<boolean>} showClear
|
|
55
51
|
* @description
|
|
56
52
|
* Displays a clear button that resets the datepicker value.
|
|
57
53
|
* @default true
|
|
58
54
|
*/
|
|
59
|
-
this.showClear = true;
|
|
55
|
+
this.showClear = input(true, ...(ngDevMode ? [{ debugName: "showClear" }] : /* istanbul ignore next */ []));
|
|
60
56
|
/**
|
|
61
|
-
* @property {boolean} showIcon
|
|
57
|
+
* @property {InputSignal<boolean>} showIcon
|
|
62
58
|
* @description
|
|
63
|
-
* Shows the calendar icon inside the input.
|
|
59
|
+
* Shows the calendar or clock icon inside the input.
|
|
64
60
|
* @default true
|
|
65
61
|
*/
|
|
66
|
-
this.showIcon = true;
|
|
62
|
+
this.showIcon = input(true, ...(ngDevMode ? [{ debugName: "showIcon" }] : /* istanbul ignore next */ []));
|
|
67
63
|
/**
|
|
68
|
-
* @property {string} dateFormat
|
|
64
|
+
* @property {InputSignal<string>} dateFormat
|
|
69
65
|
* @description
|
|
70
66
|
* Format used by PrimeNG for displaying dates.
|
|
71
67
|
* @default 'mm/dd/yy'
|
|
72
68
|
*/
|
|
73
|
-
this.dateFormat = 'mm/dd/yy';
|
|
69
|
+
this.dateFormat = input('mm/dd/yy', ...(ngDevMode ? [{ debugName: "dateFormat" }] : /* istanbul ignore next */ []));
|
|
70
|
+
/**
|
|
71
|
+
* @property {InputSignal<string>} timeFormat
|
|
72
|
+
* @description
|
|
73
|
+
* Format used by PrimeNG for displaying times.
|
|
74
|
+
* @default 'HH:mm'
|
|
75
|
+
*/
|
|
76
|
+
this.timeFormat = input('HH:mm', ...(ngDevMode ? [{ debugName: "timeFormat" }] : /* istanbul ignore next */ []));
|
|
77
|
+
/**
|
|
78
|
+
* @property {InputSignal<number>} stepHour
|
|
79
|
+
* @description
|
|
80
|
+
* Hours to skip when clicking up/down.
|
|
81
|
+
* @default 1
|
|
82
|
+
*/
|
|
83
|
+
this.stepHour = input(1, ...(ngDevMode ? [{ debugName: "stepHour" }] : /* istanbul ignore next */ []));
|
|
84
|
+
/**
|
|
85
|
+
* @property {InputSignal<number>} stepMinute
|
|
86
|
+
* @description
|
|
87
|
+
* Minutes to skip when clicking up/down.
|
|
88
|
+
* @default 1
|
|
89
|
+
*/
|
|
90
|
+
this.stepMinute = input(1, ...(ngDevMode ? [{ debugName: "stepMinute" }] : /* istanbul ignore next */ []));
|
|
74
91
|
/**
|
|
75
|
-
* @property {
|
|
92
|
+
* @property {InputSignal<number>} stepSecond
|
|
76
93
|
* @description
|
|
77
|
-
*
|
|
78
|
-
*
|
|
94
|
+
* Seconds to skip when clicking up/down.
|
|
95
|
+
* @default 1
|
|
96
|
+
*/
|
|
97
|
+
this.stepSecond = input(1, ...(ngDevMode ? [{ debugName: "stepSecond" }] : /* istanbul ignore next */ []));
|
|
98
|
+
/**
|
|
99
|
+
* @property {InputSignal<boolean>} showSeconds
|
|
100
|
+
* @description
|
|
101
|
+
* Whether to show seconds in the time picker.
|
|
102
|
+
* @default false
|
|
103
|
+
*/
|
|
104
|
+
this.showSeconds = input(false, ...(ngDevMode ? [{ debugName: "showSeconds" }] : /* istanbul ignore next */ []));
|
|
105
|
+
/**
|
|
106
|
+
* @property {InputSignal<Date | null>} maxDate
|
|
107
|
+
* @description
|
|
108
|
+
* Maximum selectable date.
|
|
79
109
|
* @default null
|
|
80
110
|
*/
|
|
81
|
-
this.maxDate = null;
|
|
111
|
+
this.maxDate = input(null, ...(ngDevMode ? [{ debugName: "maxDate" }] : /* istanbul ignore next */ []));
|
|
82
112
|
/**
|
|
83
|
-
* @property {Date | null} minDate
|
|
113
|
+
* @property {InputSignal<Date | null>} minDate
|
|
84
114
|
* @description
|
|
85
|
-
* Minimum selectable date.
|
|
86
|
-
* Provide a JavaScript Date object. Use `null` to allow any past date.
|
|
115
|
+
* Minimum selectable date.
|
|
87
116
|
* @default null
|
|
88
117
|
*/
|
|
89
|
-
this.minDate = null;
|
|
118
|
+
this.minDate = input(null, ...(ngDevMode ? [{ debugName: "minDate" }] : /* istanbul ignore next */ []));
|
|
90
119
|
/**
|
|
91
|
-
* @property {string} labelText
|
|
120
|
+
* @property {InputSignal<string>} labelText
|
|
92
121
|
* @description
|
|
93
122
|
* Label shown by the float-label wrapper.
|
|
94
|
-
* @default 'Select a date'
|
|
95
123
|
*/
|
|
96
|
-
this.labelText = 'Select a date';
|
|
124
|
+
this.labelText = input('Select a date', ...(ngDevMode ? [{ debugName: "labelText" }] : /* istanbul ignore next */ []));
|
|
97
125
|
/**
|
|
98
|
-
* @
|
|
99
|
-
* @property {FormControl<DateValue>} internalControl
|
|
126
|
+
* @property {InputSignal<FormControl>} control
|
|
100
127
|
* @description
|
|
101
|
-
*
|
|
102
|
-
*
|
|
128
|
+
* External FormControl used to read/set the datepicker value.
|
|
129
|
+
* If not provided, an internal FormControl is created.
|
|
103
130
|
*/
|
|
104
|
-
this.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
131
|
+
this.control = input(undefined, ...(ngDevMode ? [{ debugName: "control" }] : /* istanbul ignore next */ []));
|
|
132
|
+
/**
|
|
133
|
+
* @property {ModelSignal<DateValue>} modelValue
|
|
134
|
+
* @description
|
|
135
|
+
* The value of the datepicker model. Supports two-way binding.
|
|
136
|
+
*/
|
|
137
|
+
this.modelValue = model(null, ...(ngDevMode ? [{ debugName: "modelValue" }] : /* istanbul ignore next */ []));
|
|
138
|
+
/**
|
|
139
|
+
* @property {OutputRef<DateValue>} handleSelect
|
|
140
|
+
* @description
|
|
141
|
+
* Emitted when a value is selected.
|
|
142
|
+
*/
|
|
143
|
+
this.handleSelect = output();
|
|
108
144
|
/**
|
|
109
|
-
* @
|
|
145
|
+
* @property {OutputRef<void>} handleClear
|
|
110
146
|
* @description
|
|
111
|
-
* Emitted when
|
|
112
|
-
* - single mode → a valid Date is selected
|
|
113
|
-
* - range mode → both start and end dates are selected
|
|
114
|
-
*
|
|
115
|
-
* Payload:
|
|
116
|
-
* - Date (single mode)
|
|
117
|
-
* - [Date, Date] (completed range)
|
|
147
|
+
* Emitted when the value is cleared.
|
|
118
148
|
*/
|
|
119
|
-
this.
|
|
149
|
+
this.handleClear = output();
|
|
150
|
+
/** Computed properties */
|
|
120
151
|
/**
|
|
121
|
-
* @
|
|
152
|
+
* @property {Signal<'single' | 'range'>} effectiveSelectionMode
|
|
122
153
|
* @description
|
|
123
|
-
*
|
|
154
|
+
* Returns 'single' automatically if variant is 'time', otherwise returns the user-provided selectionMode.
|
|
124
155
|
*/
|
|
125
|
-
this.
|
|
156
|
+
this.effectiveSelectionMode = computed(() => {
|
|
157
|
+
return this.variant() === 'time' ? 'single' : this.selectionMode();
|
|
158
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveSelectionMode" }] : /* istanbul ignore next */ []));
|
|
126
159
|
/**
|
|
127
|
-
* @property
|
|
160
|
+
* @property {Signal<string>} effectiveDateFormat
|
|
128
161
|
* @description
|
|
129
|
-
*
|
|
162
|
+
* Returns the user-provided dateFormat or timeFormat based on the variant.
|
|
130
163
|
*/
|
|
164
|
+
this.effectiveDateFormat = computed(() => {
|
|
165
|
+
return this.variant() === 'time' ? this.timeFormat() : this.dateFormat();
|
|
166
|
+
}, ...(ngDevMode ? [{ debugName: "effectiveDateFormat" }] : /* istanbul ignore next */ []));
|
|
167
|
+
/**
|
|
168
|
+
* @property {Signal<FormControl>} effectiveControl
|
|
169
|
+
* @description
|
|
170
|
+
* Returns the external FormControl from NgControl or a local fallback.
|
|
171
|
+
*/
|
|
172
|
+
this.internalControl = new FormControl(null);
|
|
173
|
+
/** Icons */
|
|
131
174
|
this.faCalendarDay = faCalendarDay;
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
set control(ctrl) {
|
|
140
|
-
// If the user provides a control, we use that control for everything.
|
|
141
|
-
if (ctrl) {
|
|
142
|
-
this.internalControl = ctrl;
|
|
175
|
+
this.faClock = faClock;
|
|
176
|
+
/** CVA Logic */
|
|
177
|
+
this.onChange = () => { };
|
|
178
|
+
this.onTouched = () => { };
|
|
179
|
+
this.sub = new Subscription();
|
|
180
|
+
if (this.ngControl) {
|
|
181
|
+
this.ngControl.valueAccessor = this;
|
|
143
182
|
}
|
|
144
183
|
}
|
|
145
|
-
get
|
|
146
|
-
return this.
|
|
184
|
+
get effectiveControl() {
|
|
185
|
+
return (this.ngControl?.control ||
|
|
186
|
+
this.control() ||
|
|
187
|
+
this.internalControl);
|
|
188
|
+
}
|
|
189
|
+
ngOnInit() {
|
|
190
|
+
const control = this.effectiveControl;
|
|
191
|
+
// Synchronize signal model with control value
|
|
192
|
+
this.modelValue.set(control.value);
|
|
193
|
+
this.sub.add(control.valueChanges.subscribe(value => {
|
|
194
|
+
this.modelValue.set(value);
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
ngOnDestroy() {
|
|
198
|
+
this.sub.unsubscribe();
|
|
147
199
|
}
|
|
148
|
-
/**
|
|
149
|
-
* @method writeValue
|
|
150
|
-
* @description Writes a new value from the form model (ngModel or formControl) into the component.
|
|
151
|
-
*/
|
|
152
200
|
writeValue(value) {
|
|
153
|
-
|
|
154
|
-
// Use { emitEvent: false } to prevent an unnecessary valueChanges loop.
|
|
155
|
-
this.internalControl.setValue(value, { emitEvent: false });
|
|
156
|
-
}
|
|
201
|
+
this.modelValue.set(value);
|
|
157
202
|
}
|
|
158
|
-
/**
|
|
159
|
-
* @method registerOnChange
|
|
160
|
-
* @description Registers a callback function to be called when the control's value changes.
|
|
161
|
-
*/
|
|
162
203
|
registerOnChange(fn) {
|
|
163
204
|
this.onChange = fn;
|
|
164
205
|
}
|
|
165
|
-
/**
|
|
166
|
-
* @method registerOnTouched
|
|
167
|
-
* @description Registers a callback function to be called when the control receives a blur event (is touched).
|
|
168
|
-
*/
|
|
169
206
|
registerOnTouched(fn) {
|
|
170
207
|
this.onTouched = fn;
|
|
171
208
|
}
|
|
172
|
-
/**
|
|
173
|
-
* @method setDisabledState
|
|
174
|
-
* @description Called when the control should be disabled or enabled.
|
|
175
|
-
*/
|
|
176
209
|
setDisabledState(isDisabled) {
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
false: () => this.internalControl.enable(),
|
|
180
|
-
};
|
|
181
|
-
actionMap[String(isDisabled)]();
|
|
210
|
+
const action = isDisabled ? 'disable' : 'enable';
|
|
211
|
+
this.effectiveControl[action]({ emitEvent: false });
|
|
182
212
|
}
|
|
183
213
|
/**
|
|
184
|
-
* @method
|
|
214
|
+
* @method onModelChange
|
|
185
215
|
* @description
|
|
186
|
-
*
|
|
187
|
-
* 1. Notifies the external form (CVA) via `this.onChange()`.
|
|
188
|
-
* 2. Emits the semantic events `handleSelect` or `handleClear`.
|
|
216
|
+
* Called when the PrimeNG DatePicker template updates the value.
|
|
189
217
|
*/
|
|
190
|
-
|
|
191
|
-
this.
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
if (
|
|
202
|
-
|
|
203
|
-
// Emit ONLY when both dates exist
|
|
204
|
-
if (start instanceof Date && end instanceof Date) {
|
|
205
|
-
this.handleSelect.emit([start, end]);
|
|
206
|
-
}
|
|
218
|
+
onModelChange(value) {
|
|
219
|
+
this.modelValue.set(value);
|
|
220
|
+
this.onChange(value);
|
|
221
|
+
this.effectiveControl.setValue(value, { emitEvent: false });
|
|
222
|
+
this.effectiveControl.markAsDirty();
|
|
223
|
+
if (value === null) {
|
|
224
|
+
this.handleClear.emit();
|
|
225
|
+
}
|
|
226
|
+
else if (this.selectionMode() === 'range') {
|
|
227
|
+
if (Array.isArray(value)) {
|
|
228
|
+
const [start, end] = value;
|
|
229
|
+
if (start instanceof Date && end instanceof Date) {
|
|
230
|
+
this.handleSelect.emit(value);
|
|
207
231
|
}
|
|
208
|
-
return;
|
|
209
232
|
}
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
});
|
|
233
|
+
}
|
|
234
|
+
else if (value instanceof Date) {
|
|
235
|
+
this.handleSelect.emit(value);
|
|
236
|
+
}
|
|
215
237
|
}
|
|
216
238
|
/**
|
|
217
|
-
* @method
|
|
218
|
-
* @description
|
|
239
|
+
* @method onBlur
|
|
240
|
+
* @description
|
|
241
|
+
* Triggered when the component loses focus.
|
|
219
242
|
*/
|
|
220
|
-
|
|
221
|
-
this.
|
|
243
|
+
onBlur() {
|
|
244
|
+
this.onTouched();
|
|
245
|
+
this.effectiveControl.markAsTouched();
|
|
222
246
|
}
|
|
223
247
|
/**
|
|
224
248
|
* @method clear
|
|
225
249
|
* @description
|
|
226
|
-
* Programmatically clears the
|
|
227
|
-
* which automatically triggers `handleClear`.
|
|
250
|
+
* Programmatically clears the value.
|
|
228
251
|
*/
|
|
229
252
|
clear() {
|
|
230
|
-
this.
|
|
253
|
+
this.onModelChange(null);
|
|
231
254
|
}
|
|
232
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
233
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "
|
|
255
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DatePickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
256
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.3", type: DatePickerComponent, isStandalone: true, selector: "tk-date-picker", inputs: { variant: { classPropertyName: "variant", publicName: "variant", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: "selectionMode", publicName: "selectionMode", isSignal: true, isRequired: false, transformFunction: null }, readonlyInput: { classPropertyName: "readonlyInput", publicName: "readonlyInput", isSignal: true, isRequired: false, transformFunction: null }, showClear: { classPropertyName: "showClear", publicName: "showClear", isSignal: true, isRequired: false, transformFunction: null }, showIcon: { classPropertyName: "showIcon", publicName: "showIcon", isSignal: true, isRequired: false, transformFunction: null }, dateFormat: { classPropertyName: "dateFormat", publicName: "dateFormat", isSignal: true, isRequired: false, transformFunction: null }, timeFormat: { classPropertyName: "timeFormat", publicName: "timeFormat", isSignal: true, isRequired: false, transformFunction: null }, stepHour: { classPropertyName: "stepHour", publicName: "stepHour", isSignal: true, isRequired: false, transformFunction: null }, stepMinute: { classPropertyName: "stepMinute", publicName: "stepMinute", isSignal: true, isRequired: false, transformFunction: null }, stepSecond: { classPropertyName: "stepSecond", publicName: "stepSecond", isSignal: true, isRequired: false, transformFunction: null }, showSeconds: { classPropertyName: "showSeconds", publicName: "showSeconds", isSignal: true, isRequired: false, transformFunction: null }, maxDate: { classPropertyName: "maxDate", publicName: "maxDate", isSignal: true, isRequired: false, transformFunction: null }, minDate: { classPropertyName: "minDate", publicName: "minDate", isSignal: true, isRequired: false, transformFunction: null }, labelText: { classPropertyName: "labelText", publicName: "labelText", isSignal: true, isRequired: false, transformFunction: null }, control: { classPropertyName: "control", publicName: "control", isSignal: true, isRequired: false, transformFunction: null }, modelValue: { classPropertyName: "modelValue", publicName: "modelValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { modelValue: "modelValueChange", handleSelect: "handleSelect", handleClear: "handleClear" }, ngImport: i0, template: "<div class=\"datepicker-container\">\n <p-floatlabel>\n <p-datepicker\n inputId=\"datepicker\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"readonlyInput()\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabled]=\"effectiveControl.disabled\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"variant() === 'time'\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"showSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <fa-icon\n tabindex=\"0\"\n [icon]=\"variant() === 'time' ? faClock : 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;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}: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);left:var(--tk-spacing-base-25, .25rem)}: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{min-width:0!important;max-width:300px!important;width:100%!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: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "ngmodule", type: DatePickerModule }, { kind: "component", type: i2.DatePicker, selector: "p-datePicker, p-datepicker, p-date-picker", inputs: ["iconDisplay", "styleClass", "inputStyle", "inputId", "inputStyleClass", "placeholder", "ariaLabelledBy", "ariaLabel", "iconAriaLabel", "dateFormat", "multipleSeparator", "rangeSeparator", "inline", "showOtherMonths", "selectOtherMonths", "showIcon", "icon", "readonlyInput", "shortYearCutoff", "hourFormat", "timeOnly", "stepHour", "stepMinute", "stepSecond", "showSeconds", "showOnFocus", "showWeek", "startWeekFromFirstDayOfYear", "showClear", "dataType", "selectionMode", "maxDateCount", "showButtonBar", "todayButtonStyleClass", "clearButtonStyleClass", "autofocus", "autoZIndex", "baseZIndex", "panelStyleClass", "panelStyle", "keepInvalid", "hideOnDateTimeSelect", "touchUI", "timeSeparator", "focusTrap", "showTransitionOptions", "hideTransitionOptions", "tabindex", "minDate", "maxDate", "disabledDates", "disabledDays", "showTime", "responsiveOptions", "numberOfMonths", "firstDayOfWeek", "view", "defaultDate", "appendTo", "motionOptions"], 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"], outputs: ["iconChange", "titleChange", "animationChange", "maskChange", "flipChange", "sizeChange", "pullChange", "borderChange", "inverseChange", "symbolChange", "rotateChange", "fixedWidthChange", "transformChange", "a11yRoleChange"] }] }); }
|
|
234
257
|
}
|
|
235
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.3", ngImport: i0, type: DatePickerComponent, decorators: [{
|
|
236
259
|
type: Component,
|
|
237
260
|
args: [{ selector: 'tk-date-picker', standalone: true, imports: [
|
|
238
261
|
FormsModule,
|
|
@@ -240,32 +263,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.18", ngImpo
|
|
|
240
263
|
DatePickerModule,
|
|
241
264
|
FloatLabelModule,
|
|
242
265
|
FaIconComponent,
|
|
243
|
-
],
|
|
244
|
-
}], propDecorators: { selectionMode: [{
|
|
245
|
-
type: Input
|
|
246
|
-
}], readonlyInput: [{
|
|
247
|
-
type: Input
|
|
248
|
-
}], disabled: [{
|
|
249
|
-
type: Input
|
|
250
|
-
}], showClear: [{
|
|
251
|
-
type: Input
|
|
252
|
-
}], showIcon: [{
|
|
253
|
-
type: Input
|
|
254
|
-
}], dateFormat: [{
|
|
255
|
-
type: Input
|
|
256
|
-
}], maxDate: [{
|
|
257
|
-
type: Input
|
|
258
|
-
}], minDate: [{
|
|
259
|
-
type: Input
|
|
260
|
-
}], labelText: [{
|
|
261
|
-
type: Input
|
|
262
|
-
}], control: [{
|
|
263
|
-
type: Input
|
|
264
|
-
}], handleSelect: [{
|
|
265
|
-
type: Output
|
|
266
|
-
}], handleClear: [{
|
|
267
|
-
type: Output
|
|
268
|
-
}] } });
|
|
266
|
+
], template: "<div class=\"datepicker-container\">\n <p-floatlabel>\n <p-datepicker\n inputId=\"datepicker\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"readonlyInput()\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabled]=\"effectiveControl.disabled\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"variant() === 'time'\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"showSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <fa-icon\n tabindex=\"0\"\n [icon]=\"variant() === 'time' ? faClock : 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;background-color:transparent;padding:var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-75, 12px) var(--tk-spacing-base-25, 4px)!important}: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);left:var(--tk-spacing-base-25, .25rem)}: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{min-width:0!important;max-width:300px!important;width:100%!important}.datepicker-container{margin-top:var(--tk-spacing-base-200, 2rem)}\n"] }]
|
|
267
|
+
}], ctorParameters: () => [], propDecorators: { variant: [{ type: i0.Input, args: [{ isSignal: true, alias: "variant", required: false }] }], selectionMode: [{ type: i0.Input, args: [{ isSignal: true, alias: "selectionMode", required: false }] }], readonlyInput: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyInput", required: false }] }], showClear: [{ type: i0.Input, args: [{ isSignal: true, alias: "showClear", required: false }] }], showIcon: [{ type: i0.Input, args: [{ isSignal: true, alias: "showIcon", required: false }] }], dateFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "dateFormat", required: false }] }], timeFormat: [{ type: i0.Input, args: [{ isSignal: true, alias: "timeFormat", required: false }] }], stepHour: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepHour", required: false }] }], stepMinute: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepMinute", required: false }] }], stepSecond: [{ type: i0.Input, args: [{ isSignal: true, alias: "stepSecond", required: false }] }], showSeconds: [{ type: i0.Input, args: [{ isSignal: true, alias: "showSeconds", required: false }] }], maxDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "maxDate", required: false }] }], minDate: [{ type: i0.Input, args: [{ isSignal: true, alias: "minDate", required: false }] }], labelText: [{ type: i0.Input, args: [{ isSignal: true, alias: "labelText", required: false }] }], control: [{ type: i0.Input, args: [{ isSignal: true, alias: "control", required: false }] }], modelValue: [{ type: i0.Input, args: [{ isSignal: true, alias: "modelValue", required: false }] }, { type: i0.Output, args: ["modelValueChange"] }], handleSelect: [{ type: i0.Output, args: ["handleSelect"] }], handleClear: [{ type: i0.Output, args: ["handleClear"] }] } });
|
|
269
268
|
|
|
270
269
|
/**
|
|
271
270
|
* Generated bundle index. Do not edit.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tekus-design-system-components-date-picker.mjs","sources":["../../../projects/design-system/components/date-picker/src/date-picker.component.ts","../../../projects/design-system/components/date-picker/src/date-picker.component.html","../../../projects/design-system/components/date-picker/tekus-design-system-components-date-picker.ts"],"sourcesContent":["import {\n Component,\n Input,\n Output,\n EventEmitter,\n OnInit,\n OnDestroy,\n forwardRef,\n} from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormControl,\n ControlValueAccessor,\n NG_VALUE_ACCESSOR,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faCalendarDay } from '@fortawesome/pro-regular-svg-icons';\n\nconst TK_DATE_PICKER_VALUE_ACCESSOR = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n};\n\nexport type DateValue = Date | [Date, Date] | null;\n@Component({\n selector: 'tk-date-picker',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n DatePickerModule,\n FloatLabelModule,\n FaIconComponent,\n ],\n providers: [TK_DATE_PICKER_VALUE_ACCESSOR],\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n})\n/**\n * @component DatePickerComponent\n * @description\n * A wrapper around PrimeNG's DatePicker component with support for single-date\n * and range selection modes. It is compatible with both Reactive Forms (formControlName, [control])\n * and Template-Driven Forms ([(ngModel)]).\n *\n * The component emits:\n * - `handleSelect` when a valid single date or a completed date range is selected.\n * - `handleClear` when the control is cleared (value becomes `null`).\n */\nexport class DatePickerComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n /**\n * @property {'single' | 'range'} selectionMode\n * @description\n * Defines how the datepicker behaves:\n * - `'single'`: select one date\n * - `'range'`: select a pair of dates [start, end]\n * @default 'range'\n */\n @Input() selectionMode: 'single' | 'range' = 'range';\n\n /**\n * @property {boolean} readonlyInput\n * @description\n * Disables manual typing in the input and forces the user to select via the calendar.\n * @default true\n */\n @Input() readonlyInput = true;\n\n /**\n * @property {boolean} disabled\n * @description\n * Disables component.\n * @default false\n */\n @Input() disabled = false;\n\n /**\n * @property {boolean} showClear\n * @description\n * Displays a clear button that resets the datepicker value.\n * @default true\n */\n @Input() showClear = true;\n\n /**\n * @property {boolean} showIcon\n * @description\n * Shows the calendar icon inside the input.\n * @default true\n */\n @Input() showIcon = true;\n\n /**\n * @property {string} dateFormat\n * @description\n * Format used by PrimeNG for displaying dates.\n * @default 'mm/dd/yy'\n */\n @Input() dateFormat = 'mm/dd/yy';\n\n /**\n * @property {Date | null} maxDate\n * @description\n * Maximum selectable date. When set, the calendar will prevent selecting dates after this value.\n * Provide a JavaScript Date object. Use `null` to allow any future date.\n * @default null\n */\n @Input() maxDate: Date | null = null;\n\n /**\n * @property {Date | null} minDate\n * @description\n * Minimum selectable date. When set, the calendar will prevent selecting dates before this value.\n * Provide a JavaScript Date object. Use `null` to allow any past date.\n * @default null\n */\n @Input() minDate: Date | null = null;\n\n /**\n * @property {string} labelText\n * @description\n * Label shown by the float-label wrapper.\n * @default 'Select a date'\n */\n @Input() labelText = 'Select a date';\n\n /**\n * @private\n * @property {FormControl<DateValue>} internalControl\n * @description\n * The internal FormControl used in the template. It handles value synchronization\n * for both CVA and the optional external control input.\n */\n internalControl = new FormControl<DateValue>(null);\n\n /**\n * @private\n * @property {Subscription} sub\n * @description Subscription to the valueChanges observable.\n */\n private sub!: Subscription;\n\n // Functions registered by ControlValueAccessor to communicate with the outside form\n private onChange: (value: DateValue) => void = () => {};\n private onTouched: () => void = () => {};\n\n /**\n * @property {FormControl<DateValue> | null} control\n * @description\n * Allows passing an external FormControl (traditional Reactive Forms usage).\n * If provided, it overrides the internal control.\n */\n @Input() set control(ctrl: FormControl<DateValue> | null) {\n // If the user provides a control, we use that control for everything.\n if (ctrl) {\n this.internalControl = ctrl;\n }\n }\n get control(): FormControl<DateValue> {\n return this.internalControl;\n }\n\n /**\n * @event handleSelect\n * @description\n * Emitted when:\n * - single mode → a valid Date is selected\n * - range mode → both start and end dates are selected\n *\n * Payload:\n * - Date (single mode)\n * - [Date, Date] (completed range)\n */\n @Output() handleSelect = new EventEmitter<DateValue>();\n\n /**\n * @event handleClear\n * @description\n * Emitted when the control's value becomes `null`.\n */\n @Output() handleClear = new EventEmitter<void>();\n\n /**\n * @property faCalendarDay\n * @description\n * Icon displayed inside the datepicker input.\n */\n faCalendarDay = faCalendarDay;\n\n /**\n * @method writeValue\n * @description Writes a new value from the form model (ngModel or formControl) into the component.\n */\n writeValue(value: DateValue): void {\n if (value !== undefined) {\n // Use { emitEvent: false } to prevent an unnecessary valueChanges loop.\n this.internalControl.setValue(value, { emitEvent: false });\n }\n }\n\n /**\n * @method registerOnChange\n * @description Registers a callback function to be called when the control's value changes.\n */\n registerOnChange(fn: (value: DateValue) => void): void {\n this.onChange = fn;\n }\n\n /**\n * @method registerOnTouched\n * @description Registers a callback function to be called when the control receives a blur event (is touched).\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * @method setDisabledState\n * @description Called when the control should be disabled or enabled.\n */\n setDisabledState(isDisabled: boolean): void {\n const actionMap: { [key: string]: () => void } = {\n true: () => this.internalControl.disable(),\n false: () => this.internalControl.enable(),\n };\n actionMap[String(isDisabled)]();\n }\n\n /**\n * @method ngOnInit\n * @description\n * Subscribes to the internal control's valueChanges:\n * 1. Notifies the external form (CVA) via `this.onChange()`.\n * 2. Emits the semantic events `handleSelect` or `handleClear`.\n */\n ngOnInit(): void {\n this.sub = this.internalControl.valueChanges.subscribe(value => {\n // Notify the CVA / External Form\n this.onChange(value);\n this.onTouched();\n\n if (value === null) {\n this.handleClear.emit();\n return;\n }\n // RANGE MODE\n if (this.selectionMode === 'range') {\n if (Array.isArray(value)) {\n const [start, end] = value;\n // Emit ONLY when both dates exist\n if (start instanceof Date && end instanceof Date) {\n this.handleSelect.emit([start, end]);\n }\n }\n return;\n }\n // SINGLE MODE\n if (this.selectionMode === 'single' && value instanceof Date) {\n this.handleSelect.emit(value);\n }\n });\n }\n\n /**\n * @method ngOnDestroy\n * @description Cleans up the internal subscription when the component is destroyed.\n */\n ngOnDestroy(): void {\n this.sub?.unsubscribe();\n }\n\n /**\n * @method clear\n * @description\n * Programmatically clears the control's value,\n * which automatically triggers `handleClear`.\n */\n clear() {\n this.internalControl.setValue(null);\n }\n}\n","<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 [disabled]=\"disabled\"\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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tekus-design-system-components-date-picker.mjs","sources":["../../../projects/design-system/components/date-picker/src/date-picker.component.ts","../../../projects/design-system/components/date-picker/src/date-picker.component.html","../../../projects/design-system/components/date-picker/tekus-design-system-components-date-picker.ts"],"sourcesContent":["import {\n Component,\n OnInit,\n OnDestroy,\n inject,\n input,\n model,\n computed,\n output,\n} from '@angular/core';\nimport {\n FormsModule,\n ReactiveFormsModule,\n FormControl,\n ControlValueAccessor,\n NgControl,\n} from '@angular/forms';\nimport { Subscription } from 'rxjs';\n\nimport { DatePickerModule } from 'primeng/datepicker';\nimport { FloatLabelModule } from 'primeng/floatlabel';\nimport { FaIconComponent } from '@fortawesome/angular-fontawesome';\nimport { faCalendarDay, faClock } from '@fortawesome/pro-regular-svg-icons';\n\nexport type DateValue = Date | [Date, Date] | null;\n\n@Component({\n selector: 'tk-date-picker',\n standalone: true,\n imports: [\n FormsModule,\n ReactiveFormsModule,\n DatePickerModule,\n FloatLabelModule,\n FaIconComponent,\n ],\n templateUrl: './date-picker.component.html',\n styleUrls: ['./date-picker.component.scss'],\n})\n/**\n * @component DatePickerComponent\n * @description\n * A wrapper around PrimeNG's DatePicker component with support for single-date,\n * range selection, and time-only modes. It uses Angular Signals for reactivity\n * and strictly implements the ControlValueAccessor interface via NgControl.\n */\nexport class DatePickerComponent\n implements OnInit, OnDestroy, ControlValueAccessor\n{\n /** Internal references and injections */\n readonly ngControl = inject(NgControl, { self: true, optional: true });\n\n constructor() {\n if (this.ngControl) {\n this.ngControl.valueAccessor = this;\n }\n }\n\n /**\n * @property {InputSignal<'date' | 'time'>} variant\n * @description\n * Defines the visual and functional mode:\n * - `'date'`: standard date/range picker\n * - `'time'`: time-only picker\n * @default 'date'\n */\n variant = input<'date' | 'time'>('date');\n\n /**\n * @property {InputSignal<'single' | 'range'>} selectionMode\n * @description\n * Defines how the datepicker behaves:\n * - `'single'`: select one date\n * - `'range'`: select a pair of dates [start, end]\n * @default 'range'\n */\n selectionMode = input<'single' | 'range'>('range');\n\n /**\n * @property {InputSignal<boolean>} readonlyInput\n * @description\n * Disables manual typing in the input and forces the user to select via the calendar.\n * @default true\n */\n readonlyInput = input<boolean>(true);\n\n /**\n * @property {InputSignal<boolean>} showClear\n * @description\n * Displays a clear button that resets the datepicker value.\n * @default true\n */\n showClear = input<boolean>(true);\n\n /**\n * @property {InputSignal<boolean>} showIcon\n * @description\n * Shows the calendar or clock icon inside the input.\n * @default true\n */\n showIcon = input<boolean>(true);\n\n /**\n * @property {InputSignal<string>} dateFormat\n * @description\n * Format used by PrimeNG for displaying dates.\n * @default 'mm/dd/yy'\n */\n dateFormat = input<string>('mm/dd/yy');\n\n /**\n * @property {InputSignal<string>} timeFormat\n * @description\n * Format used by PrimeNG for displaying times.\n * @default 'HH:mm'\n */\n timeFormat = input<string>('HH:mm');\n\n /**\n * @property {InputSignal<number>} stepHour\n * @description\n * Hours to skip when clicking up/down.\n * @default 1\n */\n stepHour = input<number>(1);\n\n /**\n * @property {InputSignal<number>} stepMinute\n * @description\n * Minutes to skip when clicking up/down.\n * @default 1\n */\n stepMinute = input<number>(1);\n\n /**\n * @property {InputSignal<number>} stepSecond\n * @description\n * Seconds to skip when clicking up/down.\n * @default 1\n */\n stepSecond = input<number>(1);\n\n /**\n * @property {InputSignal<boolean>} showSeconds\n * @description\n * Whether to show seconds in the time picker.\n * @default false\n */\n showSeconds = input<boolean>(false);\n\n /**\n * @property {InputSignal<Date | null>} maxDate\n * @description\n * Maximum selectable date.\n * @default null\n */\n maxDate = input<Date | null>(null);\n\n /**\n * @property {InputSignal<Date | null>} minDate\n * @description\n * Minimum selectable date.\n * @default null\n */\n minDate = input<Date | null>(null);\n\n /**\n * @property {InputSignal<string>} labelText\n * @description\n * Label shown by the float-label wrapper.\n */\n labelText = input<string>('Select a date');\n\n /**\n * @property {InputSignal<FormControl>} control\n * @description\n * External FormControl used to read/set the datepicker value.\n * If not provided, an internal FormControl is created.\n */\n control = input<FormControl | undefined>(undefined);\n\n /**\n * @property {ModelSignal<DateValue>} modelValue\n * @description\n * The value of the datepicker model. Supports two-way binding.\n */\n modelValue = model<DateValue>(null);\n\n /**\n * @property {OutputRef<DateValue>} handleSelect\n * @description\n * Emitted when a value is selected.\n */\n handleSelect = output<DateValue>();\n\n /**\n * @property {OutputRef<void>} handleClear\n * @description\n * Emitted when the value is cleared.\n */\n handleClear = output<void>();\n\n /** Computed properties */\n\n /**\n * @property {Signal<'single' | 'range'>} effectiveSelectionMode\n * @description\n * Returns 'single' automatically if variant is 'time', otherwise returns the user-provided selectionMode.\n */\n effectiveSelectionMode = computed(() => {\n return this.variant() === 'time' ? 'single' : this.selectionMode();\n });\n\n /**\n * @property {Signal<string>} effectiveDateFormat\n * @description\n * Returns the user-provided dateFormat or timeFormat based on the variant.\n */\n effectiveDateFormat = computed(() => {\n return this.variant() === 'time' ? this.timeFormat() : this.dateFormat();\n });\n\n /**\n * @property {Signal<FormControl>} effectiveControl\n * @description\n * Returns the external FormControl from NgControl or a local fallback.\n */\n internalControl = new FormControl<DateValue>(null);\n get effectiveControl(): FormControl {\n return (\n (this.ngControl?.control as FormControl) ||\n this.control() ||\n this.internalControl\n );\n }\n\n /** Icons */\n faCalendarDay = faCalendarDay;\n faClock = faClock;\n\n /** CVA Logic */\n onChange: (value: DateValue) => void = () => {};\n onTouched: () => void = () => {};\n private readonly sub = new Subscription();\n\n ngOnInit(): void {\n const control = this.effectiveControl;\n\n // Synchronize signal model with control value\n this.modelValue.set(control.value);\n\n this.sub.add(\n control.valueChanges.subscribe(value => {\n this.modelValue.set(value);\n })\n );\n }\n\n ngOnDestroy(): void {\n this.sub.unsubscribe();\n }\n\n writeValue(value: DateValue): void {\n this.modelValue.set(value);\n }\n\n registerOnChange(fn: (value: DateValue) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n const action = isDisabled ? 'disable' : 'enable';\n this.effectiveControl[action]({ emitEvent: false });\n }\n\n /**\n * @method onModelChange\n * @description\n * Called when the PrimeNG DatePicker template updates the value.\n */\n onModelChange(value: DateValue): void {\n this.modelValue.set(value);\n this.onChange(value);\n this.effectiveControl.setValue(value, { emitEvent: false });\n this.effectiveControl.markAsDirty();\n\n if (value === null) {\n this.handleClear.emit();\n } else if (this.selectionMode() === 'range') {\n if (Array.isArray(value)) {\n const [start, end] = value;\n if (start instanceof Date && end instanceof Date) {\n this.handleSelect.emit(value);\n }\n }\n } else if (value instanceof Date) {\n this.handleSelect.emit(value);\n }\n }\n\n /**\n * @method onBlur\n * @description\n * Triggered when the component loses focus.\n */\n onBlur(): void {\n this.onTouched();\n this.effectiveControl.markAsTouched();\n }\n\n /**\n * @method clear\n * @description\n * Programmatically clears the value.\n */\n clear() {\n this.onModelChange(null);\n }\n}\n","<div class=\"datepicker-container\">\n <p-floatlabel>\n <p-datepicker\n inputId=\"datepicker\"\n iconDisplay=\"input\"\n [ngModel]=\"modelValue()\"\n (ngModelChange)=\"onModelChange($event)\"\n (onBlur)=\"onBlur()\"\n [selectionMode]=\"effectiveSelectionMode()\"\n [readonlyInput]=\"readonlyInput()\"\n [showClear]=\"showClear()\"\n [showIcon]=\"showIcon()\"\n [minDate]=\"minDate()\"\n [maxDate]=\"maxDate()\"\n [disabled]=\"effectiveControl.disabled\"\n [dateFormat]=\"effectiveDateFormat()\"\n [timeOnly]=\"variant() === 'time'\"\n [stepHour]=\"stepHour()\"\n [stepMinute]=\"stepMinute()\"\n [stepSecond]=\"stepSecond()\"\n [showSeconds]=\"showSeconds()\">\n <ng-template #inputicon let-clickCallBack=\"clickCallBack\">\n <fa-icon\n tabindex=\"0\"\n [icon]=\"variant() === 'time' ? faClock : 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","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|