@oslokommune/punkt-elements 14.5.4 → 15.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 (123) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/{accordionitem-DB3tAjIZ.js → accordionitem-BbeS44TD.js} +1 -1
  3. package/dist/{accordionitem-DHYmPA-o.cjs → accordionitem-DUWhTUEI.cjs} +1 -1
  4. package/dist/{alert-DVCenNTM.cjs → alert-B9flMht5.cjs} +1 -1
  5. package/dist/{alert-Cc5FtxHN.js → alert-BpFxQviu.js} +2 -2
  6. package/dist/{button-Ju4zPhVx.cjs → button-BgCKV0zW.cjs} +1 -1
  7. package/dist/{button-DrTXtc-n.js → button-CKgpX5QA.js} +1 -1
  8. package/dist/{calendar-CTx8PD1L.js → calendar-BMarIeVp.js} +332 -325
  9. package/dist/calendar-C6xgAJ7Z.cjs +90 -0
  10. package/dist/{card-DvHL7pNu.cjs → card-DI3KodEc.cjs} +1 -1
  11. package/dist/{card-CTtmPB2n.js → card-h8ekgJRr.js} +2 -2
  12. package/dist/{checkbox-B-0FOdwi.cjs → checkbox-B2t7wfxe.cjs} +1 -1
  13. package/dist/{checkbox-CkAwPK_E.js → checkbox-BJ9pz3kV.js} +1 -1
  14. package/dist/{combobox-DNPfpTjW.js → combobox-BjAvk8Y-.js} +5 -5
  15. package/dist/{combobox-DvL3SKz2.cjs → combobox-HNN7GTzh.cjs} +1 -1
  16. package/dist/{consent-DJW7YEat.cjs → consent-C37tuFwZ.cjs} +1 -1
  17. package/dist/{consent-OdhmtIK-.js → consent-DAk2BJ7I.js} +1 -1
  18. package/dist/datepicker-2bneToiA.cjs +275 -0
  19. package/dist/datepicker-DvcH2QD9.js +1160 -0
  20. package/dist/{helptext-7fyVJK2C.cjs → helptext-BG1P_9j0.cjs} +1 -1
  21. package/dist/{helptext-CfR0SYe9.js → helptext-Cm6FLBVf.js} +1 -1
  22. package/dist/index.d.ts +10 -42
  23. package/dist/input-element-BBv4xjPb.cjs +1 -0
  24. package/dist/{input-element-DVZhYDJ_.js → input-element-CbjYtVou.js} +143 -147
  25. package/dist/{input-wrapper-DVUh5rxv.js → input-wrapper-Bwmva-69.js} +3 -3
  26. package/dist/{input-wrapper-Bta4FZe3.cjs → input-wrapper-CJqmwe3I.cjs} +1 -1
  27. package/dist/{link-40XAFlYS.js → link-BKnT-97D.js} +1 -1
  28. package/dist/{link-CBQ7uKqb.cjs → link-DRPFqqEn.cjs} +1 -1
  29. package/dist/{linkcard-D8hxLedl.cjs → linkcard-02fxYQ2g.cjs} +1 -1
  30. package/dist/{linkcard-Opb42K2k.js → linkcard-C2UENcqo.js} +1 -1
  31. package/dist/{loader-Bv1R6-AA.js → loader-BW-AWQiE.js} +1 -1
  32. package/dist/{loader-Dh_5sihO.cjs → loader-Cj4kUNRE.cjs} +1 -1
  33. package/dist/{messagebox-B9MCodIz.cjs → messagebox-CK0sSRep.cjs} +1 -1
  34. package/dist/{messagebox-DEXCTOrz.js → messagebox-DB8tEXrV.js} +1 -1
  35. package/dist/{modal-Bw61rVrQ.cjs → modal-BzVQSQy2.cjs} +1 -1
  36. package/dist/{modal-B4adxB6X.js → modal-ClYfWW2a.js} +1 -1
  37. package/dist/pkt-accordion.cjs +1 -1
  38. package/dist/pkt-accordion.js +2 -2
  39. package/dist/pkt-alert.cjs +1 -1
  40. package/dist/pkt-alert.js +1 -1
  41. package/dist/pkt-button.cjs +1 -1
  42. package/dist/pkt-button.js +1 -1
  43. package/dist/pkt-calendar.cjs +1 -1
  44. package/dist/pkt-calendar.js +1 -1
  45. package/dist/pkt-card.cjs +1 -1
  46. package/dist/pkt-card.js +1 -1
  47. package/dist/pkt-checkbox.cjs +1 -1
  48. package/dist/pkt-checkbox.js +1 -1
  49. package/dist/pkt-combobox.cjs +1 -1
  50. package/dist/pkt-combobox.js +1 -1
  51. package/dist/pkt-consent.cjs +1 -1
  52. package/dist/pkt-consent.js +1 -1
  53. package/dist/pkt-datepicker.cjs +1 -1
  54. package/dist/pkt-datepicker.js +2 -2
  55. package/dist/pkt-header.cjs +1 -1
  56. package/dist/pkt-header.js +4 -4
  57. package/dist/pkt-helptext.cjs +1 -1
  58. package/dist/pkt-helptext.js +1 -1
  59. package/dist/pkt-index.cjs +1 -1
  60. package/dist/pkt-index.js +22 -22
  61. package/dist/pkt-input-wrapper.cjs +1 -1
  62. package/dist/pkt-input-wrapper.js +1 -1
  63. package/dist/pkt-link.cjs +1 -1
  64. package/dist/pkt-link.js +1 -1
  65. package/dist/pkt-linkcard.cjs +1 -1
  66. package/dist/pkt-linkcard.js +1 -1
  67. package/dist/pkt-loader.cjs +1 -1
  68. package/dist/pkt-loader.js +1 -1
  69. package/dist/pkt-messagebox.cjs +1 -1
  70. package/dist/pkt-messagebox.js +1 -1
  71. package/dist/pkt-modal.cjs +1 -1
  72. package/dist/pkt-modal.js +1 -1
  73. package/dist/{pkt-options-controller-zn5cmMvL.js → pkt-options-controller-BcGywCmf.js} +1 -1
  74. package/dist/{pkt-options-controller-DjBCEHU4.cjs → pkt-options-controller-BnTmkl3g.cjs} +1 -1
  75. package/dist/pkt-radiobutton.cjs +1 -1
  76. package/dist/pkt-radiobutton.js +1 -1
  77. package/dist/pkt-select.cjs +1 -1
  78. package/dist/pkt-select.js +1 -1
  79. package/dist/pkt-slot-controller-D4nKlom5.cjs +1 -0
  80. package/dist/{pkt-slot-controller-BPGj-LC5.js → pkt-slot-controller-D7CrjM52.js} +27 -25
  81. package/dist/pkt-tabs.cjs +1 -1
  82. package/dist/pkt-tabs.js +2 -2
  83. package/dist/pkt-tag.cjs +1 -1
  84. package/dist/pkt-tag.js +1 -1
  85. package/dist/pkt-textarea.cjs +1 -1
  86. package/dist/pkt-textarea.js +1 -1
  87. package/dist/pkt-textinput.cjs +1 -1
  88. package/dist/pkt-textinput.js +1 -1
  89. package/dist/{radiobutton-oA20HijB.js → radiobutton-CvKKNFMd.js} +1 -1
  90. package/dist/{radiobutton-iHuLnuAn.cjs → radiobutton-DWoYQn8H.cjs} +1 -1
  91. package/dist/{select--wvwpJ0_.cjs → select-BQUp88lY.cjs} +1 -1
  92. package/dist/{select-DfsNb_Yi.js → select-CFkxir_l.js} +4 -4
  93. package/dist/{tabitem-CypTmORF.js → tabitem-C8-tZyc_.js} +1 -1
  94. package/dist/{tabitem-CtltSqDK.cjs → tabitem-DaYfUaxw.cjs} +1 -1
  95. package/dist/{tag-Cw3OQqLW.js → tag-DIJMJhyp.js} +1 -1
  96. package/dist/{tag-P9lfQZbM.cjs → tag-h0vD2Na0.cjs} +1 -1
  97. package/dist/{textarea-CM_bj81t.js → textarea-CMuiBUee.js} +3 -3
  98. package/dist/{textarea-DcEKhXia.cjs → textarea-DcCOfNlr.cjs} +1 -1
  99. package/dist/{textinput-AVll6Nh7.js → textinput-D30TCADP.js} +3 -3
  100. package/dist/{textinput-BzuYzKZ6.cjs → textinput-DR3aaHTH.cjs} +1 -1
  101. package/package.json +4 -4
  102. package/src/components/calendar/calendar.core.test.ts +1 -1
  103. package/src/components/calendar/calendar.selection.test.ts +1 -1
  104. package/src/components/calendar/calendar.ts +32 -22
  105. package/src/components/datepicker/datepicker-popup.test.ts +1 -1
  106. package/src/components/datepicker/datepicker-popup.ts +73 -30
  107. package/src/components/datepicker/datepicker-range.ts +5 -1
  108. package/src/components/datepicker/datepicker-types.ts +4 -54
  109. package/src/components/datepicker/datepicker-utils.ts +38 -517
  110. package/src/components/datepicker/datepicker.core.test.ts +12 -10
  111. package/src/components/datepicker/datepicker.selection.test.ts +8 -6
  112. package/src/components/datepicker/datepicker.ts +26 -7
  113. package/src/components/icon/icon.test.ts +8 -8
  114. package/dist/calendar-5Obd0ZT3.cjs +0 -90
  115. package/dist/datepicker-CTCaZuZU.cjs +0 -271
  116. package/dist/datepicker-t0W9fA1e.js +0 -1444
  117. package/dist/input-element-RBQVA8i0.cjs +0 -1
  118. package/dist/pkt-slot-controller-BzddBp7z.cjs +0 -1
  119. package/src/components/calendar/helpers/calendar-grid.ts +0 -93
  120. package/src/components/calendar/helpers/date-validation.ts +0 -86
  121. package/src/components/calendar/helpers/index.ts +0 -49
  122. package/src/components/calendar/helpers/keyboard-navigation.ts +0 -54
  123. package/src/components/calendar/helpers/selection-manager.ts +0 -184
