@dative-gpi/foundation-shared-components 1.0.129 → 1.0.130-maps2

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 (54) hide show
  1. package/components/FSBreadcrumbs.vue +20 -12
  2. package/components/FSChip.vue +2 -2
  3. package/components/FSDialogMenu.vue +17 -8
  4. package/components/FSDialogRemove.vue +1 -1
  5. package/components/FSFadeOut.vue +1 -1
  6. package/components/FSIconCard.vue +26 -3
  7. package/components/FSInstantPicker.vue +266 -0
  8. package/components/FSPlayButtons.vue +72 -0
  9. package/components/FSProgressBar.vue +94 -0
  10. package/components/FSSpan.vue +8 -5
  11. package/components/FSText.vue +7 -5
  12. package/components/deviceOrganisations/FSStatusRichCard.vue +170 -0
  13. package/components/fields/FSAutocompleteField.vue +36 -52
  14. package/components/fields/FSDateField.vue +1 -0
  15. package/components/fields/FSSelectField.vue +41 -53
  16. package/components/fields/FSTermField.vue +11 -8
  17. package/components/fields/FSTranslateRichTextField.vue +17 -2
  18. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +21 -11
  19. package/components/lists/FSDataTableUI.vue +30 -19
  20. package/components/map/FSMap.vue +19 -10
  21. package/components/map/FSMapMarker.vue +4 -4
  22. package/components/map/FSMapMarkerClusterGroup.vue +1 -1
  23. package/components/map/FSMapOverlay.vue +34 -19
  24. package/components/tiles/FSGroupTileUI.vue +14 -1
  25. package/components/tiles/FSLocationTileUI.vue +1 -1
  26. package/components/tiles/FSSimpleTileUI.vue +1 -1
  27. package/components/views/desktop/FSBaseDefaultDesktopView.vue +8 -7
  28. package/components/views/desktop/FSBaseEntityDesktopView.vue +1 -0
  29. package/components/views/mobile/FSBaseDefaultMobileView.vue +8 -7
  30. package/components/views/mobile/FSBaseEntityMobileView.vue +1 -0
  31. package/composables/useSlots.ts +2 -1
  32. package/models/rules.ts +5 -2
  33. package/package.json +4 -4
  34. package/styles/components/fs_breadcrumbs.scss +19 -31
  35. package/styles/components/fs_button.scss +7 -5
  36. package/styles/components/fs_chip.scss +8 -6
  37. package/styles/components/fs_clickable.scss +14 -12
  38. package/styles/components/fs_data_iterator_item.scss +12 -10
  39. package/styles/components/fs_dialog.scss +1 -1
  40. package/styles/components/fs_dialog_menu.scss +4 -2
  41. package/styles/components/fs_image_card.scss +5 -3
  42. package/styles/components/fs_map.scss +48 -16
  43. package/styles/components/fs_password_field.scss +4 -2
  44. package/styles/components/fs_progress_bar.scss +14 -0
  45. package/styles/components/fs_select_field.scss +4 -0
  46. package/styles/components/fs_span.scss +12 -4
  47. package/styles/components/fs_status_rich_card.scss +13 -0
  48. package/styles/components/fs_tabs.scss +9 -5
  49. package/styles/components/fs_tag.scss +9 -7
  50. package/styles/components/index.scss +2 -0
  51. package/styles/globals/overrides.scss +11 -4
  52. package/styles/globals/scrollbars.scss +10 -0
  53. package/utils/index.ts +1 -0
  54. package/utils/operations.ts +69 -0
@@ -1,13 +1,15 @@
1
1
  <template>
2
- <span
2
+ <div
3
3
  :class="classes"
4
4
  :style="style"
5
5
  v-bind="$attrs"
6
6
  >
7
- <slot>
8
- {{ $props.label }}
9
- </slot>
10
- </span>
7
+ <span>
8
+ <slot>
9
+ {{ $props.label }}
10
+ </slot>
11
+ </span>
12
+ </div>
11
13
  </template>
12
14
 
13
15
  <script lang="ts">
