@onereach/ui-components 3.0.4-beta.2486.0 → 3.0.4-beta.2497.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/dist/bundled/v2/{OrCardCollection-ad2240ac.js → OrCardCollection-a10920a3.js} +1 -1
  2. package/dist/bundled/v2/{OrDateTimePicker-60e1a7ee.js → OrDateTimePicker-d6f327ad.js} +308 -176
  3. package/dist/bundled/v2/{OrMenu-cbb0c2c8.js → OrMenu-0c2c348c.js} +6 -1
  4. package/dist/bundled/v2/{OrPagination-cf47d71c.js → OrPagination-00ab6954.js} +1 -1
  5. package/dist/bundled/v2/{OrTabs-10f7e668.js → OrTabs-f7c9f754.js} +1 -1
  6. package/dist/bundled/v2/components/index.js +5 -5
  7. package/dist/bundled/v2/components/or-card-collection-v3/index.js +2 -2
  8. package/dist/bundled/v2/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -1
  9. package/dist/bundled/v2/components/or-date-time-picker-v3/hooks/useDefaultDate.d.ts +1 -0
  10. package/dist/bundled/v2/components/or-date-time-picker-v3/hooks/useDefaultHours.d.ts +1 -0
  11. package/dist/bundled/v2/components/or-date-time-picker-v3/hooks/useDefaultMinutes.d.ts +1 -0
  12. package/dist/bundled/v2/components/or-date-time-picker-v3/hooks/useDefaultMonth.d.ts +1 -0
  13. package/dist/bundled/v2/components/or-date-time-picker-v3/hooks/useDefaultYear.d.ts +1 -0
  14. package/dist/bundled/v2/components/or-date-time-picker-v3/index.js +4 -4
  15. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/{or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue.d.ts → or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts} +8 -0
  16. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/styles.d.ts +3 -0
  17. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +26 -34
  18. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +8 -20
  19. package/dist/bundled/v2/components/or-menu-v3/OrMenu.vue.d.ts +2 -0
  20. package/dist/bundled/v2/components/or-menu-v3/index.js +1 -1
  21. package/dist/bundled/v2/components/or-pagination-v3/index.js +2 -2
  22. package/dist/bundled/v2/components/or-tabs-v3/index.js +2 -2
  23. package/dist/bundled/v2/index.js +6 -6
  24. package/dist/bundled/v3/{OrCardCollection.vue_vue_type_script_lang-61f92c57.js → OrCardCollection.vue_vue_type_script_lang-93c84377.js} +2 -2
  25. package/dist/bundled/v3/{OrDateTimePicker.vue_vue_type_script_lang-fb197c2f.js → OrDateTimePicker.vue_vue_type_script_lang-ba3ac4fb.js} +281 -165
  26. package/dist/bundled/v3/{OrMenu-89afef68.js → OrMenu-101f1c62.js} +1 -1
  27. package/dist/bundled/v3/{OrMenu.vue_vue_type_script_lang-f6748a99.js → OrMenu.vue_vue_type_script_lang-7ba15d1d.js} +6 -1
  28. package/dist/bundled/v3/{OrPagination.vue_vue_type_script_lang-7673a00e.js → OrPagination.vue_vue_type_script_lang-d3e6732f.js} +2 -2
  29. package/dist/bundled/v3/{OrTabs.vue_vue_type_script_lang-ebd2a59d.js → OrTabs.vue_vue_type_script_lang-513b1e98.js} +2 -2
  30. package/dist/bundled/v3/components/index.js +6 -6
  31. package/dist/bundled/v3/components/or-card-collection-v3/index.js +3 -3
  32. package/dist/bundled/v3/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -1
  33. package/dist/bundled/v3/components/or-date-time-picker-v3/hooks/useDefaultDate.d.ts +1 -0
  34. package/dist/bundled/v3/components/or-date-time-picker-v3/hooks/useDefaultHours.d.ts +1 -0
  35. package/dist/bundled/v3/components/or-date-time-picker-v3/hooks/useDefaultMinutes.d.ts +1 -0
  36. package/dist/bundled/v3/components/or-date-time-picker-v3/hooks/useDefaultMonth.d.ts +1 -0
  37. package/dist/bundled/v3/components/or-date-time-picker-v3/hooks/useDefaultYear.d.ts +1 -0
  38. package/dist/bundled/v3/components/or-date-time-picker-v3/index.js +5 -5
  39. package/dist/{esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue.d.ts → bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts} +8 -0
  40. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/styles.d.ts +3 -0
  41. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +26 -34
  42. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +8 -20
  43. package/dist/bundled/v3/components/or-menu-v3/OrMenu.vue.d.ts +2 -0
  44. package/dist/bundled/v3/components/or-menu-v3/index.js +1 -1
  45. package/dist/bundled/v3/components/or-pagination-v3/index.js +3 -3
  46. package/dist/bundled/v3/components/or-tabs-v3/index.js +3 -3
  47. package/dist/bundled/v3/index.js +50 -32
  48. package/dist/esm/v2/{OrCardCollection-662d5727.js → OrCardCollection-54079e79.js} +1 -1
  49. package/dist/esm/v2/{OrDateTimePicker-4b650aca.js → OrDateTimePicker-57094f24.js} +316 -184
  50. package/dist/esm/v2/{OrMenu-47b319a6.js → OrMenu-18a7f179.js} +6 -1
  51. package/dist/esm/v2/{OrPagination-4d330d4f.js → OrPagination-16f6d75b.js} +1 -1
  52. package/dist/esm/v2/{OrTabs-f0e4db08.js → OrTabs-18df1ce9.js} +1 -1
  53. package/dist/esm/v2/components/index.js +5 -5
  54. package/dist/esm/v2/components/or-card-collection-v3/index.js +2 -2
  55. package/dist/esm/v2/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -1
  56. package/dist/esm/v2/components/or-date-time-picker-v3/hooks/useDefaultDate.d.ts +1 -0
  57. package/dist/esm/v2/components/or-date-time-picker-v3/hooks/useDefaultHours.d.ts +1 -0
  58. package/dist/esm/v2/components/or-date-time-picker-v3/hooks/useDefaultMinutes.d.ts +1 -0
  59. package/dist/esm/v2/components/or-date-time-picker-v3/hooks/useDefaultMonth.d.ts +1 -0
  60. package/dist/esm/v2/components/or-date-time-picker-v3/hooks/useDefaultYear.d.ts +1 -0
  61. package/dist/esm/v2/components/or-date-time-picker-v3/index.js +5 -5
  62. package/dist/esm/v2/components/or-date-time-picker-v3/partials/{or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue.d.ts → or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts} +8 -0
  63. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/styles.d.ts +3 -0
  64. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +26 -34
  65. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +8 -20
  66. package/dist/esm/v2/components/or-menu-v3/OrMenu.vue.d.ts +2 -0
  67. package/dist/esm/v2/components/or-menu-v3/index.js +1 -1
  68. package/dist/esm/v2/components/or-pagination-v3/index.js +2 -2
  69. package/dist/esm/v2/components/or-tabs-v3/index.js +2 -2
  70. package/dist/esm/v2/index.js +5 -5
  71. package/dist/esm/v3/{OrCardCollection-aa7f0c81.js → OrCardCollection-b937aa7a.js} +1 -1
  72. package/dist/esm/v3/{OrDateTimePicker-3e2dc067.js → OrDateTimePicker-a8247a84.js} +321 -187
  73. package/dist/esm/v3/{OrMenu-053a9ab7.js → OrMenu-70cee836.js} +6 -1
  74. package/dist/esm/v3/{OrPagination-f2d104d9.js → OrPagination-7f4ed166.js} +1 -1
  75. package/dist/esm/v3/{OrTabs-d9e2a07e.js → OrTabs-0a5c80be.js} +1 -1
  76. package/dist/esm/v3/components/index.js +5 -5
  77. package/dist/esm/v3/components/or-card-collection-v3/index.js +2 -2
  78. package/dist/esm/v3/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -1
  79. package/dist/esm/v3/components/or-date-time-picker-v3/hooks/useDefaultDate.d.ts +1 -0
  80. package/dist/esm/v3/components/or-date-time-picker-v3/hooks/useDefaultHours.d.ts +1 -0
  81. package/dist/esm/v3/components/or-date-time-picker-v3/hooks/useDefaultMinutes.d.ts +1 -0
  82. package/dist/esm/v3/components/or-date-time-picker-v3/hooks/useDefaultMonth.d.ts +1 -0
  83. package/dist/esm/v3/components/or-date-time-picker-v3/hooks/useDefaultYear.d.ts +1 -0
  84. package/dist/esm/v3/components/or-date-time-picker-v3/index.js +4 -4
  85. package/dist/{bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue.d.ts → esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts} +8 -0
  86. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/styles.d.ts +3 -0
  87. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +26 -34
  88. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +8 -20
  89. package/dist/esm/v3/components/or-menu-v3/OrMenu.vue.d.ts +2 -0
  90. package/dist/esm/v3/components/or-menu-v3/index.js +1 -1
  91. package/dist/esm/v3/components/or-pagination-v3/index.js +2 -2
  92. package/dist/esm/v3/components/or-tabs-v3/index.js +2 -2
  93. package/dist/esm/v3/index.js +5 -5
  94. package/package.json +2 -2
  95. package/src/components/or-date-time-picker-v3/OrDateTimePicker.vue +88 -39
  96. package/src/components/or-date-time-picker-v3/hooks/useDefaultDate.ts +3 -0
  97. package/src/components/or-date-time-picker-v3/hooks/useDefaultHours.ts +3 -0
  98. package/src/components/or-date-time-picker-v3/hooks/useDefaultMinutes.ts +3 -0
  99. package/src/components/or-date-time-picker-v3/hooks/useDefaultMonth.ts +3 -0
  100. package/src/components/or-date-time-picker-v3/hooks/useDefaultYear.ts +3 -0
  101. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue +162 -0
  102. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/styles.ts +31 -0
  103. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue +101 -79
  104. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue +58 -42
  105. package/src/components/or-date-time-picker-v3/styles.ts +5 -2
  106. package/src/components/or-menu-v3/OrMenu.vue +3 -0
  107. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/styles.d.ts +0 -1
  108. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/styles.d.ts +0 -1
  109. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/styles.d.ts +0 -1
  110. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/styles.d.ts +0 -1
  111. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue +0 -63
  112. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-date-select/styles.ts +0 -10
