@dative-gpi/foundation-shared-components 1.0.65 → 1.0.67-map-edit

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 (294) 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/FSWindow.vue +122 -5
  56. package/components/FSWrapGroup.vue +13 -1
  57. package/components/agenda/FSAgenda.vue +26 -7
  58. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  59. package/components/agenda/FSAgendaHeader.vue +35 -10
  60. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  61. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  62. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  63. package/components/agenda/FSDayAgenda.vue +0 -1
  64. package/components/agenda/FSMonthAgenda.vue +1 -6
  65. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  66. package/components/agenda/FSWeekAgenda.vue +5 -10
  67. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  68. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  69. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  70. package/components/buttons/FSButtonAdd.vue +1 -1
  71. package/components/buttons/FSButtonAddLabel.vue +1 -1
  72. package/components/buttons/FSButtonCancel.vue +1 -1
  73. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  74. package/components/buttons/FSButtonCheckbox.vue +4 -4
  75. package/components/buttons/FSButtonCopy.vue +1 -1
  76. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  77. package/components/buttons/FSButtonDuplicate.vue +1 -1
  78. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  79. package/components/buttons/FSButtonEdit.vue +1 -1
  80. package/components/buttons/FSButtonEditLabel.vue +1 -1
  81. package/components/buttons/FSButtonFile.vue +1 -1
  82. package/components/buttons/FSButtonFileLabel.vue +1 -1
  83. package/components/buttons/FSButtonNext.vue +1 -1
  84. package/components/buttons/FSButtonNextLabel.vue +1 -1
  85. package/components/buttons/FSButtonPrevious.vue +1 -1
  86. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  87. package/components/buttons/FSButtonRedo.vue +1 -1
  88. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  89. package/components/buttons/FSButtonRemove.vue +1 -1
  90. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  91. package/components/buttons/FSButtonSave.vue +1 -1
  92. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  93. package/components/buttons/FSButtonSearch.vue +1 -1
  94. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  95. package/components/buttons/FSButtonUndo.vue +1 -1
  96. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  97. package/components/buttons/FSButtonUpdate.vue +1 -1
  98. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  99. package/components/buttons/FSButtonValidate.vue +1 -1
  100. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  101. package/components/calendar/FSSimpleCalendar.vue +145 -0
  102. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  103. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  104. package/components/deviceOrganisations/FSConnectivity.vue +5 -3
  105. package/components/deviceOrganisations/FSStatus.vue +5 -3
  106. package/components/deviceOrganisations/FSStatusCard.vue +7 -9
  107. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  108. package/components/deviceOrganisations/FSWorstAlert.vue +24 -36
  109. package/components/deviceOrganisations/FSWorstAlertCard.vue +8 -47
  110. package/components/fields/FSAutocompleteField.vue +85 -82
  111. package/components/fields/FSAutocompleteTag.vue +1 -1
  112. package/components/fields/FSBaseField.vue +42 -25
  113. package/components/fields/FSClosableSearchField.vue +83 -0
  114. package/components/fields/FSColorField.vue +12 -10
  115. package/components/fields/FSCommentField.vue +28 -16
  116. package/components/fields/FSDateField.vue +13 -10
  117. package/components/fields/FSDateRangeField.vue +6 -5
  118. package/components/fields/FSDateTimeField.vue +14 -11
  119. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  120. package/components/fields/FSDateTimeRangeField.vue +23 -115
  121. package/components/fields/FSEntityFieldUI.vue +19 -16
  122. package/components/fields/FSGradientField.vue +5 -5
  123. package/components/fields/FSIconField.vue +16 -9
  124. package/components/fields/FSMagicConfigField.vue +15 -7
  125. package/components/fields/FSMagicField.vue +7 -2
  126. package/components/fields/FSNumberField.vue +8 -4
  127. package/components/fields/FSPasswordField.vue +7 -7
  128. package/components/fields/FSRichTextField.vue +78 -58
  129. package/components/fields/FSSearchField.vue +9 -115
  130. package/components/fields/FSSelectField.vue +69 -71
  131. package/components/fields/FSTagField.vue +9 -9
  132. package/components/fields/FSTermField.vue +69 -46
  133. package/components/fields/FSTextArea.vue +17 -11
  134. package/components/fields/FSTextField.vue +15 -10
  135. package/components/fields/FSTimeField.vue +14 -10
  136. package/components/fields/FSTimeRangeField.vue +310 -0
  137. package/components/fields/FSTimeStepField.vue +5 -5
  138. package/components/fields/FSTranslateField.vue +10 -10
  139. package/components/fields/FSTranslateRichTextField.vue +41 -20
  140. package/components/fields/FSTranslateTextArea.vue +10 -10
  141. package/components/fields/FSTreeViewField.vue +15 -13
  142. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  143. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  144. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  145. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  146. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  147. package/components/lists/FSDataIteratorItem.vue +23 -67
  148. package/components/lists/FSDataTableUI.vue +198 -123
  149. package/components/lists/FSDraggable.vue +2 -2
  150. package/components/lists/FSFilterButton.vue +14 -16
  151. package/components/lists/FSHeaderButton.vue +11 -9
  152. package/components/lists/FSHiddenButton.vue +9 -9
  153. package/components/lists/FSLoadDataTable.vue +10 -7
  154. package/components/lists/FSSimpleList.vue +95 -88
  155. package/components/lists/FSSimpleListItem.vue +131 -0
  156. package/components/map/FSMap.vue +144 -158
  157. package/components/map/FSMapEditLocationAddress.vue +189 -0
  158. package/components/map/FSMapFeatureGroup.vue +7 -1
  159. package/components/map/FSMapLayerButton.vue +4 -3
  160. package/components/map/FSMapMarker.vue +103 -42
  161. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  162. package/components/map/FSMapOverlay.vue +44 -24
  163. package/components/map/FSMapPolygon.vue +16 -4
  164. package/components/map/FSMapTileLayer.vue +26 -9
  165. package/components/map/layers.ts +0 -0
  166. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  167. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  168. package/components/selects/FSSelectDateSetting.vue +2 -2
  169. package/components/selects/FSSelectDays.vue +8 -8
  170. package/components/selects/FSSelectListMode.vue +2 -2
  171. package/components/selects/FSSelectMapLayer.vue +68 -0
  172. package/components/selects/FSSelectMonths.vue +13 -13
  173. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  174. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  175. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  176. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  177. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  178. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  180. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  181. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  182. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  183. package/components/tiles/FSAlertTileUI.vue +90 -0
  184. package/components/tiles/FSChartTileUI.vue +61 -52
  185. package/components/tiles/FSCommentTileUI.vue +38 -13
  186. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  187. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  188. package/components/tiles/FSDeviceOrganisationTileUI.vue +0 -6
  189. package/components/tiles/FSEntityCountBadge.vue +72 -0
  190. package/components/tiles/FSFolderTileUI.vue +38 -4
  191. package/components/tiles/FSGroupTileUI.vue +32 -136
  192. package/components/tiles/FSLoadTile.vue +16 -10
  193. package/components/tiles/FSLocationTileUI.vue +45 -63
  194. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  195. package/components/tiles/FSSimpleTileUI.vue +30 -24
  196. package/components/tiles/FSTile.vue +46 -39
  197. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  198. package/components/tiles/FSUserTileUI.vue +119 -0
  199. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  200. package/components/views/FSBaseView.vue +64 -0
  201. package/components/views/FSEntityView.vue +12 -146
  202. package/components/views/FSSimpleView.vue +29 -0
  203. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  204. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  205. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  206. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  207. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  208. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  209. package/composables/index.ts +1 -0
  210. package/composables/useAddress.ts +40 -8
  211. package/composables/useBreakpoints.ts +40 -4
  212. package/composables/useColors.ts +16 -7
  213. package/composables/useMagicFieldProvider.ts +1 -0
  214. package/composables/useMapLayers.ts +69 -0
  215. package/composables/useSlots.ts +2 -1
  216. package/models/colors.ts +2 -1
  217. package/models/deviceAlerts.ts +1 -0
  218. package/models/magicFields.ts +1 -0
  219. package/models/map.ts +12 -10
  220. package/models/rules.ts +5 -2
  221. package/models/tables.ts +2 -1
  222. package/models/variableNode.ts +8 -5
  223. package/package.json +5 -5
  224. package/styles/components/fs_agenda.scss +4 -0
  225. package/styles/components/fs_agenda_event.scss +1 -1
  226. package/styles/components/fs_agenda_hours_row.scss +0 -8
  227. package/styles/components/fs_autocomplete_field.scss +0 -13
  228. package/styles/components/fs_breadcrumbs.scss +18 -36
  229. package/styles/components/fs_button.scss +7 -5
  230. package/styles/components/fs_calendar.scss +1 -0
  231. package/styles/components/fs_card.scss +9 -0
  232. package/styles/components/fs_chip.scss +13 -7
  233. package/styles/components/fs_clickable.scss +16 -23
  234. package/styles/components/fs_clock.scss +0 -10
  235. package/styles/components/fs_col.scss +1 -1
  236. package/styles/components/fs_color_field.scss +0 -4
  237. package/styles/components/fs_data_table.scss +6 -9
  238. package/styles/components/fs_dialog.scss +4 -10
  239. package/styles/components/fs_dialog_menu.scss +4 -2
  240. package/styles/components/fs_draggable.scss +0 -5
  241. package/styles/components/fs_fade_out.scss +10 -2
  242. package/styles/components/fs_filter_button.scss +1 -1
  243. package/styles/components/fs_hidden_button.scss +2 -7
  244. package/styles/components/fs_image_card.scss +6 -4
  245. package/styles/components/fs_magic_config_field.scss +1 -2
  246. package/styles/components/fs_map.scss +57 -17
  247. package/styles/components/fs_meta_field.scss +3 -5
  248. package/styles/components/fs_password_field.scss +4 -2
  249. package/styles/components/fs_progress_bar.scss +14 -0
  250. package/styles/components/fs_radio.scss +0 -11
  251. package/styles/components/fs_rich_text_field.scss +1 -10
  252. package/styles/components/fs_select_field.scss +4 -13
  253. package/styles/components/fs_slide_group.scss +7 -0
  254. package/styles/components/fs_slider.scss +0 -40
  255. package/styles/components/fs_span.scss +13 -5
  256. package/styles/components/fs_status_rich_card.scss +6 -0
  257. package/styles/components/fs_tabs.scss +18 -37
  258. package/styles/components/fs_tag.scss +8 -22
  259. package/styles/components/fs_text_area.scss +2 -21
  260. package/styles/components/fs_tile.scss +0 -19
  261. package/styles/components/fs_window.scss +3 -1
  262. package/styles/components/fs_wrap_group.scss +7 -0
  263. package/styles/components/index.scss +2 -6
  264. package/styles/globals/index.scss +1 -5
  265. package/styles/globals/overrides.scss +26 -54
  266. package/styles/globals/scrollbars.scss +8 -0
  267. package/styles/globals/text_fonts.scss +18 -66
  268. package/styles/globals/touchscreen.scss +2 -2
  269. package/tools/alertsTools.ts +94 -18
  270. package/tools/chartsTools.ts +155 -16
  271. package/tools/index.ts +3 -1
  272. package/tools/reportsTools.ts +38 -0
  273. package/tools/timeRangeTools.ts +125 -0
  274. package/utils/badge.ts +9 -5
  275. package/utils/filter.ts +4 -1
  276. package/utils/index.ts +2 -0
  277. package/utils/leafletMarkers.ts +4 -4
  278. package/utils/operations.ts +108 -0
  279. package/utils/picker.ts +40 -0
  280. package/utils/sort.ts +2 -2
  281. package/utils/time.ts +13 -13
  282. package/components/fields/FSTimeSlotField.vue +0 -250
  283. package/components/views/FSEntityHeader.vue +0 -343
  284. package/components/views/FSListHeader.vue +0 -83
  285. package/components/views/FSListView.vue +0 -83
  286. package/components/views/FSSkeletonView.vue +0 -100
  287. package/styles/components/fs_data_iterator_item.scss +0 -33
  288. package/styles/components/fs_icon_field.scss +0 -12
  289. package/styles/components/fs_search_field.scss +0 -3
  290. package/styles/components/fs_tag_field.scss +0 -8
  291. package/styles/components/fs_time_field.scss +0 -12
  292. package/styles/components/fs_timeslot_field.scss +0 -12
  293. package/styles/globals/breakpoints.scss +0 -20
  294. package/styles/globals/fixes.scss +0 -5