@@ -0,0 +1,170 @@
1
+ <template>
2
+ <component
3
+ v-if="$props.modelStatus"
4
+ class="fs-status-rich-card"
5
+ variant="standard"
6
+ :is="$attrs.onClick ? FSClickable : FSCard"
7
+ :padding="$props.padding"
8
+ :height="$props.height"
9
+ :width="$props.width"
10
+ :color="color"
11
+ :style="style"
12
+ >
13
+ <FSCol
14
+ align="center-center"
15
+ :gap="$props.gap"
16
+ >
17
+ <FSRow
18
+ align="top-center"
19
+ >
20
+ <FSIcon
21
+ v-if="icon"
22
+ >
23
+ {{ icon }}
24
+ </FSIcon>
25
+ <FSText
26
+ v-if="value"
27
+ font="text-button"
28
+ >
29
+ {{ value }}
30
+ </FSText>
31
+ </FSRow>
32
+ <FSText
33
+ font="text-overline"
34
+ align="center"
35
+ :lineClamp="$props.titleClamp"
36
+ >
37
+ {{ title }}
38
+ </FSText>
39
+ <slot
40
+ name="footer"
41
+ v-bind="{ color }"
42
+ />
43
+ </FSCol>
44
+ <div
45
+ class="fs-status-rich-card-corner"
46
+ >
47
+ <slot
48
+ name="corner"
49
+ v-bind="{ color }"
50
+ />
51
+ </div>
52
+ </component>
53
+ </template>
54
+
55
+ <script lang="ts">
56
+ import { computed, defineComponent, type PropType, type StyleValue } from "vue";
57
+
58
+ import { ColorEnum, type FSDeviceStatusGroup, type FSModelStatus } from "@dative-gpi/foundation-shared-components/models";
59
+ import { useColors } from "@dative-gpi/foundation-shared-components/composables";
60
+
61
+ import FSClickable from "../FSClickable.vue";
62
+ import FSCard from "../FSCard.vue";
63
+ import FSIcon from "../FSChip.vue";
64
+ import FSText from "../FSText.vue";
65
+ import FSCol from "../FSCol.vue";
66
+
67
+ export default defineComponent({
68
+ name: "FSStatusRichCard",
69
+ components: {
70
+ FSClickable,
71
+ FSCard,
72
+ FSIcon,
73
+ FSText,
74
+ FSCol
75
+ },
76
+ props: {
77
+ height: {
78
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
79
+ required: false,
80
+ default: "100px"
81
+ },
82
+ width: {
83
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
84
+ required: false,
85
+ default: "160px"
86
+ },
87
+ padding: {
88
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
89
+ required: false,
90
+ default: "12px"
91
+ },
92
+ gap: {
93
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
94
+ required: false,
95
+ default: "8px"
96
+ },
97
+ title: {
98
+ type: [String, null] as PropType<string | null>,
99
+ required: false,
100
+ default: null
101
+ },
102
+ titleClamp: {
103
+ type: Number,
104
+ required: false,
105
+ default: 2
106
+ },
107
+ color: {
108
+ type: [String, null] as PropType<string | null>,
109
+ required: false,
110
+ default: null
111
+ },
112
+ fillBackground: {
113
+ type: Boolean,
114
+ required: false,
115
+ default: false
116
+ },
117
+ modelStatus: {
118
+ type: Object as PropType<FSModelStatus | undefined>,
119
+ required: true
120
+ },
121
+ statusGroup: {
122
+ type: Object as PropType<FSDeviceStatusGroup | undefined>,
123
+ required: true
124
+ }
125
+ },
126
+ setup(props) {
127
+ const { getColors } = useColors();
128
+
129
+ const color = computed((): string => {
130
+ return props.color ?? props.statusGroup?.color ?? props.modelStatus?.colorDefault ?? ColorEnum.Primary;
131
+ });
132
+
133
+ const icon = computed((): string | null => {
134
+ return props.statusGroup?.icon ?? props.modelStatus?.iconDefault ?? null;
135
+ });
136
+
137
+ const title = computed((): string => {
138
+ return props.title ?? props.modelStatus?.label;
139
+ });
140
+
141
+ const value = computed((): string | null => {
142
+ if (props.statusGroup?.label) {
143
+ return props.statusGroup.label;
144
+ }
145
+ if (props.statusGroup?.value && !isNaN(parseFloat(props.statusGroup?.value))) {
146
+ return `${parseFloat(props.statusGroup.value).toLocaleString("fullwide", { maximumFractionDigits: 2 })} ${props.statusGroup.unit}`;
147
+ }
148
+ if (props.statusGroup?.value) {
149
+ return `${props.statusGroup?.value} ${props.statusGroup?.unit}`;
150
+ }
151
+ return null;
152
+ });
153
+
154
+ const style = computed((): StyleValue => ({
155
+ "--fs-status-rich-card-background-color": props.fillBackground ? getColors(color.value).light : "transparent",
156
+ "--fs-status-rich-card-border-color": props.fillBackground ? getColors(color.value).base : getColors(ColorEnum.Light).dark
157
+ }));
158
+
159
+ return {
160
+ FSClickable,
161
+ FSCard,
162
+ color,
163
+ style,
164
+ title,
165
+ value,
166
+ icon
167
+ };
168
+ }
169
+ });
170
+ </script>
@@ -121,6 +121,7 @@
121
121
  </FSCard>