@@ -27,29 +27,59 @@
27
27
  :readonly="readonly"
28
28
  :disabled="disabled"
29
29
  >
30
- <input
30
+ <!-- <input
31
31
  ref="dateControl"
32
32
  v-dropdown-open="toggleDatePopover"
33
33
  v-dropdown-close="closeDatePopover"
34
34
  v-bind="controlAttributes"
35
35
  :class="controlStyles"
36
- :type="'date'"
36
+ :type="'text'"
37
+ :value="formatDate(proxyModelValue)"
38
+ :required="required"
39
+ :readonly="readonly"
40
+ :disabled="disabled"
41
+ > -->
42
+
43
+ <!-- <input
44
+ ref="timeControl"
45
+ v-dropdown-open="toggleTimePopover"
46
+ v-dropdown-close="closeTimePopover"
47
+ v-bind="controlAttributes"
48
+ :class="controlStyles"
49
+ :type="'text'"
50
+ :value="formatTime(proxyModelValue)"
51
+ :required="required"
52
+ :readonly="readonly"
53
+ :disabled="disabled"
54
+ > -->
55
+
56
+ <div
57
+ ref="dateControl"
58
+ v-dropdown-open="toggleDatePopover"
59
+ v-dropdown-close="closeDatePopover"
60
+ v-bind="controlAttributes"
61
+ :class="controlStyles"
62
+ :contenteditable="true"
37
63
  :required="required"
