@dative-gpi/foundation-shared-components 1.0.66 → 1.0.67-map-carousel

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 (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +11 -9
  5. package/components/FSCalendar.vue +50 -12
  6. package/components/FSCalendarTwin.vue +95 -43
  7. package/components/FSCard.vue +61 -9
  8. package/components/FSCardPlaceholder.vue +8 -5
  9. package/components/FSCheckbox.vue +5 -4
  10. package/components/FSChip.vue +73 -45
  11. package/components/FSChipGroup.vue +69 -0
  12. package/components/FSClickable.vue +11 -9
  13. package/components/FSClock.vue +30 -12
  14. package/components/FSCol.vue +11 -5
  15. package/components/FSDialog.vue +2 -1
  16. package/components/FSDialogContent.vue +12 -11
  17. package/components/FSDialogForm.vue +22 -2
  18. package/components/FSDialogFormBody.vue +50 -31
  19. package/components/FSDialogMenu.vue +17 -8
  20. package/components/FSDialogMultiFormBody.vue +23 -13
  21. package/components/FSDialogRemove.vue +7 -8
  22. package/components/FSDialogSubmit.vue +20 -11
  23. package/components/FSEditImageUI.vue +13 -5
  24. package/components/FSFadeOut.vue +53 -21
  25. package/components/FSForm.vue +10 -8
  26. package/components/FSGrid.vue +0 -1
  27. package/components/FSIcon.vue +2 -2
  28. package/components/FSIconCard.vue +68 -12
  29. package/components/FSInformationsMenu.vue +142 -0
  30. package/components/FSInstantPicker.vue +268 -0
  31. package/components/FSLink.vue +25 -9
  32. package/components/FSLoader.vue +28 -10
  33. package/components/FSMenu.vue +47 -0
  34. package/components/FSOptionGroup.vue +8 -8
  35. package/components/FSOptionItem.vue +4 -4
  36. package/components/FSOptionsMenu.vue +165 -0
  37. package/components/FSPagination.vue +1 -1
  38. package/components/FSPlayButtons.vue +72 -0
  39. package/components/FSProgressBar.vue +94 -0
  40. package/components/FSRadio.vue +5 -4
  41. package/components/FSRadioGroup.vue +3 -3
  42. package/components/FSRangePicker.vue +275 -0
  43. package/components/FSRangeSlider.vue +84 -0
  44. package/components/FSRouterLink.vue +42 -0
  45. package/components/FSSlideGroup.vue +19 -5
  46. package/components/FSSlider.vue +44 -79
  47. package/components/FSSpan.vue +12 -7
  48. package/components/FSSwitch.vue +44 -48
  49. package/components/FSTab.vue +15 -13
  50. package/components/FSTabs.vue +32 -7
  51. package/components/FSTag.vue +3 -3
  52. package/components/FSTagGroup.vue +6 -4
  53. package/components/FSText.vue +11 -7
  54. package/components/FSToggleSet.vue +7 -7
  55. package/components/FSTreeView.vue +107 -0
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +26 -7
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +0 -1
  65. package/components/agenda/FSMonthAgenda.vue +1 -6
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +5 -10
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/carousels/FSCarousel.vue +23 -0
  106. package/components/carousels/FSCarouselItem.vue +14 -0
  107. package/components/deviceOrganisations/FSConnectivity.vue +5 -3
  108. package/components/deviceOrganisations/FSStatus.vue +5 -3
  109. package/components/deviceOrganisations/FSStatusCard.vue +7 -9
  110. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  111. package/components/deviceOrganisations/FSWorstAlert.vue +24 -36
  112. package/components/deviceOrganisations/FSWorstAlertCard.vue +8 -47
  113. package/components/fields/FSAutocompleteField.vue +85 -82
  114. package/components/fields/FSAutocompleteTag.vue +1 -1
  115. package/components/fields/FSBaseField.vue +42 -25
  116. package/components/fields/FSClosableSearchField.vue +83 -0
  117. package/components/fields/FSColorField.vue +12 -10
  118. package/components/fields/FSCommentField.vue +28 -16
  119. package/components/fields/FSDateField.vue +13 -10
  120. package/components/fields/FSDateRangeField.vue +6 -5
  121. package/components/fields/FSDateTimeField.vue +14 -11
  122. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  123. package/components/fields/FSDateTimeRangeField.vue +23 -115
  124. package/components/fields/FSEntityFieldUI.vue +19 -16
  125. package/components/fields/FSGradientField.vue +5 -5
  126. package/components/fields/FSIconField.vue +16 -9
  127. package/components/fields/FSMagicConfigField.vue +15 -7
  128. package/components/fields/FSMagicField.vue +7 -2
  129. package/components/fields/FSMapAddressField.vue +187 -0
  130. package/components/fields/FSNumberField.vue +8 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +9 -9
  136. package/components/fields/FSTermField.vue +69 -46
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +21 -19
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +198 -123
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +95 -88
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +144 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +103 -42
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +0 -6
  192. package/components/tiles/FSEntityCountBadge.vue +72 -0
  193. package/components/tiles/FSFolderTileUI.vue +38 -4
  194. package/components/tiles/FSGroupTileUI.vue +32 -136
  195. package/components/tiles/FSLoadTile.vue +16 -10
  196. package/components/tiles/FSLocationTileUI.vue +45 -63
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +30 -24
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/tiles/FSUserTileUI.vue +119 -0
  202. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  203. package/components/views/FSBaseView.vue +64 -0
  204. package/components/views/FSEntityView.vue +12 -146
  205. package/components/views/FSSimpleView.vue +29 -0
  206. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  207. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  208. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  209. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  210. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  211. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  212. package/composables/index.ts +1 -0
  213. package/composables/useAddress.ts +40 -8
  214. package/composables/useBreakpoints.ts +40 -4
  215. package/composables/useColors.ts +16 -7
  216. package/composables/useMagicFieldProvider.ts +1 -0
  217. package/composables/useMapLayers.ts +69 -0
  218. package/composables/useSlots.ts +2 -1
  219. package/models/colors.ts +2 -1
  220. package/models/deviceAlerts.ts +1 -0
  221. package/models/magicFields.ts +1 -0
  222. package/models/map.ts +12 -10
  223. package/models/rules.ts +5 -2
  224. package/models/tables.ts +2 -1
  225. package/models/variableNode.ts +8 -5
  226. package/package.json +5 -5
  227. package/styles/components/fs_agenda.scss +4 -0
  228. package/styles/components/fs_agenda_event.scss +1 -1
  229. package/styles/components/fs_agenda_hours_row.scss +0 -8
  230. package/styles/components/fs_autocomplete_field.scss +0 -13
  231. package/styles/components/fs_breadcrumbs.scss +18 -36
  232. package/styles/components/fs_button.scss +7 -5
  233. package/styles/components/fs_calendar.scss +1 -0
  234. package/styles/components/fs_card.scss +9 -0
  235. package/styles/components/fs_chip.scss +13 -7
  236. package/styles/components/fs_clickable.scss +16 -23
  237. package/styles/components/fs_clock.scss +0 -10
  238. package/styles/components/fs_col.scss +1 -1
  239. package/styles/components/fs_color_field.scss +0 -4
  240. package/styles/components/fs_data_table.scss +6 -9
  241. package/styles/components/fs_dialog.scss +4 -10
  242. package/styles/components/fs_dialog_menu.scss +4 -2
  243. package/styles/components/fs_draggable.scss +0 -5
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -1
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_password_field.scss +4 -2
  252. package/styles/components/fs_progress_bar.scss +14 -0
  253. package/styles/components/fs_radio.scss +0 -11
  254. package/styles/components/fs_rich_text_field.scss +1 -10
  255. package/styles/components/fs_select_field.scss +4 -13
  256. package/styles/components/fs_slide_group.scss +7 -0
  257. package/styles/components/fs_slider.scss +0 -40
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_tabs.scss +18 -37
  261. package/styles/components/fs_tag.scss +8 -22
  262. package/styles/components/fs_text_area.scss +2 -21
  263. package/styles/components/fs_tile.scss +0 -19
  264. package/styles/components/fs_window.scss +3 -1
  265. package/styles/components/fs_wrap_group.scss +7 -0
  266. package/styles/components/index.scss +2 -6
  267. package/styles/globals/index.scss +1 -5
  268. package/styles/globals/overrides.scss +26 -54
  269. package/styles/globals/scrollbars.scss +8 -0
  270. package/styles/globals/text_fonts.scss +18 -66
  271. package/styles/globals/touchscreen.scss +2 -2
  272. package/tools/alertsTools.ts +94 -18
  273. package/tools/chartsTools.ts +155 -16
  274. package/tools/index.ts +3 -1
  275. package/tools/reportsTools.ts +38 -0
  276. package/tools/timeRangeTools.ts +125 -0
  277. package/utils/badge.ts +9 -5
  278. package/utils/filter.ts +4 -1
  279. package/utils/index.ts +2 -0
  280. package/utils/leafletMarkers.ts +4 -4
  281. package/utils/operations.ts +108 -0
  282. package/utils/picker.ts +40 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +13 -13
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -343
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -5,9 +5,10 @@
5
5
  >
6
6
  <FSImage
7
7
  :imageId="userImageId"
8
- :width="32"
9
- :height="32"
8
+ width="32px"
9
+ height="32px"
10
10
  rounded="circle"
11
+ :thumbnail="true"
11
12
  />
12
13
  <FSTextArea
13
14
  :rows="5"
@@ -17,18 +18,21 @@
17
18
  />
18
19
  </FSRow>
19
20
  <FSRow>
20
- <v-spacer></v-spacer>
21
- <FSButtonCancel
22
- v-if="showCancelButton"
23
- @click="$emit('cancel')"
24
- />
25
- <FSButton
26
- :color="ColorEnum.Primary"
27
- :loading="creating"
28
- prependIcon="mdi-send-outline"
29
- :label="buttonLabel ?? $tr('ui.common.publish','Publish')"
30
- @click="() => $emit('submit', innertext)"
31
- />
21
+ <FSRow
22
+ align="center-right"
23
+ >
24
+ <FSButtonCancel
25
+ v-if="showCancelButton"
26
+ @click="$emit('cancel')"
27
+ />
28
+ <FSButton
29
+ prependIcon="mdi-send-outline"
30
+ :color="ColorEnum.Primary"
31
+ :loading="creating"
32
+ :label="buttonLabel ?? $tr('ui.common.publish','Publish')"
33
+ @click="onSubmit"
34
+ />
35
+ </FSRow>
32
36
  </FSRow>
33
37
  </FSCol>
34
38
  </template>
@@ -80,13 +84,21 @@ export default defineComponent({
80
84
  },
81
85
  },
82
86
  emits: ["submit","cancel"],
83
- setup(props) {
87
+ setup(props, { emit }) {
84
88
 
85
89
  const innertext = ref<string | undefined>(props.text);
90
+
91
+ const onSubmit = () => {
92
+ if (innertext.value) {
93
+ emit('submit', innertext.value);
94
+ innertext.value = '';
95
+ }
96
+ };
86
97
 
87
98
  return {
88
99
  innertext,
89
- ColorEnum
100
+ ColorEnum,
101
+ onSubmit,
90
102
  };
91
103
  },
92
104
  })