@@ -9,6 +9,7 @@ import './datepicker'
9
9
  import '../calendar/calendar'
10
10
  import { PktDatepicker } from './datepicker'
11
11
  import { PktCalendar } from '../calendar/calendar'
12
+ import { PktDatepickerPopup } from './datepicker-popup'
12
13
 
13
14
  const waitForCustomElements = async () => {
14
15
  await customElements.whenDefined('pkt-datepicker')
@@ -262,17 +263,17 @@ describe('PktDatepicker', () => {
262
263
 
263
264
  test('syncs selected dates between input and calendar', async () => {
264
265
  const testDate = '2024-06-15'
265
- const container = await createDatepicker(`value="${testDate}"`)
266
+ const container = await createDatepicker(`value="${testDate}" calendar-open`)
266
267
 
267
268
  const datepicker = container.querySelector('pkt-datepicker') as PktDatepicker
268
269
  await datepicker.updateComplete
269
270
 
270
- // Open calendar
271
- const calendarButton = datepicker.querySelector('button[type="button"]')
272
- fireEvent.click(calendarButton!)
273
- await datepicker.updateComplete
271
+ const popup = datepicker.querySelector('pkt-datepicker-popup') as PktDatepickerPopup
272
+ await popup?.updateComplete
274
273
 
275
274
  const calendar = datepicker.querySelector('pkt-calendar') as PktCalendar
275
+ await calendar?.updateComplete
276
+
276
277
  expect(calendar.selected).toContain(testDate)
277
278
 
278
279
  const selectedDate = datepicker.querySelector('.pkt-calendar__date--selected')
@@ -305,15 +306,16 @@ describe('PktDatepicker', () => {
305
306
 
306
307
  test('shows current month correctly in calendar', async () => {
307
308
  const currentMonth = '2024-06-01'
308
- const container = await createDatepicker(`currentmonth="${currentMonth}"`)
309
+ const container = await createDatepicker(`currentmonth="${currentMonth}" calendar-open`)
309
310
 
310
311
  const datepicker = container.querySelector('pkt-datepicker') as PktDatepicker
311
312
  await datepicker.updateComplete
312
313
 
313
- // Open calendar
314
- const calendarButton = datepicker.querySelector('button[type="button"]')
315
- fireEvent.click(calendarButton!)
316
- await datepicker.updateComplete
314
+ const popup = datepicker.querySelector('pkt-datepicker-popup') as PktDatepickerPopup
315
+ await popup?.updateComplete
316
+
317
+ const calendar = datepicker.querySelector('pkt-calendar') as PktCalendar
318
+ await calendar?.updateComplete
317
319
 
318
320
  const monthTitle = datepicker.querySelector('.pkt-calendar__month-title')
319
321
  expect(monthTitle?.textContent).toContain('2024')
@@ -4,6 +4,7 @@ import { fireEvent } from '@testing-library/dom'
4
4
  import './datepicker'
5
5
  import '../calendar/calendar'
6
6
  import { PktDatepicker } from './datepicker'
7
+ import { PktDatepickerPopup } from './datepicker-popup'
7
8
 
8
9
  const waitForCustomElements = async () => {
9
10
  await customElements.whenDefined('pkt-datepicker')
@@ -40,15 +41,16 @@ describe('PktDatepicker', () => {
40
41
  })
41
42
 
42
43
  test('allows adding dates through calendar in multiple mode', async () => {
43
- const container = await createDatepicker('multiple')
44
+ const container = await createDatepicker('multiple calendar-open')
44
45
 
45
46
  const datepicker = container.querySelector('pkt-datepicker') as PktDatepicker
46
47
  await datepicker.updateComplete
47
48
 
48
- // Open calendar
49
- const calendarButton = datepicker.querySelector('button[type="button"]')
50
- fireEvent.click(calendarButton!)
51
- await datepicker.updateComplete
49
+ const popup = datepicker.querySelector('pkt-datepicker-popup') as PktDatepickerPopup
50
+ await popup?.updateComplete
51
+
52
+ const calendar = datepicker.querySelector('pkt-calendar')
53
+ await (calendar as any)?.updateComplete
52
54
 
53
55
  // Select a date
54
56
  const availableDate = datepicker.querySelector('[data-date]:not([data-disabled="disabled"])')
@@ -148,7 +150,7 @@ describe('PktDatepicker', () => {
148
150
  describe('Range selection', () => {
149
151
  test('displays range labels when showRangeLabels is true', async () => {
150
152
  const rangeValue = '2024-06-15,2024-06-20'
151
- const container = await createDatepicker(`value="${rangeValue}" range showRangeLabels`)
153
+ const container = await createDatepicker(`value="${rangeValue}" range show-range-labels`)
152
154
 
153
155
  const datepicker = container.querySelector('pkt-datepicker') as PktDatepicker
154
156
  await datepicker.updateComplete
@@ -57,6 +57,7 @@ export class PktDatepicker extends PktInputElement<Props> {
57
57
  * Element attributes and properties
58
58
  */
59
59
  private _valueProperty: string = ''
60
+ private _valueProcessing = false
60
61
  datepickerPopupRef: Ref<PktDatepickerPopup> = createRef()
61
62
 
62
63
  @property({ type: String, reflect: true })
@@ -71,7 +72,6 @@ export class PktDatepicker extends PktInputElement<Props> {
71
72
  this.requestUpdate('value', oldValue)
72
73
  }
73
74
 
74
- @property({ type: Array })
75
75
  _value: string[] = []
76
76
 
77
77
  @property({ type: String, reflect: true })
@@ -89,7 +89,7 @@ export class PktDatepicker extends PktInputElement<Props> {
89
89
  @property({ type: Boolean, reflect: true })
90
90
  range: boolean = specs.props.range.default
91
91
 
92
- @property({ type: Boolean })
92
+ @property({ type: Boolean, attribute: 'show-range-labels' })
93
93
  showRangeLabels: boolean = false
94
94
 
95
95
  @property({ type: String, reflect: true })
@@ -113,7 +113,10 @@ export class PktDatepicker extends PktInputElement<Props> {
113
113
  @property({ type: String })
114
114
  currentmonth: string | null = null
115
115
 
116
- @property({ type: Boolean, reflect: true })
116
+ @property({ type: String })
117
+ today: string | null = null
118
+
119
+ @property({ type: Boolean, reflect: true, attribute: 'calendar-open' })
117
120
  calendarOpen: boolean = false
118
121
 
119
122
  @property({ type: String })
@@ -153,9 +156,10 @@ export class PktDatepicker extends PktInputElement<Props> {
153
156
  }
154
157
 
155
158
  valueChanged(newValue: string | null, oldValue: string | null): void {
156
- if (newValue === oldValue) return
157
-
158
- const parsedValue = valueToArray(newValue)
159
+ if (this._valueProcessing || newValue === oldValue) return
160
+ this._valueProcessing = true
161
+ try {
162
+ const parsedValue = valueToArray(newValue)
159
163
 
160
164
  // For multiple dates, filter out invalid ones to prevent accumulating bad dates
161
165
  // For single/range dates, preserve user input for validation feedback
@@ -184,7 +188,13 @@ export class PktDatepicker extends PktInputElement<Props> {
184
188
  this._valueProperty = parsedValueString
185
189
  }
186
190
 
191
+ // In range mode, don't dispatch events until both dates are selected
192
+ if (this.range && filteredValue.length < 2) return
193
+
187
194
  super.valueChanged(parsedValueString, oldValue)
195
+ } finally {
196
+ this._valueProcessing = false
197
+ }
188
198
  }
189
199
 
190
200
  attributeChangedCallback(name: string, _old: string | null, value: string | null): void {
@@ -203,7 +213,14 @@ export class PktDatepicker extends PktInputElement<Props> {
203
213
  }
204
214
 
205
215
  updated(changedProperties: PropertyValues): void {
206
- if (changedProperties.has('value')) {
216
+ // Re-process value only when multiple/range also changed in the same update cycle,
217
+ // since attribute initialization may process value before multiple/range are set.
218
+ // When value is set via JS setter after init, multiple/range are already correct
219
+ // and the setter's valueChanged() call is sufficient.
220
+ if (
221
+ changedProperties.has('value') &&
222
+ (changedProperties.has('multiple') || changedProperties.has('range'))
223
+ ) {
207
224
  const newValue = Array.isArray(this.value) ? this.value.join(',') : this.value
208
225
  const oldValue = changedProperties.get('value')
209
226
  const oldValueStr = Array.isArray(oldValue) ? oldValue.join(',') : oldValue
@@ -323,6 +340,7 @@ export class PktDatepicker extends PktInputElement<Props> {
323
340
  .value=${this._value}
324
341
  .inputType=${this.inputType}
325
342
  .id=${this.id}
343
+ .label=${this.label}
326
344
  .min=${this.min}
327
345
  .max=${this.max}
328
346
  .placeholder=${this.placeholder}
@@ -443,6 +461,7 @@ export class PktDatepicker extends PktInputElement<Props> {
443
461
  : (this.excludedates as string).split(',')}
444
462
  .excludeweekdays=${this.excludeweekdays}
445
463
  .currentmonth=${this.currentmonth ? parseISODateString(this.currentmonth) : null}
464
+ .today=${this.today}
446
465
  @date-selected=${(e: CustomEvent) => {
447
466
  this.value = dateProcessingUtils.processDateSelection(e.detail, this.multiple, this.range)
448
467
  this._value = e.detail
@@ -140,7 +140,7 @@ describe('PktIcon', () => {
140
140
  await icon.updateComplete
141
141
 
142
142
  // Allow some time for async icon loading
143
- await new Promise((resolve) => setTimeout(resolve, 100))
143
+ await new Promise((resolve) => setTimeout(resolve, 0))
144
144
 
145
145
  expect(mockFetch).toHaveBeenCalledWith('https://test-cdn.example.com/icons/arrow-right.svg')
146
146
  })
@@ -152,7 +152,7 @@ describe('PktIcon', () => {
152
152
  await icon.updateComplete
153
153
 
154
154
  // Wait for icon to load
155
- await new Promise((resolve) => setTimeout(resolve, 100))
155
+ await new Promise((resolve) => setTimeout(resolve, 0))
156
156
 
157
157
  const cachedIcon = sessionStorage.getItem('https://test-cdn.example.com/icons/arrow-right.svg')
158
158
  expect(cachedIcon).toBe(mockSvgContent)
@@ -224,7 +224,7 @@ describe('PktIcon', () => {
224
224
  await icon.updateComplete
225
225
 
226
226
  // Allow initial load to complete
227
- await new Promise((resolve) => setTimeout(resolve, 100))
227
+ await new Promise((resolve) => setTimeout(resolve, 0))
228
228
 
229
229
  mockFetch.mockClear()
230
230
  // Setup mock again for the new path
@@ -240,7 +240,7 @@ describe('PktIcon', () => {
240
240
  await icon.updateComplete
241
241
 
242
242
  // Allow some time for async icon loading
243
- await new Promise((resolve) => setTimeout(resolve, 100))
243
+ await new Promise((resolve) => setTimeout(resolve, 0))
244
244
 
245
245
  expect(mockFetch).toHaveBeenCalledWith('https://new-cdn.example.com/icons/arrow-right.svg')
246
246
  })
@@ -284,7 +284,7 @@ describe('PktIcon', () => {
284
284
  await icon.updateComplete
285
285
 
286
286
  // Allow some time for async icon loading
287
- await new Promise((resolve) => setTimeout(resolve, 100))
287
+ await new Promise((resolve) => setTimeout(resolve, 0))
288
288
 
289
289
  expect(customFetch).toHaveBeenCalledWith('https://test-cdn.example.com/icons/custom-icon.svg')
290
290
  })
@@ -298,7 +298,7 @@ describe('PktIcon', () => {
298
298
  await icon.updateComplete
299
299
 
300
300
  // Allow some time for async icon loading
301
- await new Promise((resolve) => setTimeout(resolve, 100))
301
+ await new Promise((resolve) => setTimeout(resolve, 0))
302
302
 
303
303
  // Should render error SVG in light DOM when fetch is not available
304
304
  expect(icon.innerHTML).toContain('viewBox="0 0 32 32"')
@@ -310,7 +310,7 @@ describe('PktIcon', () => {
310
310
  const { container } = await createIconTest({
311
311
  name: 'arrow-right',
312
312
  })
313
- await new Promise((resolve) => setTimeout(resolve, 100))
313
+ await new Promise((resolve) => setTimeout(resolve, 0))
314
314
 
315
315
  const results = await axe(container)
316
316
  expect(results).toHaveNoViolations()
@@ -321,7 +321,7 @@ describe('PktIcon', () => {
321
321
  name: 'arrow-right',
322
322
  path: 'https://custom-cdn.example.com/icons/',
323
323
  })
324
- await new Promise((resolve) => setTimeout(resolve, 100))
324
+ await new Promise((resolve) => setTimeout(resolve, 0))
325
325
 
326
326
  const results = await axe(container)
327
327
  expect(results).toHaveNoViolations()
@@ -1,90 +0,0 @@
1
- "use strict";const tt=require("./class-map-CApIYSRo.cjs"),u=require("./element-aUzIoa1s.cjs"),q=require("./state-GDzxl12x.cjs");require("./icon-n4-ve48P.cjs");const ht=6048e5,Mt=864e5,et=Symbol.for("constructDateFrom");function k(e,t){return typeof e=="function"?e(t):e&&typeof e=="object"&&et in e?e[et](t):e instanceof Date?new e.constructor(t):new Date(t)}function b(e,t){return k(t||e,e)}function nt(e,t,n){const r=b(e,n==null?void 0:n.in);return isNaN(t)?k(e,NaN):(t&&r.setDate(r.getDate()+t),r)}let Tt={};function B(){return Tt}function H(e,t){var o,c,d,f;const n=B(),r=(t==null?void 0:t.weekStartsOn)??((c=(o=t==null?void 0:t.locale)==null?void 0:o.options)==null?void 0:c.weekStartsOn)??n.weekStartsOn??((f=(d=n.locale)==null?void 0:d.options)==null?void 0:f.weekStartsOn)??0,a=b(e,t==null?void 0:t.in),s=a.getDay(),i=(s<r?7:0)+s-r;return a.setDate(a.getDate()-i),a.setHours(0,0,0,0),a}function U(e,t){return H(e,{...t,weekStartsOn:1})}function dt(e,t){const n=b(e,t==null?void 0:t.in),r=n.getFullYear(),a=k(n,0);a.setFullYear(r+1,0,4),a.setHours(0,0,0,0);const s=U(a),i=k(n,0);i.setFullYear(r,0,4),i.setHours(0,0,0,0);const o=U(i);return n.getTime()>=s.getTime()?r+1:n.getTime()>=o.getTime()?r:r-1}function rt(e){const t=b(e),n=new Date(Date.UTC(t.getFullYear(),t.getMonth(),t.getDate(),t.getHours(),t.getMinutes(),t.getSeconds(),t.getMilliseconds()));return n.setUTCFullYear(t.getFullYear()),+e-+n}function ft(e,...t){const n=k.bind(null,t.find(r=>typeof r=="object"));return t.map(n)}function G(e,t){const n=b(e,t==null?void 0:t.in);return n.setHours(0,0,0,0),n}function xt(e,t,n){const[r,a]=ft(n==null?void 0:n.in,e,t),s=G(r),i=G(a),o=+s-rt(s),c=+i-rt(i);return Math.round((o-c)/Mt)}function Ot(e,t){const n=dt(e,t),r=k(e,0);return r.setFullYear(n,0,4),r.setHours(0,0,0,0),U(r)}function Pt(e){return e instanceof Date||typeof e=="object"&&Object.prototype.toString.call(e)==="[object Date]"}function Ct(e){return!(!Pt(e)&&typeof e!="number"||isNaN(+b(e)))}function Nt(e,t){const n=b(e,t==null?void 0:t.in);return n.setHours(23,59,59,999),n}function $t(e,t){const[n,r]=ft(e,t.start,t.end);return{start:n,end:r}}function mt(e,t){const{start:n,end:r}=$t(t==null?void 0:t.in,e);let a=+n>+r;const s=a?+n:+r,i=a?r:n;i.setHours(0,0,0,0);let o=1;const c=[];for(;+i<=s;)c.push(k(n,i)),i.setDate(i.getDate()+o),i.setHours(0,0,0,0);return a?c.reverse():c}function Et(e,t){const n=b(e,t==null?void 0:t.in);return n.setFullYear(n.getFullYear(),0,1),n.setHours(0,0,0,0),n}const Wt={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}},_t=(e,t,n)=>{let r;const a=Wt[e];return typeof a=="string"?r=a:t===1?r=a.one:r=a.other.replace("{{count}}",t.toString()),n!=null&&n.addSuffix?n.comparison&&n.comparison>0?"in "+r:r+" ago":r};function Q(e){return(t={})=>{const n=t.width?String(t.width):e.defaultWidth;return e.formats[n]||e.formats[e.defaultWidth]}}const Yt={full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},It={full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},Ft={full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},At={date:Q({formats:Yt,defaultWidth:"full"}),time:Q({formats:It,defaultWidth:"full"}),dateTime:Q({formats:Ft,defaultWidth:"full"})},Ht={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"},Rt=(e,t,n,r)=>Ht[e];function Y(e){return(t,n)=>{const r=n!=null&&n.context?String(n.context):"standalone";let a;if(r==="formatting"&&e.formattingValues){const i=e.defaultFormattingWidth||e.defaultWidth,o=n!=null&&n.width?String(n.width):i;a=e.formattingValues[o]||e.formattingValues[i]}else{const i=e.defaultWidth,o=n!=null&&n.width?String(n.width):e.defaultWidth;a=e.values[o]||e.values[i]}const s=e.argumentCallback?e.argumentCallback(t):t;return a[s]}}const qt={narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},Lt={narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},Ut={narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},Bt={narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},zt={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},jt={narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},Qt=(e,t)=>{const n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},Xt={ordinalNumber:Qt,era:Y({values:qt,defaultWidth:"wide"}),quarter:Y({values:Lt,defaultWidth:"wide",argumentCallback:e=>e-1}),month:Y({values:Ut,defaultWidth:"wide"}),day:Y({values:Bt,defaultWidth:"wide"}),dayPeriod:Y({values:zt,defaultWidth:"wide",formattingValues:jt,defaultFormattingWidth:"wide"})};function I(e){return(t,n={})=>{const r=n.width,a=r&&e.matchPatterns[r]||e.matchPatterns[e.defaultMatchWidth],s=t.match(a);if(!s)return null;const i=s[0],o=r&&e.parsePatterns[r]||e.parsePatterns[e.defaultParseWidth],c=Array.isArray(o)?Vt(o,y=>y.test(i)):Gt(o,y=>y.test(i));let d;d=e.valueCallback?e.valueCallback(c):c,d=n.valueCallback?n.valueCallback(d):d;const f=t.slice(i.length);return{value:d,rest:f}}}function Gt(e,t){for(const n in e)if(Object.prototype.hasOwnProperty.call(e,n)&&t(e[n]))return n}function Vt(e,t){for(let n=0;n<e.length;n++)if(t(e[n]))return n}function Kt(e){return(t,n={})=>{const r=t.match(e.matchPattern);if(!r)return null;const a=r[0],s=t.match(e.parsePattern);if(!s)return null;let i=e.valueCallback?e.valueCallback(s[0]):s[0];i=n.valueCallback?n.valueCallback(i):i;const o=t.slice(a.length);return{value:i,rest:o}}}const Jt=/^(\d+)(th|st|nd|rd)?/i,Zt=/\d+/i,te={narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},ee={any:[/^b/i,/^(a|c)/i]},ne={narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},re={any:[/1/i,/2/i,/3/i,/4/i]},ae={narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},se={narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},ie={narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},oe={narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},ce={narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},ue={any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},le={ordinalNumber:Kt({matchPattern:Jt,parsePattern:Zt,valueCallback:e=>parseInt(e,10)}),era:I({matchPatterns:te,defaultMatchWidth:"wide",parsePatterns:ee,defaultParseWidth:"any"}),quarter:I({matchPatterns:ne,defaultMatchWidth:"wide",parsePatterns:re,defaultParseWidth:"any",valueCallback:e=>e+1}),month:I({matchPatterns:ae,defaultMatchWidth:"wide",parsePatterns:se,defaultParseWidth:"any"}),day:I({matchPatterns:ie,defaultMatchWidth:"wide",parsePatterns:oe,defaultParseWidth:"any"}),dayPeriod:I({matchPatterns:ce,defaultMatchWidth:"any",parsePatterns:ue,defaultParseWidth:"any"})},he={code:"en-US",formatDistance:_t,formatLong:At,formatRelative:Rt,localize:Xt,match:le,options:{weekStartsOn:0,firstWeekContainsDate:1}};function de(e,t){const n=b(e,t==null?void 0:t.in);return xt(n,Et(n))+1}function fe(e,t){const n=b(e,t==null?void 0:t.in),r=+U(n)-+Ot(n);return Math.round(r/ht)+1}function gt(e,t){var f,y,w,S;const n=b(e,t==null?void 0:t.in),r=n.getFullYear(),a=B(),s=(t==null?void 0:t.firstWeekContainsDate)??((y=(f=t==null?void 0:t.locale)==null?void 0:f.options)==null?void 0:y.firstWeekContainsDate)??a.firstWeekContainsDate??((S=(w=a.locale)==null?void 0:w.options)==null?void 0:S.firstWeekContainsDate)??1,i=k((t==null?void 0:t.in)||e,0);i.setFullYear(r+1,0,s),i.setHours(0,0,0,0);const o=H(i,t),c=k((t==null?void 0:t.in)||e,0);c.setFullYear(r,0,s),c.setHours(0,0,0,0);const d=H(c,t);return+n>=+o?r+1:+n>=+d?r:r-1}function me(e,t){var o,c,d,f;const n=B(),r=(t==null?void 0:t.firstWeekContainsDate)??((c=(o=t==null?void 0:t.locale)==null?void 0:o.options)==null?void 0:c.firstWeekContainsDate)??n.firstWeekContainsDate??((f=(d=n.locale)==null?void 0:d.options)==null?void 0:f.firstWeekContainsDate)??1,a=gt(e,t),s=k((t==null?void 0:t.in)||e,0);return s.setFullYear(a,0,r),s.setHours(0,0,0,0),H(s,t)}function yt(e,t){const n=b(e,t==null?void 0:t.in),r=+H(n,t)-+me(n,t);return Math.round(r/ht)+1}function l(e,t){const n=e<0?"-":"",r=Math.abs(e).toString().padStart(t,"0");return n+r}const v={y(e,t){const n=e.getFullYear(),r=n>0?n:1-n;return l(t==="yy"?r%100:r,t.length)},M(e,t){const n=e.getMonth();return t==="M"?String(n+1):l(n+1,2)},d(e,t){return l(e.getDate(),t.length)},a(e,t){const n=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.toUpperCase();case"aaa":return n;case"aaaaa":return n[0];case"aaaa":default:return n==="am"?"a.m.":"p.m."}},h(e,t){return l(e.getHours()%12||12,t.length)},H(e,t){return l(e.getHours(),t.length)},m(e,t){return l(e.getMinutes(),t.length)},s(e,t){return l(e.getSeconds(),t.length)},S(e,t){const n=t.length,r=e.getMilliseconds(),a=Math.trunc(r*Math.pow(10,n-3));return l(a,t.length)}},$={midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},at={G:function(e,t,n){const r=e.getFullYear()>0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});case"GGGG":default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if(t==="yo"){const r=e.getFullYear(),a=r>0?r:1-r;return n.ordinalNumber(a,{unit:"year"})}return v.y(e,t)},Y:function(e,t,n,r){const a=gt(e,r),s=a>0?a:1-a;if(t==="YY"){const i=s%100;return l(i,2)}return t==="Yo"?n.ordinalNumber(s,{unit:"year"}):l(s,t.length)},R:function(e,t){const n=dt(e);return l(n,t.length)},u:function(e,t){const n=e.getFullYear();return l(n,t.length)},Q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return l(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});case"QQQQ":default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){const r=Math.ceil((e.getMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return l(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});case"qqqq":default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){const r=e.getMonth();switch(t){case"M":case"MM":return v.M(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});case"MMMM":default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){const r=e.getMonth();switch(t){case"L":return String(r+1);case"LL":return l(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});case"LLLL":default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){const a=yt(e,r);return t==="wo"?n.ordinalNumber(a,{unit:"week"}):l(a,t.length)},I:function(e,t,n){const r=fe(e);return t==="Io"?n.ordinalNumber(r,{unit:"week"}):l(r,t.length)},d:function(e,t,n){return t==="do"?n.ordinalNumber(e.getDate(),{unit:"date"}):v.d(e,t)},D:function(e,t,n){const r=de(e);return t==="Do"?n.ordinalNumber(r,{unit:"dayOfYear"}):l(r,t.length)},E:function(e,t,n){const r=e.getDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});case"EEEE":default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){const a=e.getDay(),s=(a-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(s);case"ee":return l(s,2);case"eo":return n.ordinalNumber(s,{unit:"day"});case"eee":return n.day(a,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(a,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(a,{width:"short",context:"formatting"});case"eeee":default:return n.day(a,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){const a=e.getDay(),s=(a-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(s);case"cc":return l(s,t.length);case"co":return n.ordinalNumber(s,{unit:"day"});case"ccc":return n.day(a,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(a,{width:"narrow",context:"standalone"});case"cccccc":return n.day(a,{width:"short",context:"standalone"});case"cccc":default:return n.day(a,{width:"wide",context:"standalone"})}},i:function(e,t,n){const r=e.getDay(),a=r===0?7:r;switch(t){case"i":return String(a);case"ii":return l(a,t.length);case"io":return n.ordinalNumber(a,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});case"iiii":default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){const a=e.getHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"aaa":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"aaaaa":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"aaaa":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},b:function(e,t,n){const r=e.getHours();let a;switch(r===12?a=$.noon:r===0?a=$.midnight:a=r/12>=1?"pm":"am",t){case"b":case"bb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"bbb":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"}).toLowerCase();case"bbbbb":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"bbbb":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},B:function(e,t,n){const r=e.getHours();let a;switch(r>=17?a=$.evening:r>=12?a=$.afternoon:r>=4?a=$.morning:a=$.night,t){case"B":case"BB":case"BBB":return n.dayPeriod(a,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(a,{width:"narrow",context:"formatting"});case"BBBB":default:return n.dayPeriod(a,{width:"wide",context:"formatting"})}},h:function(e,t,n){if(t==="ho"){let r=e.getHours()%12;return r===0&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return v.h(e,t)},H:function(e,t,n){return t==="Ho"?n.ordinalNumber(e.getHours(),{unit:"hour"}):v.H(e,t)},K:function(e,t,n){const r=e.getHours()%12;return t==="Ko"?n.ordinalNumber(r,{unit:"hour"}):l(r,t.length)},k:function(e,t,n){let r=e.getHours();return r===0&&(r=24),t==="ko"?n.ordinalNumber(r,{unit:"hour"}):l(r,t.length)},m:function(e,t,n){return t==="mo"?n.ordinalNumber(e.getMinutes(),{unit:"minute"}):v.m(e,t)},s:function(e,t,n){return t==="so"?n.ordinalNumber(e.getSeconds(),{unit:"second"}):v.s(e,t)},S:function(e,t){return v.S(e,t)},X:function(e,t,n){const r=e.getTimezoneOffset();if(r===0)return"Z";switch(t){case"X":return it(r);case"XXXX":case"XX":return O(r);case"XXXXX":case"XXX":default:return O(r,":")}},x:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"x":return it(r);case"xxxx":case"xx":return O(r);case"xxxxx":case"xxx":default:return O(r,":")}},O:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+st(r,":");case"OOOO":default:return"GMT"+O(r,":")}},z:function(e,t,n){const r=e.getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+st(r,":");case"zzzz":default:return"GMT"+O(r,":")}},t:function(e,t,n){const r=Math.trunc(+e/1e3);return l(r,t.length)},T:function(e,t,n){return l(+e,t.length)}};function st(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),a=Math.trunc(r/60),s=r%60;return s===0?n+String(a):n+String(a)+t+l(s,2)}function it(e,t){return e%60===0?(e>0?"-":"+")+l(Math.abs(e)/60,2):O(e,t)}function O(e,t=""){const n=e>0?"-":"+",r=Math.abs(e),a=l(Math.trunc(r/60),2),s=l(r%60,2);return n+a+t+s}const ot=(e,t)=>{switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});case"PPPP":default:return t.date({width:"full"})}},wt=(e,t)=>{switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});case"pppp":default:return t.time({width:"full"})}},ge=(e,t)=>{const n=e.match(/(P+)(p+)?/)||[],r=n[1],a=n[2];if(!a)return ot(e,t);let s;switch(r){case"P":s=t.dateTime({width:"short"});break;case"PP":s=t.dateTime({width:"medium"});break;case"PPP":s=t.dateTime({width:"long"});break;case"PPPP":default:s=t.dateTime({width:"full"});break}return s.replace("{{date}}",ot(r,t)).replace("{{time}}",wt(a,t))},ye={p:wt,P:ge},we=/^D+$/,pe=/^Y+$/,be=["D","DD","YY","YYYY"];function De(e){return we.test(e)}function ke(e){return pe.test(e)}function Se(e,t,n){const r=ve(e,t,n);if(console.warn(r),be.includes(e))throw new RangeError(r)}function ve(e,t,n){const r=e[0]==="Y"?"years":"days of the month";return`Use \`${e.toLowerCase()}\` instead of \`${e}\` (in \`${t}\`) for formatting ${r} to the input \`${n}\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`}const Me=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,Te=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,xe=/^'([^]*?)'?$/,Oe=/''/g,Pe=/[a-zA-Z]/;function Ce(e,t,n){var f,y,w,S;const r=B(),a=r.locale??he,s=r.firstWeekContainsDate??((y=(f=r.locale)==null?void 0:f.options)==null?void 0:y.firstWeekContainsDate)??1,i=r.weekStartsOn??((S=(w=r.locale)==null?void 0:w.options)==null?void 0:S.weekStartsOn)??0,o=b(e,n==null?void 0:n.in);if(!Ct(o))throw new RangeError("Invalid time value");let c=t.match(Te).map(p=>{const g=p[0];if(g==="p"||g==="P"){const _=ye[g];return _(p,a.formatLong)}return p}).join("").match(Me).map(p=>{if(p==="''")return{isToken:!1,value:"'"};const g=p[0];if(g==="'")return{isToken:!1,value:Ne(p)};if(at[g])return{isToken:!0,value:p};if(g.match(Pe))throw new RangeError("Format string contains an unescaped latin alphabet character `"+g+"`");return{isToken:!1,value:p}});a.localize.preprocessor&&(c=a.localize.preprocessor(o,c));const d={firstWeekContainsDate:s,weekStartsOn:i,locale:a};return c.map(p=>{if(!p.isToken)return p.value;const g=p.value;(ke(g)||De(g))&&Se(g,t,String(e));const _=at[g[0]];return _(o,g,a.localize,d)}).join("")}function Ne(e){const t=e.match(xe);return t?t[1].replace(Oe,"'"):e}function $e(e,t){const n=b(e,t==null?void 0:t.in).getDay();return n===0?7:n}function Ee(e,t,n="long"){return new Intl.DateTimeFormat("en-US",{hour:"numeric",timeZone:e,timeZoneName:n}).format(t).split(/\s/g).slice(2).join(" ")}const X={},A={};function P(e,t){try{const r=(X[e]||(X[e]=new Intl.DateTimeFormat("en-US",{timeZone:e,timeZoneName:"longOffset"}).format))(t).split("GMT")[1];return r in A?A[r]:ct(r,r.split(":"))}catch{if(e in A)return A[e];const n=e==null?void 0:e.match(We);return n?ct(e,n.slice(1)):NaN}}const We=/([+-]\d\d):?(\d\d)?/;function ct(e,t){const n=+(t[0]||0),r=+(t[1]||0),a=+(t[2]||0)/60;return A[e]=n*60+r>0?n*60+r+a:n*60-r-a}class D extends Date{constructor(...t){super(),t.length>1&&typeof t[t.length-1]=="string"&&(this.timeZone=t.pop()),this.internal=new Date,isNaN(P(this.timeZone,this))?this.setTime(NaN):t.length?typeof t[0]=="number"&&(t.length===1||t.length===2&&typeof t[1]!="number")?this.setTime(t[0]):typeof t[0]=="string"?this.setTime(+new Date(t[0])):t[0]instanceof Date?this.setTime(+t[0]):(this.setTime(+new Date(...t)),pt(this),V(this)):this.setTime(Date.now())}static tz(t,...n){return n.length?new D(...n,t):new D(Date.now(),t)}withTimeZone(t){return new D(+this,t)}getTimezoneOffset(){const t=-P(this.timeZone,this);return t>0?Math.floor(t):Math.ceil(t)}setTime(t){return Date.prototype.setTime.apply(this,arguments),V(this),+this}[Symbol.for("constructDateFrom")](t){return new D(+new Date(t),this.timeZone)}}const ut=/^(get|set)(?!UTC)/;Object.getOwnPropertyNames(Date.prototype).forEach(e=>{if(!ut.test(e))return;const t=e.replace(ut,"$1UTC");D.prototype[t]&&(e.startsWith("get")?D.prototype[e]=function(){return this.internal[t]()}:(D.prototype[e]=function(){return Date.prototype[t].apply(this.internal,arguments),_e(this),+this},D.prototype[t]=function(){return Date.prototype[t].apply(this,arguments),V(this),+this}))});function V(e){e.internal.setTime(+e),e.internal.setUTCSeconds(e.internal.getUTCSeconds()-Math.round(-P(e.timeZone,e)*60))}function _e(e){Date.prototype.setFullYear.call(e,e.internal.getUTCFullYear(),e.internal.getUTCMonth(),e.internal.getUTCDate()),Date.prototype.setHours.call(e,e.internal.getUTCHours(),e.internal.getUTCMinutes(),e.internal.getUTCSeconds(),e.internal.getUTCMilliseconds()),pt(e)}function pt(e){const t=P(e.timeZone,e),n=t>0?Math.floor(t):Math.ceil(t),r=new Date(+e);r.setUTCHours(r.getUTCHours()-1);const a=-new Date(+e).getTimezoneOffset(),s=-new Date(+r).getTimezoneOffset(),i=a-s,o=Date.prototype.getHours.apply(e)!==e.internal.getUTCHours();i&&o&&e.internal.setUTCMinutes(e.internal.getUTCMinutes()+i);const c=a-n;c&&Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+c);const d=new Date(+e);d.setUTCSeconds(0);const f=a>0?d.getSeconds():(d.getSeconds()-60)%60,y=Math.round(-(P(e.timeZone,e)*60))%60;(y||f)&&(e.internal.setUTCSeconds(e.internal.getUTCSeconds()+y),Date.prototype.setUTCSeconds.call(e,Date.prototype.getUTCSeconds.call(e)+y+f));const w=P(e.timeZone,e),S=w>0?Math.floor(w):Math.ceil(w),g=-new Date(+e).getTimezoneOffset()-S,_=S!==n,Z=g-c;if(_&&Z){Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+Z);const z=P(e.timeZone,e),vt=z>0?Math.floor(z):Math.ceil(z),j=S-vt;j&&(e.internal.setUTCMinutes(e.internal.getUTCMinutes()+j),Date.prototype.setUTCMinutes.call(e,Date.prototype.getUTCMinutes.call(e)+j))}}class M extends D{static tz(t,...n){return n.length?new M(...n,t):new M(Date.now(),t)}toISOString(){const[t,n,r]=this.tzComponents(),a=`${t}${n}:${r}`;return this.internal.toISOString().slice(0,-1)+a}toString(){return`${this.toDateString()} ${this.toTimeString()}`}toDateString(){const[t,n,r,a]=this.internal.toUTCString().split(" ");return`${t==null?void 0:t.slice(0,-1)} ${r} ${n} ${a}`}toTimeString(){const t=this.internal.toUTCString().split(" ")[4],[n,r,a]=this.tzComponents();return`${t} GMT${n}${r}${a} (${Ee(this.timeZone,this)})`}toLocaleString(t,n){return Date.prototype.toLocaleString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}toLocaleDateString(t,n){return Date.prototype.toLocaleDateString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}toLocaleTimeString(t,n){return Date.prototype.toLocaleTimeString.call(this,t,{...n,timeZone:(n==null?void 0:n.timeZone)||this.timeZone})}tzComponents(){const t=this.getTimezoneOffset(),n=t>0?"-":"+",r=String(Math.floor(Math.abs(t)/60)).padStart(2,"0"),a=String(Math.abs(t)%60).padStart(2,"0");return[n,r,a]}withTimeZone(t){return new M(+this,t)}[Symbol.for("constructDateFrom")](t){return new M(+new Date(t),this.timeZone)}}window.pktTz=window.pktTz===void 0?"Europe/Oslo":window.pktTz;const Ye=(e=window.pktTz)=>{const t=new M(new Date().toISOString(),e);return t.setHours(0,0,0,0),isNaN(t.getTime())?new Date:new Date(t.getFullYear(),t.getMonth(),t.getDate())};function T(e){if(!e||e==="")return new Date;if(/^\d{4}-\d{2}-\d{2}$/.test(e)){const[t,n,r]=e.split("-").map(Number);return new Date(t,n-1,r)}if(/^\d{4}-\d{2}$/.test(e)){const[t,n]=e.split("-").map(Number);return new Date(t,n-1,1)}return/^\d{4}$/.test(e)?new Date(Number(e),0,1):new Date(e)}const m=e=>{if(!e||isNaN(e.getTime()))return"";const t=e.getFullYear(),n=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0");return`${t}-${n}-${r}`},W=e=>{if(!e)return null;const t=T(e);return isNaN(t.getTime())?null:t},Ie=(e,t)=>{const n=N(e);return isNaN(n.getTime())?"":Ce(n,t)},N=(e="",t)=>{const n=typeof e=="string"?T(e):e;return!n||isNaN(n.getTime())?new Date:t?t==="end"?Nt(n):G(n):n},C=(e,t,n=1)=>{if(typeof e!="number"||typeof t!="number"||typeof n!="number"||isNaN(e)||isNaN(t)||isNaN(n))return new Date;const r=new Date(e,t,n);return isNaN(r.getTime())?new Date:r},F=e=>{let t;return typeof e=="number"?t=new M(e,window.pktTz):t=new M(e,window.pktTz),t.setHours(12,0,0,0),t},Fe=e=>!e||isNaN(e.getTime())?"":new Intl.DateTimeFormat("no",{dateStyle:"full",timeZone:window.pktTz}).format(e),Ae=(e,t,n)=>{if(!e||isNaN(e.getTime()))return!1;const r=t?N(t):null,a=n?N(n):null;return!(r&&e<r||a&&e>a)},He=(e,t)=>{if(!e||isNaN(e.getTime())||!Array.isArray(t))return!1;const n=m(e);return t.includes(n)},Re=(e,t)=>{if(!e||isNaN(e.getTime())||!Array.isArray(t))return!1;const n=e.getDay().toString();return t.includes(n)},bt=(e,t,n,r,a)=>!(!e||isNaN(e.getTime())||!Ae(e,t,n)||r&&He(e,r)||a&&Re(e,a)),qe=(e,t,n,r,a)=>e.filter(s=>{const i=W(s);return i&&bt(i,t,n,r,a)}),Le=e=>e.slice().sort((t,n)=>{const r=W(t),a=W(n);return!r||!a?0:r.getTime()-a.getTime()}),Ue=(e,t)=>{const n=W(e),r=W(t);return!n||!r?!1:n<=r},Dt=e=>e?Array.isArray(e)?e.filter(Boolean):String(e).split(",").map(t=>t.trim()).filter(Boolean):[],Be=e=>e.join(","),ze=e=>Dt(e),je=e=>e?T(e):null,Qe=e=>{if(typeof e=="string")return e.split(",").map(t=>T(t));if(Array.isArray(e))return e.map(t=>T(t))},L={csvToArray:ze,stringToDate:je,stringsToDate:Qe},Xe={earliest:{default:null},latest:{default:null},weeknumbers:{default:!1},withcontrols:{default:!1},multiple:{default:!1},maxMultiple:{default:4},range:{default:!1}},x={props:Xe};function kt(e,t){const n=t.excludedates.map(r=>typeof r=="string"?r:m(r));return!bt(e,t.earliest,t.latest,n,t.excludeweekdays)}function Ge(e,t,n,r){return!!(kt(e,n)||!t&&r.multiple&&r.maxMultiple>0&&r.selectedCount>=r.maxMultiple)}function Ve(e,t,n){const r=C(e,t,0);return!(n&&N(n)>r)}function Ke(e,t,n){const r=C(t===11?e+1:e,t===11?0:t+1,1);return!(n&&N(n)<r)}const R=7,Je=6;function Ze(e,t){const n=C(e,t,1),r=C(e,t+1,0),a=(n.getDay()+Je)%R,s=r.getDate(),i=Math.ceil((s+a)/R),c=C(e,t,0).getDate(),d=yt(n);return{firstDayOfMonth:n,lastDayOfMonth:r,startingDay:a,numDays:s,numRows:i,numDaysPrevMonth:c,initialWeek:d}}function tn(e,t,n,r){const{startingDay:a,numDays:s}=r;return e===0&&t<a?"prev-month":n>s?"next-month":"current-month"}function en(e,t,n,r){const{startingDay:a,numDaysPrevMonth:s,numDays:i}=r;return e==="prev-month"?s-(a-t-1):e==="next-month"?n-i:n}function E(e){return typeof e=="string"&&(e=e.split(",")),e.length===1&&e[0]===""?[]:e.map(t=>T(t))}function lt(e,t){const n=mt({start:e,end:t}),r={};if(Array.isArray(n)&&n.length)for(let a=0;a<n.length;a++){const s=n[a],i=s>e&&s<t;r[m(s)]=i}return r}function St(e,t,n,r){if(t.length!==1)return!0;const a=mt({start:t[0],end:e});if(!Array.isArray(a)||!a.length)return!0;for(let s=0;s<a.length;s++){for(const i of n)if(i>t[0]&&i<e)return!1;if(r.includes($e(a[s]).toString()))return!1}return!0}function K(e,t){const n=m(e);return t.includes(n)?t:[...t,n]}function J(e,t){const n=m(e),r=t.indexOf(n);if(r===-1)return t;if(t.length===1)return[];const a=[...t];return a.splice(r,1),a}function nn(e,t,n){const r=m(e);return t.includes(r)?J(e,t):n>0&&t.length>=n?t:K(e,t)}function rn(e,t,n){const r=m(e),a=E(t);if(t.includes(r))return t.indexOf(r)===0?[]:J(e,t);if(t.length>1)return[r];if(t.length===1){if(!St(e,a,n.excludedates,n.excludeweekdays))return[r];if(a[0]>e)return[r]}return K(e,t)}const an={ArrowLeft:-1,ArrowRight:1,ArrowUp:-R,ArrowDown:R};function sn(e){var n;const t=e.nodeName;return t==="INPUT"||t==="SELECT"||t==="BUTTON"&&!((n=e.dataset)!=null&&n.date)}function on(e,t,n){let r=nt(e,t);if(!r)return null;let a=n(`button[data-date="${m(r)}"]`);for(;a instanceof HTMLButtonElement&&a.dataset.disabled;)if(r=nt(r,t),a=n(`button[data-date="${m(r)}"]`),!a)return null;return r}function cn(e){return an[e]??null}var un=Object.defineProperty,ln=Object.getOwnPropertyDescriptor,h=(e,t,n,r)=>{for(var a=r>1?void 0:r?ln(t,n):t,s=e.length-1,i;s>=0;s--)(i=e[s])&&(a=(r?i(t,n,a):i(a))||a);return r&&a&&un(t,n,a),a};exports.PktCalendar=class extends u.PktElement{constructor(){super(...arguments),this.selected=[],this.multiple=x.props.multiple.default,this.maxMultiple=x.props.maxMultiple.default,this.range=x.props.range.default,this.earliest=x.props.earliest.default,this.latest=x.props.latest.default,this.excludedates=[],this.excludeweekdays=[],this.weeknumbers=x.props.weeknumbers.default,this.withcontrols=x.props.withcontrols.default,this.currentmonth=null,this.dayStrings=this.strings.dates.daysShort,this.dayStringsLong=this.strings.dates.days,this.monthStrings=this.strings.dates.months,this.weekString=this.strings.dates.week,this.prevMonthString=this.strings.dates.prevMonth,this.nextMonthString=this.strings.dates.nextMonth,this._selected=[],this.inRange={},this.rangeHovered=null,this.year=0,this.month=0,this.week=0,this.currentmonthtouched=!1,this.focusedDate=null,this.selectableDates=[],this.tabIndexSet=0}firstUpdated(t){this.addEventListener("keydown",this.handleKeydown)}disconnectedCallback(){this.removeEventListener("keydown",this.handleKeydown),super.disconnectedCallback()}updated(t){super.updated(t),t.has("selected")&&this.convertSelected()}convertSelected(){typeof this.selected=="string"&&(this.selected=this.selected.split(",")),this.selected.length===1&&this.selected[0]===""&&(this.selected=[]),this._selected=E(this.selected),this.range&&this.selected.length===2&&(this.inRange=lt(this._selected[0],this._selected[1])),this.setCurrentMonth()}setCurrentMonth(){if(this.currentmonth===null&&!this.currentmonthtouched&&(this.currentmonthtouched=!0),this.selected.length&&this.selected[0]!==""){const t=T(this.selected[this.selected.length-1]);this.currentmonth=isNaN(t.getTime())?F(new Date):t}else this.currentmonth===null&&(this.currentmonth=F(new Date));(!this.currentmonth||isNaN(this.currentmonth.getTime()))&&(this.currentmonth=F(new Date)),this.year=this.currentmonth.getFullYear(),this.month=this.currentmonth.getMonth()}handleKeydown(t){const n=cn(t.key);n!==null&&this.handleArrowKey(t,n)}handleArrowKey(t,n){const r=t.target;if(sn(r))return;if(t.preventDefault(),!this.focusedDate){this.focusOnCurrentDate();return}const a=this.focusedDate?N(this.focusedDate):C(this.year,this.month,1),s=on(a,n,this.querySelector.bind(this));if(s){const i=this.querySelector(`button[data-date="${m(s)}"]`);i instanceof HTMLButtonElement&&!i.dataset.disabled&&(this.focusedDate=m(s),i.focus())}}render(){return u.x`
2
- <div
3
- class="pkt-calendar ${this.weeknumbers?"pkt-cal-weeknumbers":""}"
4
- @focusout=${this.closeEvent}
5
- @keydown=${t=>{t.key==="Escape"&&(t.preventDefault(),this.close())}}
6
- >
7
- <nav class="pkt-cal-month-nav">
8
- ${this.renderMonthNavButton("prev")}
9
- ${this.renderMonthNav()}
10
- ${this.renderMonthNavButton("next")}
11
- </nav>
12
- <table
13
- class="pkt-cal-days pkt-txt-12-medium pkt-calendar__body"
14
- role="grid"
15
- ?aria-multiselectable=${this.range||this.multiple}
16
- >
17
- <thead>
18
- ${this.renderDayNames()}
19
- </thead>
20
- <tbody>
21
- ${this.renderCalendarBody()}
22
- </tbody>
23
- </table>
24
- </div>
25
- `}renderMonthNavButton(t){const n=t==="prev",r=n?this.isPrevMonthAllowed():this.isNextMonthAllowed(),a=n?this.prevMonthString:this.nextMonthString,s=n?"chevron-thin-left":"chevron-thin-right",i=n?"pkt-calendar__prev-month":"pkt-calendar__next-month",o=n?()=>this.prevMonth():()=>this.nextMonth();return u.x`<div>
26
- <button
27
- type="button"
28
- aria-label="${a}"
29
- @click=${()=>r&&o()}
30
- @keydown=${c=>{(c.key==="Enter"||c.key===" ")&&(c.preventDefault(),r&&o())}}
31
- class="pkt-btn pkt-btn--tertiary pkt-btn--small pkt-btn--icon-only ${i} ${r?"":"pkt-hide"}"
32
- .data-disabled=${r?u.E:"disabled"}
33
- ?aria-disabled=${!r}
34
- tabindex=${r?"0":"-1"}
35
- >
36
- <pkt-icon class="pkt-btn__icon" name="${s}"></pkt-icon>
37
- <span class="pkt-btn__text">${a}</span>
38
- </button>
39
- </div>`}renderDayNames(){const t=[];this.weeknumbers&&t.push(u.x`<th><div class="pkt-calendar__week-number">${this.weekString}</div></th>`);for(let n=0;n<this.dayStrings.length;n++)t.push(u.x`<th>
40
- <div class="pkt-calendar__day-name" aria-label="${this.dayStringsLong[n]}">
41
- ${this.dayStrings[n]}
42
- </div>
43
- </th>`);return u.x`<tr class="pkt-cal-week-row">${t}</tr>`}renderMonthNav(){return this.withcontrols?u.x`<div class="pkt-cal-month-picker">
44
- <label for="${this.id}-monthnav" class="pkt-hide">${this.strings.dates.month}</label>
45
- <select
46
- aria-label="${this.strings.dates.month}"
47
- class="pkt-input pkt-input-compact"
48
- id="${this.id}-monthnav"
49
- @change=${t=>{t.stopImmediatePropagation();const n=t.target;this.changeMonth(this.year,parseInt(n.value))}}
50
- >
51
- ${this.monthStrings.map((t,n)=>u.x`<option value=${n} ?selected=${this.month===n}>${t}</option>`)}
52
- </select>
53
- <label for="${this.id}-yearnav" class="pkt-hide">${this.strings.dates.year}</label>
54
- <input
55
- aria-label="${this.strings.dates.year}"
56
- class="pkt-input pkt-cal-input-year pkt-input-compact"
57
- id="${this.id}-yearnav"
58
- type="number"
59
- size="4"
60
- placeholder="0000"
61
- @change=${t=>{t.stopImmediatePropagation();const n=t.target;this.changeMonth(parseInt(n.value),this.month)}}
62
- .value=${this.year}
63
- />
64
- </div>`:u.x`<div class="pkt-txt-16-medium pkt-calendar__month-title" aria-live="polite">
65
- ${this.monthStrings[this.month]} ${this.year}
66
- </div>`}getDayViewData(t,n){const r=C(this.year,this.month,t),a=m(r),s=a===m(n),i=this.selected.includes(a),o=this.isDayDisabled(r,i),c=this.calculateTabIndex(a,o,t);return{currentDate:r,currentDateISO:a,isToday:s,isSelected:i,isDisabled:o,ariaLabel:Fe(r),tabindex:c}}getDateConstraints(){return{earliest:this.earliest,latest:this.latest,excludedates:this.excludedates,excludeweekdays:this.excludeweekdays}}isDayDisabled(t,n){return Ge(t,n,this.getDateConstraints(),{multiple:this.multiple,maxMultiple:this.maxMultiple,selectedCount:this.selected.length})}calculateTabIndex(t,n,r){return this.focusedDate?this.focusedDate===t&&!n?"0":"-1":!n&&this.tabIndexSet===0?(this.tabIndexSet=r,"0"):this.tabIndexSet===r?"0":"-1"}getDayCellClasses(t){const{currentDateISO:n,isToday:r,isSelected:a}=t,s=this.range&&(this.selected.length===2||this.rangeHovered!==null)&&n===this.selected[0],i=this.range&&this.selected.length===2&&n===this.selected[1];return{"pkt-cal-today":r,"pkt-cal-selected":a,"pkt-cal-in-range":this.inRange[n],"pkt-cal-excluded":this.isExcluded(t.currentDate),"pkt-cal-in-range-first":s,"pkt-cal-in-range-last":i,"pkt-cal-range-hover":this.rangeHovered!==null&&n===m(this.rangeHovered)}}getDayButtonClasses(t){const{currentDateISO:n,isToday:r,isSelected:a,isDisabled:s}=t,i=this.range&&(this.selected.length===2||this.rangeHovered!==null)&&n===this.selected[0],o=this.range&&this.selected.length===2&&n===this.selected[1];return{"pkt-calendar__date":!0,"pkt-calendar__date--today":r,"pkt-calendar__date--selected":a,"pkt-calendar__date--disabled":s,"pkt-calendar__date--in-range":this.inRange[n],"pkt-calendar__date--in-range-hover":this.rangeHovered!==null&&n===m(this.rangeHovered),"pkt-calendar__date--range-start":i,"pkt-calendar__date--range-end":o}}handleDayFocus(t,n){this.range&&!this.isExcluded(t)&&this.handleRangeHover(t),this.focusedDate=n}renderDayView(t,n){const r=this.getDayViewData(t,n),{currentDate:a,currentDateISO:s,isSelected:i,isDisabled:o,ariaLabel:c,tabindex:d}=r;this.selectableDates.push({currentDateISO:s,isDisabled:o,tabindex:d});const f=this.getDayCellClasses(r),y=this.getDayButtonClasses(r);return u.x`<td class=${tt.e(f)}>
67
- <button
68
- type="button"
69
- aria-pressed=${i?"true":"false"}
70
- ?disabled=${o}
71
- class="pkt-btn pkt-btn--tertiary pkt-btn--small pkt-btn--label-only ${tt.e(y)}"
72
- @mouseover=${()=>this.range&&!this.isExcluded(a)&&this.handleRangeHover(a)}
73
- @focus=${()=>this.handleDayFocus(a,s)}
74
- aria-label="${c}"
75
- tabindex=${d}
76
- data-disabled=${o?"disabled":u.E}
77
- data-date=${s}
78
- @keydown=${w=>{(w.key==="Enter"||w.key===" ")&&(w.preventDefault(),this.handleDateSelect(a))}}
79
- @click=${w=>{o||(w.preventDefault(),this.handleDateSelect(a))}}
80
- >
81
- <span class="pkt-btn__text pkt-txt-14-light">${t}</span>
82
- </button>
83
- </td>`}renderEmptyDayCell(t){return u.x`<td class="pkt-cal-other">
84
- <div
85
- class="pkt-btn pkt-btn--tertiary pkt-btn--small pkt-btn--label-only"
86
- data-disabled="disabled"
87
- >
88
- <span class="pkt-btn__text pkt-txt-14-light">${t}</span>
89
- </div>
90
- </td>`}renderWeekRow(t){return u.x`<tr class="pkt-cal-week-row" role="row">${t}</tr>`}renderCalendarBody(){const t=Ye(),n=Ze(this.year,this.month);let r=1;this.week=n.initialWeek;const a=[];for(let s=0;s<n.numRows;s++){const i=[];this.weeknumbers&&i.push(u.x`<td class="pkt-cal-week">${this.week}</td>`),this.week++;for(let o=0;o<R;o++){const c=tn(s,o,r,n);if(c==="current-month")i.push(this.renderDayView(r,t)),r++;else{const d=en(c,o,r,n);i.push(this.renderEmptyDayCell(d)),c==="next-month"&&r++}}a.push(this.renderWeekRow(i))}return a}isExcluded(t){return kt(t,this.getDateConstraints())}isPrevMonthAllowed(){return Ve(this.year,this.month,this.earliest)}prevMonth(){const t=this.month===0?11:this.month-1,n=this.month===0?this.year-1:this.year;this.changeMonth(n,t)}isNextMonthAllowed(){return Ke(this.year,this.month,this.latest)}nextMonth(){const t=this.month===11?0:this.month+1,n=this.month===11?this.year+1:this.year;this.changeMonth(n,t)}changeMonth(t,n){this.year=typeof t=="string"?parseInt(t):t,this.month=typeof n=="string"?parseInt(n):n,this.currentmonth=F(new Date(this.year,this.month,1)),this.tabIndexSet=0,this.focusedDate=null,this.selectableDates=[]}emptySelected(){this.selected=[],this._selected=[],this.inRange={}}normalizeSelected(){return typeof this.selected=="string"?this.selected.split(","):this.selected}addToSelected(t){this.selected=K(t,this.normalizeSelected()),this._selected=E(this.selected),this.range&&this.selected.length===2&&(this.convertSelected(),this.close())}removeFromSelected(t){this.selected=J(t,this.normalizeSelected()),this._selected=E(this.selected)}toggleSelected(t){this.selected=nn(t,this.normalizeSelected(),this.maxMultiple),this._selected=E(this.selected)}isRangeAllowed(t){return St(t,this._selected,this.excludedates,this.excludeweekdays)}handleRangeSelect(t){return this.selected=rn(t,this.normalizeSelected(),{excludedates:this.excludedates,excludeweekdays:this.excludeweekdays}),this._selected=E(this.selected),this.selected.length===2?this.convertSelected():this.selected.length===1&&(this.inRange={}),Promise.resolve()}handleRangeHover(t){if(!this.range||this._selected.length!==1||!this.isRangeAllowed(t)||this._selected[0]>=t){this.rangeHovered=null;return}this.rangeHovered=t,this.inRange=lt(this._selected[0],t)}handleDateSelect(t){return t&&(this.range?this.handleRangeSelect(t):this.multiple?this.toggleSelected(t):(this.selected.includes(m(t))?this.emptySelected():(this.emptySelected(),this.addToSelected(t)),this.close()),this.dispatchEvent(new CustomEvent("date-selected",{detail:this.selected,bubbles:!0,composed:!0}))),Promise.resolve()}focusOnCurrentDate(){const t=m(F(new Date)),n=this.querySelector(`button[data-date="${t}"]`);if(n instanceof HTMLButtonElement){this.focusedDate=t,n.focus();return}const r=this.selectableDates.find(a=>!a.isDisabled);if(r){const a=this.querySelector(`button[data-date="${r.currentDateISO}"]`);a instanceof HTMLButtonElement&&(this.focusedDate=r.currentDateISO,a.focus())}}closeEvent(t){!this.contains(t.relatedTarget)&&!t.target.classList.contains("pkt-hide")&&this.close()}close(){this.dispatchEvent(new CustomEvent("close",{detail:!0,bubbles:!0,composed:!0}))}};h([u.n({converter:L.csvToArray})],exports.PktCalendar.prototype,"selected",2);h([u.n({type:Boolean})],exports.PktCalendar.prototype,"multiple",2);h([u.n({type:Number})],exports.PktCalendar.prototype,"maxMultiple",2);h([u.n({type:Boolean})],exports.PktCalendar.prototype,"range",2);h([u.n({type:String})],exports.PktCalendar.prototype,"earliest",2);h([u.n({type:String})],exports.PktCalendar.prototype,"latest",2);h([u.n({converter:L.stringsToDate})],exports.PktCalendar.prototype,"excludedates",2);h([u.n({converter:L.csvToArray})],exports.PktCalendar.prototype,"excludeweekdays",2);h([u.n({type:Boolean})],exports.PktCalendar.prototype,"weeknumbers",2);h([u.n({type:Boolean})],exports.PktCalendar.prototype,"withcontrols",2);h([u.n({converter:L.stringToDate})],exports.PktCalendar.prototype,"currentmonth",2);h([u.n({type:Array})],exports.PktCalendar.prototype,"dayStrings",2);h([u.n({type:Array})],exports.PktCalendar.prototype,"dayStringsLong",2);h([u.n({type:Array})],exports.PktCalendar.prototype,"monthStrings",2);h([u.n({type:String})],exports.PktCalendar.prototype,"weekString",2);h([u.n({type:String})],exports.PktCalendar.prototype,"prevMonthString",2);h([u.n({type:String})],exports.PktCalendar.prototype,"nextMonthString",2);h([u.n({type:Array})],exports.PktCalendar.prototype,"_selected",2);h([q.r()],exports.PktCalendar.prototype,"inRange",2);h([u.n({type:Date})],exports.PktCalendar.prototype,"rangeHovered",2);h([u.n({type:Number})],exports.PktCalendar.prototype,"year",2);h([u.n({type:Number})],exports.PktCalendar.prototype,"month",2);h([u.n({type:Number})],exports.PktCalendar.prototype,"week",2);h([q.r()],exports.PktCalendar.prototype,"currentmonthtouched",2);h([q.r()],exports.PktCalendar.prototype,"focusedDate",2);h([q.r()],exports.PktCalendar.prototype,"selectableDates",2);h([q.r()],exports.PktCalendar.prototype,"tabIndexSet",2);exports.PktCalendar=h([u.t("pkt-calendar")],exports.PktCalendar);exports.arrayToCsv=Be;exports.converters=L;exports.filterSelectableDates=qe;exports.formatISODate=m;exports.fromISOToDate=W;exports.fromISOtoLocal=Ie;exports.isValidDateRange=Ue;exports.newDate=N;exports.parseISODateString=T;exports.sortDateStrings=Le;exports.valueToArray=Dt;