@aquera/nile-elements 0.0.3-8 → 0.0.4-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 (124) hide show
  1. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/index.d.ts +1 -0
  2. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/index.js +1 -0
  3. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/index.js.map +1 -1
  4. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/index.d.ts +1 -0
  5. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/index.js +2 -0
  6. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/index.js.map +1 -0
  7. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/nile-calendar.css.d.ts +12 -0
  8. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/nile-calendar.css.js +186 -0
  9. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/nile-calendar.css.js.map +1 -0
  10. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/nile-calendar.d.ts +70 -0
  11. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/nile-calendar.js +477 -0
  12. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-calendar/nile-calendar.js.map +1 -0
  13. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-date-picker/nile-date-picker.css.js +1 -1
  14. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-date-picker/nile-date-picker.css.js.map +1 -1
  15. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-date-picker/nile-date-picker.d.ts +1 -17
  16. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-date-picker/nile-date-picker.js +13 -317
  17. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-date-picker/nile-date-picker.js.map +1 -1
  18. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
  19. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.js +1 -0
  20. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/index.js.map +1 -1
  21. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/virtualservergroup.d.ts +5 -0
  22. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/virtualservergroup.js +5 -0
  23. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-icon/icons/svg/virtualservergroup.js.map +1 -0
  24. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.js +1 -1
  25. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/src/nile-select/nile-select.js.map +1 -1
  26. package/.rollup.cache/opt/atlassian/pipelines/agent/build/packages/nile-elements/dist/tsconfig.tsbuildinfo +1 -1
  27. package/demo/filenames.txt +1 -1
  28. package/dist/index.cjs.js +1 -1
  29. package/dist/index.esm.js +1 -1
  30. package/dist/index.iife.js +275 -109
  31. package/dist/nile-button/index.cjs.js +1 -1
  32. package/dist/nile-button/index.esm.js +1 -1
  33. package/dist/nile-button/nile-button.cjs.js +1 -1
  34. package/dist/nile-button/nile-button.cjs.js.map +1 -1
  35. package/dist/nile-button/nile-button.esm.js +1 -1
  36. package/dist/nile-calendar/index.cjs.js +2 -0
  37. package/dist/nile-calendar/index.cjs.js.map +1 -0
  38. package/dist/nile-calendar/index.esm.js +1 -0
  39. package/dist/nile-calendar/nile-calendar.cjs.js +2 -0
  40. package/dist/nile-calendar/nile-calendar.cjs.js.map +1 -0
  41. package/dist/nile-calendar/nile-calendar.css.cjs.js +2 -0
  42. package/dist/nile-calendar/nile-calendar.css.cjs.js.map +1 -0
  43. package/dist/nile-calendar/nile-calendar.css.esm.js +174 -0
  44. package/dist/nile-calendar/nile-calendar.esm.js +68 -0
  45. package/dist/nile-date-picker/nile-date-picker.cjs.js +1 -1
  46. package/dist/nile-date-picker/nile-date-picker.cjs.js.map +1 -1
  47. package/dist/nile-date-picker/nile-date-picker.css.cjs.js +1 -1
  48. package/dist/nile-date-picker/nile-date-picker.css.cjs.js.map +1 -1
  49. package/dist/nile-date-picker/nile-date-picker.css.esm.js +1 -1
  50. package/dist/nile-date-picker/nile-date-picker.esm.js +9 -83
  51. package/dist/nile-icon/icons/svg/index.cjs.js +1 -1
  52. package/dist/nile-icon/icons/svg/index.esm.js +1 -1
  53. package/dist/nile-icon/icons/svg/virtualservergroup.cjs.js +2 -0
  54. package/dist/nile-icon/icons/svg/virtualservergroup.cjs.js.map +1 -0
  55. package/dist/nile-icon/icons/svg/virtualservergroup.esm.js +1 -0
  56. package/dist/nile-icon/index.cjs.js +1 -1
  57. package/dist/nile-icon/index.cjs.js.map +1 -1
  58. package/dist/nile-icon/index.esm.js +1 -1
  59. package/dist/nile-icon-button/index.cjs.js +1 -1
  60. package/dist/nile-icon-button/index.esm.js +1 -1
  61. package/dist/nile-icon-button/nile-icon-button.cjs.js +1 -1
  62. package/dist/nile-icon-button/nile-icon-button.cjs.js.map +1 -1
  63. package/dist/nile-icon-button/nile-icon-button.esm.js +1 -1
  64. package/dist/nile-input/index.cjs.js +1 -1
  65. package/dist/nile-input/index.esm.js +1 -1
  66. package/dist/nile-input/nile-input.cjs.js +1 -1
  67. package/dist/nile-input/nile-input.cjs.js.map +1 -1
  68. package/dist/nile-input/nile-input.esm.js +1 -1
  69. package/dist/nile-menu-item/index.cjs.js +1 -1
  70. package/dist/nile-menu-item/index.esm.js +1 -1
  71. package/dist/nile-menu-item/nile-menu-item.cjs.js +1 -1
  72. package/dist/nile-menu-item/nile-menu-item.cjs.js.map +1 -1
  73. package/dist/nile-menu-item/nile-menu-item.esm.js +1 -1
  74. package/dist/nile-option/index.cjs.js +1 -1
  75. package/dist/nile-option/index.esm.js +1 -1
  76. package/dist/nile-option/nile-option.cjs.js +1 -1
  77. package/dist/nile-option/nile-option.cjs.js.map +1 -1
  78. package/dist/nile-option/nile-option.esm.js +1 -1
  79. package/dist/nile-select/index.cjs.js +1 -1
  80. package/dist/nile-select/index.esm.js +1 -1
  81. package/dist/nile-select/nile-select.cjs.js +1 -1
  82. package/dist/nile-select/nile-select.cjs.js.map +1 -1
  83. package/dist/nile-select/nile-select.esm.js +1 -1
  84. package/dist/nile-tag/index.cjs.js +1 -1
  85. package/dist/nile-tag/index.esm.js +1 -1
  86. package/dist/nile-tag/nile-tag.cjs.js +1 -1
  87. package/dist/nile-tag/nile-tag.cjs.js.map +1 -1
  88. package/dist/nile-tag/nile-tag.esm.js +1 -1
  89. package/dist/src/index.d.ts +1 -0
  90. package/dist/src/index.js +1 -0
  91. package/dist/src/index.js.map +1 -1
  92. package/dist/src/nile-calendar/index.d.ts +1 -0
  93. package/dist/src/nile-calendar/index.js +2 -0
  94. package/dist/src/nile-calendar/index.js.map +1 -0
  95. package/dist/src/nile-calendar/nile-calendar.css.d.ts +12 -0
  96. package/dist/src/nile-calendar/nile-calendar.css.js +186 -0
  97. package/dist/src/nile-calendar/nile-calendar.css.js.map +1 -0
  98. package/dist/src/nile-calendar/nile-calendar.d.ts +70 -0
  99. package/dist/src/nile-calendar/nile-calendar.js +477 -0
  100. package/dist/src/nile-calendar/nile-calendar.js.map +1 -0
  101. package/dist/src/nile-date-picker/nile-date-picker.css.js +1 -1
  102. package/dist/src/nile-date-picker/nile-date-picker.css.js.map +1 -1
  103. package/dist/src/nile-date-picker/nile-date-picker.d.ts +1 -17
  104. package/dist/src/nile-date-picker/nile-date-picker.js +13 -317
  105. package/dist/src/nile-date-picker/nile-date-picker.js.map +1 -1
  106. package/dist/src/nile-icon/icons/svg/index.d.ts +1 -0
  107. package/dist/src/nile-icon/icons/svg/index.js +1 -0
  108. package/dist/src/nile-icon/icons/svg/index.js.map +1 -1
  109. package/dist/src/nile-icon/icons/svg/virtualservergroup.d.ts +5 -0
  110. package/dist/src/nile-icon/icons/svg/virtualservergroup.js +5 -0
  111. package/dist/src/nile-icon/icons/svg/virtualservergroup.js.map +1 -0
  112. package/dist/src/nile-select/nile-select.js +1 -1
  113. package/dist/src/nile-select/nile-select.js.map +1 -1
  114. package/dist/tsconfig.tsbuildinfo +1 -1
  115. package/package.json +1 -1
  116. package/src/index.ts +1 -0
  117. package/src/nile-calendar/index.ts +1 -0
  118. package/src/nile-calendar/nile-calendar.css.ts +188 -0
  119. package/src/nile-calendar/nile-calendar.ts +571 -0
  120. package/src/nile-date-picker/nile-date-picker.css.ts +1 -1
  121. package/src/nile-date-picker/nile-date-picker.ts +14 -381
  122. package/src/nile-icon/icons/svg/index.ts +1 -0
  123. package/src/nile-icon/icons/svg/virtualservergroup.ts +5 -0
  124. package/src/nile-select/nile-select.ts +1 -1
