@dative-gpi/foundation-shared-components 1.0.139-widgethiddencode → 1.0.140-selectable

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 (74) hide show
  1. package/components/FSButton.vue +6 -6
  2. package/components/FSCalendarTwin.vue +1 -5
  3. package/components/FSCheckbox.vue +4 -4
  4. package/components/FSChip.vue +3 -3
  5. package/components/FSClickable.vue +6 -6
  6. package/components/FSClock.vue +16 -7
  7. package/components/FSDialogFormBody.vue +3 -3
  8. package/components/FSDialogMultiFormBody.vue +3 -3
  9. package/components/FSDialogSubmit.vue +3 -3
  10. package/components/FSInstantPicker.vue +8 -5
  11. package/components/FSOptionGroup.vue +8 -8
  12. package/components/FSOptionItem.vue +4 -4
  13. package/components/FSPagination.vue +1 -1
  14. package/components/FSRadio.vue +4 -4
  15. package/components/FSRadioGroup.vue +3 -3
  16. package/components/FSSlider.vue +4 -4
  17. package/components/FSSwitch.vue +6 -4
  18. package/components/FSTag.vue +2 -2
  19. package/components/FSTagGroup.vue +3 -3
  20. package/components/FSToggleSet.vue +7 -7
  21. package/components/buttons/FSButtonCheckbox.vue +4 -4
  22. package/components/fields/FSAutocompleteField.vue +21 -15
  23. package/components/fields/FSBaseField.vue +3 -3
  24. package/components/fields/FSColorField.vue +6 -6
  25. package/components/fields/FSDateField.vue +8 -8
  26. package/components/fields/FSDateRangeField.vue +5 -5
  27. package/components/fields/FSDateTimeField.vue +8 -8
  28. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  29. package/components/fields/FSDateTimeRangeField.vue +22 -115
  30. package/components/fields/FSEntityFieldUI.vue +6 -6
  31. package/components/fields/FSGradientField.vue +5 -5
  32. package/components/fields/FSIconField.vue +6 -6
  33. package/components/fields/FSMagicConfigField.vue +5 -4
  34. package/components/fields/FSNumberField.vue +3 -3
  35. package/components/fields/FSPasswordField.vue +7 -7
  36. package/components/fields/FSRichTextField.vue +7 -7
  37. package/components/fields/FSSelectField.vue +22 -16
  38. package/components/fields/FSTagField.vue +9 -9
  39. package/components/fields/FSTermField.vue +51 -42
  40. package/components/fields/FSTextArea.vue +7 -7
  41. package/components/fields/FSTextField.vue +7 -7
  42. package/components/fields/FSTimeField.vue +14 -10
  43. package/components/fields/FSTimeRangeField.vue +7 -7
  44. package/components/fields/FSTimeStepField.vue +5 -5
  45. package/components/fields/FSTranslateField.vue +7 -7
  46. package/components/fields/FSTranslateRichTextField.vue +7 -7
  47. package/components/fields/FSTranslateTextArea.vue +7 -7
  48. package/components/fields/FSTreeViewField.vue +11 -11
  49. package/components/fields/periodicField/FSPeriodicDailyField.vue +5 -5
  50. package/components/fields/periodicField/FSPeriodicField.vue +7 -7
  51. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +8 -8
  52. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +5 -5
  53. package/components/fields/periodicField/FSPeriodicYearlyField.vue +6 -6
  54. package/components/lists/FSDataIteratorItem.vue +23 -67
  55. package/components/lists/FSDataTableUI.vue +24 -19
  56. package/components/lists/FSFilterButton.vue +3 -3
  57. package/components/lists/FSHeaderButton.vue +3 -3
  58. package/components/lists/FSHiddenButton.vue +2 -2
  59. package/components/lists/FSSimpleListItem.vue +0 -1
  60. package/components/tiles/FSChartTileUI.vue +0 -6
  61. package/components/tiles/FSDeviceOrganisationTileUI.vue +0 -6
  62. package/components/tiles/FSGroupTileUI.vue +0 -6
  63. package/components/tiles/FSLoadTile.vue +3 -2
  64. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  65. package/components/tiles/FSSimpleTileUI.vue +0 -6
  66. package/components/tiles/FSTile.vue +19 -20
  67. package/components/tiles/FSUserOrganisationTileUI.vue +0 -6
  68. package/composables/useColors.ts +16 -7
  69. package/package.json +4 -4
  70. package/styles/components/fs_calendar.scss +1 -0
  71. package/styles/components/fs_chip.scss +1 -1
  72. package/styles/components/fs_draggable.scss +0 -5
  73. package/styles/components/index.scss +0 -1
  74. package/styles/components/fs_data_iterator_item.scss +0 -35
