@dative-gpi/foundation-shared-components 1.0.35 → 1.0.37-report-v1

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 (271) hide show
  1. package/components/FSBreadcrumbs.vue +21 -12
  2. package/components/FSButton.vue +10 -10
  3. package/components/FSCalendar.vue +52 -14
  4. package/components/FSCalendarTwin.vue +96 -40
  5. package/components/FSCard.vue +28 -7
  6. package/components/FSCardPlaceholder.vue +8 -5
  7. package/components/FSChip.vue +12 -2
  8. package/components/FSClickable.vue +12 -13
  9. package/components/FSClock.vue +16 -7
  10. package/components/FSColorIcon.vue +23 -5
  11. package/components/FSDialog.vue +2 -1
  12. package/components/FSDialogContent.vue +12 -11
  13. package/components/FSDialogForm.vue +22 -2
  14. package/components/FSDialogFormBody.vue +47 -28
  15. package/components/FSDialogMenu.vue +17 -8
  16. package/components/FSDialogMultiFormBody.vue +77 -54
  17. package/components/FSDialogRemove.vue +8 -8
  18. package/components/FSDialogSubmit.vue +17 -8
  19. package/components/FSEditImage.vue +1 -1
  20. package/components/FSEditImageUI.vue +20 -10
  21. package/components/FSFadeOut.vue +53 -21
  22. package/components/FSForm.vue +10 -8
  23. package/components/FSGrid.vue +1 -1
  24. package/components/FSIcon.vue +2 -1
  25. package/components/FSIconCard.vue +47 -7
  26. package/components/FSImage.vue +12 -4
  27. package/components/FSImageUI.vue +8 -15
  28. package/components/FSInstantPicker.vue +266 -0
  29. package/components/FSLink.vue +25 -9
  30. package/components/FSLoader.vue +28 -11
  31. package/components/FSOptionGroup.vue +51 -3
  32. package/components/FSPlayButtons.vue +72 -0
  33. package/components/FSProgressBar.vue +94 -0
  34. package/components/FSRouterLink.vue +42 -0
  35. package/components/FSSlideGroup.vue +19 -5
  36. package/components/FSSpan.vue +17 -7
  37. package/components/FSSwitch.vue +57 -27
  38. package/components/FSTab.vue +15 -13
  39. package/components/FSTabs.vue +32 -7
  40. package/components/FSTag.vue +14 -3
  41. package/components/FSTagGroup.vue +1 -1
  42. package/components/FSText.vue +11 -7
  43. package/components/FSWindow.vue +128 -4
  44. package/components/FSWrapGroup.vue +13 -1
  45. package/components/agenda/FSAgenda.vue +223 -0
  46. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  47. package/components/agenda/FSAgendaHeader.vue +215 -0
  48. package/components/agenda/FSAgendaHorizontalEvent.vue +174 -0
  49. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  50. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  51. package/components/agenda/FSAgendaHoursRow.vue +164 -0
  52. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  53. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  54. package/components/agenda/FSDayAgenda.vue +199 -0
  55. package/components/agenda/FSMonthAgenda.vue +252 -0
  56. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  57. package/components/agenda/FSWeekAgenda.vue +323 -0
  58. package/components/autocompletes/FSAutoCompleteAddress.vue +22 -20
  59. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  60. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  61. package/components/buttons/FSButtonAdd.vue +1 -1
  62. package/components/buttons/FSButtonAddLabel.vue +1 -1
  63. package/components/buttons/FSButtonCancel.vue +1 -1
  64. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  65. package/components/buttons/FSButtonCopy.vue +1 -1
  66. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  67. package/components/buttons/FSButtonDragIcon.vue +27 -0
  68. package/components/buttons/FSButtonDuplicate.vue +1 -1
  69. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  70. package/components/buttons/FSButtonEdit.vue +1 -1
  71. package/components/buttons/FSButtonEditLabel.vue +1 -1
  72. package/components/buttons/FSButtonFile.vue +1 -1
  73. package/components/buttons/FSButtonFileLabel.vue +1 -1
  74. package/components/buttons/FSButtonNext.vue +1 -1
  75. package/components/buttons/FSButtonNextLabel.vue +1 -1
  76. package/components/buttons/FSButtonPrevious.vue +1 -1
  77. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  78. package/components/buttons/FSButtonRedo.vue +1 -1
  79. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  80. package/components/buttons/FSButtonRemove.vue +1 -1
  81. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  82. package/components/buttons/FSButtonSave.vue +1 -1
  83. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  84. package/components/buttons/FSButtonSearch.vue +1 -1
  85. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  86. package/components/buttons/FSButtonUndo.vue +1 -1
  87. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  88. package/components/buttons/FSButtonUpdate.vue +1 -1
  89. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  90. package/components/buttons/FSButtonValidate.vue +1 -1
  91. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  92. package/components/calendar/FSSimpleCalendar.vue +145 -0
  93. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  94. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  95. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  96. package/components/deviceOrganisations/FSConnectivityCard.vue +19 -47
  97. package/components/deviceOrganisations/FSStatus.vue +11 -1
  98. package/components/deviceOrganisations/FSStatusCard.vue +35 -61
  99. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  100. package/components/deviceOrganisations/FSStatusesRow.vue +9 -3
  101. package/components/deviceOrganisations/FSWorstAlert.vue +30 -37
  102. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -85
  103. package/components/fields/FSAutocompleteField.vue +445 -463
  104. package/components/fields/FSAutocompleteTag.vue +1 -1
  105. package/components/fields/FSBaseField.vue +44 -27
  106. package/components/fields/FSColorField.vue +42 -39
  107. package/components/fields/FSCommentField.vue +105 -0
  108. package/components/fields/FSDateField.vue +3 -2
  109. package/components/fields/FSDateRangeField.vue +3 -2
  110. package/components/fields/FSDateTimeField.vue +4 -3
  111. package/components/fields/FSDateTimeRangeField.vue +8 -6
  112. package/components/fields/FSEntityFieldUI.vue +271 -0
  113. package/components/fields/FSGradientField.vue +27 -33
  114. package/components/fields/FSIconField.vue +0 -1
  115. package/components/fields/FSMagicConfigField.vue +10 -3
  116. package/components/fields/FSMagicField.vue +9 -4
  117. package/components/fields/FSNumberField.vue +6 -1
  118. package/components/fields/FSRichTextField.vue +102 -52
  119. package/components/fields/FSSearchField.vue +9 -115
  120. package/components/fields/FSSelectField.vue +477 -252
  121. package/components/fields/FSTagField.vue +1 -1
  122. package/components/fields/FSTermField.vue +42 -17
  123. package/components/fields/FSTextArea.vue +26 -7
  124. package/components/fields/FSTextField.vue +8 -3
  125. package/components/fields/FSTimeRangeField.vue +304 -0
  126. package/components/fields/FSTimeStepField.vue +3 -3
  127. package/components/fields/FSTranslateField.vue +4 -3
  128. package/components/fields/FSTranslateRichTextField.vue +32 -12
  129. package/components/fields/FSTranslateTextArea.vue +233 -0
  130. package/components/fields/periodicField/FSPeriodicDailyField.vue +2 -2
  131. package/components/fields/periodicField/FSPeriodicField.vue +8 -8
  132. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +8 -8
  133. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +23 -13
  134. package/components/fields/periodicField/FSPeriodicYearlyField.vue +6 -6
  135. package/components/lists/FSDataTableUI.vue +173 -103
  136. package/components/lists/FSDraggable.vue +2 -2
  137. package/components/lists/FSFilterButton.vue +7 -11
  138. package/components/lists/FSHeaderButton.vue +4 -4
  139. package/components/lists/FSHiddenButton.vue +3 -5
  140. package/components/lists/FSLoadDataTable.vue +10 -7
  141. package/components/lists/FSSimpleList.vue +234 -0
  142. package/components/lists/FSSimpleListItem.vue +132 -0
  143. package/components/map/FSMap.vue +83 -33
  144. package/components/map/FSMapFeatureGroup.vue +2 -2
  145. package/components/map/FSMapLayerButton.vue +3 -3
  146. package/components/map/FSMapMarker.vue +11 -7
  147. package/components/map/FSMapMarkerClusterGroup.vue +8 -3
  148. package/components/map/FSMapOverlay.vue +37 -20
  149. package/components/map/FSMapPolygon.vue +5 -5
  150. package/components/map/FSMapTileLayer.vue +2 -2
  151. package/components/map/keys.ts +3 -3
  152. package/components/selects/FSSelectAutoRefresh.vue +9 -9
  153. package/components/selects/FSSelectDashboardVariableType.vue +5 -4
  154. package/components/selects/FSSelectDateSetting.vue +3 -2
  155. package/components/selects/FSSelectDays.vue +9 -9
  156. package/components/selects/FSSelectListMode.vue +51 -0
  157. package/components/selects/FSSelectMonths.vue +14 -14
  158. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  159. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  160. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  161. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  162. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  163. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  164. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  165. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  166. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  167. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  168. package/components/tiles/FSAlertTileUI.vue +90 -0
  169. package/components/tiles/FSChartTileUI.vue +111 -0
  170. package/components/tiles/FSCommentTileUI.vue +174 -0
  171. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -0
  172. package/components/tiles/FSGroupTileUI.vue +2 -2
  173. package/components/tiles/FSLoadTile.vue +2 -0
  174. package/components/tiles/FSLocationTileUI.vue +192 -0
  175. package/components/tiles/FSModelTileUI.vue +18 -0
  176. package/components/tiles/FSSimpleTileUI.vue +9 -4
  177. package/components/tiles/FSTile.vue +93 -74
  178. package/components/tiles/FSUserOrganisationTileUI.vue +1 -1
  179. package/components/toggleSets/FSToggleSetPosition.vue +2 -2
  180. package/components/views/FSBaseView.vue +64 -0
  181. package/components/views/FSEntityView.vue +12 -140
  182. package/components/views/FSSimpleView.vue +29 -0
  183. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  184. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  185. package/components/views/desktop/FSBaseEntityDesktopView.vue +209 -0
  186. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  187. package/components/views/mobile/FSBaseEntityMobileView.vue +199 -0
  188. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  189. package/composables/useBreakpoints.ts +39 -3
  190. package/composables/useColors.ts +3 -2
  191. package/composables/useMagicFieldProvider.ts +1 -0
  192. package/composables/useSlots.ts +2 -1
  193. package/models/agenda.ts +9 -0
  194. package/models/deviceAlerts.ts +1 -1
  195. package/models/deviceConnectivities.ts +1 -1
  196. package/models/index.ts +1 -0
  197. package/models/magicFields.ts +1 -0
  198. package/models/map.ts +2 -2
  199. package/models/rules.ts +8 -5
  200. package/models/tables.ts +5 -2
  201. package/models/variableNode.ts +8 -5
  202. package/package.json +5 -5
  203. package/styles/components/fs_agenda.scss +36 -0
  204. package/styles/components/fs_agenda_event.scss +41 -0
  205. package/styles/components/fs_agenda_hours_col.scss +4 -0
  206. package/styles/components/fs_agenda_hours_row.scss +5 -0
  207. package/styles/components/fs_agenda_time_line_marker.scss +19 -0
  208. package/styles/components/fs_autocomplete_field.scss +0 -13
  209. package/styles/components/fs_breadcrumbs.scss +18 -36
  210. package/styles/components/fs_button.scss +7 -5
  211. package/styles/components/fs_chip.scss +8 -6
  212. package/styles/components/fs_clickable.scss +18 -23
  213. package/styles/components/fs_clock.scss +0 -10
  214. package/styles/components/fs_color_field.scss +1 -4
  215. package/styles/components/fs_data_iterator_item.scss +12 -10
  216. package/styles/components/fs_data_table.scss +6 -9
  217. package/styles/components/fs_dialog.scss +7 -17
  218. package/styles/components/fs_dialog_menu.scss +4 -2
  219. package/styles/components/fs_edit_image.scss +8 -0
  220. package/styles/components/fs_fade_out.scss +10 -2
  221. package/styles/components/fs_filter_button.scss +1 -6
  222. package/styles/components/fs_gradient_field.scss +11 -11
  223. package/styles/components/fs_hidden_button.scss +2 -7
  224. package/styles/components/fs_image_card.scss +6 -4
  225. package/styles/components/fs_magic_config_field.scss +1 -2
  226. package/styles/components/fs_map.scss +11 -7
  227. package/styles/components/fs_meta_field.scss +3 -5
  228. package/styles/components/fs_option_group.scss +15 -5
  229. package/styles/components/fs_password_field.scss +4 -2
  230. package/styles/components/fs_progress_bar.scss +14 -0
  231. package/styles/components/fs_radio.scss +0 -11
  232. package/styles/components/fs_rich_text_field.scss +1 -9
  233. package/styles/components/fs_select_date_settings.scss +3 -0
  234. package/styles/components/fs_select_field.scss +4 -13
  235. package/styles/components/fs_slide_group.scss +7 -0
  236. package/styles/components/fs_span.scss +13 -4
  237. package/styles/components/fs_switch.scss +1 -0
  238. package/styles/components/fs_tabs.scss +19 -33
  239. package/styles/components/fs_tag.scss +8 -22
  240. package/styles/components/fs_text_area.scss +13 -17
  241. package/styles/components/fs_tile.scss +21 -15
  242. package/styles/components/fs_window.scss +7 -0
  243. package/styles/components/fs_wrap_group.scss +7 -0
  244. package/styles/components/index.scss +6 -4
  245. package/styles/globals/index.scss +1 -5
  246. package/styles/globals/overrides.scss +28 -61
  247. package/styles/globals/scrollbars.scss +10 -0
  248. package/styles/globals/text_fonts.scss +18 -66
  249. package/tools/alertsTools.ts +69 -0
  250. package/tools/chartsTools.ts +427 -0
  251. package/tools/index.ts +4 -0
  252. package/tools/reportsTools.ts +38 -0
  253. package/tools/timeRangeTools.ts +125 -0
  254. package/utils/filter.ts +18 -0
  255. package/utils/index.ts +2 -0
  256. package/utils/leafletMarkers.ts +4 -4
  257. package/utils/operations.ts +69 -0
  258. package/utils/sort.ts +2 -2
  259. package/utils/statuses.ts +1 -1
  260. package/utils/time.ts +17 -17
  261. package/components/fields/FSTimeSlotField.vue +0 -250
  262. package/components/views/FSEntityHeader.vue +0 -350
  263. package/components/views/FSListHeader.vue +0 -83
  264. package/components/views/FSListView.vue +0 -83
  265. package/components/views/FSSkeletonView.vue +0 -100
  266. package/styles/components/fs_icon_field.scss +0 -12
  267. package/styles/components/fs_tag_field.scss +0 -8
  268. package/styles/components/fs_time_field.scss +0 -12
  269. package/styles/components/fs_timeslot_field.scss +0 -12
  270. package/styles/globals/breakpoints.scss +0 -20
  271. package/styles/globals/fixes.scss +0 -5