122
122
  </FSSlideGroup>
123
123
  <FSDialogMenu
124
+ padding="16px"
124
125
  v-model="dialog"
125
126
  >
126
127
  <template
@@ -139,69 +140,52 @@
139
140
  >
140
141
  <FSRow
141
142
  v-for="(item, index) in searchItems"
143
+ align="center-left"
144
+ height="36px"
145
+ :wrap="false"
142
146
  :key="index"
147
+ @click="$props.multiple ?
148
+ onCheckboxChange(item[$props.itemValue!]) :
149
+ onRadioChange(item[$props.itemValue!])
150
+ "
143
151
  >
144
- <FSCheckbox
145
- v-if="$props.multiple"
146
- :label="item[$props.itemTitle!]"
147
- :editable="$props.editable"
148
- :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
149
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
150
- >
151
- <template
152
- #label="{ font }"
153
- >
154
- <FSRow
155
- align="center-left"
156
- :wrap="false"
157
- >
158
- <slot
159
- name="item-prepend"
160
- v-bind="{ item }"
161
- />
162
- <FSSpan
163
- :font="font"
164
- >
165
- {{ item[$props.itemTitle!] }}
166
- </FSSpan>
167
- </FSRow>
168
- </template>
169
- </FSCheckbox>
170
- <FSRadio
171
- v-else
172
- :selected="$props.modelValue === item[$props.itemValue!]"
173
- :label="item[$props.itemTitle!]"
174
- :editable="$props.editable"
175
- :item="item"
176
- :modelValue="item[$props.itemValue!]"
177
- @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
152
+ <FSRow
153
+ style="min-width: 0;"
154
+ :wrap="false"
178
155
  >
179
- <template
180
- #label="{ font }"
156
+ <slot
157
+ name="item-prepend"
158
+ v-bind="{ item }"
159
+ />
160
+ <FSSpan
161
+ :font="selectedItems.includes(item) ? 'text-button' : 'text-body'"
181
162
  >
182
- <FSRow
183
- align="center-left"
184
- :wrap="false"
185
- >
186
- <slot
187
- name="item-prepend"
188
- v-bind="{ item }"
189
- />
190
- <FSSpan
191
- :font="font"
192
- >
193
- {{ item[$props.itemTitle!] }}
194
- </FSSpan>
195
- </FSRow>
196
- </template>
197
- </FSRadio>
163
+ {{ item[$props.itemTitle!] }}
164
+ </FSSpan>
165
+ </FSRow>
198
166
  <FSRow
199
167
  align="center-right"
168
+ width="hug"
169
+ :wrap="false"
200
170
  >
201
171
  <slot
202
172
  name="item-append"
203
173
  v-bind="{ item }"
204
174
  />
175
+ <FSCheckbox
176
+ v-if="$props.multiple"
177
+ :editable="$props.editable"
178
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
179
+ @update:modelValue="onCheckboxChange(item[$props.itemValue!])"
180
+ />
181
+ <FSRadio
182
+ v-else
183
+ :selected="$props.modelValue === item[$props.itemValue!]"
184
+ :editable="$props.editable"
185
+ :item="item"
186
+ :modelValue="item[$props.itemValue!]"
187
+ @update:modelValue="onRadioChange(item[$props.itemValue!])"
188
+ />
205
189
  </FSRow>
