@onereach/ui-components 3.0.4-beta.2497.0 → 3.0.4-beta.2502.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 (119) hide show
  1. package/dist/bundled/v2/OrDatePicker-19e467e2.js +330 -0
  2. package/dist/bundled/v2/OrDateTimePicker-1011dc69.js +440 -0
  3. package/dist/bundled/v2/OrDateTimePickerMonthSelect-9e64d257.js +408 -0
  4. package/dist/bundled/v2/OrDateTimePickerPopoverHeader-c8672c0d.js +239 -0
  5. package/dist/bundled/v2/OrDateTimePickerTimeSelect-158d717b.js +179 -0
  6. package/dist/bundled/v2/OrTimePicker-1b3a758a.js +318 -0
  7. package/dist/bundled/v2/components/index.d.ts +2 -0
  8. package/dist/bundled/v2/components/index.js +7 -2
  9. package/dist/bundled/v2/components/or-date-picker-v3/OrDatePicker.vue.d.ts +183 -0
  10. package/dist/bundled/v2/components/or-date-picker-v3/index.d.ts +2 -0
  11. package/dist/bundled/v2/components/or-date-picker-v3/index.js +31 -0
  12. package/dist/bundled/v2/components/or-date-picker-v3/props.d.ts +1 -0
  13. package/dist/bundled/v2/components/or-date-picker-v3/styles.d.ts +2 -0
  14. package/dist/bundled/v2/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -0
  15. package/dist/bundled/v2/components/or-date-time-picker-v3/index.js +7 -5
  16. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts +12 -0
  17. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +12 -0
  18. package/dist/bundled/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +12 -0
  19. package/dist/bundled/v2/components/or-time-picker-v3/OrTimePicker.vue.d.ts +183 -0
  20. package/dist/bundled/v2/components/or-time-picker-v3/index.d.ts +2 -0
  21. package/dist/bundled/v2/components/or-time-picker-v3/index.js +29 -0
  22. package/dist/bundled/v2/components/or-time-picker-v3/props.d.ts +1 -0
  23. package/dist/bundled/v2/components/or-time-picker-v3/styles.d.ts +2 -0
  24. package/dist/bundled/v2/index.js +8 -3
  25. package/dist/bundled/v3/OrDatePicker.vue_vue_type_script_lang-8eafbe6b.js +177 -0
  26. package/dist/bundled/v3/OrDateTimePicker.vue_vue_type_script_lang-b2a9ef8d.js +226 -0
  27. package/dist/bundled/v3/OrDateTimePickerMonthSelect-8989be5a.js +341 -0
  28. package/dist/bundled/v3/OrDateTimePickerPopoverHeader-caffcc00.js +162 -0
  29. package/dist/bundled/v3/OrDateTimePickerTimeSelect-e3a89bed.js +148 -0
  30. package/dist/bundled/v3/OrTimePicker.vue_vue_type_script_lang-f46eb37f.js +176 -0
  31. package/dist/bundled/v3/components/index.d.ts +2 -0
  32. package/dist/bundled/v3/components/index.js +8 -3
  33. package/dist/bundled/v3/components/or-date-picker-v3/OrDatePicker.vue.d.ts +183 -0
  34. package/dist/bundled/v3/components/or-date-picker-v3/index.d.ts +2 -0
  35. package/dist/bundled/v3/components/or-date-picker-v3/index.js +37 -0
  36. package/dist/bundled/v3/components/or-date-picker-v3/props.d.ts +1 -0
  37. package/dist/bundled/v3/components/or-date-picker-v3/styles.d.ts +2 -0
  38. package/dist/bundled/v3/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -0
  39. package/dist/bundled/v3/components/or-date-time-picker-v3/index.js +7 -4
  40. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts +12 -0
  41. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +12 -0
  42. package/dist/bundled/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +12 -0
  43. package/dist/bundled/v3/components/or-time-picker-v3/OrTimePicker.vue.d.ts +183 -0
  44. package/dist/bundled/v3/components/or-time-picker-v3/index.d.ts +2 -0
  45. package/dist/bundled/v3/components/or-time-picker-v3/index.js +33 -0
  46. package/dist/bundled/v3/components/or-time-picker-v3/props.d.ts +1 -0
  47. package/dist/bundled/v3/components/or-time-picker-v3/styles.d.ts +2 -0
  48. package/dist/bundled/v3/index.js +638 -408
  49. package/dist/esm/v2/OrDatePicker-454f5267.js +329 -0
  50. package/dist/esm/v2/OrDateTimePicker-3f533d0c.js +439 -0
  51. package/dist/esm/v2/OrDateTimePickerMonthSelect-380d9c90.js +406 -0
  52. package/dist/esm/v2/OrDateTimePickerPopoverHeader-e11d3222.js +235 -0
  53. package/dist/esm/v2/OrDateTimePickerTimeSelect-83dd1e81.js +177 -0
  54. package/dist/esm/v2/OrTimePicker-f23c8577.js +317 -0
  55. package/dist/esm/v2/components/index.d.ts +2 -0
  56. package/dist/esm/v2/components/index.js +8 -3
  57. package/dist/esm/v2/components/or-date-picker-v3/OrDatePicker.vue.d.ts +183 -0
  58. package/dist/esm/v2/components/or-date-picker-v3/index.d.ts +2 -0
  59. package/dist/esm/v2/components/or-date-picker-v3/index.js +29 -0
  60. package/dist/esm/v2/components/or-date-picker-v3/props.d.ts +1 -0
  61. package/dist/esm/v2/components/or-date-picker-v3/styles.d.ts +2 -0
  62. package/dist/esm/v2/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -0
  63. package/dist/esm/v2/components/or-date-time-picker-v3/index.js +4 -2
  64. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts +12 -0
  65. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +12 -0
  66. package/dist/esm/v2/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +12 -0
  67. package/dist/esm/v2/components/or-time-picker-v3/OrTimePicker.vue.d.ts +183 -0
  68. package/dist/esm/v2/components/or-time-picker-v3/index.d.ts +2 -0
  69. package/dist/esm/v2/components/or-time-picker-v3/index.js +27 -0
  70. package/dist/esm/v2/components/or-time-picker-v3/props.d.ts +1 -0
  71. package/dist/esm/v2/components/or-time-picker-v3/styles.d.ts +2 -0
  72. package/dist/esm/v2/index.js +8 -3
  73. package/dist/esm/v3/OrDatePicker-390f7f11.js +288 -0
  74. package/dist/esm/v3/OrDateTimePicker-54db4170.js +390 -0
  75. package/dist/esm/v3/OrDateTimePickerMonthSelect-709b673d.js +338 -0
  76. package/dist/esm/v3/OrDateTimePickerPopoverHeader-c771a251.js +161 -0
  77. package/dist/esm/v3/OrDateTimePickerTimeSelect-2c8a7f9c.js +148 -0
  78. package/dist/esm/v3/OrTimePicker-362ca566.js +282 -0
  79. package/dist/esm/v3/components/index.d.ts +2 -0
  80. package/dist/esm/v3/components/index.js +7 -2
  81. package/dist/esm/v3/components/or-date-picker-v3/OrDatePicker.vue.d.ts +183 -0
  82. package/dist/esm/v3/components/or-date-picker-v3/index.d.ts +2 -0
  83. package/dist/esm/v3/components/or-date-picker-v3/index.js +27 -0
  84. package/dist/esm/v3/components/or-date-picker-v3/props.d.ts +1 -0
  85. package/dist/esm/v3/components/or-date-picker-v3/styles.d.ts +2 -0
  86. package/dist/esm/v3/components/or-date-time-picker-v3/OrDateTimePicker.vue.d.ts +11 -0
  87. package/dist/esm/v3/components/or-date-time-picker-v3/index.js +4 -2
  88. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue.d.ts +12 -0
  89. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue.d.ts +12 -0
  90. package/dist/esm/v3/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue.d.ts +12 -0
  91. package/dist/esm/v3/components/or-time-picker-v3/OrTimePicker.vue.d.ts +183 -0
  92. package/dist/esm/v3/components/or-time-picker-v3/index.d.ts +2 -0
  93. package/dist/esm/v3/components/or-time-picker-v3/index.js +25 -0
  94. package/dist/esm/v3/components/or-time-picker-v3/props.d.ts +1 -0
  95. package/dist/esm/v3/components/or-time-picker-v3/styles.d.ts +2 -0
  96. package/dist/esm/v3/index.js +7 -2
  97. package/package.json +2 -2
  98. package/src/components/index.ts +2 -0
  99. package/src/components/or-date-picker-v3/OrDatePicker.docs.mdx +7 -0
  100. package/src/components/or-date-picker-v3/OrDatePicker.stories3.ts +160 -0
  101. package/src/components/or-date-picker-v3/OrDatePicker.vue +308 -0
  102. package/src/components/or-date-picker-v3/index.ts +2 -0
  103. package/src/components/or-date-picker-v3/props.ts +1 -0
  104. package/src/components/or-date-picker-v3/styles.ts +12 -0
  105. package/src/components/or-date-time-picker-v3/OrDateTimePicker.stories3.ts +4 -0
  106. package/src/components/or-date-time-picker-v3/OrDateTimePicker.vue +17 -37
  107. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue +7 -1
  108. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue +8 -1
  109. package/src/components/or-date-time-picker-v3/partials/or-date-time-picker-time-select/OrDateTimePickerTimeSelect.vue +8 -1
  110. package/src/components/or-time-picker-v3/OrTimePicker.docs.mdx +7 -0
  111. package/src/components/or-time-picker-v3/OrTimePicker.stories3.ts +160 -0
  112. package/src/components/or-time-picker-v3/OrTimePicker.vue +302 -0
  113. package/src/components/or-time-picker-v3/index.ts +2 -0
  114. package/src/components/or-time-picker-v3/props.ts +1 -0
  115. package/src/components/or-time-picker-v3/styles.ts +12 -0
  116. package/dist/bundled/v2/OrDateTimePicker-d6f327ad.js +0 -1215
  117. package/dist/bundled/v3/OrDateTimePicker.vue_vue_type_script_lang-ba3ac4fb.js +0 -834
  118. package/dist/esm/v2/OrDateTimePicker-57094f24.js +0 -1208
  119. package/dist/esm/v3/OrDateTimePicker-a8247a84.js +0 -997