@@ -0,0 +1,477 @@
1
+ /**
2
+ * Copyright Aquera Inc 2023
3
+ *
4
+ * This source code is licensed under the BSD-3-Clause license found in the
5
+ * LICENSE file in the root directory of this source tree.
6
+ */
7
+ import { __decorate } from "tslib";
8
+ import { html, property, } from 'lit-element';
9
+ import { customElement } from 'lit/decorators.js';
10
+ import { styles } from './nile-calendar.css';
11
+ import { query } from 'lit/decorators.js';
12
+ import { watch } from '../internal/watch';
13
+ import NileElement from '../internal/nile-element';
14
+ import '../nile-popup';
15
+ /**
16
+ * Nile icon component.
17
+ *
18
+ * @tag nile-calendar
19
+ *
20
+ */
21
+ let NileCalendar = class NileCalendar extends NileElement {
22
+ constructor() {
23
+ super(...arguments);
24
+ this.currentMonth = new Date().getMonth();
25
+ this.currentYear = new Date().getFullYear();
26
+ this.dropDownOpened = false;
27
+ this.valueAttribute = null;
28
+ this.formattedDate = null;
29
+ this.startDate = null;
30
+ this.endDate = null;
31
+ this.isSelectingStart = true; // flag to indicate what we're selecting
32
+ this.range = false;
33
+ }
34
+ /**
35
+ * The styles for NileCalendar
36
+ * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`
37
+ */
38
+ static get styles() {
39
+ return [styles];
40
+ }
41
+ valueChanged() {
42
+ if (this.range && this.value) {
43
+ this.rangeValue = this.value;
44
+ this.value = null;
45
+ return;
46
+ }
47
+ if (this.value && !isNaN(this.value.getTime())) {
48
+ const offset = this.value.getTimezoneOffset();
49
+ const localDate = new Date(this.value.getTime() - offset * 60 * 1000);
50
+ if (!isNaN(localDate.getTime())) {
51
+ this.valueAttribute = localDate.toISOString().split('T')[0];
52
+ this.formattedDate = `${String(localDate.getDate()).padStart(2, '0')}/${String(localDate.getMonth() + 1).padStart(2, '0')}/${localDate.getFullYear()}`;
53
+ }
54
+ }
55
+ }
56
+ updated(changedProperties) {
57
+ super.updated(changedProperties);
58
+ if (changedProperties.has('valueAttribute')) {
59
+ const date = new Date(this.valueAttribute || '');
60
+ if (!isNaN(date.getTime())) {
61
+ const offset = date.getTimezoneOffset();
62
+ this.value = new Date(date.getTime() - offset * 60 * 1000);
63
+ this.currentMonth = this.value.getMonth();
64
+ this.currentYear = this.value.getFullYear();
65
+ }
66
+ }
67
+ }
68
+ static get observedAttributes() {
69
+ return ['value', 'range'];
70
+ }
71
+ attributeChangedCallback(name, oldValue, newValue) {
72
+ if (name === 'value') {
73
+ this.valueAttribute = newValue;
74
+ this.initializeValue();
75
+ }
76
+ else if (name === 'range') {
77
+ this.range = newValue !== null;
78
+ }
79
+ }
80
+ initializeValue() {
81
+ if (this.range) {
82
+ try {
83
+ const rangeValue = JSON.parse(this.valueAttribute || '');
84
+ this.startDate = new Date(rangeValue.startDate);
85
+ this.endDate = new Date(rangeValue.endDate);
86
+ // Convert to local time
87
+ this.startDate = new Date(this.startDate.getTime());
88
+ this.endDate = new Date(this.endDate.getTime());
89
+ this.rangeValue = {
90
+ startDate: this.startDate,
91
+ endDate: this.endDate,
92
+ };
93
+ this.value = null;
94
+ }
95
+ catch (e) {
96
+ // console.error('Invalid range value');
97
+ }
98
+ }
99
+ else {
100
+ if (this.valueAttribute) {
101
+ let date;
102
+ date = new Date(this.valueAttribute);
103
+ date = new Date(date.getTime() - date.getTimezoneOffset() * 60000);
104
+ if (!isNaN(date.getTime())) {
105
+ this.value = date;
106
+ this.currentMonth = this.value.getMonth();
107
+ this.currentYear = this.value.getFullYear();
108
+ this.rangeValue = null;
109
+ }
110
+ }
111
+ }
112
+ this.requestUpdate();
113
+ }
114
+ connectedCallback() {
115
+ super.connectedCallback();
116
+ this.initializeValue();
117
+ if (this.valueAttribute) {
118
+ const date = new Date(this.valueAttribute);
119
+ if (!isNaN(date.getTime())) {
120
+ this.value = date;
121
+ this.currentMonth = this.value.getMonth();
122
+ this.currentYear = this.value.getFullYear();
123
+ }
124
+ }
125
+ }
126
+ getDaysArray(year, month) {
127
+ const daysInMonth = new Date(year, month + 1, 0).getDate();
128
+ return Array.from({ length: daysInMonth }, (_, i) => i + 1);
129
+ }
130
+ nextMonth() {
131
+ if (this.currentMonth === 11) {
132
+ this.currentMonth = 0;
133
+ this.currentYear++;
134
+ }
135
+ else {
136
+ this.currentMonth++;
137
+ }
138
+ this.requestUpdate();
139
+ }
140
+ prevMonth() {
141
+ if (this.currentMonth === 0) {
142
+ this.currentMonth = 11;
143
+ this.currentYear--;
144
+ }
145
+ else {
146
+ this.currentMonth--;
147
+ }
148
+ this.requestUpdate();
149
+ }
150
+ selectDate(day, month, year) {
151
+ const selectedDate = new Date(year, month, day);
152
+ if (this.range) {
153
+ if (this.startDate && this.endDate) {
154
+ this.startDate = null;
155
+ this.endDate = null;
156
+ }
157
+ if (this.isSelectingStart) {
158
+ this.startDate = selectedDate;
159
+ if (this.endDate && selectedDate > this.endDate) {
160
+ this.endDate = null;
161
+ }
162
+ this.isSelectingStart = false;
163
+ }
164
+ else {
165
+ this.isSelectingStart = true;
166
+ if (this.startDate && selectedDate < this.startDate) {
167
+ this.startDate = selectedDate;
168
+ this.endDate = null;
169
+ this.isSelectingStart = false;
170
+ }
171
+ else {
172
+ this.endDate = selectedDate;
173
+ }
174
+ }
175
+ }
176
+ else {
177
+ this.value = selectedDate;
178
+ this.emit('nile-changed', { value: this.value });
179
+ if (this.dropdown) {
180
+ this.dropdown.hide();
181
+ }
182
+ }
183
+ this.requestUpdate();
184
+ }
185
+ confimRange() {
186
+ if (this.startDate && this.endDate) {
187
+ this.emit('nile-changed', {
188
+ startDate: this.startDate,
189
+ endDate: this.endDate,
190
+ });
191
+ if (this.dropdown) {
192
+ this.dropdown.hide();
193
+ }
194
+ this.rangeValue = {
195
+ startDate: this.startDate,
196
+ endDate: this.endDate,
197
+ };
198
+ }
199
+ }
200
+ renderMonth(year, month, daysArray) {
201
+ const firstDay = new Date(year, month, 1).getDay();
202
+ const lastDay = new Date(year, month + 1, 0).getDay();
203
+ const prevMonthDays = this.getDaysArray(month === 0 ? year - 1 : year, month === 0 ? 11 : month - 1);
204
+ const nextMonthDays = this.getDaysArray(month === 11 ? year + 1 : year, month === 11 ? 0 : month + 1);
205
+ const fillerDaysBefore = prevMonthDays.slice(prevMonthDays.length - firstDay);
206
+ const fillerDaysAfter = nextMonthDays.slice(0, 6 - lastDay);
207
+ const allDays = [...fillerDaysBefore, ...daysArray, ...fillerDaysAfter];
208
+ const isSelectedDate = (day, month, year, isCurrentMonth) => {
209
+ if (!isCurrentMonth)
210
+ return '';
211
+ if (!this.range && this.value) {
212
+ const isSelected = day === this.value.getDate() &&
213
+ month === this.value.getMonth() &&
214
+ year === this.value.getFullYear();
215
+ if (isSelected)
216
+ return 'selected-date';
217
+ }
218
+ const isStartDate = this.startDate &&
219
+ day === this.startDate.getDate() &&
220
+ month === this.startDate.getMonth() &&
221
+ year === this.startDate.getFullYear();
222
+ const isEndDate = this.endDate &&
223
+ day === this.endDate.getDate() &&
224
+ month === this.endDate.getMonth() &&
225
+ year === this.endDate.getFullYear();
226
+ return isStartDate ? 'range-start' : isEndDate ? 'range-end' : '';
227
+ };
228
+ const isInRange = (day, month, year, isCurrentMonth) => {
229
+ if (!isCurrentMonth)
230
+ return false;
231
+ if (this.startDate && this.endDate) {
232
+ const date = new Date(year, month, day);
233
+ return date >= this.startDate && date <= this.endDate;
234
+ }
235
+ return false;
236
+ };
237
+ return html `
238
+ <div class="calendar">
239
+ <div class="calendar-header">
240
+ <nile-icon class="calendar-header__month-navigation" name="arrowleft" color="black" @click="${this.prevMonth}">
241
+ </nile-icon>
242
+ <span
243
+ >${new Date(year, month).toLocaleString('default', {
244
+ month: 'long',
245
+ })}
246
+ ${year}</span
247
+ >
248
+ <nile-icon class="calendar-header__month-navigation" name="arrowright" color="black" @click="${this.nextMonth}">
249
+ </nile-icon>
250
+ </div>
251
+ <div class="day-names">
252
+ <div class="day">Sun</div>
253
+ <div class="day">Mon</div>
254
+ <div class="day">Tue</div>
255
+ <div class="day">Wed</div>
256
+ <div class="day">Thu</div>
257
+ <div class="day">Fri</div>
258
+ <div class="day">Sat</div>
259
+ </div>
260
+ <div class="days">
261
+ ${allDays.map((day, index) => {
262
+ const isCurrentMonth = index >= fillerDaysBefore.length &&
263
+ index < fillerDaysBefore.length + daysArray.length;
264
+ return html ` <div
265
+ class="day ${isSelectedDate(day, month, year, isCurrentMonth)} ${isInRange(day, month, year, isCurrentMonth)
266
+ ? 'in-range'
267
+ : ''} ${!isCurrentMonth ? 'filler' : ''}"
268
+ @click="${() => {
269
+ if (isCurrentMonth) {
270
+ this.selectDate(day, month, year);
271
+ }
272
+ }}"
273
+ >
274
+ ${day}
275
+ </div>`;
276
+ })}
277
+ </div>
278
+ </div>
279
+ `;
280
+ }
281
+ formatDate(date) {
282
+ if (!date)
283
+ return '';
284
+ const day = String(date.getDate()).padStart(2, '0');
285
+ const month = String(date.getMonth() + 1).padStart(2, '0');
286
+ const year = date.getFullYear();
287
+ return `${day}/${month}/${year}`;
288
+ }
289
+ formatDateRange(value) {
290
+ if (!value) {
291
+ return value;
292
+ }
293
+ if (!value.startDate || !value.endDate)
294
+ return '';
295
+ return `${this.formatDate(value.startDate)} - ${this.formatDate(value.endDate)}`;
296
+ }
297
+ handleStartDateInput(event) {
298
+ const date = this.parseDate(event.detail.value);
299
+ if (!this.isValidDateInput(date)) {
300
+ this.startDate = null;
301
+ }
302
+ if (date && (!this.endDate || date <= this.endDate)) {
303
+ this.startDate = date;
304
+ }
305
+ else {
306
+ this.startDate = null;
307
+ this.endDate = null;
308
+ }
309
+ this.requestUpdate();
310
+ }
311
+ handleEndDateInput(event) {
312
+ const date = this.parseDate(event.detail.value);
313
+ if (!this.isValidDateInput(date)) {
314
+ this.endDate = null;
315
+ }
316
+ if (date && (!this.startDate || date >= this.startDate)) {
317
+ this.endDate = date;
318
+ }
319
+ else {
320
+ this.endDate = null;
321
+ }
322
+ this.requestUpdate();
323
+ }
324
+ parseDate(dateString) {
325
+ const [day, month, year] = dateString.split('/').map(Number);
326
+ const date = new Date(year, month - 1, day);
327
+ return !isNaN(date.getTime()) ? date : null;
328
+ }
329
+ isValidDateInput(input) {
330
+ const regex = /^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/\d{4}$/;
331
+ return regex.test(input);
332
+ }
333
+ formatTime(date) {
334
+ if (!date)
335
+ return '';
336
+ const hours = String(date.getHours()).padStart(2, '0');
337
+ const minutes = String(date.getMinutes()).padStart(2, '0');
338
+ const seconds = String(date.getSeconds()).padStart(2, '0');
339
+ return `${hours}:${minutes}:${seconds}`;
340
+ }
341
+ // Validate time in HH:MM:SS format
342
+ isValidTimeInput(input) {
343
+ const regex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;
344
+ return regex.test(input);
345
+ }
346
+ // Parse time string to a Date object
347
+ parseTime(input, date) {
348
+ if (!this.isValidTimeInput(input)) {
349
+ return null;
350
+ }
351
+ const [hour, minute, second] = input.split(':').map(Number);
352
+ const newDate = new Date(date.getTime());
353
+ newDate.setHours(hour, minute, second);
354
+ return newDate;
355
+ }
356
+ handleStartTimeInput(event) {
357
+ if (!this.startDate) {
358
+ this.startDate = null;
359
+ return;
360
+ }
361
+ const time = this.parseTime(event.detail.value, this.startDate);
362
+ if (time) {
363
+ this.startDate = time;
364
+ }
365
+ else {
366
+ this.startDate.setHours(0, 0, 0);
367
+ }
368
+ this.requestUpdate();
369
+ }
370
+ handleEndTimeInput(event) {
371
+ if (!this.endDate) {
372
+ this.endDate = null;
373
+ return;
374
+ }
375
+ const time = this.parseTime(event.detail.value, this.endDate);
376
+ if (time) {
377
+ this.endDate = time;
378
+ }
379
+ else {
380
+ this.endDate.setHours(0, 0, 0);
381
+ }
382
+ this.requestUpdate();
383
+ }
384
+ /* #endregion */
385
+ /* #region Methods */
386
+ /**
387
+ * Render method
388
+ * @slot This is a slot test
389
+ */
390
+ render() {
391
+ const daysArray = this.getDaysArray(this.currentYear, this.currentMonth);
392
+ const nextMonth = (this.currentMonth + 1) % 12;
393
+ const nextYear = this.currentMonth === 11 ? this.currentYear + 1 : this.currentYear;
394
+ const nextMonthDaysArray = this.getDaysArray(nextYear, nextMonth);
395
+ return html `
396
+
397
+ <div class="base${this.range ? '__range' : ''}">
398
+ <div class="calendar-wrapper" >
399
+ <div class="calendar-container ${this.range ? 'with-margin' : ''}">
400
+ ${this.renderMonth(this.currentYear, this.currentMonth, this.getDaysArray(this.currentYear, this.currentMonth))}
401
+ </div>
402
+ ${this.range
403
+ ? html `
404
+ <div class="calendar-container">
405
+ ${this.renderMonth(this.currentYear, (this.currentMonth + 1) % 12, this.getDaysArray(this.currentYear, (this.currentMonth + 1) % 12))}
406
+ </div>
407
+ `
408
+ : ''}
409
+
410
+ </div>
411
+ ${this.range
412
+ ? html `
413
+ <div class="calender-input">
414
+ <span class="manual-input-label">From </span>
415
+ <div class="from">
416
+ <nile-input class="manual-input" value="${this.formatDate(this.startDate)}" placeholder="DD/MM/YYYY" @nile-change="${this.handleStartDateInput}"></nile-input>
417
+ <nile-input class="manual-input" value="${this.formatTime(this.startDate)}" placeholder="HH:MM:SS" @nile-change="${this.handleStartTimeInput}"> </nile-input>
418
+
419
+ </div>
420
+ <br>
421
+ <span class="manual-input-label">To </span>
422
+ <div class="from">
423
+ <nile-input class="manual-input" value="${this.formatDate(this.endDate)}" placeholder="DD/MM/YYYY" @nile-change="${this.handleEndDateInput}"></nile-input>
424
+ <nile-input class="manual-input" value="${this.formatTime(this.endDate)}" placeholder="HH:MM:SS" @nile-change="${this.handleEndTimeInput}"> </nile-input>
425
+ </div>
426
+ <div class="button-contaner">
427
+ <nile-button class="apply-button" ?disabled="${!this.startDate || !this.endDate}" @click="${this.confimRange}"> Apply</nile-button>
428
+ </div>
429
+
430
+
431
+ </div>
432
+ </div>
433
+ `
434
+ : ''}
435
+ </div>
436
+ `;
437
+ }
438
+ };
439
+ __decorate([
440
+ query('nile-dropdown')
441
+ ], NileCalendar.prototype, "dropdown", void 0);
442
+ __decorate([
443
+ property({ type: Boolean, reflect: true })
444
+ ], NileCalendar.prototype, "dropDownOpened", void 0);
445
+ __decorate([
446
+ property({ type: Object })
447
+ ], NileCalendar.prototype, "value", void 0);
448
+ __decorate([
449
+ property({ type: Object })
450
+ ], NileCalendar.prototype, "rangeValue", void 0);
451
+ __decorate([
452
+ property({ type: String, attribute: 'value' })
453
+ ], NileCalendar.prototype, "valueAttribute", void 0);
454
+ __decorate([
455
+ property({ type: String, attribute: 'value' })
456
+ ], NileCalendar.prototype, "formattedDate", void 0);
457
+ __decorate([
458
+ property({ type: Object })
459
+ ], NileCalendar.prototype, "startDate", void 0);
460
+ __decorate([
461
+ property({ type: Object })
462
+ ], NileCalendar.prototype, "endDate", void 0);
463
+ __decorate([
464
+ property({ type: Boolean })
465
+ ], NileCalendar.prototype, "isSelectingStart", void 0);
466
+ __decorate([
467
+ property({ type: Boolean })
468
+ ], NileCalendar.prototype, "range", void 0);
469
+ __decorate([
470
+ watch('value')
471
+ ], NileCalendar.prototype, "valueChanged", null);
472
+ NileCalendar = __decorate([
473
+ customElement('nile-calendar')
474
+ ], NileCalendar);
475
+ export { NileCalendar };
476
+ export default NileCalendar;
477
+ //# sourceMappingURL=nile-calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nile-calendar.js","sourceRoot":"","sources":["../../../src/nile-calendar/nile-calendar.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport {\n LitElement,\n html,\n property,\n CSSResultArray,\n TemplateResult,\n} from 'lit-element';\nimport { customElement } from 'lit/decorators.js';\nimport { styles } from './nile-calendar.css';\nimport { animateTo, stopAnimations } from '../internal/animate';\nimport { classMap } from 'lit/directives/class-map.js';\nimport { query } from 'lit/decorators.js';\nimport {\n getAnimation,\n setDefaultAnimation,\n} from '../utilities/animation-registry';\nimport { getTabbableBoundary } from '../internal/tabbable';\nimport { waitForEvent } from '../internal/event';\nimport { watch } from '../internal/watch';\nimport NileElement from '../internal/nile-element';\nimport type { CSSResultGroup, PropertyValues } from 'lit';\nimport type NileButton from '../nile-button/nile-button';\nimport type NileIconButton from '../nile-icon-button/nile-icon-button';\nimport type { NileMenu } from '../nile-menu';\nimport type { NilePopup } from '../nile-popup';\nimport '../nile-popup';\nimport { NileDropdown } from '../nile-dropdown';\n\n/**\n * Nile icon component.\n *\n * @tag nile-calendar\n *\n */\n@customElement('nile-calendar')\nexport class NileCalendar extends NileElement {\n /**\n * The styles for NileCalendar\n * @remarks If you are extending this class you can extend the base styles with super. Eg `return [super(), myCustomStyles]`\n */\n public static get styles(): CSSResultArray {\n return [styles];\n }\n\n private currentMonth: number = new Date().getMonth();\n private currentYear: number = new Date().getFullYear();\n\n @query('nile-dropdown') dropdown: NileDropdown;\n\n @property({ type: Boolean, reflect: true }) dropDownOpened = false;\n\n @property({ type: Object }) value : any;\n\n @property({ type: Object }) rangeValue : any;\n\n @property({ type: String, attribute: 'value' }) valueAttribute:\n | string\n | null = null;\n\n @property({ type: String, attribute: 'value' }) formattedDate: string | null =\n null;\n\n @property({ type: Object }) startDate: Date | null = null;\n @property({ type: Object }) endDate: Date | null = null;\n @property({ type: Boolean }) isSelectingStart = true; // flag to indicate what we're selecting\n\n @property({ type: Boolean }) range = false;\n\n @watch('value')\n valueChanged() {\n\n if (this.range && this.value) {\n this.rangeValue = this.value;\n this.value = null;\n return;\n }\n\n if (this.value && !isNaN(this.value.getTime())) {\n const offset = this.value.getTimezoneOffset();\n const localDate = new Date(this.value.getTime() - offset * 60 * 1000);\n if (!isNaN(localDate.getTime())) {\n this.valueAttribute = localDate.toISOString().split('T')[0];\n this.formattedDate = `${String(localDate.getDate()).padStart(\n 2,\n '0'\n )}/${String(localDate.getMonth() + 1).padStart(\n 2,\n '0'\n )}/${localDate.getFullYear()}`;\n }\n }\n }\n\n\n updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n\n if (changedProperties.has('valueAttribute')) {\n const date = new Date(this.valueAttribute || '');\n if (!isNaN(date.getTime())) {\n const offset = date.getTimezoneOffset();\n this.value = new Date(date.getTime() - offset * 60 * 1000);\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n }\n }\n }\n\n static get observedAttributes() {\n return ['value', 'range'];\n }\n\n attributeChangedCallback(name: string, oldValue: string, newValue: string) {\n if (name === 'value') {\n this.valueAttribute = newValue;\n this.initializeValue();\n } else if (name === 'range') {\n this.range = newValue !== null;\n }\n }\n\n initializeValue() {\n if (this.range) {\n try {\n const rangeValue = JSON.parse(this.valueAttribute || '');\n this.startDate = new Date(rangeValue.startDate);\n this.endDate = new Date(rangeValue.endDate);\n\n // Convert to local time\n this.startDate = new Date(this.startDate.getTime());\n this.endDate = new Date(this.endDate.getTime());\n\n this.rangeValue = {\n startDate: this.startDate,\n endDate: this.endDate,\n };\n this.value = null;\n } catch (e) {\n // console.error('Invalid range value');\n }\n } else {\n if (this.valueAttribute) {\n let date: Date;\n\n date = new Date(this.valueAttribute);\n\n date = new Date(date.getTime() - date.getTimezoneOffset() * 60000);\n\n if (!isNaN(date.getTime())) {\n this.value = date;\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n this.rangeValue = null;\n }\n }\n }\n this.requestUpdate();\n }\n\n\n\n\n\n connectedCallback() {\n super.connectedCallback();\n this.initializeValue();\n\n if (this.valueAttribute) {\n const date = new Date(this.valueAttribute);\n if (!isNaN(date.getTime())) {\n this.value = date;\n this.currentMonth = this.value.getMonth();\n this.currentYear = this.value.getFullYear();\n }\n }\n }\n\n private getDaysArray(year: number, month: number): number[] {\n const daysInMonth = new Date(year, month + 1, 0).getDate();\n return Array.from({ length: daysInMonth }, (_, i) => i + 1);\n }\n\n private nextMonth(): void {\n\n if (this.currentMonth === 11) {\n this.currentMonth = 0;\n this.currentYear++;\n } else {\n this.currentMonth++;\n }\n this.requestUpdate();\n }\n\n private prevMonth(): void {\n\n if (this.currentMonth === 0) {\n this.currentMonth = 11;\n this.currentYear--;\n } else {\n this.currentMonth--;\n }\n this.requestUpdate();\n }\n\n private selectDate(day: number, month: number, year: number): void {\n const selectedDate = new Date(year, month, day);\n\n if (this.range) {\n if (this.startDate && this.endDate) {\n this.startDate = null;\n this.endDate = null;\n }\n\n if (this.isSelectingStart) {\n this.startDate = selectedDate;\n if (this.endDate && selectedDate > this.endDate) {\n this.endDate = null;\n }\n this.isSelectingStart = false;\n } else {\n this.isSelectingStart = true;\n\n if (this.startDate && selectedDate < this.startDate) {\n this.startDate = selectedDate;\n this.endDate = null;\n this.isSelectingStart = false;\n } else {\n this.endDate = selectedDate;\n }\n }\n } else {\n this.value = selectedDate;\n this.emit('nile-changed', { value: this.value });\n if (this.dropdown) {\n this.dropdown.hide();\n }\n }\n\n this.requestUpdate();\n }\n\n private confimRange() {\n if (this.startDate && this.endDate) {\n this.emit('nile-changed', {\n startDate: this.startDate,\n endDate: this.endDate,\n });\n if (this.dropdown) {\n this.dropdown.hide();\n }\n\n this.rangeValue = {\n startDate: this.startDate,\n endDate: this.endDate,\n };\n }\n }\n\n private renderMonth(\n year: number,\n month: number,\n daysArray: number[]\n ): TemplateResult {\n const firstDay = new Date(year, month, 1).getDay();\n const lastDay = new Date(year, month + 1, 0).getDay();\n const prevMonthDays = this.getDaysArray(\n month === 0 ? year - 1 : year,\n month === 0 ? 11 : month - 1\n );\n const nextMonthDays = this.getDaysArray(\n month === 11 ? year + 1 : year,\n month === 11 ? 0 : month + 1\n );\n const fillerDaysBefore = prevMonthDays.slice(\n prevMonthDays.length - firstDay\n );\n const fillerDaysAfter = nextMonthDays.slice(0, 6 - lastDay);\n const allDays = [...fillerDaysBefore, ...daysArray, ...fillerDaysAfter];\n\n const isSelectedDate = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return '';\n\n if (!this.range && this.value) {\n const isSelected =\n day === this.value.getDate() &&\n month === this.value.getMonth() &&\n year === this.value.getFullYear();\n if (isSelected) return 'selected-date';\n }\n\n const isStartDate =\n this.startDate &&\n day === this.startDate.getDate() &&\n month === this.startDate.getMonth() &&\n year === this.startDate.getFullYear();\n const isEndDate =\n this.endDate &&\n day === this.endDate.getDate() &&\n month === this.endDate.getMonth() &&\n year === this.endDate.getFullYear();\n\n return isStartDate ? 'range-start' : isEndDate ? 'range-end' : '';\n };\n\n const isInRange = (\n day: number,\n month: number,\n year: number,\n isCurrentMonth: boolean\n ) => {\n if (!isCurrentMonth) return false;\n if (this.startDate && this.endDate) {\n const date = new Date(year, month, day);\n return date >= this.startDate && date <= this.endDate;\n }\n return false;\n };\n\n return html`\n <div class=\"calendar\">\n <div class=\"calendar-header\">\n <nile-icon class=\"calendar-header__month-navigation\" name=\"arrowleft\" color=\"black\" @click=\"${this.prevMonth}\">\n </nile-icon>\n <span\n >${new Date(year, month).toLocaleString('default', {\n month: 'long',\n })}\n ${year}</span\n >\n <nile-icon class=\"calendar-header__month-navigation\" name=\"arrowright\" color=\"black\" @click=\"${this.nextMonth}\">\n </nile-icon>\n </div>\n <div class=\"day-names\">\n <div class=\"day\">Sun</div>\n <div class=\"day\">Mon</div>\n <div class=\"day\">Tue</div>\n <div class=\"day\">Wed</div>\n <div class=\"day\">Thu</div>\n <div class=\"day\">Fri</div>\n <div class=\"day\">Sat</div>\n </div>\n <div class=\"days\">\n ${allDays.map((day, index) => {\n const isCurrentMonth =\n index >= fillerDaysBefore.length &&\n index < fillerDaysBefore.length + daysArray.length;\n return html` <div\n class=\"day ${isSelectedDate(\n day,\n month,\n year,\n isCurrentMonth\n )} ${isInRange(day, month, year, isCurrentMonth)\n ? 'in-range'\n : ''} ${!isCurrentMonth ? 'filler' : ''}\"\n @click=\"${() => {\n if (isCurrentMonth) {\n this.selectDate(day, month, year);\n }\n }}\"\n >\n ${day}\n </div>`;\n })}\n </div>\n </div>\n `;\n }\n\n private formatDate(date: Date | null): string {\n if (!date) return '';\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n return `${day}/${month}/${year}`;\n }\n\n private formatDateRange(value: { startDate: Date | null, endDate: Date | null }): string {\n if(!value){\n return value;\n }\n if (!value.startDate || !value.endDate) return '';\n return `${this.formatDate(value.startDate)} - ${this.formatDate(value.endDate)}`;\n }\n\n private handleStartDateInput(event: CustomEvent): void {\n const date = this.parseDate(event.detail.value);\n if (!this.isValidDateInput(date)) {\n this.startDate = null;\n }\n if (date && (!this.endDate || date <= this.endDate)) {\n this.startDate = date;\n } else {\n this.startDate = null;\n this.endDate = null;\n }\n this.requestUpdate();\n }\n\n private handleEndDateInput(event: CustomEvent): void {\n const date = this.parseDate(event.detail.value);\n if (!this.isValidDateInput(date)) {\n this.endDate = null;\n }\n if (date && (!this.startDate || date >= this.startDate)) {\n this.endDate = date;\n } else {\n this.endDate = null;\n\n }\n this.requestUpdate();\n }\n\n private parseDate(dateString: string): Date | null {\n const [day, month, year] = dateString.split('/').map(Number);\n const date = new Date(year, month - 1, day);\n return !isNaN(date.getTime()) ? date : null;\n }\n\n private isValidDateInput(input: any): boolean {\n const regex = /^(0[1-9]|[12][0-9]|3[01])\\/(0[1-9]|1[0-2])\\/\\d{4}$/;\n return regex.test(input);\n }\n\n private formatTime(date: Date | null): string {\n if (!date) return '';\n const hours = String(date.getHours()).padStart(2, '0');\n const minutes = String(date.getMinutes()).padStart(2, '0');\n const seconds = String(date.getSeconds()).padStart(2, '0');\n return `${hours}:${minutes}:${seconds}`;\n }\n\n // Validate time in HH:MM:SS format\n private isValidTimeInput(input: string): boolean {\n const regex = /^([0-1]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/;\n return regex.test(input);\n }\n\n// Parse time string to a Date object\nprivate parseTime(input: string, date: Date): Date | null {\n if (!this.isValidTimeInput(input)) {\n return null;\n }\n const [hour, minute, second] = input.split(':').map(Number);\n const newDate = new Date(date.getTime());\n newDate.setHours(hour, minute, second);\n return newDate;\n}\n\nprivate handleStartTimeInput(event: CustomEvent): void {\n if (!this.startDate) {\n this.startDate = null;\n return;\n }\n const time = this.parseTime(event.detail.value, this.startDate);\n if (time) {\n this.startDate = time;\n } else {\n this.startDate.setHours(0, 0, 0);\n }\n this.requestUpdate();\n}\n\nprivate handleEndTimeInput(event: CustomEvent): void {\n if (!this.endDate) {\n this.endDate = null;\n return;\n }\n const time = this.parseTime(event.detail.value, this.endDate);\n if (time) {\n this.endDate = time;\n } else {\n this.endDate.setHours(0, 0, 0);\n }\n this.requestUpdate();\n}\n\n\n\n /* #endregion */\n\n /* #region Methods */\n\n /**\n * Render method\n * @slot This is a slot test\n */\n render(): TemplateResult {\n const daysArray = this.getDaysArray(this.currentYear, this.currentMonth);\n const nextMonth = (this.currentMonth + 1) % 12;\n const nextYear =\n this.currentMonth === 11 ? this.currentYear + 1 : this.currentYear;\n const nextMonthDaysArray = this.getDaysArray(nextYear, nextMonth);\n\n return html`\n\n <div class=\"base${this.range ? '__range' : ''}\">\n <div class=\"calendar-wrapper\" >\n <div class=\"calendar-container ${this.range ? 'with-margin' : ''}\">\n ${this.renderMonth(\n this.currentYear,\n this.currentMonth,\n this.getDaysArray(this.currentYear, this.currentMonth)\n )}\n </div>\n ${this.range\n ? html`\n <div class=\"calendar-container\">\n ${this.renderMonth(\n this.currentYear,\n (this.currentMonth + 1) % 12,\n this.getDaysArray(\n this.currentYear,\n (this.currentMonth + 1) % 12\n )\n )}\n </div>\n `\n : ''}\n\n </div>\n ${this.range\n ? html`\n <div class=\"calender-input\">\n <span class=\"manual-input-label\">From </span>\n <div class=\"from\">\n <nile-input class=\"manual-input\" value=\"${this.formatDate(this.startDate)}\" placeholder=\"DD/MM/YYYY\" @nile-change=\"${this.handleStartDateInput}\"></nile-input>\n <nile-input class=\"manual-input\" value=\"${this.formatTime(this.startDate)}\" placeholder=\"HH:MM:SS\" @nile-change=\"${this.handleStartTimeInput}\"> </nile-input>\n\n </div>\n<br>\n <span class=\"manual-input-label\">To </span>\n <div class=\"from\">\n <nile-input class=\"manual-input\" value=\"${this.formatDate(this.endDate)}\" placeholder=\"DD/MM/YYYY\" @nile-change=\"${this.handleEndDateInput}\"></nile-input>\n <nile-input class=\"manual-input\" value=\"${this.formatTime(this.endDate)}\" placeholder=\"HH:MM:SS\" @nile-change=\"${this.handleEndTimeInput}\"> </nile-input>\n </div>\n <div class=\"button-contaner\">\n <nile-button class=\"apply-button\" ?disabled=\"${\n !this.startDate || !this.endDate\n }\" @click=\"${this.confimRange}\"> Apply</nile-button>\n </div>\n\n\n </div>\n </div>\n `\n : ''}\n </div>\n `;\n }\n}\n\nexport default NileCalendar;\n\ndeclare global {\n interface HTMLElementTagNameMap {\n 'nile-calendar': NileCalendar;\n }\n}\n"]}
@@ -93,7 +93,7 @@ export const styles = css `
93
93
  background: white;
94
94
  display: flex;
95
95
  justify-content: space-between;
96
- width: auto;
96
+ width: 730px;
97
97
  }
98
98
 
99
99
  .selected-date,
@@ -1 +1 @@
1
- {"version":3,"file":"nile-date-picker.css.js","sourceRoot":"","sources":["../../../src/nile-date-picker/nile-date-picker.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqKxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { css } from 'lit-element';\n\n/**\n * DatePicker CSS\n */\nexport const styles = css`\n :host {\n }\n\n .calendar-container {\n font-family: Colfax-regular;\n width: 365px;\n height: auto;\n text-align: center;\n background: white;\n }\n\n .calendar-container.with-margin {\n margin-right: 20px;\n}\n\n .calendar-header {\n display: flex;\n justify-content: space-between;\n padding: 10px;\n padding: 22px 20px;\n font-size: 14px;\n font-weight: 600;\n line-height: 14px;\n letter-spacing: 0.2px;\n }\n\n .divider {\n width: 100%;\n height: 1px;\n background: #c7ced4;\n }\n\n .day-names {\n font-size: 14px;\n font-weight: 600;\n line-height: 14px;\n letter-spacing: 0.2px;\n height: 50px;\n margin-top: 10px;\n }\n\n .day-names,\n .days {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n height: auto;\n align-items: center;\n }\n\n .days {\n height: auto;\n }\n\n .day {\n flex-basis: calc(100% / 7);\n box-sizing: border-box;\n width: 48px;\n align-items: center;\n padding: 10px;\n height: 32px;\n margin-top: 6px;\n margin-bottom: 6px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .filler {\n color: grey;\n }\n\n .selected-date {\n color: white;\n border-radius: 4px;\n background: #a5d3f3;\n }\n\n\n\n.calendar-wrapper {\n background: white;\n display: flex;\n justify-content: space-between;\n width: auto;\n}\n\n.selected-date,\n.range-start,\n.range-end {\n border-radius: 4px;\n background: #a5d3f3;\n color: white;\n}\n\n\n.range-start {\n background: #a5d3f3;\n border-radius: 4px 0 0 4px;\n color: white;\n}\n\n.range-end {\n background: #a5d3f3;\n border-radius: 0 4px 4px 0;\n color: white;\n}\n\n.range-middle {\n background: #a5d3f3;\n color: white;\n border-radius: 0;\n}\n\n.day.selected {\n background: #a5d3f3;\n color: white;\n border-radius: 4px;\n}\n\n.day.in-range {\n background: #a5d3f3;\n color: white;\n}\n\n.selected-date {\n color: white;\n border-radius: 4px;\n background: #a5d3f3;\n}\n\n.base {\n background-color: white;\n border-radius: 4px;\n padding-bottom: 20px\n}\n\n.calender-input{\n padding: 20px;\n padding-bottom: 0px;\n}\n\n.from {\n display: flex;\n justify-content: space-between;\n gap: 20px;\n}\n\n.manual-input{\n width:100%;\n}\n\n.manual-input-label{\n font-size: 12px;\nfont-style: normal;\nfont-weight: 500;\n margin-bottom: 10px;\n}\n\n.apply-button {\n text-align: right;\n display: block;\n padding-top: 20px;\n}\n`;\n\nexport default [styles];\n"]}
1
+ {"version":3,"file":"nile-date-picker.css.js","sourceRoot":"","sources":["../../../src/nile-date-picker/nile-date-picker.css.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAElC;;GAEG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqKxB,CAAC;AAEF,eAAe,CAAC,MAAM,CAAC,CAAC","sourcesContent":["/**\n * Copyright Aquera Inc 2023\n *\n * This source code is licensed under the BSD-3-Clause license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { css } from 'lit-element';\n\n/**\n * DatePicker CSS\n */\nexport const styles = css`\n :host {\n }\n\n .calendar-container {\n font-family: Colfax-regular;\n width: 365px;\n height: auto;\n text-align: center;\n background: white;\n }\n\n .calendar-container.with-margin {\n margin-right: 20px;\n}\n\n .calendar-header {\n display: flex;\n justify-content: space-between;\n padding: 10px;\n padding: 22px 20px;\n font-size: 14px;\n font-weight: 600;\n line-height: 14px;\n letter-spacing: 0.2px;\n }\n\n .divider {\n width: 100%;\n height: 1px;\n background: #c7ced4;\n }\n\n .day-names {\n font-size: 14px;\n font-weight: 600;\n line-height: 14px;\n letter-spacing: 0.2px;\n height: 50px;\n margin-top: 10px;\n }\n\n .day-names,\n .days {\n display: flex;\n flex-wrap: wrap;\n justify-content: flex-start;\n height: auto;\n align-items: center;\n }\n\n .days {\n height: auto;\n }\n\n .day {\n flex-basis: calc(100% / 7);\n box-sizing: border-box;\n width: 48px;\n align-items: center;\n padding: 10px;\n height: 32px;\n margin-top: 6px;\n margin-bottom: 6px;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .filler {\n color: grey;\n }\n\n .selected-date {\n color: white;\n border-radius: 4px;\n background: #a5d3f3;\n }\n\n\n\n.calendar-wrapper {\n background: white;\n display: flex;\n justify-content: space-between;\n width: 730px;\n}\n\n.selected-date,\n.range-start,\n.range-end {\n border-radius: 4px;\n background: #a5d3f3;\n color: white;\n}\n\n\n.range-start {\n background: #a5d3f3;\n border-radius: 4px 0 0 4px;\n color: white;\n}\n\n.range-end {\n background: #a5d3f3;\n border-radius: 0 4px 4px 0;\n color: white;\n}\n\n.range-middle {\n background: #a5d3f3;\n color: white;\n border-radius: 0;\n}\n\n.day.selected {\n background: #a5d3f3;\n color: white;\n border-radius: 4px;\n}\n\n.day.in-range {\n background: #a5d3f3;\n color: white;\n}\n\n.selected-date {\n color: white;\n border-radius: 4px;\n background: #a5d3f3;\n}\n\n.base {\n background-color: white;\n border-radius: 4px;\n padding-bottom: 20px\n}\n\n.calender-input{\n padding: 20px;\n padding-bottom: 0px;\n}\n\n.from {\n display: flex;\n justify-content: space-between;\n gap: 20px;\n}\n\n.manual-input{\n width:100%;\n}\n\n.manual-input-label{\n font-size: 12px;\nfont-style: normal;\nfont-weight: 500;\n margin-bottom: 10px;\n}\n\n.apply-button {\n text-align: right;\n display: block;\n padding-top: 20px;\n}\n`;\n\nexport default [styles];\n"]}
@@ -38,24 +38,8 @@ export declare class NileDatePicker extends NileElement {
38
38
  static get observedAttributes(): string[];
39
39
  attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
40
40
  initializeValue(): void;
41
+ handleChanged(event: any): void;
41
42
  connectedCallback(): void;
42
- private getDaysArray;
43
- private nextMonth;
44
- private prevMonth;
45
- private selectDate;
46
- private confimRange;
47
- private renderMonth;
48
- private formatDate;
49
- private formatDateRange;
50
- private handleStartDateInput;
51
- private handleEndDateInput;
52
- private parseDate;
53
- private isValidDateInput;
54
- private formatTime;
55
- private isValidTimeInput;
56
- private parseTime;
57
- private handleStartTimeInput;
58
- private handleEndTimeInput;
59
43
  /**
60
44
  * Render method
61
45
  * @slot This is a slot test