206
190
  </FSRow>
207
191
  </FSCol>
@@ -72,6 +72,7 @@
72
72
  v-else
73
73
  >
74
74
  <v-menu
75
+ min-width="300px"
75
76
  :closeOnContentClick="false"
76
77
  :modelValue="menu && $props.editable"
77
78
  @update:modelValue="menu = $event"
@@ -122,6 +122,7 @@
122
122
  </FSCard>
123
123
  </FSSlideGroup>
124
124
  <FSDialogMenu
125
+ padding="16px"
125
126
  v-model="dialog"
126
127
  >
127
128
  <template
@@ -135,69 +136,52 @@
135
136
  >
136
137
  <FSRow
137
138
  v-for="(item, index) in $props.items"
139
+ align="center-left"
140
+ height="36px"
141
+ :wrap="false"
138
142
  :key="index"
143
+ @click="$props.multiple ?
144
+ onCheckboxChange(item[$props.itemValue!]) :
145
+ onRadioChange(item[$props.itemValue!])
146
+ "
139
147
  >
140
- <FSCheckbox
141
- v-if="$props.multiple"
142
- :label="item[$props.itemTitle!]"
143
- :editable="$props.editable"
144
- :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
145
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
146
- >
147
- <template
148
- #label="{ font }"
149
- >
150
- <FSRow
151
- align="center-left"
152
- :wrap="false"
153
- >
154
- <slot
155
- name="item-prepend"
156
- v-bind="{ item }"
157
- />
158
- <FSSpan
159
- :font="font"
160
- >
161
- {{ item[$props.itemTitle!] }}
162
- </FSSpan>
163
- </FSRow>
164
- </template>
165
- </FSCheckbox>
166
- <FSRadio
167
- v-else
168
- :selected="$props.modelValue === item[$props.itemValue!]"
169
- :label="item[$props.itemTitle!]"
170
- :editable="$props.editable"
171
- :item="item"
172
- :modelValue="item[$props.itemValue!]"
173
- @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
148
+ <FSRow
149
+ style="min-width: 0;"
150
+ :wrap="false"
174
151
  >
175
- <template
176
- #label="{ font }"
152
+ <slot
153
+ name="item-prepend"
154
+ v-bind="{ item }"
155
+ />
156
+ <FSSpan
157
+ :font="selectedItems.includes(item) ? 'text-button' : 'text-body'"
177
158
  >
178
- <FSRow
179
- align="center-left"
180
- :wrap="false"
181
- >
182
- <slot
183
- name="item-prepend"
184
- v-bind="{ item }"
185
- />
186
- <FSSpan
187
- :font="font"
188
- >
189
- {{ item[$props.itemTitle!] }}
190
- </FSSpan>
191
- </FSRow>
192
- </template>
193
- </FSRadio>
159
+ {{ item[$props.itemTitle!] }}
160
+ </FSSpan>
161
+ </FSRow>
194
162
  <FSRow
195
163
  align="center-right"
164
+ width="hug"
165
+ :wrap="false"
196
166
  >
197
167
  <slot
198
168
  name="item-append"
199
169
  v-bind="{ item }"
200
170
  />
171
+ <FSCheckbox
172
+ v-if="$props.multiple"
173
+ :editable="$props.editable"
174
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
175
+ @update:modelValue="onCheckboxChange(item[$props.itemValue!])"
176
+ />
177
+ <FSRadio
178
+ v-else
179
+ :selected="$props.modelValue === item[$props.itemValue!]"
180
+ :editable="$props.editable"
181
+ :item="item"
182
+ :modelValue="item[$props.itemValue!]"
183
+ @update:modelValue="onRadioChange(item[$props.itemValue!])"
184
+ />
201
185
  </FSRow>
202
186
  </FSRow>
203
187
  </FSCol>
@@ -215,6 +199,7 @@
215
199
  </FSCol>
216
200
  <FSBaseField
217
201
  v-else
202
+ :style="style"
218
203
  :description="$props.description"
219
204
  :hideHeader="$props.hideHeader"
