@haiilo/catalyst 5.4.0 → 6.0.1

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.
Files changed (169) hide show
  1. package/dist/catalyst/catalyst.css +1071 -0
  2. package/dist/catalyst/catalyst.esm.js +1 -1
  3. package/dist/catalyst/catalyst.esm.js.map +1 -1
  4. package/dist/catalyst/index.cdn.js +6 -0
  5. package/dist/catalyst/index.esm.js +2 -2
  6. package/dist/catalyst/index.esm.js.map +1 -1
  7. package/dist/catalyst/p-60298958.entry.js +10 -0
  8. package/dist/catalyst/p-60298958.entry.js.map +1 -0
  9. package/dist/catalyst/p-d7dc291a.js +2 -0
  10. package/dist/catalyst/p-d7dc291a.js.map +1 -0
  11. package/dist/catalyst/scss/index.scss +2 -0
  12. package/dist/catalyst/scss/vendor/_flatpickr.scss +314 -0
  13. package/dist/cjs/{cat-alert_27.cjs.entry.js → cat-alert_25.cjs.entry.js} +2927 -3476
  14. package/dist/cjs/cat-alert_25.cjs.entry.js.map +1 -0
  15. package/dist/cjs/{cat-icon-registry-228164a1.js → cat-icon-registry-6161e2ee.js} +14 -2
  16. package/dist/cjs/cat-icon-registry-6161e2ee.js.map +1 -0
  17. package/dist/cjs/catalyst.cjs.js +1 -1
  18. package/dist/cjs/index.cjs.js +12 -14
  19. package/dist/cjs/index.cjs.js.map +1 -1
  20. package/dist/cjs/loader.cjs.js +1 -1
  21. package/dist/collection/collection-manifest.json +0 -2
  22. package/dist/collection/components/cat-avatar/cat-avatar.js +5 -5
  23. package/dist/collection/components/cat-avatar/cat-avatar.js.map +1 -1
  24. package/dist/collection/components/cat-button/cat-button.js +5 -7
  25. package/dist/collection/components/cat-button/cat-button.js.map +1 -1
  26. package/dist/collection/components/cat-checkbox/cat-checkbox.js +39 -42
  27. package/dist/collection/components/cat-checkbox/cat-checkbox.js.map +1 -1
  28. package/dist/collection/components/cat-datepicker/cat-datepicker.config.js +22 -0
  29. package/dist/collection/components/cat-datepicker/cat-datepicker.config.js.map +1 -0
  30. package/dist/collection/components/cat-datepicker/cat-datepicker.css +6 -369
  31. package/dist/collection/components/cat-datepicker/cat-datepicker.js +115 -310
  32. package/dist/collection/components/cat-datepicker/cat-datepicker.js.map +1 -1
  33. package/dist/collection/components/cat-datepicker/cat-datepicker.locale.js +51 -0
  34. package/dist/collection/components/cat-datepicker/cat-datepicker.locale.js.map +1 -0
  35. package/dist/collection/components/cat-dropdown/cat-dropdown.js +6 -9
  36. package/dist/collection/components/cat-dropdown/cat-dropdown.js.map +1 -1
  37. package/dist/collection/components/cat-form-group/cat-form-group.js +4 -5
  38. package/dist/collection/components/cat-form-group/cat-form-group.js.map +1 -1
  39. package/dist/collection/components/cat-form-hint/cat-form-hint.js +2 -6
  40. package/dist/collection/components/cat-form-hint/cat-form-hint.js.map +1 -1
  41. package/dist/collection/components/cat-i18n/cat-i18n-registry.js +13 -1
  42. package/dist/collection/components/cat-i18n/cat-i18n-registry.js.map +1 -1
  43. package/dist/collection/components/cat-input/cat-input.css +0 -377
  44. package/dist/collection/components/cat-input/cat-input.js +14 -40
  45. package/dist/collection/components/cat-input/cat-input.js.map +1 -1
  46. package/dist/collection/components/cat-input/input-type.js.map +1 -1
  47. package/dist/collection/components/cat-notification/cat-notification.js +11 -13
  48. package/dist/collection/components/cat-notification/cat-notification.js.map +1 -1
  49. package/dist/collection/components/cat-pagination/cat-pagination.js +2 -2
  50. package/dist/collection/components/cat-pagination/cat-pagination.js.map +1 -1
  51. package/dist/collection/components/cat-radio/cat-radio.js +11 -36
  52. package/dist/collection/components/cat-radio/cat-radio.js.map +1 -1
  53. package/dist/collection/components/cat-radio-group/cat-radio-group.js +37 -11
  54. package/dist/collection/components/cat-radio-group/cat-radio-group.js.map +1 -1
  55. package/dist/collection/components/cat-scrollable/cat-scrollable.js +2 -3
  56. package/dist/collection/components/cat-scrollable/cat-scrollable.js.map +1 -1
  57. package/dist/collection/components/cat-select/cat-select.js +42 -53
  58. package/dist/collection/components/cat-select/cat-select.js.map +1 -1
  59. package/dist/collection/components/cat-select-demo/cat-select-demo.js +21 -25
  60. package/dist/collection/components/cat-select-demo/cat-select-demo.js.map +1 -1
  61. package/dist/collection/components/cat-tabs/cat-tabs.js +4 -7
  62. package/dist/collection/components/cat-tabs/cat-tabs.js.map +1 -1
  63. package/dist/collection/components/cat-textarea/cat-textarea.js +17 -21
  64. package/dist/collection/components/cat-textarea/cat-textarea.js.map +1 -1
  65. package/dist/collection/components/cat-toggle/cat-toggle.js +38 -41
  66. package/dist/collection/components/cat-toggle/cat-toggle.js.map +1 -1
  67. package/dist/collection/components/cat-tooltip/cat-tooltip.js +17 -22
  68. package/dist/collection/components/cat-tooltip/cat-tooltip.js.map +1 -1
  69. package/dist/collection/index.cdn.js +6 -0
  70. package/dist/collection/scss/index.scss +2 -0
  71. package/dist/collection/scss/vendor/_flatpickr.scss +314 -0
  72. package/dist/collection/utils/platform.js +1 -1
  73. package/dist/collection/utils/platform.js.map +1 -1
  74. package/dist/components/cat-avatar2.js +5 -5
  75. package/dist/components/cat-avatar2.js.map +1 -1
  76. package/dist/components/cat-button2.js +6 -8
  77. package/dist/components/cat-button2.js.map +1 -1
  78. package/dist/components/cat-checkbox2.js +14 -15
  79. package/dist/components/cat-checkbox2.js.map +1 -1
  80. package/dist/components/cat-datepicker.js +2730 -3024
  81. package/dist/components/cat-datepicker.js.map +1 -1
  82. package/dist/components/cat-dropdown2.js +6 -9
  83. package/dist/components/cat-dropdown2.js.map +1 -1
  84. package/dist/components/cat-form-group.js +4 -5
  85. package/dist/components/cat-form-group.js.map +1 -1
  86. package/dist/components/cat-form-hint.js +2 -6
  87. package/dist/components/cat-form-hint.js.map +1 -1
  88. package/dist/components/cat-i18n-registry.js +13 -1
  89. package/dist/components/cat-i18n-registry.js.map +1 -1
  90. package/dist/components/cat-input2.js +9 -16
  91. package/dist/components/cat-input2.js.map +1 -1
  92. package/dist/components/cat-pagination.js.map +1 -1
  93. package/dist/components/cat-radio-group.js +15 -9
  94. package/dist/components/cat-radio-group.js.map +1 -1
  95. package/dist/components/cat-radio.js +5 -12
  96. package/dist/components/cat-radio.js.map +1 -1
  97. package/dist/components/cat-scrollable2.js +2 -3
  98. package/dist/components/cat-scrollable2.js.map +1 -1
  99. package/dist/components/cat-select-demo.js +21 -25
  100. package/dist/components/cat-select-demo.js.map +1 -1
  101. package/dist/components/cat-select2.js +42 -53
  102. package/dist/components/cat-select2.js.map +1 -1
  103. package/dist/components/cat-tabs.js +4 -7
  104. package/dist/components/cat-tabs.js.map +1 -1
  105. package/dist/components/cat-textarea.js +11 -11
  106. package/dist/components/cat-textarea.js.map +1 -1
  107. package/dist/components/cat-toggle.js +14 -15
  108. package/dist/components/cat-toggle.js.map +1 -1
  109. package/dist/components/cat-tooltip.js +17 -22
  110. package/dist/components/cat-tooltip.js.map +1 -1
  111. package/dist/components/floating-ui.dom.esm.js +55 -68
  112. package/dist/components/floating-ui.dom.esm.js.map +1 -1
  113. package/dist/components/index.js +11 -13
  114. package/dist/components/index.js.map +1 -1
  115. package/dist/esm/{cat-alert_27.entry.js → cat-alert_25.entry.js} +2927 -3474
  116. package/dist/esm/cat-alert_25.entry.js.map +1 -0
  117. package/dist/esm/{cat-icon-registry-4bd597f4.js → cat-icon-registry-f15b29d9.js} +14 -2
  118. package/dist/esm/cat-icon-registry-f15b29d9.js.map +1 -0
  119. package/dist/esm/catalyst.js +1 -1
  120. package/dist/esm/index.js +13 -15
  121. package/dist/esm/index.js.map +1 -1
  122. package/dist/esm/loader.js +1 -1
  123. package/dist/types/@types/Intl.d.ts +3 -0
  124. package/dist/types/components/cat-checkbox/cat-checkbox.d.ts +11 -9
  125. package/dist/types/components/cat-datepicker/cat-datepicker.config.d.ts +1 -0
  126. package/dist/types/components/cat-datepicker/cat-datepicker.d.ts +21 -64
  127. package/dist/types/components/cat-datepicker/cat-datepicker.locale.d.ts +3 -0
  128. package/dist/types/components/cat-i18n/cat-i18n-registry.d.ts +3 -0
  129. package/dist/types/components/cat-input/cat-input.d.ts +2 -6
  130. package/dist/types/components/cat-input/input-type.d.ts +1 -1
  131. package/dist/types/components/cat-pagination/cat-pagination.d.ts +1 -1
  132. package/dist/types/components/cat-radio/cat-radio.d.ts +3 -7
  133. package/dist/types/components/cat-radio-group/cat-radio-group.d.ts +6 -1
  134. package/dist/types/components/cat-textarea/cat-textarea.d.ts +4 -4
  135. package/dist/types/components/cat-toggle/cat-toggle.d.ts +10 -8
  136. package/dist/types/components.d.ts +83 -417
  137. package/package.json +8 -10
  138. package/dist/catalyst/p-34e0cbba.entry.js +0 -10
  139. package/dist/catalyst/p-34e0cbba.entry.js.map +0 -1
  140. package/dist/catalyst/p-cf32399c.js +0 -2
  141. package/dist/catalyst/p-cf32399c.js.map +0 -1
  142. package/dist/cjs/cat-alert_27.cjs.entry.js.map +0 -1
  143. package/dist/cjs/cat-icon-registry-228164a1.js.map +0 -1
  144. package/dist/collection/components/cat-datepicker/datepicker-type.js +0 -8
  145. package/dist/collection/components/cat-datepicker/datepicker-type.js.map +0 -1
  146. package/dist/collection/components/cat-datepicker/dayjs.config.js +0 -8
  147. package/dist/collection/components/cat-datepicker/dayjs.config.js.map +0 -1
  148. package/dist/collection/components/cat-datepicker/vanillajs-datepicker.config.js +0 -46
  149. package/dist/collection/components/cat-datepicker/vanillajs-datepicker.config.js.map +0 -1
  150. package/dist/collection/components/cat-label/cat-label.css +0 -22
  151. package/dist/collection/components/cat-label/cat-label.js +0 -134
  152. package/dist/collection/components/cat-label/cat-label.js.map +0 -1
  153. package/dist/collection/components/cat-timepicker/cat-timepicker.css +0 -5
  154. package/dist/collection/components/cat-timepicker/cat-timepicker.js +0 -668
  155. package/dist/collection/components/cat-timepicker/cat-timepicker.js.map +0 -1
  156. package/dist/components/cat-label.d.ts +0 -11
  157. package/dist/components/cat-label.js +0 -73
  158. package/dist/components/cat-label.js.map +0 -1
  159. package/dist/components/cat-timepicker.d.ts +0 -11
  160. package/dist/components/cat-timepicker.js +0 -258
  161. package/dist/components/cat-timepicker.js.map +0 -1
  162. package/dist/esm/cat-alert_27.entry.js.map +0 -1
  163. package/dist/esm/cat-icon-registry-4bd597f4.js.map +0 -1
  164. package/dist/types/components/cat-datepicker/datepicker-type.d.ts +0 -7
  165. package/dist/types/components/cat-datepicker/datepicker.d.ts +0 -1
  166. package/dist/types/components/cat-datepicker/dayjs.config.d.ts +0 -3
  167. package/dist/types/components/cat-datepicker/vanillajs-datepicker.config.d.ts +0 -4
  168. package/dist/types/components/cat-label/cat-label.d.ts +0 -27
  169. package/dist/types/components/cat-timepicker/cat-timepicker.d.ts +0 -158