@@ -62,7 +62,7 @@ export default defineComponent({
62
62
  if (!props.modelValue || props.modelValue.length === 0) {
63
63
  return null;
64
64
  }
65
- return props.placeholder ?? $tr("ui.autocomplete-tag.items-selected", "{0} item(s) selected", props.modelValue?.length ?? 0);
65
+ return props.placeholder ?? $tr("autocomplete.tag.selecteds", "{0} item(s) selected", props.modelValue?.length ?? 0);
66
66
  });
67
67
 
68
68
  const onUpdateModelValue = (value: string[] | null): void => {
@@ -1,44 +1,49 @@
1
1
  <template>
2
- <FSCol>
2
+ <FSCol
3
+ :style="style"
4
+ >
3
5
  <slot
4
6
  v-if="!$props.hideHeader"
5
7
  name="label"
6
8
  >
7
9
  <FSRow
10
+ gap="40px"
8
11
  :wrap="false"
9
12
  >
10
- <FSSpan
11
- class="fs-base-field-label"
12
- font="text-overline"
13
- :style="style"
13
+ <FSRow
14
+ gap="2px"
15
+ :width="widths.label"
16
+ :wrap="false"
14
17
  >
15
- {{ $props.label }}
16
- </FSSpan>
17
- <FSSpan
18
- v-if="$props.label && $props.required"
19
- class="fs-base-field-label"
20
- style="margin-left: -8px;"
21
- font="text-overline"
22
- :ellipsis="false"
23
- :style="style"
24
- >
25
- *
26
- </FSSpan>
27
- <v-spacer
28
- style="min-width: 40px;"
29
- />
30
- <template
31
- v-if="$props.messages"
18
+ <FSSpan
19
+ class="fs-base-field-label"
20
+ font="text-overline"
21
+ >
22
+ {{ $props.label }}
23
+ </FSSpan>
24
+ <FSSpan
25
+ v-if="$props.label && $props.required"
26
+ class="fs-base-field-label"
27
+ font="text-overline"
28
+ :ellipsis="false"
29
+ :style="style"
30
+ >
31
+ *
32
+ </FSSpan>
33
+ </FSRow>
34
+ <FSRow
35
+ align="center-right"
36
+ :width="widths.messages"
32
37
  >
33
38
  <FSSpan
34
- v-if="$props.messages.length > 0"
39
+ v-if="$props.messages && $props.messages.length > 0"
35
40
  class="fs-base-field-messages"
36
41
  font="text-overline"
37
42
  :style="style"
38
43
  >
39
44
  {{ $props.messages.join(", ") }}
40
45
  </FSSpan>
41
- </template>
46
+ </FSRow>
42
47
  </FSRow>
43
48
  </slot>
44
49
  <slot />
@@ -49,7 +54,6 @@
49
54
  v-if="$props.description"
50
55
  class="fs-base-field-description"
51
56
  font="text-overline"
52
- :style="style"
53
57
  >
54
58
  {{ $props.description }}
55
59
  </FSSpan>
@@ -104,6 +108,11 @@ export default defineComponent({
104
108
  type: Boolean,
105
109
  required: false,
106
110
  default: true
111
+ },
112
+ minWidth: {
113
+ type: String,
114
+ required: false,
115
+ default: "120px"
107
116
  }
108
117
  },
109
118
  setup(props) {
@@ -120,16 +129,24 @@ export default defineComponent({
120
129
  const style = computed((): StyleValue => {
121
130
  if (!props.editable) {
122
131
  return {
123
- "--fs-base-field-color": lights.dark
132
+ "--fs-base-field-color" : lights.dark,
133
+ "--fs-base-field-min-width": props.minWidth
124
134
  };
125
135
  }
126
136
  return {
127
137
  "--fs-base-field-color" : darks.base,
128
- "--fs-base-field-error-color": errors.base
138
+ "--fs-base-field-error-color": errors.base,
139
+ "--fs-base-field-min-width" : props.minWidth
129
140
  };
130
141
  });
131
142
 
143
+ const widths = computed(() => ({
144
+ label: props.messages && props.messages.length ? "calc(50% - 40px)" : "100%",
145
+ messages: props.messages && props.messages.length ? "50%" : "0"
146
+ }));
147
+
132
148
  return {
149
+ widths,
133
150
  style,
134
151
  slots
135
152
  };
@@ -1,47 +1,47 @@
1
1
  <template>
2
+
3
+ <FSBaseField
4
+ class="fs-color-field"
5
+ :description="$props.description"
6
+ :hideHeader="$props.hideHeader"
7
+ :editable="$props.editable"
8
+ :required="$props.required"
9
+ :label="$props.label"
10
+ :width="$props.width"
11
+ :style="style"
12
+ :modelValue="innerColor"
13
+ v-bind="$attrs"
14
+ >
15
+ <FSCard
16
+ :id="activatorId"
17
+ padding="8px"
18
+ width="100%"
19
+ :class="{ 'fs-color-field-disabled': !$props.editable }"
20
+ >
21
+ <FSRow
22
+ align="center-center"
23
+ >
24
+ <FSIcon
25
+ icon="mdi-circle-half"
26
+ size="20px"
27
+ :color="innerColor"
28
+ />
29
+ <FSText
30
+ font="text-overline"
31
+ >
32
+ {{ innerColor }}
33
+ </FSText>
34
+ </FSRow>
35
+ </FSCard>
36
+ </FSBaseField>
2
37
  <v-menu
38
+ origin="top left"
39
+ min-width="300px"
40
+ :activator="`#${activatorId}`"
3
41
  :closeOnContentClick="false"
4
42
  :modelValue="menu && $props.editable"
5
43
  @update:modelValue="menu = $event"
6
44
  >
7
- <template
8
- #activator="{ props }"
9
- >
10
- <FSBaseField
11
- class="fs-color-field"
12
- :description="$props.description"
13
- :hideHeader="$props.hideHeader"
14
- :editable="$props.editable"
15
- :required="$props.required"
16
- :label="$props.label"
17
- :width="$props.width"
18
- :style="style"
19
- :modelValue="innerColor"
20
- v-bind="$attrs"
21
- >
22
- <FSCard
23
- padding="8px"
24
- width="100%"
25
- :class="{ 'fs-color-field-disabled': !$props.editable }"
26
- v-bind="props"
27
- >
28
- <FSRow
29
- align="center-center"
30
- >
31
- <FSIcon
32
- icon="mdi-circle-half"
33
- size="20px"
34
- :color="innerColor"
35
- />
36
- <FSText
37
- font="text-overline"
38
- >
39
- {{ innerColor }}
40
- </FSText>
41
- </FSRow>
42
- </FSCard>
43
- </FSBaseField>
44
- </template>
45
45
  <FSCard
46
46
  :elevation="true"
47
47
  :border="false"
@@ -152,10 +152,11 @@ export default defineComponent({
152
152
  default: "fill"
153
153
  }
154
154
  },
155
- emits: ["update:modelValue", "update:opacity"],
155
+ emits: ["update", "update:modelValue", "update:opacity"],
156
156
  setup(props, { emit }) {
157
157
  const { getColors, getBasePaletteColors } = useColors();
158
158
  const { slots } = useSlots();
159
+ const activatorId = `activator-${Math.random().toString(36).substring(7)}`;
159
160
 
160
161
  delete slots.description;
161
162
 
@@ -191,6 +192,7 @@ export default defineComponent({
191
192
  fullColor.value = innerColor.value + innerOpacity.value;
192
193
  emit("update:modelValue", innerColor.value);
193
194
  emit("update:opacity", getPercentageFromHex(innerOpacity.value));
195
+ emit("update", { modelValue: innerColor.value, opacity: getPercentageFromHex(innerOpacity.value) });
194
196
  };
195
197
 
196
198
  const reset = (): void => {
@@ -214,6 +216,7 @@ export default defineComponent({
214
216
  getPercentageFromHex,
215
217
  getBasePaletteColors,
216
218
  innerOpacity,
219
+ activatorId,
217
220
  innerColor,
218
221
  fullColor,
219
222
  ColorEnum,
@@ -0,0 +1,105 @@
1
+ <template>
2
+ <FSCol>
3
+ <FSRow
4
+ align="top-left"
5
+ >
6
+ <FSImage
7
+ :imageId="userImageId"
8
+ width="32px"
9
+ height="32px"
10
+ rounded="circle"
11
+ :thumbnail="true"
12
+ />
13
+ <FSTextArea
14
+ :rows="5"
15
+ :hideHeader="true"
16
+ :placeholder="$tr('ui.common.write-comment', 'Write a comment...')"
17
+ v-model="innertext"
18
+ />
19
+ </FSRow>
20
+ <FSRow>
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>
36
+ </FSRow>
37
+ </FSCol>
38
+ </template>
39
+
40
+ <script lang="ts">
41
+ import type { PropType} from "vue";
42
+ import { defineComponent, ref } from "vue";
43
+
44
+ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
45
+
46
+ import FSButtonCancel from "../buttons/FSButtonCancel.vue";
47
+ import FSTextArea from "./FSTextArea.vue";
48
+ import FSButton from "../FSButton.vue";
49
+ import FSImage from "../FSImage.vue";
50
+ import FSRow from "../FSRow.vue";
51
+ import FSCol from "../FSCol.vue";
52
+
53
+ export default defineComponent({
54
+ name: "FSCommentField",
55
+ components: {
56
+ FSButton,
57
+ FSButtonCancel,
58
+ FSImage,
59
+ FSTextArea,
60
+ FSRow,
61
+ FSCol,
62
+ },
63
+ props: {
64
+ buttonLabel: {
65
+ type: String,
66
+ required: false,
67
+ },
68
+ creating: {
69
+ type: Boolean,
70
+ required: false,
71
+ },
72
+ userImageId: {
73
+ type: String as PropType<string | null>,
74
+ required: false,
75
+ },
76
+ text: {
77
+ type: String,
78
+ required: false,
79
+ },
80
+ showCancelButton: {
81
+ type: Boolean,
82
+ required: false,
83
+ default: false,
84
+ },
85
+ },
86
+ emits: ["submit","cancel"],
87
+ setup(props, { emit }) {
88
+
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
+ };
97
+
98
+ return {
99
+ innertext,
100
+ ColorEnum,
101
+ onSubmit,
102
+ };
103
+ },
104
+ })
105
+ </script>
@@ -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"
@@ -152,7 +153,7 @@ import _ from "lodash";
152
153
 
153
154
  import { useBreakpoints, useRules } from "@dative-gpi/foundation-shared-components/composables";
154
155
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
155
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
156
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
156
157
 
157
158
  import FSDialogMenu from "../FSDialogMenu.vue";
158
159
  import FSTextField from "./FSTextField.vue";
@@ -215,7 +216,7 @@ export default defineComponent({
215
216
  },
216
217
  emits: ["update:modelValue"],
217
218
  setup(props, { emit }) {
218
- const { epochToLongDateFormat } = useAppTimeZone();
219
+ const { epochToLongDateFormat } = useDateFormat();
219
220
  const { validateOn, getMessages} = useRules();
220
221
  const { isExtraSmall } = useBreakpoints();
221
222
 
@@ -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
@@ -62,7 +63,7 @@ import { computed, defineComponent, type PropType, ref, watch } from "vue";
62
63
  import _ from "lodash";
63
64
 
64
65
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
65
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
66
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
66
67
  import { useRules } from "@dative-gpi/foundation-shared-components/composables";
67
68
 
68
69
  import FSDialogSubmit from "../FSDialogSubmit.vue";
@@ -123,7 +124,7 @@ export default defineComponent({
123
124
  emits: ["update:modelValue"],
124
125
  setup(props, { emit }) {
125
126
  const { validateOn, getMessages } = useRules();
126
- const { epochToShortDateFormat } = useAppTimeZone();
127
+ const { epochToShortDateFormat } = useDateFormat();
127
128
 
128
129
  const dialog = ref(false);
129
130
 
@@ -197,7 +197,7 @@ import { computed, defineComponent, type PropType, ref, watch } from "vue";
197
197
 
198
198
  import { useBreakpoints, useRules } from "@dative-gpi/foundation-shared-components/composables";
199
199
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
200
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
200
+ import { useAppTimeZone, useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
201
201
 
202
202
  import FSDialogMenu from "../FSDialogMenu.vue";
203
203
  import FSTextField from "./FSTextField.vue";
@@ -264,7 +264,8 @@ export default defineComponent({
264
264
  },
265
265
  emits: ["update:modelValue"],
266
266
  setup(props, { emit }) {
267
- const { epochToLongTimeFormat, getOffsetUser } = useAppTimeZone();
267
+ const { getUserOffset } = useAppTimeZone();
268
+ const { epochToLongTimeFormat } = useDateFormat();
268
269
  const { validateOn, getMessages } = useRules();
269
270
  const { isExtraSmall } = useBreakpoints();
270
271
 
@@ -300,7 +301,7 @@ export default defineComponent({
300
301
  if (props.modelValue) {
301
302
  // FSClock just gives two numbers without consideration for the time zone
302
303
  // We must adjust the time to the user's time zone
303
- innerTime.value = Math.floor((props.modelValue + getOffsetUser()) % (24 * 60 * 60 * 1000));
304
+ innerTime.value = Math.floor((props.modelValue + getUserOffset(props.modelValue)) % (24 * 60 * 60 * 1000));
304
305
  innerDate.value = props.modelValue - innerTime.value;
305
306
  }
306
307
  else {
@@ -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
@@ -79,7 +80,7 @@
79
80
  import { computed, defineComponent, type PropType, ref, watch } from "vue";
80
81
 
81
82
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
82
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
83
+ import { useAppTimeZone, useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
83
84
  import { useRules } from "@dative-gpi/foundation-shared-components/composables";
84
85
 
85
86
  import FSDialogSubmit from "../FSDialogSubmit.vue";
@@ -115,7 +116,7 @@ export default defineComponent({
115
116
  modelValue: {
116
117
  type: Array as PropType<number[] | null>,
117
118
  required: false,
118
- default: null
119
+ default: () => null
119
120
  },
120
121
  color: {
121
122
  type: String as PropType<ColorBase>,
@@ -145,7 +146,8 @@ export default defineComponent({
145
146
  },
146
147
  emits: ["update:modelValue"],
147
148
  setup(props, { emit }) {
148
- const { epochToShortTimeFormat, getOffsetUser } = useAppTimeZone();
149
+ const { getUserOffset } = useAppTimeZone();
150
+ const { epochToShortTimeFormat } = useDateFormat();
149
151
  const { validateOn, getMessages } = useRules();
150
152
 
151
153
  const dialog = ref(false);
@@ -206,13 +208,13 @@ export default defineComponent({
206
208
  break;
207
209
  }
208
210
  case 1: {
209
- innerTimeLeft.value = Math.floor((props.modelValue[0] + getOffsetUser()) % (24 * 60 * 60 * 1000));
211
+ innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset(props.modelValue[0])) % (24 * 60 * 60 * 1000));
210
212
  innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value];
211
213
  break;
212
214
  }
213
215
  default: {
214
- innerTimeLeft.value = Math.floor((props.modelValue[0] + getOffsetUser()) % (24 * 60 * 60 * 1000));
215
- innerTimeRight.value = Math.floor((props.modelValue[1] + getOffsetUser()) % (24 * 60 * 60 * 1000));
216
+ innerTimeLeft.value = Math.floor((props.modelValue[0] + getUserOffset(props.modelValue[0])) % (24 * 60 * 60 * 1000));
217
+ innerTimeRight.value = Math.floor((props.modelValue[1] + getUserOffset(props.modelValue[1])) % (24 * 60 * 60 * 1000));
216
218
  innerDateRange.value = [props.modelValue[0] - innerTimeLeft.value, props.modelValue[1] - innerTimeRight.value];
217
219
  break;
218
220
  }