38
64
  :readonly="readonly"
39
65
  :disabled="disabled"
40
66
  >
67
+ {{ formatDate(proxyModelValue) }}
68
+ </div>
41
69
 
42
- <input
70
+ <div
43
71
  ref="timeControl"
44
72
  v-dropdown-open="toggleTimePopover"
45
73
  v-dropdown-close="closeTimePopover"
46
74
  v-bind="controlAttributes"
47
75
  :class="controlStyles"
48
- :type="'time'"
76
+ :contenteditable="true"
49
77
  :required="required"
50
78
  :readonly="readonly"
51
79
  :disabled="disabled"
52
80
  >
81
+ {{ formatTime(proxyModelValue) }}
82
+ </div>
53
83
 
54
84
  <OrPopover
55
85
  ref="datePopover"
@@ -59,19 +89,20 @@
59
89
  >
60
90
  <OrDateTimePickerPopoverHeader>
61
91
  <OrDateTimePickerMobileControl label="Date">
62
- Sep 12
92
+ {{ formatDateAlt(draftModelValue) }}
63
93
  </OrDateTimePickerMobileControl>
64
94
 
65
95
  <OrDateTimePickerMobileControl label="Time">
66
- 9:07
96
+ {{ formatTimeAlt(draftModelValue) }}
67
97
  </OrDateTimePickerMobileControl>