@@ -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
  />
@@ -71,9 +71,10 @@
71
71
  <template
72
72
  v-else
73
73
  >
74
- <v-menu
74
+ <FSMenu
75
+ min-width="300px"
75
76
  :closeOnContentClick="false"
76
- :modelValue="menu && $props.editable"
77
+ :modelValue="menu && !$props.disabled"
77
78
  @update:modelValue="menu = $event"
78
79
  >
79
80
  <template
@@ -86,7 +87,7 @@
86
87
  :color="$props.color"
87
88
  :hideHeader="$props.hideHeader"
88
89
  :required="$props.required"
89
- :editable="$props.editable"
90
+ :disabled="$props.disabled"
90
91
  :readonly="true"
91
92
  :rules="$props.rules"
92
93
  :messages="messages"
@@ -105,7 +106,7 @@
105
106
  <FSButton
106
107
  variant="icon"
107
108
  icon="mdi-calendar"
108
- :editable="$props.editable"
109
+ :disabled="$props.disabled"
109
110
  :color="ColorEnum.Dark"
110
111
  />
111
112
  </slot>
@@ -141,7 +142,7 @@
141
142
  />
142
143
  </FSCol>
143
144
  </FSCard>
144
- </v-menu>
145
+ </FSMenu>
145
146
  </template>