@@ -81,14 +81,14 @@
81
81
  font="text-overline"
82
82
  :style="style"
83
83
  >
84
- {{ $tr('ui.edit-image.format', 'PNG or JPG format') }}
84
+ {{ $tr('edit-image.format', 'PNG or JPG format') }}
85
85
  </FSText>
86
86
  <FSText
87
87
  class="fs-edit-image-overline"
88
88
  font="text-overline"
89
89
  :style="style"
90
90
  >
91
- {{ $tr('ui.edit-image.size', '10 MB Maximum') }}
91
+ {{ $tr('edit-image.max-size', '10 MB Maximum') }}
92
92
  </FSText>
93
93
  </FSCol>
94
94
  </FSCol>
@@ -154,7 +154,7 @@
154
154
  font="text-body"
155
155
  :lineClamp="2"
156
156
  >
157
- {{ $tr('ui.edit-image.add-image', 'Add an image.') }}
157
+ {{ $tr('edit-image.add-image', 'Add an image.') }}
158
158
  </FSText>
159
159
  <FSButtonFileMini
160
160
  class="fs-edit-image-hidden-button"
@@ -243,7 +243,7 @@ export default defineComponent({
243
243
  default: false
244
244
  }
245
245
  },
246
- emits: ["update:modelValue", "update:source"],
246
+ emits: ["update", "update:modelValue", "update:source"],
247
247
  setup(props, { emit }) {
248
248
  const { isExtraSmall } = useBreakpoints();
249
249
  const { getColors } = useColors();
@@ -266,9 +266,15 @@ export default defineComponent({
266
266
  const content = (await readFile(payload)) as string;
267
267
  fileSelected.value.fileName = payload.name;
268
268
  fileSelected.value.fileContent = content;
269
- emit("update:modelValue", content.substring(content.indexOf(',') + 1));
269
+ const newModelValue = content.substring(content.indexOf(',') + 1);
270
270
  if (props.source) {
271
+ emit("update:modelValue", newModelValue);
271
272
  emit("update:source", null);
273
+ emit("update", { source: null, modelValue: newModelValue });
274
+ }
275
+ else {
276
+ emit("update:modelValue", newModelValue);
277
+ emit("update", { source: props.source, modelValue: newModelValue });
272
278
  }
273
279
  };
274
280
 
@@ -277,9 +283,11 @@ export default defineComponent({
277
283
  fileSelected.value.fileContent = null;
278
284
  if (props.modelValue) {
279
285
  emit("update:modelValue", null);
286
+ emit("update", { source: props.source, modelValue: null });
280
287
  }
281
288
  else {
282
289
  emit("update:source", null);
290
+ emit("update", { source: null, modelValue: props.modelValue });
283
291
  }
284
292
  };
285
293
 
@@ -3,15 +3,14 @@
3
3
  class="fs-fade-out"
4
4
  ref="fadeOutRef"
5
5
  :id="elementId"
6
- :style="style"
7
- @scroll="debounceMasks"
6
+ @scroll="$emit('scroll', $event); debounceMasks()"
8
7
  >
9
8
  <slot />
10
9
  </div>
11
10
  </template>
12
11
 
13
12
  <script lang="ts">
14
- import { computed, defineComponent, onMounted, onUnmounted, type PropType, ref, type StyleValue, watch } from "vue";
13
+ import { computed, defineComponent, onMounted, onUnmounted, type PropType, ref, watch } from "vue";
15
14
 
16
15
  import { useBreakpoints, useColors, useDebounce } from "@dative-gpi/foundation-shared-components/composables";
17
16
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -45,17 +44,41 @@ export default defineComponent({
45
44
  type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
46
45
  required: false,
47
46
  default: "64px"
47
+ },
48
+ scrollOutside: {
49
+ type: Boolean,
50
+ required: false,
51
+ default: true
52
+ },
53
+ hideHorizontalOverflow: {
54
+ type: Boolean,
55
+ required: false,
56
+ default: true
57
+ },
58
+ disableTopMask: {
59
+ type: Boolean,
60
+ required: false,
61
+ default: false
62
+ },
63
+ disableBottomMask: {
64
+ type: Boolean,
65
+ required: false,
66
+ default: false
67
+ },
68
+ style:{
69
+ type: Object,
70
+ required: false
48
71
  }
49
72
  },
50
73
  emits: ["scroll"],
51
- setup(props, { emit }) {
52
- const { windowHeight, windowWidth } = useBreakpoints();
74
+ setup(props) {
75
+ const { windowHeight, windowWidth, isTouchScreenEnabled } = useBreakpoints();
53
76
  const { debounce } = useDebounce();
54
77
  const { getColors } = useColors();
55
78
 
56
79
  const backgrounds = getColors(ColorEnum.Background);
57
80
 
58
- const fadeOutRef = ref(null);
81
+ const fadeOutRef = ref<HTMLElement | null>(null);
59
82
  const bottomMaskHeight = ref("0px");
60
83
  const topMaskHeight = ref("0px");
61
84
  const lastScroll = ref(0);
@@ -64,14 +87,21 @@ export default defineComponent({
64
87
 
65
88
  const elementId = `id${uuidv4()}`;
66
89
 
67
- const style = computed((): StyleValue => ({
68
- "--fs-fade-out-height" : props.height ? sizeToVar(props.height) : undefined,
69
- "--fs-fade-out-max-height" : props.maxHeight ? sizeToVar(props.maxHeight) : undefined,
90
+ const showOutsideScrollbar = computed(() => props.scrollOutside && !isTouchScreenEnabled.value);
91
+
92
+ const style = computed((): {[index: string]: string} => ({
93
+ "--fs-fade-out-height" : props.height ? sizeToVar(props.height) : "initial",
94
+ "--fs-fade-out-max-height" : props.maxHeight ? sizeToVar(props.maxHeight) : "initial",
70
95
  "--fs-fade-out-width" : sizeToVar(props.width),
71
96
  "--fs-fade-out-padding" : sizeToVar(props.padding),
97
+ "--fs-fade-out-width-offset" : showOutsideScrollbar.value ? '12px' : '0px',
98
+ "--fs-fade-out-padding-offset" : showOutsideScrollbar.value ? '4px' : '0px',
99
+ "--fs-fade-out-margin-right" : showOutsideScrollbar.value ? '-12px' : '0px',
72
100
  "--fs-fade-out-mask-color" : backgrounds.base,
73
- "--fs-fade-out-top-mask-height" : topMaskHeight.value,
74
- "--fs-fade-out-bottom-mask-height": bottomMaskHeight.value
101
+ "--fs-fade-out-top-mask-height" : props.disableTopMask ? '0px' : topMaskHeight.value,
102
+ "--fs-fade-out-bottom-mask-height": props.disableBottomMask ? '0px' : bottomMaskHeight.value,
103
+ "--fs-fade-out-x-overflow" : props.hideHorizontalOverflow ? 'hidden' : 'auto',
104
+ ...props.style
75
105
  }));
76
106
 
77
107
  const handleMasks = () => {
@@ -93,20 +123,13 @@ export default defineComponent({
93
123
  else {
94
124
  topMaskHeight.value = sizeToVar(props.maskHeight);
95
125
  }
96
-
97
- const event = {
98
- target: fadeOutRef.value,
99
- onTop: topMaskHeight.value === "0px",
100
- onBottom: bottomMaskHeight.value === "0px",
101
- goingUp: (fadeOutRef.value as any).scrollTop < lastScroll.value,
102
- };
103
-
104
- emit("scroll", event);
126
+
105
127
  lastScroll.value = (fadeOutRef.value as any).scrollTop;
106
128
  }
107
129
  };
108
130
 
109
- const debounceMasks = (): void => debounce(handleMasks, 50);
131
+ // Delay to wait for animations to end before computing masks
132
+ const debounceMasks = (): void => debounce(handleMasks, 280);
110
133
 
111
134
  onMounted((): void => {
112
135
  debounceMasks();
@@ -129,6 +152,15 @@ export default defineComponent({
129
152
 
130
153
  watch([() => windowWidth.value, () => windowHeight.value], debounceMasks);
131
154
 
155
+ watch(() => [style.value, fadeOutRef.value], () => {
156
+ if(!fadeOutRef.value || !style.value) {
157
+ return;
158
+ }
159
+ for(const key in style.value){
160
+ fadeOutRef.value.style.setProperty(key, style.value[key])
161
+ }
162
+ }, { immediate: true})
163
+
132
164
  return {
133
165
  fadeOutRef,
134
166
  elementId,
@@ -12,6 +12,9 @@
12
12
 
13
13
  <script lang="ts">
14
14
  import type { PropType} from "vue";
15
+
16
+ import type VForm from "vuetify/lib/components/VForm";
17
+
15
18
  import { computed, defineComponent, provide, ref } from "vue";
16
19
 
17
20
  export default defineComponent({
@@ -30,7 +33,7 @@ export default defineComponent({
30
33
  },
31
34
  emits: ["update:modelValue", "submit"],
32
35
  setup(props, { emit }) {
33
- const formRef = ref<HTMLFormElement | null>(null);
36
+ const formRef = ref<typeof VForm | null>(null);
34
37
  const submitted = ref(false);
35
38
 
36
39
  const validateOn = computed((): "submit" | "input" => {
@@ -44,25 +47,24 @@ export default defineComponent({
44
47
  event.stopImmediatePropagation();
45
48
  event.preventDefault();
46
49
  submitted.value = true;
47
- await (formRef.value as any).validate();
48
- emit("update:modelValue", !!((formRef.value as any).isValid ?? true));
49
- emit("submit", !!((formRef.value as any).isValid ?? true));
50
+ await formRef.value.validate();
51
+ emit("update:modelValue", !!(formRef.value.isValid ?? true));
52
+ emit("submit", !!(formRef.value.isValid ?? true));
50
53
  };
51
54
 
52
55
  const validate = async () => {
53
56
  submitted.value = true;
54
- await (formRef.value as any).validate();
55
- emit("update:modelValue", !!((formRef.value as any).isValid ?? true));
57
+ return await formRef.value.validate();
56
58
  };
57
59
 
58
60
  const reset = () => {
59
61
  submitted.value = false;
60
- (formRef.value as any).reset();
62
+ formRef.value.reset();
61
63
  };
62
64
 
63
65
  const resetValidation = () => {
64
66
  submitted.value = false;
65
- (formRef.value as any).resetValidation();
67
+ formRef.value.resetValidation();
66
68
  };
67
69
 
68
70
  provide("validateOn", validateOn);
@@ -52,7 +52,6 @@
52
52
  </template>
53
53
  </template>
54
54
  </FSCol>
55
- <v-spacer />
56
55
  <FSRow
57
56
  v-if="itemEndSlot(item.code)"
58
57
  align="center-right"
@@ -13,7 +13,7 @@
13
13
  import { computed, defineComponent, type PropType, type StyleValue } from "vue";
14
14
 
15
15
  import { useBreakpoints, useColors } from "@dative-gpi/foundation-shared-components/composables";
16
- import { type ColorBase } from "@dative-gpi/foundation-shared-components/models";
16
+ import { type ColorBase, type ColorBaseVariations } from "@dative-gpi/foundation-shared-components/models";
17
17
 
18
18
  import { sizeToVar } from "../utils";
19
19
 
@@ -31,7 +31,7 @@ export default defineComponent({
31
31
  default: null
32
32
  },
33
33
  variant: {
34
- type: String as PropType<"base" | "baseContrast" | "soft" | "softContrast" | "light" | "lightContrast" | "dark" | "darkContrast">,
34
+ type: String as PropType<ColorBaseVariations>,
35
35
  required: false,
36
36
  default: "base"
37
37
  }
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSCard
3
3
  :variant="$props.backgroundVariant"
4
+ :borderColor="$props.backgroundVariant === 'background' ? ColorEnum.Light : null"
4
5
  :color="$props.backgroundColor"
5
6
  :border="$props.border"
6
7
  :height="$props.size"
@@ -9,10 +10,10 @@
9
10
  <FSRow
10
11
  align="center-center"
11
12
  >
12
- <FSIcon
13
- :variant="$props.iconVariant"
14
- :color="$props.iconColor"
15
- :size="$props.iconSize"
13
+ <FSIcon
14
+ :variant="iconVariant"
15
+ :color="iconColor"
16
+ :size="actualIconSize"
16
17
  >
17
18
  {{ $props.icon }}
18
19
  </FSIcon>
@@ -21,9 +22,11 @@
21
22
  </template>
22
23
 
23
24
  <script lang="ts">
24
- import { defineComponent, type PropType } from "vue";
25
+ import { defineComponent, type PropType, computed } from "vue";
25
26
 
26
- import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
27
+ import { ColorEnum, type ColorBase, type ColorBaseVariations } from "@dative-gpi/foundation-shared-components/models";
28
+
29
+ import { sizeToVar } from "../utils";
27
30
 
28
31
  import FSCard from "./FSCard.vue";
29
32
  import FSIcon from "./FSIcon.vue";
@@ -43,7 +46,7 @@ export default defineComponent({
43
46
  backgroundColor: {
44
47
  type: [Array, String] as PropType<ColorBase | ColorBase[]>,
45
48
  required: false,
46
- default: null
49
+ default: ColorEnum.Background
47
50
  },
48
51
  backgroundVariant: {
49
52
  type: String as PropType<"background" | "standard" | "full" | "gradient">,
@@ -57,24 +60,77 @@ export default defineComponent({
57
60
  },
58
61
  iconColor: {
59
62
  type: String as PropType<ColorBase>,
60
- required: false,
61
- default: ColorEnum.Dark
63
+ required: false
62
64
  },
63
65
  iconVariant: {
64
- type: String as PropType<"base" | "baseContrast" | "soft" | "softContrast" | "light" | "lightContrast" | "dark" | "darkContrast">,
66
+ type: String as PropType<ColorBaseVariations | null>,
65
67
  required: false,
66
- default: "base"
68
+ default: null
67
69
  },
68
70
  iconSize: {
69
71
  type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
70
72
  required: false,
71
- default: "56px"
73
+ default: null
72
74
  },
73
75
  border: {
74
76
  type: Boolean,
75
77
  required: false,
76
78
  default: true
77
79
  }
80
+ },
81
+ setup(props){
82
+ const actualIconSize = computed(() => {
83
+ if (props.iconSize){
84
+ return props.iconSize;
85
+ }
86
+ else if (props.size) {
87
+ return `calc(${sizeToVar(props.size)} * 0.42)`;
88
+ }
89
+ return "42px";
90
+ });
91
+
92
+ const iconVariant = computed((): ColorBaseVariations | undefined => {
93
+ if (props.iconVariant) {
94
+ return props.iconVariant;
95
+ }
96
+ if (props.iconColor) {
97
+ return "base";
98
+ }
99
+
100
+ switch (props.backgroundVariant) {
101
+ case "background":
102
+ return "lightContrast";
103
+ case "standard":
104
+ return "lightContrast";
105
+ case "full":
106
+ return "baseContrast";
107
+ case "gradient":
108
+ return "baseContrast";
109
+ default:
110
+ return "base";
111
+ }
112
+ });
113
+
114
+ const iconColor = computed((): ColorBase | undefined => {
115
+ if (props.iconColor) {
116
+ return props.iconColor;
117
+ }
118
+
119
+ if(Array.isArray(props.backgroundColor)) {
120
+ return props.backgroundColor[Math.floor(props.backgroundColor.length/2)];
121
+ }
122
+ if(props.backgroundVariant === "background") {
123
+ return ColorEnum.Light;
124
+ }
125
+ return props.backgroundColor;
126
+ });
127
+
128
+ return {
129
+ actualIconSize,
130
+ iconVariant,
131
+ ColorEnum,
132
+ iconColor,
133
+ };
78
134
  }
79
135
  });
80
136
  </script>
@@ -0,0 +1,142 @@
1
+ <template>
2
+ <FSMenu
3
+ :location="$props.location"
4
+ :closeOnContentClick="false"
5
+ minWidth="0"
6
+ v-model="modelValue"
7
+ v-bind="$attrs"
8
+ >
9
+ <template
10
+ #activator="{ props }"
11
+ >
12
+ <slot
13
+ name="activator"
14
+ v-bind="props"
15
+ >
16
+ <FSButton
17
+ v-bind="props"
18
+ :color="$props.iconColor"
19
+ :iconSize="$props.iconSize"
20
+ variant="icon"
21
+ icon="mdi-information-outline"
22
+ />
23
+ </slot>
24
+ </template>
25
+ <slot
26
+ name="menuContent"
27
+ >
28
+ <FSCard
29
+ :maxWidth="$props.maxWidth"
30
+ :width="$props.width"
31
+ :padding="$props.padding"
32
+ :elevation="true"
33
+ align="center"
34
+ >
35
+ <slot
36
+ name="cardContent"
37
+ >
38
+ <FSRow
39
+ align="center-center"
40
+ >
41
+ <FSText
42
+ font="text-body"
43
+ :lineClamp="$props.lineClamp"
44
+ >
45
+ {{ $props.content }}
46
+ </FSText>
47
+ </FSRow>
48
+ </slot>
49
+ <template
50
+ v-if="$props.showCloseButton"
51
+ #top-right
52
+ >
53
+ <FSButton
54
+ variant="icon"
55
+ icon="mdi-close"
56
+ iconSize="18px"
57
+ :color="lightColors.dark"
58
+ @click="modelValue = false"
59
+ />
60
+ </template>
61
+ </FSCard>
62
+ </slot>
63
+ </FSMenu>
64
+ </template>
65
+
66
+ <script lang="ts">
67
+ import { defineComponent, ref, type PropType } from "vue";
68
+
69
+ import { useColors } from "@dative-gpi/foundation-shared-components/composables";
70
+
71
+ import { ColorEnum } from '@dative-gpi/foundation-shared-components/models';
72
+
73
+ import FSRow from '@dative-gpi/foundation-shared-components/components/FSRow.vue';
74
+ import FSMenu from '@dative-gpi/foundation-shared-components/components/FSMenu.vue';
75
+ import FSCard from '@dative-gpi/foundation-shared-components/components/FSCard.vue';
76
+ import FSText from '@dative-gpi/foundation-shared-components/components/FSText.vue';
77
+ import FSButton from '@dative-gpi/foundation-shared-components/components/FSButton.vue';
78
+
79
+ export default defineComponent({
80
+ name: "FSInformationsMenu",
81
+ components: {
82
+ FSMenu,
83
+ FSCard,
84
+ FSRow,
85
+ FSText,
86
+ FSButton
87
+ },
88
+ props: {
89
+ content: {
90
+ type: String as PropType<string | null>,
91
+ required: false,
92
+ default: null
93
+ },
94
+ location: {
95
+ type: String,
96
+ default: "top"
97
+ },
98
+ width: {
99
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
100
+ default: null
101
+ },
102
+ maxWidth: {
103
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
104
+ default: null
105
+ },
106
+ padding: {
107
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
108
+ default: "16px 8px"
109
+ },
110
+ iconSize: {
111
+ type: String,
112
+ default: "18px"
113
+ },
114
+ iconColor: {
115
+ type: String as PropType<ColorBase>,
116
+ default: ColorEnum.Primary
117
+ },
118
+ showCloseButton: {
119
+ type: Boolean,
120
+ default: true
121
+ },
122
+ lineClamp: {
123
+ type: Number,
124
+ default: 4
125
+ }
126
+ },
127
+ emits: ["update:modelValue"],
128
+ setup() {
129
+ const modelValue = ref(false);
130
+
131
+ const { getColors } = useColors();
132
+
133
+ const lightColors = getColors(ColorEnum.Light);
134
+
135
+ return {
136
+ ColorEnum,
137
+ modelValue,
138
+ lightColors
139
+ };
140
+ }
141
+ });
142
+ </script>