@@ -0,0 +1,308 @@
1
+ <template>
2
+ <div
3
+ ref="root"
4
+ :class="rootStyles"
5
+ >
6
+ <template v-if="label">
7
+ <OrLabel
8
+ :control-id="controlAttributes.id"
9
+ :variant="'input'"
10
+ :required="required"
11
+ :disabled="disabled"
12
+ >
13
+ {{ label }}
14
+
15
+ <template v-slot:addon>
16
+ <slot name="addon" />
17
+ </template>
18
+ </OrLabel>
19
+ </template>
20
+
21
+ <OrInputBox
22
+ v-dropdown-open="togglePopover"
23
+ v-dropdown-close="closePopover"
24
+ :variant="disableDefaultStyles ? 'unstyled' : 'styled'"
25
+ :size="size"
26
+ :invalid="!!error"
27
+ :readonly="readonly"
28
+ :disabled="disabled"
29
+ >
30
+ <div
31
+ ref="control"
32
+ v-dropdown-open="togglePopover"
33
+ v-dropdown-close="closePopover"
34
+ v-bind="controlAttributes"
35
+ :class="controlStyles"
36
+ :contenteditable="true"
37
+ :required="required"
38
+ :readonly="readonly"
39
+ :disabled="disabled"
40
+ >
41
+ {{ formatDate(proxyModelValue) }}
42
+ </div>
43
+
44
+ <OrPopover
45
+ ref="popover"
46
+ :variant="'auto'"
47
+ :trigger="control"
48
+ :placement="'bottom'"
49
+ >
50
+ <OrDateTimePickerPopoverHeader>
51
+ <OrDateTimePickerMobileControl label="Date">
52
+ {{ formatDateAlt(draftModelValue) }}
53
+ </OrDateTimePickerMobileControl>
54
+ </OrDateTimePickerPopoverHeader>
55
+
56
+ <OrDateTimePickerMonthSelect
57
+ v-model="draftModelValue"
58
+ :filter="filter"
59
+ />
60
+ <OrDateTimePickerDaySelect
61
+ v-model="draftModelValue"
62
+ :filter="filter"
63
+ />
64
+
65
+ <OrDateTimePickerPopoverFooter
66
+ @resolve="proxyModelValue = draftModelValue; popover.close()"
67
+ @reject="draftModelValue = proxyModelValue; popover.close()"
68
+ />
69
+ </OrPopover>
70
+
71
+ <div :class="['grow']" />
72
+
73
+ <div :class="['layout-inline-row']">
74
+ <template v-if="modelValue">
75
+ <OrIconButton
76
+ :icon="'close'"
77
+ :color="'inherit'"
78
+ :disabled="readonly || disabled"
79
+ @click.stop="$emit('update:modelValue', undefined)"
80
+ />
81
+ </template>
82
+ </div>
83
+ </OrInputBox>
84
+
85
+ <template v-if="!error">
86
+ <template v-if="hint">
87
+ <OrHint :disabled="disabled">
88
+ {{ hint }}
89
+ </OrHint>
90
+ </template>
91
+ </template>
92
+
93
+ <template v-if="typeof error === 'string'">
94
+ <OrError :disabled="disabled">
95
+ {{ error }}
96
+ </OrError>
97
+ </template>
98
+ </div>
99
+ </template>
100
+
101
+ <script lang="ts">
102
+ import { computed, defineComponent, PropType, reactive, ref, watch } from 'vue-demi';
103
+ import { DropdownClose, DropdownOpen } from '../../directives';
104
+ import { useControlAttributes, useIdAttribute, useValidationAttributes } from '../../hooks';
105
+ import OrDateTimePickerDaySelect from '../or-date-time-picker-v3/partials/or-date-time-picker-day-select/OrDateTimePickerDaySelect.vue';
106
+ import OrDateTimePickerMobileControl from '../or-date-time-picker-v3/partials/or-date-time-picker-mobile-control/OrDateTimePickerMobileControl.vue';
107
+ import OrDateTimePickerMonthSelect from '../or-date-time-picker-v3/partials/or-date-time-picker-month-select/OrDateTimePickerMonthSelect.vue';
108
+ import OrDateTimePickerPopoverFooter from '../or-date-time-picker-v3/partials/or-date-time-picker-popover-footer/OrDateTimePickerPopoverFooter.vue';
109
+ import OrDateTimePickerPopoverHeader from '../or-date-time-picker-v3/partials/or-date-time-picker-popover-header/OrDateTimePickerPopoverHeader.vue';
110
+ import { OrErrorV3 as OrError } from '../or-error-v3';
111
+ import { OrHintV3 as OrHint } from '../or-hint-v3';
112
+ import { OrIconButtonV3 as OrIconButton } from '../or-icon-button-v3';
113
+ import { OrInputBoxV3 as OrInputBox } from '../or-input-box-v3';
114
+ import { OrLabelV3 as OrLabel } from '../or-label-v3';
115
+ import { OrPopoverV3 as OrPopover } from '../or-popover-v3';
116
+ import { DatePickerSize } from './props';
117
+ import { DatePicker, DatePickerControl } from './styles';
118
+
119
+ export default defineComponent({
120
+ name: 'OrDatePicker',
121
+
122
+ components: {
123
+ OrDateTimePickerDaySelect,
124
+ OrDateTimePickerMobileControl,
125
+ OrDateTimePickerMonthSelect,
126
+ OrDateTimePickerPopoverFooter,
127
+ OrDateTimePickerPopoverHeader,
128
+ OrError,
129
+ OrHint,
130
+ OrIconButton,
131
+ OrInputBox,
132
+ OrLabel,
133
+ OrPopover,
134
+ },
135
+
136
+ directives: {
137
+ DropdownClose,
138
+ DropdownOpen,
139
+ },
140
+
141
+ model: {
142
+ prop: 'modelValue',
143
+ event: 'update:modelValue',
144
+ },
145
+
146
+ props: {
147
+ modelValue: {
148
+ type: Date,
149
+ default: undefined,
150
+ },
151
+
152
+ filter: {
153
+ type: Function as PropType<(value: Date) => boolean>,
154
+ default: undefined,
155
+ },
156
+
157
+ size: {
158
+ type: String as PropType<DatePickerSize>,
159
+ default: DatePickerSize.M,
160
+ },
161
+
162
+ label: {
163
+ type: String,
164
+ default: undefined,
165
+ },
166
+
167
+ hint: {
168
+ type: String,
169
+ default: undefined,
170
+ },
171
+
172
+ error: {
173
+ type: [String, Boolean],
174
+ default: undefined,
175
+ },
176
+
177
+ required: {
178
+ type: Boolean,
179
+ default: false,
180
+ },
181
+
182
+ readonly: {
183
+ type: Boolean,
184
+ default: false,
185
+ },
186
+
187
+ disabled: {
188
+ type: Boolean,
189
+ default: false,
190
+ },
191
+
192
+ disableDefaultStyles: {
193
+ type: Boolean,
194
+ default: false,
195
+ },
196
+ },
197
+
198
+ emits: [
199
+ 'update:modelValue',
200
+
201
+ 'keydown',
202
+ 'keyup',
203
+ 'focus',
204
+ 'blur',
205
+ ],
206
+
207
+ expose: [
208
+ 'root',
209
+
210
+ 'focus',
211
+ 'blur',
212
+ ],
213
+
214
+ setup(props, context) {
215
+ // Refs
216
+ const root = ref<HTMLElement>();
217
+
218
+ const control = ref<HTMLInputElement>();
219
+
220
+ const popover = ref<InstanceType<typeof OrPopover>>();
221
+ const popoverState = computed(() => popover.value?.state);
222
+
223
+ // Styles
224
+ const rootStyles = computed(() => [
225
+ 'or-date-picker',
226
+ ...DatePicker,
227
+ ]);
228
+
229
+ const controlStyles = computed(() => [
230
+ ...DatePickerControl,
231
+ ]);
232
+
233
+ // State
234
+ const controlAttributes = reactive({
235
+ id: useIdAttribute(),
236
+ ...useControlAttributes(),
237
+ ...useValidationAttributes(),
238
+ });
239
+
240
+ const proxyModelValue = computed({
241
+ get: () => props.modelValue,
242
+
243
+ set: (value) => {
244
+ context.emit('update:modelValue', value);
245
+ },
246
+ });
247
+
248
+ const draftModelValue = ref<Date>();
249
+
250
+ watch(proxyModelValue, (value) => {
251
+ draftModelValue.value = value;
252
+ }, { immediate: true });
253
+
254
+ // Methods
255
+ function togglePopover(): void {
256
+ if (!props.readonly && !props.disabled) {
257
+ const popoverInstance = popover.value;
258
+
259
+ if (popoverInstance) {
260
+ if (popoverState.value === 'open') {
261
+ (popoverInstance.close as () => void)();
262
+ } else {
263
+ (popoverInstance.open as () => void)();
264
+ }
265
+ }
266
+ }
267
+ }
268
+
269
+ function closePopover(): void {
270
+ const popoverInstance = popover.value;
271
+
272
+ if (popoverInstance) {
273
+ (popoverInstance.close as () => void)();
274
+ }
275
+ }
276
+
277
+ function formatDate(value?: Date): string {
278
+ return value?.toLocaleString('default', {
279
+ dateStyle: 'short',
280
+ timeZone: 'UTC',
281
+ }) ?? '--';
282
+ }
283
+
284
+ function formatDateAlt(value?: Date): string {
285
+ return value?.toLocaleString('default', {
286
+ dateStyle: 'medium',
287
+ timeZone: 'UTC',
288
+ }) ?? '--';
289
+ }
290
+
291
+ return {
292
+ root,
293
+ control,
294
+ popover,
295
+ popoverState,
296
+ rootStyles,
297
+ controlStyles,
298
+ controlAttributes,
299
+ proxyModelValue,
300
+ draftModelValue,
301
+ togglePopover,
302
+ closePopover,
303
+ formatDate,
304
+ formatDateAlt,
305
+ };
306
+ },
307
+ });
308
+ </script>
@@ -0,0 +1,2 @@
1
+ export { default as OrDatePickerV3 } from './OrDatePicker.vue';
2
+ export * from './props';
@@ -0,0 +1 @@
1
+ export { InputBoxSize as DatePickerSize } from '../or-input-box-v3';
@@ -0,0 +1,12 @@
1
+ export const DatePicker: string[] = [
2
+ // Layout
3
+ 'layout-column',
4
+
5
+ // Spacing
6
+ 'gap-xs',
7
+ ];
8
+
9
+ export const DatePickerControl: string[] = [
10
+ // Layout
11
+ 'layout-inline-row justify-center',
12
+ ];
@@ -27,6 +27,10 @@ export default {
27
27
  control: { type: 'text' },
28
28
  },