@@ -5,13 +5,13 @@
5
5
  :modelValue="$props.modelValue"
6
6
  >
7
7
  <FSWrapGroup
8
- v-if="['wrap'].includes($props.variant)"
8
+ v-if="$props.variant && ['wrap'].includes($props.variant)"
9
9
  ref="toggleSetRef"
10
10
  :padding="$props.padding"
11
11
  :gap="$props.gap"
12
12
  >
13
13
  <template
14
- v-if="$props.values.length"
14
+ v-if="$props.values && $props.values.length"
15
15
  >
16
16
  <template
17
17
  v-if="!$slots.item"
@@ -20,7 +20,7 @@
20
20
  v-for="(item, index) in $props.values"
21
21
  :prependIcon="item.prependIcon"
22
22
  :appendIcon="item.appendIcon"
23
- :editable="$props.editable"
23
+ :disabled="$props.disabled"
24
24
  :variant="getVariant(item)"
25
25
  :color="getColor(item)"
26
26
  :class="getClass(item)"
@@ -54,7 +54,7 @@
54
54
  :gap="$props.gap"
55
55
  >
56
56
  <template
57
- v-if="$props.values.length"
57
+ v-if="$props.values && $props.values.length"
58
58
  >
59
59
  <template
60
60
  v-if="!$slots.item"
@@ -63,7 +63,7 @@
63
63
  v-for="(item, index) in $props.values"
64
64
  :prependIcon="item.prependIcon"
65
65
  :appendIcon="item.appendIcon"
66
- :editable="$props.editable"
66
+ :disabled="$props.disabled"
67
67
  :variant="getVariant(item)"
68
68
  :color="getColor(item)"
69
69
  :class="getClass(item)"