@@ -1,20 +1,11 @@
1
- import { Host, h } from '@stencil/core';
2
- import log from 'loglevel';
3
- import dayjs from './dayjs.config';
4
- import Datepicker, { getDatepickerOptions } from './vanillajs-datepicker.config';
5
- /**
6
- * Inputs are used to allow users to provide text input when the expected input
7
- * is short. As well as plain text, Input supports various types of text,
8
- * including passwords and numbers.
9
- *
10
- * @slot hint - Optional hint element to be displayed with the input.
11
- * @slot label - The slotted label. If both the label property and the label slot are present, only the label slot will be displayed.
12
- * @part label - The label content.
13
- */
14
- export class CatDatepicker {
1
+ import { h } from '@stencil/core';
2
+ import flatpickr from 'flatpickr';
3
+ import weekSelectPlugin from 'flatpickr/dist/plugins/weekSelect/weekSelect';
4
+ import { catI18nRegistry as i18n } from '../cat-i18n/cat-i18n-registry';
5
+ import { getFormat } from './cat-datepicker.config';
6
+ import { getLocale } from './cat-datepicker.locale';
7
+ export class CatDatepickerFlat {
15
8
  constructor() {
16
- this.hasSlottedLabel = false;
17
- this.hasSlottedHint = false;
18
9
  this.requiredMarker = 'optional';
19
10
  this.horizontal = false;
20
11
  this.autoComplete = undefined;
@@ -22,204 +13,106 @@ export class CatDatepicker {
22
13
  this.disabled = false;
23
14
  this.hint = undefined;
24
15
  this.icon = undefined;
25
- this.iconLeft = false;
16
+ this.iconRight = false;
26
17
  this.identifier = undefined;
27
18
  this.label = '';
28
19
  this.labelHidden = false;
29
20
  this.max = undefined;
30
21
  this.min = undefined;
22
+ this.mode = 'date';
31
23
  this.name = undefined;
32
24
  this.placeholder = undefined;
33
25
  this.textPrefix = undefined;
34
26
  this.textSuffix = undefined;
35
27
  this.readonly = false;
36
28
  this.required = false;
37
- this.format = 'mm/dd/yyyy';
38
- this.weekNumbers = true;
39
- this.type = 'date';
40
- this.datesDisabled = undefined;
29
+ this.step = 5;
41
30
  this.value = undefined;
42
31
  this.errors = undefined;
43
32
  this.errorUpdate = 0;
44
33
  this.nativeAttributes = undefined;
45
34
  }
35
+ get input() {
36
+ return this._input?.shadowRoot?.querySelector('input') ?? undefined;
37
+ }
38
+ componentDidLoad() {
39
+ const input = this.input;
40
+ if (input) {
41
+ const locale = getLocale(i18n.getLocale());
42
+ const format = getFormat(i18n.getLocale(), this.mode);
43
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
44
+ const plugins = this.mode === 'week' ? [new weekSelectPlugin({})] : [];
45
+ this.pickr = flatpickr(input, {
46
+ locale,
47
+ plugins,
48
+ altInput: true,
49
+ prevArrow: '←',
50
+ nextArrow: '→',
51
+ dateFormat: this.dateFormat,
52
+ altFormat: format,
53
+ ariaDateFormat: format,
54
+ mode: this.mode === 'daterange' ? 'range' : 'single',
55
+ minDate: this.min,
56
+ maxDate: this.max,
57
+ enableTime: this.mode === 'time' || this.mode === 'datetime',
58
+ noCalendar: this.mode === 'time',
59
+ weekNumbers: true,
60
+ minuteIncrement: this.step,
61
+ onChange: (dates, dateStr, flatpickr) => {
62
+ if (this.mode === 'week') {
63
+ this.value = dates[0] ? flatpickr.config.getWeek(dates[0]).toString() : undefined;
64
+ }
65
+ else {
66
+ this.value = dateStr;
67
+ }
68
+ this.catChange.emit(this.value);
69
+ }
70
+ });
71
+ }
72
+ }
46
73
  /**
47
- * Programmatically move focus to the input. Use this method instead of
74
+ * Programmatically move focus to the datepicker. Use this method instead of
48
75
  * `input.focus()`.
49
76
  *
50
77
  * @param options An optional object providing options to control aspects of
51
78
  * the focusing process.
52
79
  */
53
80
  async doFocus(options) {
54
- this.input.focus(options);
81
+ this._input?.doFocus(options);
55
82
  }
56
83
  /**
57
- * Programmatically remove focus from the input. Use this method instead of
84
+ * Programmatically remove focus from the datepicker. Use this method instead of
58
85
  * `input.blur()`.
59
86
  */
60
87
  async doBlur() {
61
- this.input.blur();
62
- }
63
- /**
64
- * Programmatically simulate a click on the input.
65
- */
66
- async doClick() {
67
- this.input.click();
68
- }
69
- /**
70
- * Clear the input.
71
- */
72
- async clear() {
73
- this.value = '';
74
- }
75
- componentWillRender() {
76
- this.hasSlottedLabel = !!this.hostElement.querySelector('[slot="label"]');
77
- this.hasSlottedHint = !!this.hostElement.querySelector('[slot="hint"]');
88
+ this._input?.doBlur();
78
89
  }
79
90
  render() {
80
- return (h(Host, null, h("cat-input", { ref: el => (this.catInput = el), requiredMarker: this.requiredMarker, horizontal: this.horizontal, autoComplete: this.autoComplete, clearable: this.clearable, disabled: this.disabled, hint: this.hint, icon: this.icon, iconRight: !this.iconLeft, identifier: this.identifier, label: this.label, labelHidden: this.labelHidden, name: this.name, placeholder: this.placeholder, textPrefix: this.textPrefix, textSuffix: this.textSuffix, readonly: this.readonly, required: this.required, value: this.value, errors: this.errors, errorUpdate: this.errorUpdate, nativeAttributes: this.nativeAttributes, onCatChange: event => this.onCatChange(event), onCatFocus: event => this.onCatFocus(event.detail), onCatBlur: event => this.onCatBlur(event.detail) }, this.hasSlottedLabel && (h("span", { slot: "label" }, h("slot", { name: "label" }))), this.hasSlottedHint && (h("span", { slot: "hint" }, h("slot", { name: "hint" }))))));
81
- }
82
- componentDidLoad() {
83
- var _a;
84
- if (this.hostElement) {
85
- const inputWrapper = (_a = this.catInput.shadowRoot) === null || _a === void 0 ? void 0 : _a.querySelector('.input-wrapper');
86
- const inputElement = inputWrapper === null || inputWrapper === void 0 ? void 0 : inputWrapper.querySelector('input');
87
- if (inputElement) {
88
- this.input = inputElement;
89
- }
90
- else {
91
- log.error('[CatInput] Missing input element', this);
92
- return;
93
- }
94
- this.datepicker = new Datepicker(inputElement, Object.assign(Object.assign({}, getDatepickerOptions(this.type, this.value)), { container: inputWrapper, maxDate: this.max, minDate: this.min, datesDisabled: this.datesDisabled, prevArrow: '←', nextArrow: '→', weekNumbers: this.weekNumbers ? 1 : 0, format: {
95
- toValue: (dateStr) => this.type === 'week' ? this.fromISOWeek(dateStr) : Datepicker.parseDate(dateStr, this.dateFormat),
96
- toDisplay: (date) => this.type === 'week' ? this.toISOWeek(date).toString() : Datepicker.formatDate(date, this.dateFormat)
97
- }, beforeShowDay: (date) => (this.shouldHighlightAsToday(date) ? 'today' : null), beforeShowMonth: (date) => (this.shouldHighlightAsToday(date) ? 'today' : null), beforeShowYear: (date) => (this.shouldHighlightAsToday(date) ? 'today' : null) }));
98
- if (this.type === 'week') {
99
- this.datepicker.pickerElement.classList.add('weekly');
100
- }
101
- this.input.addEventListener('show', this.handleWeekDays.bind(this));
102
- this.input.addEventListener('changeDate', this.handleDateChange.bind(this));
103
- this.input.addEventListener('changeMonth', this.handleWeekDays.bind(this));
104
- this.input.addEventListener('changeView', this.handleWeekDays.bind(this));
105
- this.input.addEventListener('keydown', this.focusAllWeekDays.bind(this));
106
- }
107
- }
108
- disconnectedCallback() {
109
- this.input.removeEventListener('show', this.handleWeekDays.bind(this));
110
- this.input.removeEventListener('changeDate', this.handleDateChange.bind(this));
111
- this.input.removeEventListener('changeMonth', this.handleWeekDays.bind(this));
112
- this.input.removeEventListener('changeView', this.handleWeekDays.bind(this));
113
- this.input.removeEventListener('keydown', this.focusAllWeekDays.bind(this));
114
- }
115
- handleDateChange(event) {
116
- this.selectAllWeekDays(event.detail.date);
117
- this.value = this.input.value;
118
- this.catChange.emit();
119
- }
120
- handleWeekDays(event) {
121
- this.selectAllWeekDays(event);
122
- this.focusAllWeekDays();
123
- }
124
- selectAllWeekDays(event) {
125
- var _a, _b;
126
- const date = event instanceof Date ? event : (_a = event.detail) === null || _a === void 0 ? void 0 : _a.date;
127
- if (this.type !== 'week') {
128
- return;
129
- }
130
- if ((_b = this.input) === null || _b === void 0 ? void 0 : _b.value) {
131
- const firstDayOfWeek = dayjs(date).startOf('isoWeek');
132
- if (!firstDayOfWeek.isSame(dayjs(date).startOf('day'))) {
133
- this.datepicker.setDate(firstDayOfWeek.toDate());
134
- }
135
- else {
136
- this.addClassToAllWeekDays('selected');
137
- }
138
- }
139
- }
140
- focusAllWeekDays() {
141
- const date = dayjs(this.datepicker.picker.viewDate);
142
- if (this.type !== 'week' || !date) {
143
- return;
144
- }
145
- const firstDayOfWeek = dayjs(date).startOf('isoWeek');
146
- if (!firstDayOfWeek.isSame(dayjs(date).startOf('day'))) {
147
- this.datepicker.setFocusedDate(firstDayOfWeek.toDate());
148
- }
149
- this.addClassToAllWeekDays('focused');
91
+ return (h("cat-input", { ref: el => (this._input = el), requiredMarker: this.requiredMarker, horizontal: this.horizontal, autoComplete: this.autoComplete, clearable: this.clearable, disabled: this.disabled, hint: this.hint, icon: this.icon, iconRight: this.iconRight, identifier: this.identifier, label: this.label, labelHidden: this.labelHidden, name: this.name, placeholder: this.placeholder, textPrefix: this.textPrefix, textSuffix: this.textSuffix, readonly: this.readonly, required: this.required, value: this.value, errors: this.errors, errorUpdate: this.errorUpdate, nativeAttributes: this.nativeAttributes, onCatChange: e => {
92
+ e.stopPropagation();
93
+ this.pickr?.setDate(e.detail);
94
+ if (this.value !== (e.detail || undefined)) {
95
+ this.value = e.detail || undefined;
96
+ this.catChange.emit(this.value);
97
+ }
98
+ }, onCatFocus: e => {
99
+ e.stopPropagation();
100
+ this.catFocus.emit(e.detail);
101
+ }, onCatBlur: e => {
102
+ e.stopPropagation();
103
+ this.catBlur.emit(e.detail);
104
+ } }));
150
105
  }
151
- addClassToAllWeekDays(className) {
152
- let weekdaysCount = 7;
153
- const pickerElement = this.datepicker.pickerElement;
154
- let selected = pickerElement.querySelector(`.datepicker-cell:not(.month):not(.year).${className}`);
155
- while (weekdaysCount > 1) {
156
- if (selected) {
157
- selected = selected.nextElementSibling;
158
- selected === null || selected === void 0 ? void 0 : selected.classList.add(className);
159
- weekdaysCount--;
160
- }
161
- else {
162
- break;
163
- }
106
+ get dateFormat() {
107
+ if (this.mode === 'week') {
108
+ return 'W';
164
109
  }
165
- }
166
- onCatChange(event) {
167
- this.value = this.input.value;
168
- this.catChange.emit(event);
169
- }
170
- onCatFocus(event) {
171
- this.catFocus.emit(event);
172
- }
173
- onCatBlur(event) {
174
- this.catBlur.emit(event);
175
- }
176
- shouldHighlightAsToday(date) {
177
- const now = new Date();
178
- const isSameYear = now.getFullYear() === date.getFullYear();
179
- const isSameMonth = now.getMonth() === date.getMonth();
180
- const isSameDay = now.getDate() === date.getDate();
181
- switch (this.type) {
182
- case 'date':
183
- return isSameYear && isSameMonth && isSameDay;
184
- case 'week':
185
- return isSameYear && this.toISOWeek(now) === this.toISOWeek(date);
186
- case 'month':
187
- return isSameYear && isSameMonth;
188
- case 'year':
189
- return isSameYear;
190
- default:
191
- return false;
110
+ else if (this.mode === 'time') {
111
+ return 'H:i';
192
112
  }
193
- }
194
- // ----- Date handling
195
- get dateFormat() {
196
- const date = new Date(Date.UTC(3333, 10, 22));
197
- const dateStr = new Intl.DateTimeFormat('en-US', {
198
- year: 'numeric',
199
- month: this.type !== 'year' ? 'numeric' : undefined,
200
- day: this.type === 'date' || this.type === 'week' ? 'numeric' : undefined
201
- }).format(date);
202
- return dateStr.replace('22', 'dd').replace('11', 'mm').replace('3333', 'yyyy');
203
- }
204
- fromISOWeek(week) {
205
- if (typeof week === 'string' || typeof week === 'number') {
206
- const weekNumber = parseInt(week.toString(), 10);
207
- return isNaN(weekNumber) ? new Date() : this.fromISOWeekNumber(weekNumber);
113
+ else {
114
+ return 'Z';
208
115
  }
209
- return week;
210
- }
211
- fromISOWeekNumber(weekNumber, year = new Date().getFullYear()) {
212
- const refDate = new Date(Date.UTC(year, 0, 4)); // January 4th
213
- const diffDays = (weekNumber - 1) * 7 - (refDate.getUTCDay() || 7) + 1;
214
- const date = new Date(refDate);
215
- date.setUTCDate(date.getUTCDate() + diffDays);
216
- return date;
217
- }
218
- toISOWeek(date) {
219
- const currentDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));
220
- currentDate.setUTCDate(currentDate.getUTCDate() + 4 - (currentDate.getUTCDay() || 7));
221
- const firstDayOfYear = new Date(Date.UTC(currentDate.getUTCFullYear(), 0, 1));
222
- return Math.ceil(((currentDate.getTime() - firstDayOfYear.getTime()) / 86400000 + 1) / 7);
223
116
  }
224
117
  static get is() { return "cat-datepicker"; }
225
118
  static get encapsulation() { return "shadow"; }
@@ -358,7 +251,7 @@ export class CatDatepicker {
358
251
  "attribute": "icon",
359
252
  "reflect": false
360
253
  },
361
- "iconLeft": {
254
+ "iconRight": {
362
255
  "type": "boolean",
363
256
  "mutable": false,
364
257
  "complexType": {
@@ -370,9 +263,9 @@ export class CatDatepicker {
370
263
  "optional": false,
371
264
  "docs": {
372
265
  "tags": [],
373
- "text": "Display the icon on the left."
266
+ "text": "Display the icon on the right."
374
267
  },
375
- "attribute": "icon-left",
268
+ "attribute": "icon-right",
376
269
  "reflect": false,
377
270
  "defaultValue": "false"
378
271
  },
@@ -430,39 +323,57 @@ export class CatDatepicker {
430
323
  "defaultValue": "false"
431
324
  },
432
325
  "max": {
433
- "type": "any",
326
+ "type": "string",
434
327
  "mutable": false,
435
328
  "complexType": {
436
- "original": "number | string",
437
- "resolved": "number | string | undefined",
329
+ "original": "string",
330
+ "resolved": "string | undefined",
438
331
  "references": {}
439
332
  },
440
333
  "required": false,
441
334
  "optional": true,
442
335
  "docs": {
443
336
  "tags": [],
444
- "text": "A maximum value for date, time and numeric values."
337
+ "text": "A maximum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z."
445
338
  },
446
339
  "attribute": "max",
447
340
  "reflect": false
448
341
  },
449
342
  "min": {
450
- "type": "any",
343
+ "type": "string",
451
344
  "mutable": false,
452
345
  "complexType": {
453
- "original": "number | string",
454
- "resolved": "number | string | undefined",
346
+ "original": "string",
347
+ "resolved": "string | undefined",
455
348
  "references": {}
456
349
  },
457
350
  "required": false,
458
351
  "optional": true,
459
352
  "docs": {
460
353
  "tags": [],
461
- "text": "A minimum value for date, time and numeric values."
354
+ "text": "A minimum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z."
462
355
  },
463
356
  "attribute": "min",
464
357
  "reflect": false
465
358
  },
359
+ "mode": {
360
+ "type": "string",
361
+ "mutable": false,
362
+ "complexType": {
363
+ "original": "'date' | 'time' | 'datetime' | 'daterange' | 'week'",
364
+ "resolved": "\"date\" | \"daterange\" | \"datetime\" | \"time\" | \"week\"",
365
+ "references": {}
366
+ },
367
+ "required": false,
368
+ "optional": false,
369
+ "docs": {
370
+ "tags": [],
371
+ "text": "The mode of the datepicker, to select a date, time, both, a date range or a week number."
372
+ },
373
+ "attribute": "mode",
374
+ "reflect": false,
375
+ "defaultValue": "'date'"
376
+ },
466
377
  "name": {
467
378
  "type": "string",
468
379
  "mutable": false,
@@ -567,86 +478,23 @@ export class CatDatepicker {
567
478
  "reflect": false,
568
479
  "defaultValue": "false"
569
480
  },
570
- "format": {
571
- "type": "string",
481
+ "step": {
482
+ "type": "number",
572
483
  "mutable": false,
573
484
  "complexType": {
574
- "original": "string",
575
- "resolved": "string",
485
+ "original": "number",
486
+ "resolved": "number",
576
487
  "references": {}
577
488
  },
578
489
  "required": false,
579
490
  "optional": false,
580
491
  "docs": {
581
492
  "tags": [],
582
- "text": "The date format after picker selection."
493
+ "text": "The step size to use when changing the time."
583
494
  },
584
- "attribute": "format",
495
+ "attribute": "step",
585
496
  "reflect": false,
586
- "defaultValue": "'mm/dd/yyyy'"
587
- },
588
- "weekNumbers": {
589
- "type": "boolean",
590
- "mutable": false,
591
- "complexType": {
592
- "original": "boolean",
593
- "resolved": "boolean",
594
- "references": {}
595
- },
596
- "required": false,
597
- "optional": false,
598
- "docs": {
599
- "tags": [],
600
- "text": "Whether the picker should show the week numbers."
601
- },
602
- "attribute": "week-numbers",
603
- "reflect": false,
604
- "defaultValue": "true"
605
- },
606
- "type": {
607
- "type": "string",
608
- "mutable": false,
609
- "complexType": {
610
- "original": "DatepickerType",
611
- "resolved": "\"date\" | \"month\" | \"week\" | \"year\"",
612
- "references": {
613
- "DatepickerType": {
614
- "location": "import",
615
- "path": "./datepicker-type"
616
- }
617
- }
618
- },
619
- "required": false,
620
- "optional": false,
621
- "docs": {
622
- "tags": [],
623
- "text": "Type of datepicker ('date', 'week', 'month', 'year')."
624
- },
625
- "attribute": "type",
626
- "reflect": false,
627
- "defaultValue": "'date'"
628
- },
629
- "datesDisabled": {
630
- "type": "unknown",
631
- "mutable": false,
632
- "complexType": {
633
- "original": "Array<Date> | Array<string>",
634
- "resolved": "Date[] | string[]",
635
- "references": {
636
- "Array": {
637
- "location": "global"
638
- },
639
- "Date": {
640
- "location": "global"
641
- }
642
- }
643
- },
644
- "required": true,
645
- "optional": false,
646
- "docs": {
647
- "tags": [],
648
- "text": "Dates that should be disabled inside the picker"
649
- }
497
+ "defaultValue": "5"
650
498
  },
651
499
  "value": {
652
500
  "type": "string",
@@ -660,7 +508,7 @@ export class CatDatepicker {
660
508
  "optional": true,
661
509
  "docs": {
662
510
  "tags": [],
663
- "text": "The value of the control."
511
+ "text": "The value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z or as a week number string."
664
512
  },
665
513
  "attribute": "value",
666
514
  "reflect": false
@@ -722,12 +570,6 @@ export class CatDatepicker {
722
570
  }
723
571
  };
724
572
  }
725
- static get states() {
726
- return {
727
- "hasSlottedLabel": {},
728
- "hasSlottedHint": {}
729
- };
730
- }
731
573
  static get events() {
732
574
  return [{
733
575
  "method": "catChange",
@@ -740,13 +582,9 @@ export class CatDatepicker {
740
582
  "text": "Emitted when the value is changed."
741
583
  },
742
584
  "complexType": {
743
- "original": "InputEvent",
744
- "resolved": "InputEvent",
745
- "references": {
746
- "InputEvent": {
747
- "location": "global"
748
- }
749
- }
585
+ "original": "string",
586
+ "resolved": "string",
587
+ "references": {}
750
588
  }
751
589
  }, {
752
590
  "method": "catFocus",
@@ -811,7 +649,7 @@ export class CatDatepicker {
811
649
  "return": "Promise<void>"
812
650
  },
813
651
  "docs": {
814
- "text": "Programmatically move focus to the input. Use this method instead of\n`input.focus()`.",
652
+ "text": "Programmatically move focus to the datepicker. Use this method instead of\n`input.focus()`.",
815
653
  "tags": [{
816
654
  "name": "param",
817
655
  "text": "options An optional object providing options to control aspects of\nthe focusing process."
@@ -830,44 +668,11 @@ export class CatDatepicker {
830
668
  "return": "Promise<void>"
831
669
  },
832
670
  "docs": {
833
- "text": "Programmatically remove focus from the input. Use this method instead of\n`input.blur()`.",
834
- "tags": []
835
- }
836
- },
837
- "doClick": {
838
- "complexType": {
839
- "signature": "() => Promise<void>",
840
- "parameters": [],
841
- "references": {
842
- "Promise": {
843
- "location": "global"
844
- }
845
- },
846
- "return": "Promise<void>"
847
- },
848
- "docs": {
849
- "text": "Programmatically simulate a click on the input.",
850
- "tags": []
851
- }
852
- },
853
- "clear": {
854
- "complexType": {
855
- "signature": "() => Promise<void>",
856
- "parameters": [],
857
- "references": {
858
- "Promise": {
859
- "location": "global"
860
- }
861
- },
862
- "return": "Promise<void>"
863
- },
864
- "docs": {
865
- "text": "Clear the input.",
671
+ "text": "Programmatically remove focus from the datepicker. Use this method instead of\n`input.blur()`.",
866
672
  "tags": []
867
673
  }
868
674
  }
869
675
  };
870
676
  }
871
- static get elementRef() { return "hostElement"; }
872
677
  }
873
678
  //# sourceMappingURL=cat-datepicker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cat-datepicker.js","sourceRoot":"","sources":["../../../src/components/cat-datepicker/cat-datepicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Element, Event, EventEmitter, Host, Method, Prop, State, h } from '@stencil/core';\nimport log from 'loglevel';\nimport { ErrorMap } from '../cat-form-hint/cat-form-hint';\nimport { DatepickerType } from './datepicker-type';\nimport dayjs from './dayjs.config';\nimport Datepicker, { getDatepickerOptions } from './vanillajs-datepicker.config';\n\n/**\n * Inputs are used to allow users to provide text input when the expected input\n * is short. As well as plain text, Input supports various types of text,\n * including passwords and numbers.\n *\n * @slot hint - Optional hint element to be displayed with the input.\n * @slot label - The slotted label. If both the label property and the label slot are present, only the label slot will be displayed.\n * @part label - The label content.\n */\n@Component({\n tag: 'cat-datepicker',\n styleUrl: 'cat-datepicker.scss',\n shadow: true\n})\nexport class CatDatepicker {\n private input!: HTMLInputElement;\n private catInput!: HTMLCatInputElement;\n private datepicker!: any;\n\n @Element() hostElement!: HTMLElement;\n\n @State() hasSlottedLabel = false;\n\n @State() hasSlottedHint = false;\n\n /**\n * Whether the label need a marker to shown if the input is required or optional.\n */\n @Prop() requiredMarker: 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!' = 'optional';\n\n /**\n * Whether the label is on top or left.\n */\n @Prop() horizontal = false;\n\n /**\n * Hint for form autofill feature.\n */\n @Prop() autoComplete?: string;\n\n /**\n * Whether the input should show a clear button.\n */\n @Prop() clearable = false;\n\n /**\n * Whether the input is disabled.\n */\n @Prop() disabled = false;\n\n /**\n * Optional hint text(s) to be displayed with the input.\n */\n @Prop() hint?: string | string[];\n\n /**\n * The name of an icon to be displayed in the input.\n */\n @Prop() icon?: string;\n\n /**\n * Display the icon on the left.\n */\n @Prop() iconLeft = false;\n\n /**\n * A unique identifier for the input.\n */\n @Prop() identifier?: string;\n\n /**\n * The label for the input.\n */\n @Prop() label = '';\n\n /**\n * Visually hide the label, but still show it to assistive technologies like screen readers.\n */\n @Prop() labelHidden = false;\n\n /**\n * A maximum value for date, time and numeric values.\n */\n @Prop() max?: number | string;\n\n /**\n * A minimum value for date, time and numeric values.\n */\n @Prop() min?: number | string;\n\n /**\n * The name of the form control. Submitted with the form as part of a name/value pair.\n */\n @Prop() name?: string;\n\n /**\n * The placeholder text to display within the input.\n */\n @Prop() placeholder?: string;\n\n /**\n * A textual prefix to be displayed in the input.\n */\n @Prop() textPrefix?: string;\n\n /**\n * A textual suffix to be displayed in the input.\n */\n @Prop() textSuffix?: string;\n\n /**\n * The value is not editable.\n */\n @Prop() readonly = false;\n\n /**\n * A value is required or must be check for the form to be submittable.\n */\n @Prop() required = false;\n\n /**\n * The date format after picker selection.\n */\n @Prop() format = 'mm/dd/yyyy';\n\n /**\n * Whether the picker should show the week numbers.\n */\n @Prop() weekNumbers = true;\n\n /**\n * Type of datepicker ('date', 'week', 'month', 'year').\n */\n @Prop() type: DatepickerType = 'date';\n\n /**\n * Dates that should be disabled inside the picker\n */\n @Prop() datesDisabled!: Array<Date> | Array<string>;\n\n /**\n * The value of the control.\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * The validation errors for this input. Will render a hint under the input\n * with the translated error message(s) `error.${key}`. If an object is\n * passed, the keys will be used as error keys and the values translation\n * parameters.\n * If the value is `true`, the input will be marked as invalid without any\n * hints under the input.\n */\n @Prop() errors?: boolean | string[] | ErrorMap;\n\n /**\n * Fine-grained control over when the errors are shown. Can be `false` to\n * never show errors, `true` to show errors on blur, or a number to show\n * errors on change with the given delay in milliseconds.\n */\n @Prop() errorUpdate: boolean | number = 0;\n\n /**\n * Attributes that will be added to the native HTML input element.\n */\n @Prop() nativeAttributes?: { [key: string]: string };\n\n /**\n * Emitted when the value is changed.\n */\n @Event() catChange!: EventEmitter<InputEvent>;\n\n /**\n * Emitted when the input received focus.\n */\n @Event() catFocus!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() catBlur!: EventEmitter<FocusEvent>;\n\n /**\n * Programmatically move focus to the input. Use this method instead of\n * `input.focus()`.\n *\n * @param options An optional object providing options to control aspects of\n * the focusing process.\n */\n @Method()\n async doFocus(options?: FocusOptions): Promise<void> {\n this.input.focus(options);\n }\n\n /**\n * Programmatically remove focus from the input. Use this method instead of\n * `input.blur()`.\n */\n @Method()\n async doBlur(): Promise<void> {\n this.input.blur();\n }\n\n /**\n * Programmatically simulate a click on the input.\n */\n @Method()\n async doClick(): Promise<void> {\n this.input.click();\n }\n\n /**\n * Clear the input.\n */\n @Method()\n async clear(): Promise<void> {\n this.value = '';\n }\n\n componentWillRender(): void {\n this.hasSlottedLabel = !!this.hostElement.querySelector('[slot=\"label\"]');\n this.hasSlottedHint = !!this.hostElement.querySelector('[slot=\"hint\"]');\n }\n\n render() {\n return (\n <Host>\n <cat-input\n ref={el => (this.catInput = el as HTMLCatInputElement)}\n requiredMarker={this.requiredMarker}\n horizontal={this.horizontal}\n autoComplete={this.autoComplete}\n clearable={this.clearable}\n disabled={this.disabled}\n hint={this.hint}\n icon={this.icon}\n iconRight={!this.iconLeft}\n identifier={this.identifier}\n label={this.label}\n labelHidden={this.labelHidden}\n name={this.name}\n placeholder={this.placeholder}\n textPrefix={this.textPrefix}\n textSuffix={this.textSuffix}\n readonly={this.readonly}\n required={this.required}\n value={this.value}\n errors={this.errors}\n errorUpdate={this.errorUpdate}\n nativeAttributes={this.nativeAttributes}\n onCatChange={event => this.onCatChange(event)}\n onCatFocus={event => this.onCatFocus(event.detail)}\n onCatBlur={event => this.onCatBlur(event.detail)}\n >\n {this.hasSlottedLabel && (\n <span slot=\"label\">\n <slot name=\"label\"></slot>\n </span>\n )}\n {this.hasSlottedHint && (\n <span slot=\"hint\">\n <slot name=\"hint\"></slot>\n </span>\n )}\n </cat-input>\n </Host>\n );\n }\n\n componentDidLoad() {\n if (this.hostElement) {\n const inputWrapper = this.catInput.shadowRoot?.querySelector('.input-wrapper') as HTMLElement;\n const inputElement = inputWrapper?.querySelector('input');\n\n if (inputElement) {\n this.input = inputElement;\n } else {\n log.error('[CatInput] Missing input element', this);\n return;\n }\n\n this.datepicker = new Datepicker(inputElement, {\n ...getDatepickerOptions(this.type, this.value),\n container: inputWrapper,\n maxDate: this.max,\n minDate: this.min,\n datesDisabled: this.datesDisabled,\n prevArrow: '←',\n nextArrow: '→',\n weekNumbers: this.weekNumbers ? 1 : 0,\n format: {\n toValue: (dateStr: string | Date | number): Date =>\n this.type === 'week' ? this.fromISOWeek(dateStr) : Datepicker.parseDate(dateStr, this.dateFormat),\n toDisplay: (date: Date): string =>\n this.type === 'week' ? this.toISOWeek(date).toString() : Datepicker.formatDate(date, this.dateFormat)\n },\n beforeShowDay: (date: Date) => (this.shouldHighlightAsToday(date) ? 'today' : null),\n beforeShowMonth: (date: Date) => (this.shouldHighlightAsToday(date) ? 'today' : null),\n beforeShowYear: (date: Date) => (this.shouldHighlightAsToday(date) ? 'today' : null)\n });\n\n if (this.type === 'week') {\n this.datepicker.pickerElement.classList.add('weekly');\n }\n\n this.input.addEventListener('show', this.handleWeekDays.bind(this));\n this.input.addEventListener('changeDate', this.handleDateChange.bind(this) as EventListener);\n this.input.addEventListener('changeMonth', this.handleWeekDays.bind(this));\n this.input.addEventListener('changeView', this.handleWeekDays.bind(this));\n this.input.addEventListener('keydown', this.focusAllWeekDays.bind(this));\n }\n }\n\n disconnectedCallback() {\n this.input.removeEventListener('show', this.handleWeekDays.bind(this));\n this.input.removeEventListener('changeDate', this.handleDateChange.bind(this) as EventListener);\n this.input.removeEventListener('changeMonth', this.handleWeekDays.bind(this));\n this.input.removeEventListener('changeView', this.handleWeekDays.bind(this));\n this.input.removeEventListener('keydown', this.focusAllWeekDays.bind(this));\n }\n\n private handleDateChange(event: CustomEvent) {\n this.selectAllWeekDays(event.detail.date);\n this.value = this.input.value;\n this.catChange.emit();\n }\n\n private handleWeekDays(event: Event | Date) {\n this.selectAllWeekDays(event);\n this.focusAllWeekDays();\n }\n\n private selectAllWeekDays(event: Event | Date) {\n const date = event instanceof Date ? event : (event as CustomEvent).detail?.date;\n if (this.type !== 'week') {\n return;\n }\n if (this.input?.value) {\n const firstDayOfWeek = dayjs(date).startOf('isoWeek');\n\n if (!firstDayOfWeek.isSame(dayjs(date).startOf('day'))) {\n this.datepicker.setDate(firstDayOfWeek.toDate());\n } else {\n this.addClassToAllWeekDays('selected');\n }\n }\n }\n\n private focusAllWeekDays() {\n const date = dayjs(this.datepicker.picker.viewDate);\n if (this.type !== 'week' || !date) {\n return;\n }\n\n const firstDayOfWeek = dayjs(date).startOf('isoWeek');\n\n if (!firstDayOfWeek.isSame(dayjs(date).startOf('day'))) {\n this.datepicker.setFocusedDate(firstDayOfWeek.toDate());\n }\n\n this.addClassToAllWeekDays('focused');\n }\n\n private addClassToAllWeekDays(className: string) {\n let weekdaysCount = 7;\n const pickerElement = this.datepicker.pickerElement as HTMLElement;\n let selected = pickerElement.querySelector(`.datepicker-cell:not(.month):not(.year).${className}`);\n while (weekdaysCount > 1) {\n if (selected) {\n selected = selected.nextElementSibling;\n selected?.classList.add(className);\n weekdaysCount--;\n } else {\n break;\n }\n }\n }\n\n private onCatChange(event: unknown) {\n this.value = this.input.value;\n this.catChange.emit(event as InputEvent);\n }\n\n private onCatFocus(event: FocusEvent) {\n this.catFocus.emit(event);\n }\n\n private onCatBlur(event: FocusEvent) {\n this.catBlur.emit(event);\n }\n\n private shouldHighlightAsToday(date: Date) {\n const now = new Date();\n const isSameYear = now.getFullYear() === date.getFullYear();\n const isSameMonth = now.getMonth() === date.getMonth();\n const isSameDay = now.getDate() === date.getDate();\n switch (this.type) {\n case 'date':\n return isSameYear && isSameMonth && isSameDay;\n case 'week':\n return isSameYear && this.toISOWeek(now) === this.toISOWeek(date);\n case 'month':\n return isSameYear && isSameMonth;\n case 'year':\n return isSameYear;\n default:\n return false;\n }\n }\n\n // ----- Date handling\n\n private get dateFormat(): string {\n const date = new Date(Date.UTC(3333, 10, 22));\n const dateStr = new Intl.DateTimeFormat('en-US', {\n year: 'numeric',\n month: this.type !== 'year' ? 'numeric' : undefined,\n day: this.type === 'date' || this.type === 'week' ? 'numeric' : undefined\n }).format(date);\n return dateStr.replace('22', 'dd').replace('11', 'mm').replace('3333', 'yyyy');\n }\n\n private fromISOWeek(week: string | Date | number): Date {\n if (typeof week === 'string' || typeof week === 'number') {\n const weekNumber = parseInt(week.toString(), 10);\n return isNaN(weekNumber) ? new Date() : this.fromISOWeekNumber(weekNumber);\n }\n return week;\n }\n\n private fromISOWeekNumber(weekNumber: number, year = new Date().getFullYear()): Date {\n const refDate = new Date(Date.UTC(year, 0, 4)); // January 4th\n const diffDays = (weekNumber - 1) * 7 - (refDate.getUTCDay() || 7) + 1;\n const date = new Date(refDate);\n date.setUTCDate(date.getUTCDate() + diffDays);\n return date;\n }\n\n private toISOWeek(date: Date): number {\n const currentDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate()));\n currentDate.setUTCDate(currentDate.getUTCDate() + 4 - (currentDate.getUTCDay() || 7));\n const firstDayOfYear = new Date(Date.UTC(currentDate.getUTCFullYear(), 0, 1));\n return Math.ceil(((currentDate.getTime() - firstDayOfYear.getTime()) / 86400000 + 1) / 7);\n }\n}\n"]}
1
+ {"version":3,"file":"cat-datepicker.js","sourceRoot":"","sources":["../../../src/components/cat-datepicker/cat-datepicker.tsx"],"names":[],"mappings":"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","sourcesContent":["import { Component, Event, Method, EventEmitter, Prop, h } from '@stencil/core';\nimport flatpickr from 'flatpickr';\nimport weekSelectPlugin from 'flatpickr/dist/plugins/weekSelect/weekSelect';\nimport { ErrorMap } from '../cat-form-hint/cat-form-hint';\nimport { catI18nRegistry as i18n } from '../cat-i18n/cat-i18n-registry';\nimport { getFormat } from './cat-datepicker.config';\nimport { getLocale } from './cat-datepicker.locale';\n\n@Component({\n tag: 'cat-datepicker',\n styleUrl: 'cat-datepicker.scss',\n shadow: true\n})\nexport class CatDatepickerFlat {\n private pickr?: flatpickr.Instance;\n private _input?: HTMLCatInputElement;\n private get input(): HTMLInputElement | undefined {\n return this._input?.shadowRoot?.querySelector('input') ?? undefined;\n }\n\n /**\n * Whether the label need a marker to shown if the input is required or optional.\n */\n @Prop() requiredMarker: 'none' | 'required' | 'optional' | 'none!' | 'optional!' | 'required!' = 'optional';\n\n /**\n * Whether the label is on top or left.\n */\n @Prop() horizontal = false;\n\n /**\n * Hint for form autofill feature.\n */\n @Prop() autoComplete?: string;\n\n /**\n * Whether the input should show a clear button.\n */\n @Prop() clearable = false;\n\n /**\n * Whether the input is disabled.\n */\n @Prop() disabled = false;\n\n /**\n * Optional hint text(s) to be displayed with the input.\n */\n @Prop() hint?: string | string[];\n\n /**\n * The name of an icon to be displayed in the input.\n */\n @Prop() icon?: string;\n\n /**\n * Display the icon on the right.\n */\n @Prop() iconRight = false;\n\n /**\n * A unique identifier for the input.\n */\n @Prop() identifier?: string;\n\n /**\n * The label for the input.\n */\n @Prop() label = '';\n\n /**\n * Visually hide the label, but still show it to assistive technologies like screen readers.\n */\n @Prop() labelHidden = false;\n\n /**\n * A maximum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z.\n */\n @Prop() max?: string;\n\n /**\n * A minimum value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z.\n */\n @Prop() min?: string;\n\n /**\n * The mode of the datepicker, to select a date, time, both, a date range or a week number.\n */\n @Prop() mode: 'date' | 'time' | 'datetime' | 'daterange' | 'week' = 'date';\n\n /**\n * The name of the form control. Submitted with the form as part of a name/value pair.\n */\n @Prop() name?: string;\n\n /**\n * The placeholder text to display within the input.\n */\n @Prop() placeholder?: string;\n\n /**\n * A textual prefix to be displayed in the input.\n */\n @Prop() textPrefix?: string;\n\n /**\n * A textual suffix to be displayed in the input.\n */\n @Prop() textSuffix?: string;\n\n /**\n * The value is not editable.\n */\n @Prop() readonly = false;\n\n /**\n * A value is required or must be check for the form to be submittable.\n */\n @Prop() required = false;\n\n /**\n * The step size to use when changing the time.\n */\n @Prop() step = 5;\n\n /**\n * The value as ISO Date string, e.g. 2017-03-04T01:23:43.000Z or as a week number string.\n */\n @Prop({ mutable: true }) value?: string;\n\n /**\n * The validation errors for this input. Will render a hint under the input\n * with the translated error message(s) `error.${key}`. If an object is\n * passed, the keys will be used as error keys and the values translation\n * parameters.\n * If the value is `true`, the input will be marked as invalid without any\n * hints under the input.\n */\n @Prop() errors?: boolean | string[] | ErrorMap;\n\n /**\n * Fine-grained control over when the errors are shown. Can be `false` to\n * never show errors, `true` to show errors on blur, or a number to show\n * errors on change with the given delay in milliseconds.\n */\n @Prop() errorUpdate: boolean | number = 0;\n\n /**\n * Attributes that will be added to the native HTML input element.\n */\n @Prop() nativeAttributes?: { [key: string]: string };\n\n /**\n * Emitted when the value is changed.\n */\n @Event() catChange!: EventEmitter<string>;\n\n /**\n * Emitted when the input received focus.\n */\n @Event() catFocus!: EventEmitter<FocusEvent>;\n\n /**\n * Emitted when the input loses focus.\n */\n @Event() catBlur!: EventEmitter<FocusEvent>;\n\n componentDidLoad() {\n const input = this.input;\n if (input) {\n const locale = getLocale(i18n.getLocale());\n const format = getFormat(i18n.getLocale(), this.mode);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const plugins = this.mode === 'week' ? [new (weekSelectPlugin as any)({})] : [];\n this.pickr = flatpickr(input, {\n locale,\n plugins,\n altInput: true,\n prevArrow: '←',\n nextArrow: '→',\n dateFormat: this.dateFormat,\n altFormat: format,\n ariaDateFormat: format,\n mode: this.mode === 'daterange' ? 'range' : 'single',\n minDate: this.min,\n maxDate: this.max,\n enableTime: this.mode === 'time' || this.mode === 'datetime',\n noCalendar: this.mode === 'time',\n weekNumbers: true,\n minuteIncrement: this.step,\n onChange: (dates, dateStr, flatpickr) => {\n if (this.mode === 'week') {\n this.value = dates[0] ? flatpickr.config.getWeek(dates[0]).toString() : undefined;\n } else {\n this.value = dateStr;\n }\n this.catChange.emit(this.value);\n }\n });\n }\n }\n\n /**\n * Programmatically move focus to the datepicker. Use this method instead of\n * `input.focus()`.\n *\n * @param options An optional object providing options to control aspects of\n * the focusing process.\n */\n @Method()\n async doFocus(options?: FocusOptions): Promise<void> {\n this._input?.doFocus(options);\n }\n\n /**\n * Programmatically remove focus from the datepicker. Use this method instead of\n * `input.blur()`.\n */\n @Method()\n async doBlur(): Promise<void> {\n this._input?.doBlur();\n }\n\n render() {\n return (\n <cat-input\n ref={el => (this._input = el)}\n requiredMarker={this.requiredMarker}\n horizontal={this.horizontal}\n autoComplete={this.autoComplete}\n clearable={this.clearable}\n disabled={this.disabled}\n hint={this.hint}\n icon={this.icon}\n iconRight={this.iconRight}\n identifier={this.identifier}\n label={this.label}\n labelHidden={this.labelHidden}\n name={this.name}\n placeholder={this.placeholder}\n textPrefix={this.textPrefix}\n textSuffix={this.textSuffix}\n readonly={this.readonly}\n required={this.required}\n value={this.value}\n errors={this.errors}\n errorUpdate={this.errorUpdate}\n nativeAttributes={this.nativeAttributes}\n onCatChange={e => {\n e.stopPropagation();\n this.pickr?.setDate(e.detail);\n if (this.value !== (e.detail || undefined)) {\n this.value = e.detail || undefined;\n this.catChange.emit(this.value);\n }\n }}\n onCatFocus={e => {\n e.stopPropagation();\n this.catFocus.emit(e.detail);\n }}\n onCatBlur={e => {\n e.stopPropagation();\n this.catBlur.emit(e.detail);\n }}\n ></cat-input>\n );\n }\n\n private get dateFormat(): string {\n if (this.mode === 'week') {\n return 'W';\n } else if (this.mode === 'time') {\n return 'H:i';\n } else {\n return 'Z';\n }\n }\n}\n"]}