29
29
 
30
+ filter: {
31
+ table: { disable: true },
32
+ },
33
+
30
34
  size: {
31
35
  control: { type: 'select' },
32
36
  options: Object.values(DateTimePickerSize),
@@ -27,32 +27,6 @@
27
27
  :readonly="readonly"
28
28
  :disabled="disabled"
29
29
  >
30
- <!-- <input
31
- ref="dateControl"
32
- v-dropdown-open="toggleDatePopover"
33
- v-dropdown-close="closeDatePopover"
34
- v-bind="controlAttributes"
35
- :class="controlStyles"
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
30
  <div
57
31
  ref="dateControl"
58
32
  v-dropdown-open="toggleDatePopover"
@@ -97,8 +71,14 @@
97
71
  </OrDateTimePickerMobileControl>
98
72
  </OrDateTimePickerPopoverHeader>
99
73
 
100
- <OrDateTimePickerMonthSelect v-model="draftModelValue" />
101
- <OrDateTimePickerDaySelect v-model="draftModelValue" />
74
+ <OrDateTimePickerMonthSelect
75
+ v-model="draftModelValue"
76
+ :filter="filter"
77
+ />
78
+ <OrDateTimePickerDaySelect
79
+ v-model="draftModelValue"
80
+ :filter="filter"
81
+ />
102
82
 
103
83
  <OrDateTimePickerPopoverFooter
104
84
  @resolve="proxyModelValue = draftModelValue; datePopover.close()"
@@ -122,7 +102,10 @@
122
102
  </OrDateTimePickerMobileControl>
123
103
  </OrDateTimePickerPopoverHeader>
124
104
 
125
- <OrDateTimePickerTimeSelect v-model="draftModelValue" />
105
+ <OrDateTimePickerTimeSelect
106
+ v-model="draftModelValue"
107
+ :filter="filter"
108
+ />
126
109
 
127
110
  <OrDateTimePickerPopoverFooter
128
111
  @resolve="proxyModelValue = draftModelValue; timePopover.close()"
@@ -213,6 +196,11 @@ export default defineComponent({
213
196
  default: undefined,
214
197
  },
215
198
 
199
+ filter: {
200
+ type: Function as PropType<(value: Date) => boolean>,
201
+ default: undefined,
202
+ },
203
+
216
204
  size: {
217
205
  type: String as PropType<DateTimePickerSize>,
218
206
  default: DateTimePickerSize.M,
@@ -412,11 +400,3 @@ export default defineComponent({
412
400
  },
413
401
  });
414
402
  </script>
415
-
416
- <style scoped>
417
- input {
418
- min-width: 0;
419
- background: none;
420
- outline: none;
421
- }
422
- </style>
@@ -10,6 +10,7 @@
10
10
  :class="buttonGroupItemStyles"
11
11
  :variant="Number(value) === Number(proxyModelValue) ? 'contained' : 'text'"
12
12
  :color="Number(value) === Number(proxyModelValue) ? 'primary' : 'inherit'"
13
+ :disabled="filter && !filter(value)"
13
14
  @click.stop="proxyModelValue = value"
14
15
  >
15
16
  {{ formatDay(value) }}
@@ -19,7 +20,7 @@
19
20
  </template>
20
21
 
21
22
  <script lang="ts">
22
- import { computed, defineComponent, ref } from 'vue-demi';
23
+ import { computed, defineComponent, PropType, ref } from 'vue-demi';
23
24
  import { OrButtonV3 as OrButton } from '../../../or-button-v3';
24
25
  import { useDefaultDate } from '../../hooks/useDefaultDate';
25
26
  import { useDefaultHours } from '../../hooks/useDefaultHours';
@@ -45,6 +46,11 @@ export default defineComponent({
45
46
  type: Date,
46
47
  default: undefined,
47
48
  },
49
+
50
+ filter: {
51
+ type: Function as PropType<(value: Date) => boolean>,
52
+ default: undefined,
53
+ },
48
54
  },
49
55
 
50
56
  emits: [
@@ -35,6 +35,7 @@
35
35
  v-for="value in yearOptions"
36
36
  :key="Number(value)"
37
37
  :selected="Number(value) === Number(proxyModelValue)"
38
+ :disabled="filter && !filter(value)"
38
39
  @click.stop="proxyModelValue = value; yearMenu.close()"
39
40
  >
40
41
  {{ formatYear(value) }}
@@ -49,6 +50,7 @@
49
50
  v-for="value in monthOptions"
50
51
  :key="Number(value)"
51
52
  :selected="Number(value) === Number(proxyModelValue)"
53
+ :disabled="filter && !filter(value)"
52
54
  @click.stop="proxyModelValue = value; monthMenu.close()"
53
55
  >
54
56
  {{ formatMonth(value) }}
@@ -64,7 +66,7 @@
64
66
  </template>
65
67
 
66
68
  <script lang="ts">
67
- import { computed, defineComponent, ref } from 'vue-demi';
69
+ import { computed, defineComponent, PropType, ref } from 'vue-demi';
68
70
  import { OrButtonV3 as OrButton } from '../../../or-button-v3';
69
71
  import { OrIconButtonV3 as OrIconButton } from '../../../or-icon-button-v3';
70
72
  import { OrIconV3 as OrIcon } from '../../../or-icon-v3';
@@ -98,6 +100,11 @@ export default defineComponent({
98
100
  type: Date,
99
101
  default: undefined,
100
102
  },
103
+
104
+ filter: {
105
+ type: Function as PropType<(value: Date) => boolean>,
106
+ default: undefined,
107
+ },
101
108
  },
102
109
 
103
110
  emits: [
@@ -10,6 +10,7 @@
10
10
  :class="buttonGroupItemStyles"
11
11
  :variant="Number(value) === Number(proxyModelValue) ? 'contained' : 'text'"
12
12
  :color="Number(value) === Number(proxyModelValue) ? 'primary' : 'inherit'"
13
+ :disabled="filter && !filter(value)"
13
14
  @click.stop="proxyModelValue = value"
14
15
  >
15
16
  {{ formatHours(value) }}
@@ -25,6 +26,7 @@
25
26
  :class="buttonGroupItemStyles"
26
27
  :variant="Number(value) === Number(proxyModelValue) ? 'contained' : 'text'"
27
28
  :color="Number(value) === Number(proxyModelValue) ? 'primary' : 'inherit'"
29
+ :disabled="filter && !filter(value)"
28
30
  @click.stop="proxyModelValue = value"
29
31
  >
30
32
  {{ formatMinutes(value) }}
@@ -34,7 +36,7 @@
34
36
  </template>
35
37
 
36
38
  <script lang="ts">
37
- import { computed, defineComponent, ref } from 'vue-demi';
39
+ import { computed, defineComponent, PropType, ref } from 'vue-demi';
38
40
  import { OrButtonV3 as OrButton } from '../../../or-button-v3';
39
41
  import { useDefaultDate } from '../../hooks/useDefaultDate';
40
42
  import { useDefaultHours } from '../../hooks/useDefaultHours';
@@ -60,6 +62,11 @@ export default defineComponent({
60
62
  type: Date,
61
63
  default: undefined,
62
64
  },
65
+
66
+ filter: {
67
+ type: Function as PropType<(value: Date) => boolean>,
68
+ default: undefined,
69
+ },
63
70
  },
64
71
 
65
72
  emits: [
@@ -0,0 +1,7 @@
1
+ import { DocsPage } from '@storybook/addon-docs';
2
+
3
+ ```ts
4
+ import { OrTimePickerV3 as OrTimePicker } from '@onereach/ui-components';
5
+ ```
6
+
7
+ <DocsPage />
@@ -0,0 +1,160 @@
1
+ import { action } from '@storybook/addon-actions';
2
+ import { Meta, StoryFn } from '@storybook/vue3';
3
+ import * as Faker from 'faker';
4
+ import { ref, watch } from 'vue-demi';
5
+ import { OrIconV3 as OrIcon } from '../or-icon-v3';
6
+ import OrTimePickerDocs from './OrTimePicker.docs.mdx';
7
+ import OrTimePicker from './OrTimePicker.vue';
8
+ import { TimePickerSize } from './props';
9
+
10
+ export default {
11
+ title: 'Components/Forms/Time Picker',
12
+ component: OrTimePicker,
13
+
14
+ argTypes: {
15
+ // Slots
16
+ addon: {
17
+ type: {
18
+ name: 'string',
19
+ required: false,
20
+ },
21
+
22
+ control: { type: 'text' },
23
+ },
24
+
25
+ // Props
26
+ modelValue: {
27
+ control: { type: 'text' },
28
+ },
29
+
30
+ filter: {
31
+ table: { disable: true },
32
+ },
33
+
34
+ size: {
35
+ control: { type: 'select' },
36
+ options: Object.values(TimePickerSize),
37
+ },
38
+
39
+ label: {
40
+ control: { type: 'text' },
41
+ },
42
+
43
+ hint: {
44
+ control: { type: 'text' },
45
+ },
46
+
47
+ error: {
48
+ control: { type: 'text' },
49
+ },
50
+
51
+ required: {
52
+ control: { type: 'boolean' },
53
+ },
54
+
55
+ readonly: {
56
+ control: { type: 'boolean' },
57
+ },
58
+
59
+ disabled: {
60
+ control: { type: 'boolean' },
61
+ },
62
+
63
+ disableDefaultStyles: {
64
+ control: { type: 'boolean' },
65
+ },
66
+
67
+ // Events
68
+ 'update:modelValue': {
69
+ table: { disable: true },
70
+ },
71
+
72
+ input: {
73
+ table: { disable: true },
74
+ },
75
+
76
+ keydown: {
77
+ table: { disable: true },
78
+ },
79
+
80
+ keyup: {
81
+ table: { disable: true },
82
+ },
83
+
84
+ focus: {
85
+ table: { disable: true },
86
+ },
87
+
88
+ blur: {
89
+ table: { disable: true },
90
+ },
91
+ },
92
+
93
+ parameters: {
94
+ layout: 'centered',
95
+
96
+ docs: {
97
+ page: OrTimePickerDocs,
98
+ },
99
+
100
+ design: {
101
+ type: 'figma',
102
+ url: 'https://www.figma.com/file/o7DdkaznUW2PtX4wiSuhhQ/Core?node-id=3161-14394&t=fEpVdGUcSv9iaRfM-0',
103
+ },
104
+ },
105
+ } as Meta<typeof OrTimePicker>;
106
+
107
+ const Template: StoryFn<typeof OrTimePicker> = (args) => ({
108
+ components: {
109
+ OrIcon,
110
+ OrTimePicker,
111
+ },
112
+
113
+ setup() {
114
+ // State
115
+ const model = ref<Date>();
116
+
117
+ // Effects
118
+ watch(model, (value) => {
119
+ console.debug(value);
120
+ });
121
+
122
+ return {
123
+ args,
124
+ model,
125
+ onUpdateModelValue: action('update:modelValue'),
126
+ onKeydown: action('keydown'),
127
+ onKeyup: action('keyup'),
128
+ onFocus: action('focus'),
129
+ onBlur: action('blur'),
130
+ };
131
+ },
132
+
133
+ template: `
134
+ <OrTimePicker
135
+ v-model="model"
136
+ v-bind="args"
137
+ @update:modelValue="onUpdateModelValue"
138
+ @keydown="onKeydown"
139
+ @keyup="onKeyup"
140
+ @focus="onFocus"
141
+ @blur="onBlur"
142
+ >
143
+ <template #addon>
144
+ ${args.addon}
145
+ </template>
146
+ </OrTimePicker>
147
+ `,
148
+ });
149
+
150
+ export const Default = Template.bind({});
151
+
152
+ Default.args = {
153
+ // Slots
154
+ addon: '<OrIcon icon="info" />',
155
+
156
+ // Props
157
+ label: 'Label',
158
+ placeholder: 'Placeholder',
159
+ hint: Faker.lorem.sentence(20),
160
+ };