@@ -197,10 +197,10 @@ export default defineComponent({
197
197
  required: false,
198
198
  default: false
199
199
  },
200
- editable: {
200
+ disabled: {
201
201
  type: Boolean,
202
202
  required: false,
203
- default: true
203
+ default: false
204
204
  }
205
205
  },
206
206
  emits: ["update:modelValue"],
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <FSButton
3
- :editable="$props.editable"
3
+ :disabled="$props.disabled"
4
4
  :prependIcon="prependIcon"
5
5
  :load="$props.load"
6
6
  :variant="variant"
@@ -40,10 +40,10 @@ export default defineComponent({
40
40
  required: false,
41
41
  default: false
42
42
  },
43
- editable: {
43
+ disabled: {
44
44
  type: Boolean,
45
45
  required: false,
46
- default: true
46
+ default: false
47
47
  }
48
48
  },
49
49
  emits: ["update:modelValue"],
@@ -57,7 +57,7 @@ export default defineComponent({
57
57
  });
58
58
 
59
59
  const onClick = (): void => {
60
- if (props.editable && !props.load) {
60
+ if (!props.disabled && !props.load) {
61
61
  emit("update:modelValue", !props.modelValue);
62
62
  }
63
63
  };
@@ -20,7 +20,7 @@
20
20
  :description="$props.description"
21
21
  :hideHeader="$props.hideHeader"
22
22
  :clearable="$props.clearable"
23
- :editable="$props.editable"
23
+ :disabled="$props.disabled"
24
24
  :required="$props.required"
25
25
  :label="$props.label"
26
26
  :rules="$props.rules"
@@ -63,7 +63,7 @@
63
63
  name="clear"
64
64
  >
65
65
  <FSButton
66
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
66
+ v-if="$props.clearable && !$props.disabled && !!$props.modelValue"
67
67
  icon="mdi-close"
68
68
  variant="icon"
69
69
  :color="ColorEnum.Dark"
@@ -78,7 +78,7 @@
78
78
  <FSButton
79
79
  icon="mdi-chevron-down"
80
80
  variant="icon"
81
- :editable="$props.editable"
81
+ :disabled="$props.disabled"
82
82
  :color="ColorEnum.Dark"
83
83
  @click="openMobileOverlay"
84
84
  />
@@ -174,14 +174,14 @@
174
174
  />
175
175
  <FSCheckbox
176
176
  v-if="$props.multiple"
177
- :editable="$props.editable"
177
+ :disabled="$props.disabled"
178
178
  :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
179
179
  @update:modelValue="onCheckboxChange(item[$props.itemValue!])"
180
180
  />
181
181
  <FSRadio
182
182
  v-else
183
183
  :selected="$props.modelValue === item[$props.itemValue!]"
184
- :editable="$props.editable"
184
+ :disabled="$props.disabled"
185
185
  :item="item"
186
186
  :modelValue="item[$props.itemValue!]"
187
187
  @update:modelValue="onRadioChange(item[$props.itemValue!])"
@@ -217,13 +217,13 @@
217
217
  :description="$props.description"
218
218
  :hideHeader="$props.hideHeader"
219
219
  :required="$props.required"
220
- :editable="$props.editable"
220
+ :disabled="$props.disabled"
221
221
  :label="$props.label"
222
222
  :messages="messages"
223
223
  >
224
224
  <FSToggleSet
225
225
  v-if="$props.toggleSet"
226
- :editable="$props.editable"
226
+ :disabled="$props.disabled"
227
227
  :multiple="$props.multiple"
228
228
  :required="$props.required"
229
229
  :values="$props.items"
@@ -248,10 +248,11 @@
248
248
  <v-autocomplete
249
249
  class="fs-autocomplete-field"
250
250
  variant="outlined"
251
- :clearable="$props.clearable && $props.editable && !!$props.modelValue"
251
+ :clearable="$props.clearable && !$props.disabled && !!$props.modelValue"
252
252
  :itemTitle="$props.itemTitle"
253
253
  :itemValue="$props.itemValue"
254
- :readonly="!$props.editable"
254
+ :disabled="$props.disabled"
255
+ :readonly="$props.readonly"
255
256
  :multiple="$props.multiple"
256
257
  :validateOn="validateOn"
257
258
  :autoSelectFirst="true"
@@ -366,7 +367,7 @@
366
367
  name="clear"
367
368
  >
368
369
  <FSButton
369
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
370
+ v-if="$props.clearable && !$props.disabled && !!$props.modelValue"
370
371
  icon="mdi-close"
371
372
  variant="icon"
372
373
  :color="ColorEnum.Dark"
@@ -384,7 +385,7 @@
384
385
  <FSButton
385
386
  icon="mdi-chevron-down"
386
387
  variant="icon"
387
- :editable="$props.editable"
388
+ :disabled="$props.disabled"
388
389
  :color="ColorEnum.Dark"
389
390
  />
390
391
  </slot>
@@ -563,10 +564,15 @@ export default defineComponent({
563
564
  required: false,
564
565
  default: true
565
566
  },
566
- editable: {
567
+ disabled: {
567
568
  type: Boolean,
568
569
  required: false,
569
- default: true
570
+ default: false
571
+ },
572
+ readonly: {
573
+ type: Boolean,
574
+ required: false,
575
+ default: false
570
576
  },
571
577
  loading: {
572
578
  type: Boolean,
@@ -604,7 +610,7 @@ export default defineComponent({
604
610
  const showExtra = ref(true);
605
611
 
606
612
  const style = computed((): StyleValue => {
607
- if (!props.editable) {
613
+ if (props.disabled) {
608
614
  return {
609
615
  "--fs-autocomplete-field-cursor" : "default",
610
616
  "--fs-autocomplete-field-border-color" : lights.base,
@@ -703,7 +709,7 @@ export default defineComponent({
703
709
  });
704
710
 
705
711
  const openMobileOverlay = () => {
706
- if (!props.editable) {
712
+ if (props.disabled) {
707
713
  return;
708
714
  }
709
715
  dialog.value = true;
@@ -105,10 +105,10 @@ export default defineComponent({
105
105
  required: false,
106
106
  default: () => []
107
107
  },
108
- editable: {
108
+ disabled: {
109
109
  type: Boolean,
110
110
  required: false,
111
- default: true
111
+ default: false
112
112
  },
113
113
  minWidth: {
114
114
  type: String,
@@ -128,7 +128,7 @@ export default defineComponent({
128
128
  const darks = getColors(ColorEnum.Dark);
129
129
 
130
130
  const style = computed((): StyleValue => {
131
- if (!props.editable) {
131
+ if (props.disabled) {
132
132
  return {
133
133
  "--fs-base-field-color" : lights.dark,
134
134
  "--fs-base-field-min-width": props.minWidth
@@ -4,7 +4,7 @@
4
4
  class="fs-color-field"
5
5
  :description="$props.description"
6
6
  :hideHeader="$props.hideHeader"
7
- :editable="$props.editable"
7
+ :disabled="$props.disabled"
8
8
  :required="$props.required"
9
9
  :label="$props.label"
10
10
  :width="$props.width"
@@ -16,7 +16,7 @@
16
16
  :id="activatorId"
17
17
  padding="8px"
18
18
  width="100%"
19
- :class="{ 'fs-color-field-disabled': !$props.editable }"
19
+ :class="{ 'fs-color-field-disabled': $props.disabled }"
20
20
  >
21
21
  <FSRow
22
22
  align="center-center"
@@ -39,7 +39,7 @@
39
39
  min-width="300px"
40
40
  :activator="`#${activatorId}`"
41
41
  :closeOnContentClick="false"
42
- :modelValue="menu && $props.editable"
42
+ :modelValue="menu && !$props.disabled"
43
43
  @update:modelValue="menu = $event"
44
44
  >
45
45
  <FSCard
@@ -131,10 +131,10 @@ export default defineComponent({
131
131
  required: false,
132
132
  default: false
133
133
  },
134
- editable: {
134
+ disabled: {
135
135
  type: Boolean,
136
136
  required: false,
137
- default: true
137
+ default: false
138
138
  },
139
139
  allowOpacity: {
140
140
  type: Boolean,
@@ -170,7 +170,7 @@ export default defineComponent({
170
170
  const fullColor = ref("#00000000");
171
171
 
172
172
  const style = computed((): StyleValue => {
173
- if (!props.editable) {
173
+ if (props.disabled) {
174
174
  return {
175
175
  "--fs-color-field-cursor" : "default",
176
176
  "--fs-color-field-border-color" : lights.base,
@@ -10,7 +10,7 @@
10
10
  :color="$props.color"
11
11
  :hideHeader="$props.hideHeader"
12
12
  :required="$props.required"
13
- :editable="$props.editable"
13
+ :disabled="$props.disabled"
14
14
  :readonly="true"
15
15
  :rules="$props.rules"
16
16
  :messages="messages"
@@ -29,7 +29,7 @@
29
29
  <FSButton
30
30
  variant="icon"
31
31
  icon="mdi-calendar"
32
- :editable="$props.editable"
32
+ :disabled="$props.disabled"
33
33
  :color="ColorEnum.Dark"
34
34
  @click="openMobileOverlay"
35
35
  />
@@ -74,7 +74,7 @@
74
74
  <v-menu
75
75
  min-width="300px"
76
76
  :closeOnContentClick="false"
77
- :modelValue="menu && $props.editable"
77
+ :modelValue="menu && !$props.disabled"
78
78
  @update:modelValue="menu = $event"
79
79
  >
80
80
  <template
@@ -87,7 +87,7 @@
87
87
  :color="$props.color"
88
88
  :hideHeader="$props.hideHeader"
89
89
  :required="$props.required"
90
- :editable="$props.editable"
90
+ :disabled="$props.disabled"
91
91
  :readonly="true"
92
92
  :rules="$props.rules"
93
93
  :messages="messages"
@@ -106,7 +106,7 @@
106
106
  <FSButton
107
107
  variant="icon"
108
108
  icon="mdi-calendar"
109
- :editable="$props.editable"
109
+ :disabled="$props.disabled"
110
110
  :color="ColorEnum.Dark"
111
111
  />
112
112
  </slot>
@@ -208,10 +208,10 @@ export default defineComponent({
208
208
  required: false,
209
209
  default: () => []
210
210
  },
211
- editable: {
211
+ disabled: {
212
212
  type: Boolean,
213
213
  required: false,
214
- default: true
214
+ default: false
215
215
  }
216
216
  },
217
217
  emits: ["update:modelValue"],
@@ -228,7 +228,7 @@ export default defineComponent({
228
228
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules));
229
229
 
230
230
  const openMobileOverlay = () => {
231
- if (!props.editable) {
231
+ if (props.disabled) {
232
232
  return;
233
233
  }
234
234
  dialog.value = true;
@@ -6,7 +6,7 @@
6
6
  :color="$props.color"
7
7
  :hideHeader="$props.hideHeader"
8
8
  :required="$props.required"
9
- :editable="$props.editable"
9
+ :disabled="$props.disabled"
10
10
  :readonly="true"
11
11
  :rules="$props.rules"
12
12
  :messages="messages"
@@ -26,7 +26,7 @@
26
26
  <FSButton
27
27
  variant="icon"
28
28
  icon="mdi-calendar"
29
- :editable="$props.editable"
29
+ :disabled="$props.disabled"
30
30
  :color="ColorEnum.Dark"
31
31
  />
32
32
  </slot>
@@ -115,10 +115,10 @@ export default defineComponent({
115
115
  required: false,
116
116
  default: () => []
117
117
  },
118
- editable: {
118
+ disabled: {
119
119
  type: Boolean,
120
120
  required: false,
121
- default: true
121
+ default: false
122
122
  }
123
123
  },
124
124
  emits: ["update:modelValue"],
@@ -140,7 +140,7 @@ export default defineComponent({
140
140
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules, true));
141
141
 
142
142
  const onClick = (): void => {
143
- if (props.editable) {
143
+ if (!props.disabled) {
144
144
  dialog.value = true;
145
145
  }
146
146
  };
@@ -10,7 +10,7 @@
10
10
  :color="$props.color"
11
11
  :hideHeader="$props.hideHeader"
12
12
  :required="$props.required"
13
- :editable="$props.editable"
13
+ :disabled="$props.disabled"
14
14
  :readonly="true"
15
15
  :rules="$props.rules"
16
16
  :messages="messages"
@@ -29,7 +29,7 @@
29
29
  <FSButton
30
30
  variant="icon"
31
31
  icon="mdi-calendar"
32
- :editable="$props.editable"
32
+ :disabled="$props.disabled"
33
33
  :color="ColorEnum.Dark"
34
34
  @click="openMobileOverlay"
35
35
  />
@@ -93,7 +93,7 @@
93
93
  >
94
94
  <v-menu
95
95
  :closeOnContentClick="false"
96
- :modelValue="menu && $props.editable"
96
+ :modelValue="menu && !$props.disabled"
97
97
  @update:modelValue="menu = $event"
98
98
  >
99
99
  <template
@@ -106,7 +106,7 @@
106
106
  :color="$props.color"
107
107
  :hideHeader="$props.hideHeader"
108
108
  :required="$props.required"
109
- :editable="$props.editable"
109
+ :disabled="$props.disabled"
110
110
  :readonly="true"
111
111
  :rules="$props.rules"
112
112
  :messages="messages"
@@ -125,7 +125,7 @@
125
125
  <FSButton
126
126
  variant="icon"
127
127
  icon="mdi-calendar"
128
- :editable="$props.editable"
128
+ :disabled="$props.disabled"
129
129
  :color="ColorEnum.Dark"
130
130
  />
131
131
  </slot>
@@ -256,10 +256,10 @@ export default defineComponent({
256
256
  required: false,
257
257
  default: () => []
258
258
  },
259
- editable: {
259
+ disabled: {
260
260
  type: Boolean,
261
261
  required: false,
262
- default: true
262
+ default: false
263
263
  }
264
264
  },
265
265
  emits: ["update:modelValue"],
@@ -279,7 +279,7 @@ export default defineComponent({
279
279
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules));
280
280
 
281
281
  const openMobileOverlay = () => {
282
- if (!props.editable) {
282
+ if (props.disabled) {
283
283
  return;
284
284
  }
285
285
  dialog.value = true;
@@ -0,0 +1,160 @@
1
+ <template>
2
+ <FSDialogSubmit
3
+ :title="$props.label"
4
+ :submitButtonColor="$props.color"
5
+ :modelValue="$props.dialog"
6
+ :disabled="!valid"
7
+ @update:modelValue="$emit('cancel')"
8
+ @click:submitButton="onSubmit"
9
+ >
10
+ <template
11
+ #body
12
+ >
13
+ <FSCol>
14
+ <FSCalendarTwin
15
+ :color="$props.color"
16
+ v-model="innerDateRange"
17
+ />
18
+ <FSRow>
19
+ <FSCol>
20
+ <FSClock
21
+ :color="$props.color"
22
+ :date="innerDateLeft"
23
+ v-model="innerTimeLeft"
24
+ />
25
+ </FSCol>
26
+ <FSCol>
27
+ <FSClock
28
+ :color="$props.color"
29
+ :date="innerDateRight"
30
+ v-model="innerTimeRight"
31
+ />
32
+ </FSCol>
33
+ </FSRow>
34
+ </FSCol>
35
+ </template>
36
+ </FSDialogSubmit>
37
+ </template>
38
+
39
+ <script lang="ts">
40
+ import { computed, defineComponent, type PropType, ref, watch } from "vue";
41
+
42
+ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
43
+ import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
44
+
45
+ import FSDialogSubmit from "../FSDialogSubmit.vue";
46
+ import FSCalendarTwin from "../FSCalendarTwin.vue";
47
+ import FSClock from "../FSClock.vue";
48
+ import FSCol from "../FSCol.vue";
49
+ import FSRow from "../FSRow.vue";
50
+
51
+ export default defineComponent({
52
+ name: "FSDateTimeRangeDialog",
53
+ components: {
54
+ FSDialogSubmit,
55
+ FSCalendarTwin,
56
+ FSClock,
57
+ FSCol,
58
+ FSRow
59
+ },
60
+ props: {
61
+ label: {
62
+ type: String as PropType<string | null>,
63
+ required: false,
64
+ default: null
65
+ },
66
+ modelValue: {
67
+ type: Array as PropType<number[] | null>,
68
+ required: false,
69
+ default: () => null
70
+ },
71
+ color: {
72
+ type: String as PropType<ColorBase>,
73
+ required: false,
74
+ default: ColorEnum.Primary
75
+ },
76
+ dialog: {
77
+ type: Boolean,
78
+ required: false,
79
+ default: false
80
+ }
81
+ },
82
+ emits: ["update:modelValue", "cancel"],
83
+ setup(props, { emit }) {
84
+ const { getUserOffset } = useAppTimeZone();
85
+
86
+ const innerDateRange = ref<number[] | null>(null);
87
+ const innerTimeRight = ref(0);
88
+ const innerTimeLeft = ref(0);
89
+
90
+ const innerDateLeft = computed((): number | null => {
91
+ if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length) {
92
+ return innerDateRange.value[0];
93
+ }
94
+ return null;
95
+ });
96
+
97
+ const innerDateRight= computed((): number | null => {
98
+ if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1) {
99
+ return innerDateRange.value[1];
100
+ }
101
+ return null;
102
+ });
103
+
104
+ const valid = computed((): boolean => {
105
+ return !!innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1 &&
106
+ innerDateRange.value[0] + innerTimeLeft.value < innerDateRange.value[1] + innerTimeRight.value;
107
+ });
108
+
109
+ const reset = (): void => {
110
+ if (props.modelValue && Array.isArray(props.modelValue)) {
111
+ // FSClock just gives two numbers without consideration for the time zone
112
+ // We must adjust the time to the user's time zone
113
+ switch (props.modelValue.length) {
114
+ case 0: {
115
+ break;
116
+ }
117
+ case 1: {
118
+ innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset(props.modelValue[0])) % (24 * 60 * 60 * 1000));
119
+ innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value];
120
+ break;
121
+ }
122
+ default: {
123
+ innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset(props.modelValue[0])) % (24 * 60 * 60 * 1000));
124
+ innerTimeRight.value = Math.floor((props.modelValue[1] + getUserOffset(props.modelValue[1])) % (24 * 60 * 60 * 1000));
125
+ innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value, props.modelValue[1] - innerTimeRight.value];
126
+ break;
127
+ }
128
+ }
129
+ }
130
+ else {
131
+ innerDateRange.value = null;
132
+ innerTimeLeft.value = 0;
133
+ innerTimeRight.value = 0;
134
+ }
135
+ };
136
+
137
+ watch(() => props.modelValue, () => {
138
+ reset();
139
+ }, { immediate: true });
140
+
141
+ const onSubmit = (): void => {
142
+ if (valid.value) {
143
+ emit("update:modelValue", [innerDateRange.value![0] + innerTimeLeft.value, innerDateRange.value![1] + innerTimeRight.value]);
144
+ return;
145
+ }
146
+ };
147
+
148
+ return {
149
+ valid,
150
+ innerDateLeft,
151
+ innerTimeLeft,
152
+ innerDateRight,
153
+ innerTimeRight,
154
+ innerDateRange,
155
+ ColorEnum,
156
+ onSubmit
157
+ };
158
+ }
159
+ });
160
+ </script>