68
98
  </OrDateTimePickerPopoverHeader>
69
99
 
70
- <OrDateTimePickerMonthSelect v-model="proxyModelValue" />
71
- <OrDateTimePickerDateSelect v-model="proxyModelValue" />
100
+ <OrDateTimePickerMonthSelect v-model="draftModelValue" />
101
+ <OrDateTimePickerDaySelect v-model="draftModelValue" />
72
102
 
73
103
  <OrDateTimePickerPopoverFooter
74
- @reject="closeDatePopover()"
104
+ @resolve="proxyModelValue = draftModelValue; datePopover.close()"
105
+ @reject="draftModelValue = proxyModelValue; datePopover.close()"
75
106
  />
76
107
  </OrPopover>
77
108
 
@@ -83,18 +114,19 @@
83
114
  >
84
115
  <OrDateTimePickerPopoverHeader>
85
116
  <OrDateTimePickerMobileControl label="Date">
86
- Sep 12
117
+ {{ formatDateAlt(draftModelValue) }}
87
118
  </OrDateTimePickerMobileControl>
88
119
 
89
120
  <OrDateTimePickerMobileControl label="Time">
90
- 9:07
121
+ {{ formatTimeAlt(draftModelValue) }}
91
122
  </OrDateTimePickerMobileControl>
92
123
  </OrDateTimePickerPopoverHeader>
93
124
 
94
- <OrDateTimePickerTimeSelect v-model="proxyModelValue" />
125
+ <OrDateTimePickerTimeSelect v-model="draftModelValue" />
95
126
 
96
127
  <OrDateTimePickerPopoverFooter
97
- @reject="closeTimePopover()"
128
+ @resolve="proxyModelValue = draftModelValue; timePopover.close()"
129
+ @reject="draftModelValue = proxyModelValue; timePopover.close()"
98
130
  />
99
131
  </OrPopover>
100
132
 
@@ -129,8 +161,7 @@
129
161
  </template>
130
162
 
131
163
  <script lang="ts">
132
- import { computed, defineComponent, PropType, reactive, ref } from 'vue-demi';
133
- import { DateTimePickerSize } from '.';
164
+ import { computed, defineComponent, PropType, reactive, ref, watch } from 'vue-demi';
134
165
  import { DropdownClose, DropdownOpen } from '../../directives';
135
166
  import { useControlAttributes, useIdAttribute, useValidationAttributes } from '../../hooks';
136
167
  import { OrErrorV3 as OrError } from '../or-error-v3';
@@ -139,19 +170,20 @@ import { OrIconButtonV3 as OrIconButton } from '../or-icon-button-v3';
139
170
  import { OrInputBoxV3 as OrInputBox } from '../or-input-box-v3';