146
147
  </FSCol>
147
148
  </template>
@@ -159,6 +160,7 @@ import FSTextField from "./FSTextField.vue";
159
160
  import FSCalendar from "../FSCalendar.vue";
160
161
  import FSButton from "../FSButton.vue";
161
162
  import FSCard from "../FSCard.vue";
163
+ import FSMenu from '../FSMenu.vue';
162
164
  import FSCol from "../FSCol.vue";
163
165
 
164
166
  export default defineComponent({
@@ -169,6 +171,7 @@ export default defineComponent({
169
171
  FSCalendar,
170
172
  FSButton,
171
173
  FSCard,
174
+ FSMenu,
172
175
  FSCol
173
176
  },
174
177
  props: {
@@ -207,10 +210,10 @@ export default defineComponent({
207
210
  required: false,
208
211
  default: () => []
209
212
  },
210
- editable: {
213
+ disabled: {
211
214
  type: Boolean,
212
215
  required: false,
213
- default: true
216
+ default: false
214
217
  }
215
218
  },
216
219
  emits: ["update:modelValue"],
@@ -227,7 +230,7 @@ export default defineComponent({
227
230
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules));
228
231
 
229
232
  const openMobileOverlay = () => {
230
- if (!props.editable) {
233
+ if (props.disabled) {
231
234
  return;
232
235
  }
233
236
  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"
@@ -15,6 +15,7 @@
15
15
  :modelValue="toShortDateFormat"
16
16
  @click="onClick"
17
17
  @update:modelValue="onClear"
18
+ v-bind="$attrs"
18
19
  >
19
20
  <template
20
21
  #prepend-inner
@@ -25,7 +26,7 @@
25
26
  <FSButton
26
27
  variant="icon"
27
28
  icon="mdi-calendar"
28
- :editable="$props.editable"
29
+ :disabled="$props.disabled"
29
30
  :color="ColorEnum.Dark"
30
31
  />
31
32
  </slot>
@@ -114,10 +115,10 @@ export default defineComponent({
114
115
  required: false,
115
116
  default: () => []
116
117
  },
117
- editable: {
118
+ disabled: {
118
119
  type: Boolean,
119
120
  required: false,
120
- default: true
121
+ default: false
121
122
  }
122
123
  },
123
124
  emits: ["update:modelValue"],
@@ -139,7 +140,7 @@ export default defineComponent({
139
140
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules, true));
140
141
 
141
142
  const onClick = (): void => {
142
- if (props.editable) {
143
+ if (!props.disabled) {
143
144
  dialog.value = true;
144
145
  }
145
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
  />
@@ -91,9 +91,10 @@
91
91
  <template
92
92
  v-else
93
93
  >
94
- <v-menu
94
+ <FSMenu
95
+ min-width="300px"
95
96
  :closeOnContentClick="false"
96
- :modelValue="menu && $props.editable"
97
+ :modelValue="menu && !$props.disabled"
97
98
  @update:modelValue="menu = $event"
98
99
  >
99
100
  <template
@@ -106,7 +107,7 @@
106
107
  :color="$props.color"
107
108
  :hideHeader="$props.hideHeader"
108
109
  :required="$props.required"
109
- :editable="$props.editable"
110
+ :disabled="$props.disabled"
110
111
  :readonly="true"
111
112
  :rules="$props.rules"
112
113
  :messages="messages"
@@ -125,7 +126,7 @@
125
126
  <FSButton
126
127
  variant="icon"
127
128
  icon="mdi-calendar"
128
- :editable="$props.editable"
129
+ :disabled="$props.disabled"
129
130
  :color="ColorEnum.Dark"
130
131
  />
131
132
  </slot>
@@ -187,7 +188,7 @@
187
188
  </FSCol>
188
189
  </FSCard>
189
190
  </FSWindow>
190
- </v-menu>
191
+ </FSMenu>
191
192
  </template>
192
193
  </FSCol>
193
194
  </template>
@@ -206,6 +207,7 @@ import FSWindow from "../FSWindow.vue";
206
207
  import FSButton from "../FSButton.vue";
207
208
  import FSClock from "../FSClock.vue";
208
209
  import FSCard from "../FSCard.vue";
210
+ import FSMenu from '../FSMenu.vue';
209
211
  import FSCol from "../FSCol.vue";
210
212
 
211
213
  export default defineComponent({
@@ -218,6 +220,7 @@ export default defineComponent({
218
220
  FSButton,
219
221
  FSClock,
220
222
  FSCard,
223
+ FSMenu,
221
224
  FSCol
222
225
  },
223
226
  props: {
@@ -256,10 +259,10 @@ export default defineComponent({
256
259
  required: false,
257
260
  default: () => []
258
261
  },
259
- editable: {
262
+ disabled: {
260
263
  type: Boolean,
261
264
  required: false,
262
- default: true
265
+ default: false
263
266
  }
264
267
  },
265
268
  emits: ["update:modelValue"],
@@ -279,7 +282,7 @@ export default defineComponent({
279
282
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules));
280
283
 
281
284
  const openMobileOverlay = () => {
282
- if (!props.editable) {
285
+ if (props.disabled) {
283
286
  return;
284
287
  }
285
288
  dialog.value = true;
@@ -301,7 +304,7 @@ export default defineComponent({
301
304
  if (props.modelValue) {
302
305
  // FSClock just gives two numbers without consideration for the time zone
303
306
  // We must adjust the time to the user's time zone
304
- innerTime.value = Math.floor((props.modelValue + getUserOffset()) % (24 * 60 * 60 * 1000));
307
+ innerTime.value = Math.floor((props.modelValue + getUserOffset(props.modelValue)) % (24 * 60 * 60 * 1000));
305
308
  innerDate.value = props.modelValue - innerTime.value;
306
309
  }
307
310
  else {
@@ -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>
@@ -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"
@@ -15,6 +15,7 @@
15
15
  :modelValue="toShortTimeFormat"
16
16
  @click="onClick"
17
17
  @update:modelValue="onClear"
18
+ v-bind="$attrs"
18
19
  >
19
20
  <template
20
21
  #prepend-inner
@@ -25,7 +26,7 @@
25
26
  <FSButton
26
27
  variant="icon"
27
28
  icon="mdi-calendar"
28
- :editable="$props.editable"
29
+ :disabled="$props.disabled"
29
30
  :color="ColorEnum.Dark"
30
31
  />
31
32
  </slot>
@@ -40,66 +41,34 @@
40
41
  />
41
42
  </template>
42
43
  </FSTextField>
43
- <FSDialogSubmit
44
+ <FSDateTimeRangeDialog
44
45
  :title="$props.label"
45
46
  :submitButtonColor="$props.color"
46
- @click:submitButton="onSubmit"
47
- v-model="dialog"
48
- >
49
- <template
50
- #body
51
- >
52
- <FSCol>
53
- <FSCalendarTwin
54
- :color="$props.color"
55
- v-model="innerDateRange"
56
- />
57
- <FSRow>
58
- <FSCol>
59
- <FSClock
60
- :color="$props.color"
61
- :date="innerDateLeft"
62
- v-model="innerTimeLeft"
63
- />
64
- </FSCol>
65
- <FSCol>
66
- <FSClock
67
- :color="$props.color"
68
- :date="innerDateRight"
69
- v-model="innerTimeRight"
70
- />
71
- </FSCol>
72
- </FSRow>
73
- </FSCol>
74
- </template>
75
- </FSDialogSubmit>
47
+ :dialog="dialog"
48
+ :modelValue="$props.modelValue"
49
+ :color="$props.color"
50
+ @cancel="dialog = false"
51
+ @update:modelValue="onSubmit($event)"
52
+ />
76
53
  </template>
77
54
 
78
55
  <script lang="ts">
79
- import { computed, defineComponent, type PropType, ref, watch } from "vue";
56
+ import { computed, defineComponent, type PropType, ref } from "vue";
80
57
 
81
58
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
82
- import { useAppTimeZone, useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
59
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
83
60
  import { useRules } from "@dative-gpi/foundation-shared-components/composables";
84
61
 
85
- import FSDialogSubmit from "../FSDialogSubmit.vue";
86
- import FSCalendarTwin from "../FSCalendarTwin.vue";
62
+ import FSDateTimeRangeDialog from "./FSDateTimeRangeDialog.vue";
87
63
  import FSTextField from "./FSTextField.vue";
88
64
  import FSButton from "../FSButton.vue";
89
- import FSClock from "../FSClock.vue";
90
- import FSCol from "../FSCol.vue";
91
- import FSRow from "../FSRow.vue";
92
65
 
93
66
  export default defineComponent({
94
67
  name: "FSDateTimeRangeField",
95
68
  components: {
96
- FSDialogSubmit,
97
- FSCalendarTwin,
69
+ FSDateTimeRangeDialog,
98
70
  FSTextField,
99
- FSButton,
100
- FSClock,
101
- FSCol,
102
- FSRow
71
+ FSButton
103
72
  },
104
73
  props: {
105
74
  label: {
@@ -137,24 +106,19 @@ export default defineComponent({
137
106
  required: false,
138
107
  default: () => []
139
108
  },
140
- editable: {
109
+ disabled: {
141
110
  type: Boolean,
142
111
  required: false,
143
- default: true
112
+ default: false
144
113
  }
145
114
  },
146
115
  emits: ["update:modelValue"],
147
116
  setup(props, { emit }) {
148
- const { getUserOffset } = useAppTimeZone();
149
117
  const { epochToShortTimeFormat } = useDateFormat();
150
118
  const { validateOn, getMessages } = useRules();
151
119
 
152
120
  const dialog = ref(false);
153
121
 
154
- const innerDateRange = ref<number[] | null>(null);
155
- const innerTimeRight = ref(0);
156
- const innerTimeLeft = ref(0);
157
-
158
122
  const toShortTimeFormat = computed((): string => {
159
123
  if (!props.modelValue || !Array.isArray(props.modelValue) || !props.modelValue.length) {
160
124
  return "";
@@ -162,88 +126,32 @@ export default defineComponent({
162
126
  return props.modelValue.map((epoch) => epochToShortTimeFormat(epoch)).join(" - ");
163
127
  });
164
128
 
165
- const innerDateLeft = computed((): number | null => {
166
- if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length) {
167
- return innerDateRange.value[0];
168
- }
169
- return null;
170
- });
171
-
172
- const innerDateRight= computed((): number | null => {
173
- if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1) {
174
- return innerDateRange.value[1];
175
- }
176
- return null;
177
- });
178
-
179
129
  const messages = computed((): string[] => getMessages(props.modelValue, props.rules, true));
180
130
 
181
131
  const onClick = (): void => {
182
- if (props.editable) {
132
+ if (!props.disabled) {
183
133
  dialog.value = true;
184
134
  }
185
135
  };
186
136
 
187
- const onClear = (): void => {
188
- emit("update:modelValue", null);
189
- innerTimeLeft.value = 0;
190
- innerTimeRight.value = 0;
191
- innerDateRange.value = null;
192
- };
193
-
194
- const onSubmit = (): void => {
195
- if (innerDateRange.value && Array.isArray(innerDateRange.value) && innerDateRange.value.length > 1) {
196
- emit("update:modelValue", [innerDateRange.value[0] + innerTimeLeft.value, innerDateRange.value[1] + innerTimeRight.value]);
197
- }
137
+ const onSubmit = (value: number[]): void => {
138
+ emit("update:modelValue", value);
198
139
  dialog.value = false;
199
140
  };
200
141
 
201
- const reset = (): void => {
202
- if (props.modelValue && Array.isArray(props.modelValue)) {
203
- // FSClock just gives two numbers without consideration for the time zone
204
- // We must adjust the time to the user's time zone
205
- switch (props.modelValue.length) {
206
- case 0: {
207
- break;
208
- }
209
- case 1: {
210
- innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset()) % (24 * 60 * 60 * 1000));
211
- innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value];
212
- break;
213
- }
214
- default: {
215
- innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset()) % (24 * 60 * 60 * 1000));
216
- innerTimeRight.value = Math.floor((props.modelValue[1] + getUserOffset()) % (24 * 60 * 60 * 1000));
217
- innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value, props.modelValue[1] - innerTimeRight.value];
218
- break;
219
- }
220
- }
221
- }
222
- else {
223
- innerDateRange.value = null;
224
- innerTimeLeft.value = 0;
225
- innerTimeRight.value = 0;
226
- }
142
+ const onClear = (): void => {
143
+ emit("update:modelValue", null);
227
144
  };
228
145
 
229
- watch(() => props.modelValue, () => {
230
- reset();
231
- }, { immediate: true });
232
-
233
146
  return {
234
147
  toShortTimeFormat,
235
- innerDateLeft,
236
- innerTimeLeft,
237
- innerDateRight,
238
- innerTimeRight,
239
- innerDateRange,
240
148
  validateOn,
241
149
  ColorEnum,
242
150
  messages,
243
151
  dialog,
244
152
  onSubmit,
245
153
  onClear,
246
- onClick
154
+ onClick,
247
155
  };
248
156
  }
249
157
  });