220
205
  :required="$props.required"
@@ -262,7 +247,6 @@
262
247
  :rules="$props.rules"
263
248
  :hideDetails="true"
264
249
  :menuIcon="null"
265
- :style="style"
266
250
  :modelValue="$props.modelValue"
267
251
  @update:modelValue="onSingleChange"
268
252
  v-bind="$attrs"
@@ -401,6 +385,7 @@
401
385
  </v-select>
402
386
  <FSSlideGroup
403
387
  v-if="$props.multiple && Array.isArray($props.modelValue)"
388
+ class="fs-select-field-multiple-slide-group"
404
389
  >
405
390
  <FSCard
406
391
  v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
@@ -428,6 +413,7 @@
428
413
  <FSButton
429
414
  icon="mdi-close"
430
415
  variant="icon"
416
+ :editable="$props.editable"
431
417
  :color="ColorEnum.Dark"
432
418
  @click="() => onCheckboxChange(item[$props.itemValue!])"
433
419
  />
@@ -582,6 +568,7 @@ export default defineComponent({
582
568
  "--fs-select-field-border-color" : lights.base,
583
569
  "--fs-select-field-color" : lights.dark,
584
570
  "--fs-select-field-active-border-color": lights.base,
571
+ "--fs-select-field-multiple-opacity" : "var(--v-disabled-opacity)",
585
572
  "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
586
573
  ...fontStyles.value
587
574
  };
@@ -593,6 +580,7 @@ export default defineComponent({
593
580
  "--fs-select-field-color" : darks.base,
594
581
  "--fs-select-field-active-border-color": darks.dark,
595
582
  "--fs-select-field-error-border-color" : errors.base,
583
+ "--fs-select-field-multiple-opacity" : "1",
596
584
  "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
597
585
  ...fontStyles.value
598
586
  };
@@ -84,7 +84,7 @@
84
84
  </template>
85
85
 
86
86
  <script lang="ts">
87
- import { computed, defineComponent, type PropType, ref, watch } from "vue";
87
+ import { computed, defineComponent, onMounted, type PropType, ref, watch } from "vue";
88
88
  import _ from "lodash";
89
89
 
90
90
  import { DateRules, NumberRules, TextRules } from "@dative-gpi/foundation-shared-components/models";
@@ -189,8 +189,8 @@ export default defineComponent({
189
189
  });
190
190
 
191
191
  const actualValue = computed(() => {
192
- const dates = [parseForPicker(innerStartDate.value), parseForPicker(innerEndDate.value)]
193
- if(dates.some(d => d == null)) {
192
+ const dates = [parseForPicker(innerStartDate.value), parseForPicker(innerEndDate.value)];
193
+ if (dates.some(d => d == null)) {
194
194
  return null;
195
195
  }
196
196
  return dates as [number, number];
@@ -650,14 +650,17 @@ export default defineComponent({
650
650
  innerDateValue.value = 1;
651
651
  };
652
652
 
653
+ // This watcher is called once even if both value are set at the same time
653
654
  watch([() => props.startDate, () => props.endDate], () => {
654
- if (
655
- innerStartDate.value !== props.startDate ||
656
- innerEndDate.value !== props.endDate
657
- ) {
655
+ // Having one of those different from the inner value means something up the chain is updating
656
+ if (props.startDate !== innerStartDate.value || props.endDate !== innerEndDate.value) {
658
657
  reset();
659
658
  }
660
- }, { immediate: true });
659
+ });
660
+
661
+ onMounted((): void => {
662
+ reset();
663
+ });
661
664
 
662
665
  return {
663
666
  innerDateSetting,
@@ -77,7 +77,7 @@
77
77
  </template>
78
78
 
79
79
  <script lang="ts">
80
- import { defineComponent, type PropType, ref } from 'vue';
80
+ import { defineComponent, type PropType, ref, watch } from 'vue';
81
81
 
82
82
  import { useAppLanguages } from "@dative-gpi/foundation-shared-services/composables";
83
83
 
@@ -134,7 +134,10 @@ export default defineComponent({
134
134
  setup(props, { emit }) {
135
135
  const { languages } = useAppLanguages();
136
136
 
137
- const innerTranslations = ref(props.translations);
137
+ const innerTranslations = ref<{
138
+ languageCode: string;
139
+ [key: string]: string | object | null;
140
+ }[]>([]);
138
141
 
139
142
  const getTranslation = (languageCode: string): string | object => {
140
143
  if (!innerTranslations.value) {
@@ -178,6 +181,18 @@ export default defineComponent({
178
181
  emit('update:translationsExpanded', false);
179
182
  };
180
183
 
184
+ watch(() => props.translations, (newTranslations) => {
185
+ innerTranslations.value = newTranslations.map((translation) => {
186
+ if(typeof translation[props.property] === 'string'){
187
+ return translation;
188
+ }
189
+ return {
190
+ ...translation,
191
+ [props.property]: JSON.stringify(translation[props.property])
192
+ }
193
+ });
194
+ }, { immediate: true, deep: true });
195
+
181
196
  return {
182
197
  languages,
183
198
  onCancelTranslations,
@@ -17,10 +17,13 @@
17
17
  {{ $tr("ui.common.every", "Every") }}
18
18
  </FSSpan>
19
19
  <FSSelectDays
20
+ width="200px"
21
+ :placeholder="$tr('ui.common.selected-days', '{0} selected day(s)', days.length)"
20
22
  :editable="$props.editable"
23
+ :multiple="true"
21
24
  :useAllDays="false"
22
25
  :hideHeader="true"
23
- :modelValue="day"
26
+ :modelValue="days"
24
27
  @update:modelValue="onUpdateDay($event)"
25
28
  />
26
29
  <FSSpan
@@ -80,11 +83,13 @@ export default defineComponent({
80
83
 
81
84
  const selectedConfiguration = ref("custom");
82
85
 
83
- const day = computed((): number => {
84
- if (isNaN(parseInt(props.modelValue[4]))) {
85
- return 0;
86
+ const days = computed((): number[] => {
87
+ try {
88
+ return props.modelValue[4].split(",").map((day) => parseInt(day) - 1);
89
+ } catch (error) {
90
+ console.error("Error parsing days:", error);
91
+ return [];
86
92
  }
87
- return parseInt(props.modelValue[4]) - 1;
88
93
  });
89
94
 
90
95
  const time = computed((): number => {
@@ -94,16 +99,21 @@ export default defineComponent({
94
99
  return ((parseInt(props.modelValue[0])) + (parseInt(props.modelValue[1]) * 60)) * 60 * 1000;
95
100
  });
96
101
 
97
- const onUpdateDay = (value: number): void => {
98
- const hours = Math.floor(value / (60 * 60 * 1000));
99
- const minutes = Math.floor(value / (60 * 1000) % 60);
100
- emit("update:modelValue", [`${minutes}`, `${hours}`, `*`, `*`, `${value + 1}`]);
102
+ const onUpdateDay = (value: number[]): void => {
103
+ if(value.length === 0) {
104
+ return;
105
+ }
106
+ const hours = Math.floor(time.value / (60 * 60 * 1000));
107
+ const minutes = Math.floor(time.value / (60 * 1000) % 60);
108
+ const daysCron = value.map((day) => day + 1).join(",");
109
+ emit("update:modelValue", [`${minutes}`, `${hours}`, `*`, `*`, `${daysCron}`]);
101
110
  };
102
111
 
103
112
  const onUpdateHours = (value: number): void => {
104
113
  const hours = Math.floor(value / (60 * 60 * 1000));
105
114
  const minutes = Math.floor(value / (60 * 1000) % 60);
106
- emit("update:modelValue", [`${minutes}`, `${hours}`, `*`, `*`, `${day.value + 1}`]);
115
+ const daysCron = days.value.map((day) => day + 1).join(",");
116
+ emit("update:modelValue", [`${minutes}`, `${hours}`, `*`, `*`, `${daysCron}`]);
107
117
  };
108
118
 
109
119
  return {
@@ -111,7 +121,7 @@ export default defineComponent({
111
121
  selectedConfiguration,
112
122
  ColorEnum,
113
123
  time,
114
- day,
124
+ days,
115
125
  onUpdateHours,
116
126
  onUpdateDay
117
127
  };