140
171
  import { OrLabelV3 as OrLabel } from '../or-label-v3';
141
172
  import { OrPopoverV3 as OrPopover } from '../or-popover-v3';
142
- import OrDateTimePickerDateSelect from './partials/or-date-time-picker-date-select/OrDateTimePickerDateSelect.vue';
173
+ import OrDateTimePickerDaySelect from './partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue';
143
174
  import OrDateTimePickerMobileControl from './partials/or-date-time-picker-mobile-control/OrDateTimePickerMobileControl.vue';
144
175
  import OrDateTimePickerMonthSelect from './partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue';
145
176
  import OrDateTimePickerPopoverFooter from './partials/or-date-time-picker-popover-footer/OrDateTimePickerPopoverFooter.vue';
146
177
  import OrDateTimePickerPopoverHeader from './partials/or-date-time-picker-popover-header/OrDateTimePickerPopoverHeader.vue';
147
178
  import OrDateTimePickerTimeSelect from './partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue';
179
+ import { DateTimePickerSize } from './props';
148
180
  import { DateTimePicker, DateTimePickerControl } from './styles';
149
181
 
150
182
  export default defineComponent({
151
183
  name: 'OrDateTimePicker',
152
184
 
153
185
  components: {
154
- OrDateTimePickerDateSelect,
186
+ OrDateTimePickerDaySelect,
155
187
  OrDateTimePickerMobileControl,
156
188
  OrDateTimePickerMonthSelect,
157
189
  OrDateTimePickerPopoverFooter,
@@ -276,6 +308,12 @@ export default defineComponent({
276
308
  },
277
309
  });
278
310
 
311
+ const draftModelValue = ref<Date>();
312
+
313
+ watch(proxyModelValue, (value) => {
314
+ draftModelValue.value = value;
315
+ }, { immediate: true });
316
+
279
317
  // Methods
280
318
  function toggleDatePopover(): void {
281
319
  if (!props.readonly && !props.disabled) {
@@ -321,6 +359,34 @@ export default defineComponent({
321
359
  }
322
360
  }
323
361
 
362
+ function formatDate(value?: Date): string {
363
+ return value?.toLocaleString('default', {
364
+ dateStyle: 'short',
365
+ timeZone: 'UTC',
366
+ }) ?? '--';
367
+ }
368
+
369
+ function formatTime(value?: Date): string {
370
+ return value?.toLocaleString('default', {
371
+ timeStyle: 'short',
372
+ timeZone: 'UTC',
373
+ }) ?? '--';
374
+ }
375
+
376
+ function formatDateAlt(value?: Date): string {
377
+ return value?.toLocaleString('default', {
378
+ dateStyle: 'medium',
379
+ timeZone: 'UTC',
380
+ }) ?? '--';
381
+ }
382
+
383
+ function formatTimeAlt(value?: Date): string {
384
+ return value?.toLocaleString('default', {
385
+ timeStyle: 'short',
386
+ timeZone: 'UTC',
387
+ }) ?? '--';
388
+ }
389
+
324
390
  return {
325
391
  root,
326
392
  dateControl,
@@ -333,10 +399,15 @@ export default defineComponent({
333
399
  controlStyles,
334
400
  controlAttributes,
335
401
  proxyModelValue,
402
+ draftModelValue,
336
403
  toggleDatePopover,
337
404
  toggleTimePopover,
338
405
  closeDatePopover,
339
406
  closeTimePopover,
407
+ formatDate,
408
+ formatTime,
409
+ formatDateAlt,
410
+ formatTimeAlt,
340
411
  };
341
412
  },
342
413
  });
@@ -348,26 +419,4 @@ input {
348
419
  background: none;
349
420
  outline: none;
350
421
  }
351
-
352
- input[type="date"]::-webkit-datetime-edit-day-field,
353
- input[type="date"]::-webkit-datetime-edit-month-field,
354
- input[type="date"]::-webkit-datetime-edit-year-field {
355
- display: none;
356
- }
357
-
358
- input[type="time"]::-webkit-datetime-edit-hour-field,
359
- input[type="time"]::-webkit-datetime-edit-minute-field,
360
- input[type="time"]::-webkit-datetime-edit-ampm-field {
361
- display: none;
362
- }
363
-
364
- input[type="date"]::-webkit-datetime-edit-text,
365
- input[type="time"]::-webkit-datetime-edit-text {
366
- display: none;
367
- }
368
-
369
- input[type="date"]::-webkit-calendar-picker-indicator,
370
- input[type="time"]::-webkit-calendar-picker-indicator {
371
- display: none;
372
- }
373
422
  </style>
@@ -0,0 +1,3 @@
1
+ export function useDefaultDate(): number {
2
+ return new Date().getUTCDate();
3
+ }
@@ -0,0 +1,3 @@
1
+ export function useDefaultHours(): number {
2
+ return 0;
3
+ }
@@ -0,0 +1,3 @@
1
+ export function useDefaultMinutes(): number {
2
+ return 0;
3
+ }
@@ -0,0 +1,3 @@
1
+ export function useDefaultMonth(): number {
2
+ return new Date().getUTCMonth();
3
+ }
@@ -0,0 +1,3 @@
1
+ export function useDefaultYear(): number {
2
+ return new Date().getUTCFullYear();
3
+ }
@@ -0,0 +1,162 @@
1
+ <template>
2
+ <div
3
+ ref="root"
4
+ :class="rootStyles"
5
+ >
6
+ <div :class="buttonGroupStyles">
7
+ <OrButton
8
+ v-for="value in dayOptions"
9
+ :key="Number(value)"
10
+ :class="buttonGroupItemStyles"
11
+ :variant="Number(value) === Number(proxyModelValue) ? 'contained' : 'text'"
12
+ :color="Number(value) === Number(proxyModelValue) ? 'primary' : 'inherit'"
13
+ @click.stop="proxyModelValue = value"
14
+ >
15
+ {{ formatDay(value) }}
16
+ </OrButton>
17
+ </div>
18
+ </div>
19
+ </template>
20
+
21
+ <script lang="ts">
22
+ import { computed, defineComponent, ref } from 'vue-demi';
23
+ import { OrButtonV3 as OrButton } from '../../../or-button-v3';
24
+ import { useDefaultDate } from '../../hooks/useDefaultDate';
25
+ import { useDefaultHours } from '../../hooks/useDefaultHours';
26
+ import { useDefaultMinutes } from '../../hooks/useDefaultMinutes';
27
+ import { useDefaultMonth } from '../../hooks/useDefaultMonth';
28
+ import { useDefaultYear } from '../../hooks/useDefaultYear';
29
+ import { DateTimePickerDaySelect, DateTimePickerDaySelectButtonGroup, DateTimePickerDaySelectButtonGroupItem } from './styles';
30
+
31
+ export default defineComponent({
32
+ name: 'OrDateTimePickerDaySelect',
33
+
34
+ components: {
35
+ OrButton,
36
+ },
37
+
38
+ model: {
39
+ prop: 'modelValue',
40
+ event: 'update:modelValue',
41
+ },
42
+
43
+ props: {
44
+ modelValue: {
45
+ type: Date,
46
+ default: undefined,
47
+ },
48
+ },
49
+
50
+ emits: [
51
+ 'update:modelValue',
52
+ ],
53
+
54
+ expose: [
55
+ 'root',
56
+ ],
57
+
58
+ setup(props, context) {
59
+ // Refs
60
+ const root = ref<HTMLElement>();
61
+
62
+ // Styles
63
+ const rootStyles = computed(() => [
64
+ 'or-date-time-picker-day-select',
65
+ ...DateTimePickerDaySelect,
66
+ ]);
67
+
68
+ const buttonGroupStyles = computed(() => [
69
+ ...DateTimePickerDaySelectButtonGroup,
70
+ ]);
71
+
72
+ const buttonGroupItemStyles = computed(() => [
73
+ ...DateTimePickerDaySelectButtonGroupItem,
74
+ ]);
75
+
76
+ // State
77
+ const proxyModelValue = computed({
78
+ get: () => props.modelValue ?? new Date(Date.UTC(
79
+ useDefaultYear(),
80
+ useDefaultMonth(),
81
+ useDefaultDate(),
82
+ useDefaultHours(),
83
+ useDefaultMinutes(),
84
+ )),
85
+
86
+ set: (value) => {
87
+ context.emit('update:modelValue', value);
88
+ },
89
+ });
90
+
91
+ const dayOptions = computed(() => {
92
+ const monthStartDate = new Date(Date.UTC(
93
+ proxyModelValue.value.getUTCFullYear(),
94
+ proxyModelValue.value.getUTCMonth(),
95
+ 1,
96
+ proxyModelValue.value.getUTCHours(),
97
+ proxyModelValue.value.getUTCMinutes(),
98
+ ));
99
+
100
+ const monthEndDate = new Date(Date.UTC(
101
+ proxyModelValue.value.getUTCFullYear(),
102
+ proxyModelValue.value.getUTCMonth() + 1,
103
+ 0,
104
+ proxyModelValue.value.getUTCHours(),
105
+ proxyModelValue.value.getUTCMinutes(),
106
+ ));
107
+
108
+ const calendarStartDate = new Date(Date.UTC(
109
+ monthStartDate.getUTCFullYear(),
110
+ monthStartDate.getUTCMonth(),
111
+ 1 - (monthStartDate.getUTCDay() + 6) % 7,
112
+ monthStartDate.getUTCHours(),
113
+ monthStartDate.getUTCMinutes(),
114
+ ));
115
+
116
+ const calendarEndDate = new Date(Date.UTC(
117
+ monthEndDate.getUTCFullYear(),
118
+ monthEndDate.getUTCMonth() + 1,
119
+ (7 - monthEndDate.getUTCDay()) % 7,
120
+ monthEndDate.getUTCHours(),
121
+ monthEndDate.getUTCMinutes(),
122
+ ));
123
+
124
+ return (() => {
125
+ let options = [] as Date[], value = calendarStartDate;
126
+
127
+ while (Number(value) !== Number(calendarEndDate)) {
128
+ options = [...options, value];
129
+
130
+ value = new Date(Date.UTC(
131
+ value.getUTCFullYear(),
132
+ value.getUTCMonth(),
133
+ value.getUTCDate() + 1,
134
+ value.getUTCHours(),
135
+ value.getUTCMinutes(),
136
+ ));
137
+ }
138
+
139
+ return options;
140
+ })();
141
+ });
142
+
143
+ // Methods
144
+ function formatDay(value: Date): string {
145
+ return value.toLocaleString('default', {
146
+ day: 'numeric',
147
+ timeZone: 'UTC',
148
+ });
149
+ }
150
+
151
+ return {
152
+ root,
153
+ rootStyles,
154
+ buttonGroupStyles,
155
+ buttonGroupItemStyles,
156
+ proxyModelValue,
157
+ dayOptions,
158
+ formatDay,
159
+ };
160
+ },
161
+ });
162
+ </script>
@@ -0,0 +1,31 @@
1
+ export const DateTimePickerDaySelect: string[] = [
2
+ // Layout
3
+ 'layout-column',
4
+
5
+ // Spacing
6
+ 'px-md',
7
+ 'py-md',
8
+
9
+ 'gap-sm',
10
+ ];
11
+
12
+ export const DateTimePickerDaySelectButtonGroup: string[] = [
13
+ // Layout
14
+ 'grid',
15
+ 'grid-cols-7',
16
+
17
+ // Spacing
18
+ 'gap-xs',
19
+ ];
20
+
21
+ export const DateTimePickerDaySelectButtonGroupItem: string[] = [
22
+ // Box
23
+ 'min-w-fit',
24
+
25
+ // Spacing
26
+ '!px-sm',
27
+ '!py-sm',
28
+
29
+ // Typography
30
+ 'typography-caption-regular',
31
+ ];