@dative-gpi/foundation-shared-components 1.0.26 → 1.0.28-remove-deprecated2

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 (265) hide show
  1. package/components/FSBreadcrumbs.vue +1 -0
  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 +20 -12
  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 +51 -32
  15. package/components/FSDialogMultiFormBody.vue +79 -56
  16. package/components/FSDialogRemove.vue +7 -7
  17. package/components/FSDialogSubmit.vue +20 -11
  18. package/components/FSEditImage.vue +1 -1
  19. package/components/FSEditImageUI.vue +20 -10
  20. package/components/FSFadeOut.vue +44 -18
  21. package/components/FSForm.vue +10 -8
  22. package/components/FSGrid.vue +1 -1
  23. package/components/FSIcon.vue +2 -1
  24. package/components/FSIconCard.vue +21 -4
  25. package/components/FSImage.vue +12 -4
  26. package/components/FSImageUI.vue +8 -15
  27. package/components/FSLink.vue +25 -9
  28. package/components/FSLoader.vue +28 -11
  29. package/components/FSOptionGroup.vue +51 -3
  30. package/components/FSRouterLink.vue +42 -0
  31. package/components/FSSlideGroup.vue +19 -5
  32. package/components/FSSpan.vue +9 -2
  33. package/components/FSSwitch.vue +57 -27
  34. package/components/FSTab.vue +15 -13
  35. package/components/FSTabs.vue +32 -7
  36. package/components/FSTag.vue +14 -3
  37. package/components/FSTagGroup.vue +1 -1
  38. package/components/FSText.vue +4 -2
  39. package/components/FSWindow.vue +128 -4
  40. package/components/FSWrapGroup.vue +13 -1
  41. package/components/agenda/FSAgenda.vue +223 -0
  42. package/components/agenda/FSAgendaDialogCalendar.vue +76 -0
  43. package/components/agenda/FSAgendaHeader.vue +215 -0
  44. package/components/agenda/FSAgendaHorizontalEvent.vue +174 -0
  45. package/components/agenda/FSAgendaHorizontalTimeLineMarker.vue +46 -0
  46. package/components/agenda/FSAgendaHoursCol.vue +103 -0
  47. package/components/agenda/FSAgendaHoursRow.vue +164 -0
  48. package/components/agenda/FSAgendaVerticalEvent.vue +160 -0
  49. package/components/agenda/FSAgendaVerticalTimeLineMarker.vue +46 -0
  50. package/components/agenda/FSDayAgenda.vue +199 -0
  51. package/components/agenda/FSMonthAgenda.vue +252 -0
  52. package/components/agenda/FSSelectAgendaMode.vue +54 -0
  53. package/components/agenda/FSWeekAgenda.vue +323 -0
  54. package/components/autocompletes/FSAutoCompleteAddress.vue +22 -20
  55. package/components/autocompletes/FSAutocompleteLanguage.vue +24 -39
  56. package/components/autocompletes/FSAutocompleteTimeZone.vue +26 -38
  57. package/components/buttons/FSButtonAdd.vue +1 -1
  58. package/components/buttons/FSButtonAddLabel.vue +1 -1
  59. package/components/buttons/FSButtonCancel.vue +1 -1
  60. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  61. package/components/buttons/FSButtonCopy.vue +28 -0
  62. package/components/buttons/FSButtonCopyIcon.vue +28 -0
  63. package/components/buttons/FSButtonCopyLabel.vue +27 -0
  64. package/components/buttons/FSButtonCopyMini.vue +28 -0
  65. package/components/buttons/FSButtonDragIcon.vue +27 -0
  66. package/components/buttons/FSButtonDuplicate.vue +1 -1
  67. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  68. package/components/buttons/FSButtonEdit.vue +1 -1
  69. package/components/buttons/FSButtonEditLabel.vue +1 -1
  70. package/components/buttons/FSButtonFile.vue +1 -1
  71. package/components/buttons/FSButtonFileLabel.vue +1 -1
  72. package/components/buttons/FSButtonNext.vue +1 -1
  73. package/components/buttons/FSButtonNextLabel.vue +1 -1
  74. package/components/buttons/FSButtonPrevious.vue +1 -1
  75. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  76. package/components/buttons/FSButtonRedo.vue +1 -1
  77. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  78. package/components/buttons/FSButtonRemove.vue +1 -1
  79. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  80. package/components/buttons/FSButtonSave.vue +1 -1
  81. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  82. package/components/buttons/FSButtonSearch.vue +1 -1
  83. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  84. package/components/buttons/FSButtonUndo.vue +1 -1
  85. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  86. package/components/buttons/FSButtonUpdate.vue +1 -1
  87. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  88. package/components/buttons/FSButtonValidate.vue +1 -1
  89. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  90. package/components/calendar/FSSimpleCalendar.vue +145 -0
  91. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  92. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  93. package/components/deviceOrganisations/FSConnectivity.vue +11 -1
  94. package/components/deviceOrganisations/FSConnectivityCard.vue +19 -47
  95. package/components/deviceOrganisations/FSStatus.vue +11 -1
  96. package/components/deviceOrganisations/FSStatusCard.vue +35 -61
  97. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  98. package/components/deviceOrganisations/FSStatusesRow.vue +9 -3
  99. package/components/deviceOrganisations/FSWorstAlert.vue +30 -37
  100. package/components/deviceOrganisations/FSWorstAlertCard.vue +36 -85
  101. package/components/fields/FSAutocompleteField.vue +516 -341
  102. package/components/fields/FSAutocompleteTag.vue +100 -0
  103. package/components/fields/FSBaseField.vue +44 -27
  104. package/components/fields/FSColorField.vue +42 -39
  105. package/components/fields/FSCommentField.vue +105 -0
  106. package/components/fields/FSDateField.vue +2 -2
  107. package/components/fields/FSDateRangeField.vue +3 -2
  108. package/components/fields/FSDateTimeField.vue +4 -3
  109. package/components/fields/FSDateTimeRangeField.vue +8 -6
  110. package/components/fields/FSEntityFieldUI.vue +271 -0
  111. package/components/fields/FSGradientField.vue +27 -33
  112. package/components/fields/FSIconField.vue +0 -1
  113. package/components/fields/FSMagicConfigField.vue +34 -19
  114. package/components/fields/FSMagicField.vue +9 -4
  115. package/components/fields/FSNumberField.vue +13 -6
  116. package/components/fields/FSRichTextField.vue +102 -52
  117. package/components/fields/FSSearchField.vue +9 -115
  118. package/components/fields/FSSelectField.vue +489 -252
  119. package/components/fields/FSTagField.vue +1 -1
  120. package/components/fields/FSTermField.vue +33 -11
  121. package/components/fields/FSTextArea.vue +26 -7
  122. package/components/fields/FSTextField.vue +19 -10
  123. package/components/fields/FSTimeRangeField.vue +304 -0
  124. package/components/fields/FSTimeStepField.vue +3 -3
  125. package/components/fields/FSTranslateField.vue +4 -3
  126. package/components/fields/FSTranslateRichTextField.vue +15 -10
  127. package/components/fields/FSTranslateTextArea.vue +233 -0
  128. package/components/fields/FSTreeViewField.vue +3 -3
  129. package/components/fields/periodicField/FSPeriodicDailyField.vue +120 -0
  130. package/components/fields/periodicField/FSPeriodicField.vue +131 -0
  131. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +222 -0
  132. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +120 -0
  133. package/components/fields/periodicField/FSPeriodicYearlyField.vue +144 -0
  134. package/components/lists/FSDataTableUI.vue +148 -89
  135. package/components/lists/FSDraggable.vue +2 -2
  136. package/components/lists/FSFilterButton.vue +23 -28
  137. package/components/lists/FSHeaderButton.vue +4 -4
  138. package/components/lists/FSHiddenButton.vue +11 -15
  139. package/components/lists/FSLoadDataTable.vue +10 -7
  140. package/components/lists/FSSimpleList.vue +234 -0
  141. package/components/lists/FSSimpleListItem.vue +132 -0
  142. package/components/map/FSMap.vue +280 -399
  143. package/components/map/FSMapFeatureGroup.vue +51 -0
  144. package/components/map/FSMapLayerButton.vue +5 -5
  145. package/components/map/FSMapMarker.vue +120 -0
  146. package/components/map/FSMapMarkerClusterGroup.vue +72 -0
  147. package/components/map/FSMapOverlay.vue +70 -82
  148. package/components/map/FSMapPolygon.vue +81 -0
  149. package/components/map/FSMapTileLayer.vue +50 -0
  150. package/components/map/keys.ts +4 -0
  151. package/components/selects/FSSelectAutoRefresh.vue +9 -9
  152. package/components/selects/FSSelectDashboardVariableType.vue +5 -4
  153. package/components/selects/FSSelectDateSetting.vue +3 -2
  154. package/components/selects/FSSelectDays.vue +9 -9
  155. package/components/selects/FSSelectListMode.vue +51 -0
  156. package/components/selects/FSSelectMonths.vue +67 -0
  157. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  158. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  159. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  160. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  161. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  162. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  163. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  164. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  165. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  166. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  167. package/components/tiles/FSAlertTileUI.vue +90 -0
  168. package/components/tiles/FSChartTile.vue +73 -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 +134 -0
  184. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  185. package/components/views/desktop/FSBaseEntityDesktopView.vue +208 -0
  186. package/components/views/mobile/FSBaseDefaultMobileView.vue +132 -0
  187. package/components/views/mobile/FSBaseEntityMobileView.vue +198 -0
  188. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  189. package/composables/useAddress.ts +2 -2
  190. package/composables/useBreakpoints.ts +39 -3
  191. package/composables/useColors.ts +3 -2
  192. package/composables/useMagicFieldProvider.ts +1 -0
  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 +5 -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 +6 -12
  210. package/styles/components/fs_card.scss +0 -1
  211. package/styles/components/fs_clickable.scss +7 -14
  212. package/styles/components/fs_clock.scss +0 -10
  213. package/styles/components/fs_color_field.scss +1 -4
  214. package/styles/components/fs_data_table.scss +6 -9
  215. package/styles/components/fs_dialog.scss +7 -17
  216. package/styles/components/fs_edit_image.scss +8 -0
  217. package/styles/components/fs_fade_out.scss +11 -2
  218. package/styles/components/fs_filter_button.scss +1 -6
  219. package/styles/components/fs_gradient_field.scss +11 -11
  220. package/styles/components/fs_hidden_button.scss +2 -7
  221. package/styles/components/fs_image_card.scss +1 -1
  222. package/styles/components/fs_magic_config_field.scss +1 -2
  223. package/styles/components/fs_map.scss +36 -30
  224. package/styles/components/fs_meta_field.scss +3 -5
  225. package/styles/components/fs_option_group.scss +15 -5
  226. package/styles/components/fs_rich_text_field.scss +1 -9
  227. package/styles/components/fs_select_date_settings.scss +3 -0
  228. package/styles/components/fs_select_field.scss +0 -13
  229. package/styles/components/fs_slide_group.scss +7 -0
  230. package/styles/components/fs_span.scss +2 -1
  231. package/styles/components/fs_switch.scss +1 -0
  232. package/styles/components/fs_tabs.scss +10 -24
  233. package/styles/components/fs_tag.scss +3 -19
  234. package/styles/components/fs_text_area.scss +13 -17
  235. package/styles/components/fs_tile.scss +21 -15
  236. package/styles/components/fs_window.scss +7 -0
  237. package/styles/components/fs_wrap_group.scss +7 -0
  238. package/styles/components/index.scss +5 -5
  239. package/styles/globals/index.scss +1 -5
  240. package/styles/globals/overrides.scss +17 -57
  241. package/styles/globals/text_fonts.scss +18 -66
  242. package/tools/alertsTools.ts +69 -0
  243. package/tools/chartsTools.ts +427 -0
  244. package/tools/index.ts +3 -0
  245. package/tools/timeRangeTools.ts +125 -0
  246. package/utils/filter.ts +18 -0
  247. package/utils/index.ts +1 -0
  248. package/utils/leafletMarkers.ts +9 -3
  249. package/utils/sort.ts +2 -2
  250. package/utils/statuses.ts +1 -1
  251. package/utils/time.ts +17 -17
  252. package/components/autocompletes/FSAutocompleteTag.vue +0 -138
  253. package/components/fields/FSTimeSlotField.vue +0 -250
  254. package/components/map/FSMapEditPointAddressOverlay.vue +0 -164
  255. package/components/views/FSEntityHeader.vue +0 -350
  256. package/components/views/FSListHeader.vue +0 -83
  257. package/components/views/FSListView.vue +0 -83
  258. package/components/views/FSSkeletonView.vue +0 -100
  259. package/styles/components/fs_icon_field.scss +0 -12
  260. package/styles/components/fs_map_overlay.scss +0 -38
  261. package/styles/components/fs_tag_field.scss +0 -8
  262. package/styles/components/fs_time_field.scss +0 -12
  263. package/styles/components/fs_timeslot_field.scss +0 -12
  264. package/styles/globals/breakpoints.scss +0 -20
  265. package/styles/globals/fixes.scss +0 -5
@@ -9,10 +9,10 @@
9
9
  <FSRow
10
10
  align="center-center"
11
11
  >
12
- <FSIcon
12
+ <FSIcon
13
13
  :variant="$props.iconVariant"
14
14
  :color="$props.iconColor"
15
- :size="$props.iconSize"
15
+ :size="actualIconSize"
16
16
  >
17
17
  {{ $props.icon }}
18
18
  </FSIcon>
@@ -21,10 +21,12 @@
21
21
  </template>
22
22
 
23
23
  <script lang="ts">
24
- import { defineComponent, type PropType } from "vue";
24
+ import { defineComponent, type PropType, computed } from "vue";
25
25
 
26
26
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
27
27
 
28
+ import { sizeToVar } from "../utils";
29
+
28
30
  import FSCard from "./FSCard.vue";
29
31
  import FSIcon from "./FSIcon.vue";
30
32
 
@@ -68,13 +70,28 @@ export default defineComponent({
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
+ return {
93
+ actualIconSize
94
+ };
78
95
  }
79
96
  });
80
97
  </script>
@@ -10,9 +10,8 @@
10
10
  <script lang="ts">
11
11
  import { computed, defineComponent, type PropType } from "vue";
12
12
 
13
- import { IMAGE_RAW_URL } from "@dative-gpi/foundation-shared-services/config/urls";
14
-
15
- import { useImage } from "@dative-gpi/foundation-shared-services/composables";
13
+ import { IMAGE_THUMBNAIL_URL, IMAGE_RAW_URL } from "@dative-gpi/foundation-shared-services/config/urls";
14
+ import { useAppAuthToken, useImage } from "@dative-gpi/foundation-shared-services/composables";
16
15
 
17
16
  import FSImageUI from "./FSImageUI.vue";
18
17
 
@@ -26,13 +25,22 @@ export default defineComponent({
26
25
  type: String as PropType<string | null>,
27
26
  required: false,
28
27
  default: null
28
+ },
29
+ thumbnail: {
30
+ type: Boolean as PropType<boolean>,
31
+ required: false,
32
+ default: false
29
33
  }
30
34
  },
31
35
  setup(props) {
32
36
  const { get: getImage, entity: image } = useImage();
37
+ const { authToken } = useAppAuthToken();
33
38
 
34
39
  const source = computed(() => {
35
- return props.imageId ? IMAGE_RAW_URL(props.imageId) : null;
40
+ if (props.thumbnail) {
41
+ return props.imageId ? IMAGE_THUMBNAIL_URL(props.imageId, authToken.value) : null;
42
+ }
43
+ return props.imageId ? IMAGE_RAW_URL(props.imageId, authToken.value) : null;
36
44
  });
37
45
 
38
46
  const onError = (): void => {
@@ -42,9 +42,8 @@
42
42
  import { computed, defineComponent, type PropType, ref, type StyleValue, watch } from "vue";
43
43
  import { decode, isBlurhashValid } from "blurhash";
44
44
 
45
- import type { ImageDetails } from "@dative-gpi/foundation-shared-domain/models";
46
-
47
45
  import { sizeToVar, varToSize } from "@dative-gpi/foundation-shared-components/utils";
46
+ import { type ImageDetails } from "@dative-gpi/foundation-shared-domain/models";
48
47
 
49
48
  import FSLoader from "./FSLoader.vue";
50
49
 
@@ -64,6 +63,11 @@ export default defineComponent({
64
63
  required: false,
65
64
  default: null
66
65
  },
66
+ aspectRatio: {
67
+ type: Number as PropType<number | null>,
68
+ required: false,
69
+ default: 1
70
+ },
67
71
  imageB64: {
68
72
  type: String as PropType<string | null>,
69
73
  required: false,
@@ -79,11 +83,6 @@ export default defineComponent({
79
83
  required: false,
80
84
  default: null
81
85
  },
82
- aspectRatio: {
83
- type: String as PropType<string | null>,
84
- required: false,
85
- default: null
86
- },
87
86
  borderRadius: {
88
87
  type: [String, Number],
89
88
  required: false,
@@ -127,10 +126,7 @@ export default defineComponent({
127
126
  return undefined;
128
127
  }
129
128
  if (props.aspectRatio) {
130
- const split = props.aspectRatio.split('/');
131
- if (split.length === 2 && !isNaN(parseFloat(split[0])) && !isNaN(parseFloat(split[1]))) {
132
- return sizeToVar(varToSize(props.width) * (parseFloat(split[1]) / parseFloat(split[0])));
133
- }
129
+ return sizeToVar(varToSize(props.width) / props.aspectRatio);
134
130
  }
135
131
  return sizeToVar(props.width);
136
132
  }
@@ -146,10 +142,7 @@ export default defineComponent({
146
142
  return undefined;
147
143
  }
148
144
  if (props.aspectRatio) {
149
- const split = props.aspectRatio.split('/');
150
- if (split.length === 2 && !isNaN(parseFloat(split[0])) && !isNaN(parseFloat(split[1]))) {
151
- return sizeToVar(varToSize(props.height) * (parseFloat(split[0]) / parseFloat(split[1])));
152
- }
145
+ return sizeToVar(varToSize(props.height) * props.aspectRatio);
153
146
  }
154
147
  return sizeToVar(props.height);
155
148
  }
@@ -2,13 +2,16 @@
2
2
  <a
3
3
  v-if="$props.href"
4
4
  :href="$props.href"
5
+ :class="classes"
5
6
  :style="style"
6
7
  >
7
8
  <slot>
8
- {{ $props.label }}
9
+ <FSSpan>
10
+ {{ $props.label }}
11
+ </FSSpan>
9
12
  </slot>
10
13
  </a>
11
- <router-link
14
+ <FSRouterLink
12
15
  v-else-if="$props.to"
13
16
  :to="$props.to"
14
17
  :class="classes"
@@ -19,20 +22,29 @@
19
22
  <slot
20
23
  v-bind="props"
21
24
  >
22
- {{ $props.label }}
25
+ <FSSpan>
26
+ {{ $props.label }}
27
+ </FSSpan>
23
28
  </slot>
24
- </router-link>
29
+ </FSRouterLink>
25
30
  </template>
26
31
 
27
32
  <script lang="ts">
28
33
  import { computed, defineComponent, type PropType, type StyleValue } from "vue";
29
34
  import { type RouteLocation } from "vue-router";
30
35
 
36
+ import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
31
37
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
32
- import { useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
38
+
39
+ import FSRouterLink from "./FSRouterLink.vue";
40
+ import FSSpan from "./FSSpan.vue";
33
41
 
34
42
  export default defineComponent({
35
43
  name: "FSLink",
44
+ components: {
45
+ FSRouterLink,
46
+ FSSpan
47
+ },
36
48
  props: {
37
49
  label: {
38
50
  type: String as PropType<string | null>,
@@ -40,7 +52,7 @@ export default defineComponent({
40
52
  default: null
41
53
  },
42
54
  to: {
43
- type: [String, Object] as PropType<string | RouteLocation | null>,
55
+ type: Object as PropType<RouteLocation | null>,
44
56
  required: false,
45
57
  default: null
46
58
  },
@@ -76,6 +88,7 @@ export default defineComponent({
76
88
  }
77
89
  },
78
90
  setup(props) {
91
+ const { fontStyles } = useBreakpoints();
79
92
  const { getColors } = useColors();
80
93
  const { slots } = useSlots();
81
94
 
@@ -85,15 +98,18 @@ export default defineComponent({
85
98
  switch (props.variant) {
86
99
  case "base": return {
87
100
  "--fs-span-line-clamp": props.lineClamp.toString(),
88
- "--fs-link-color" : colors.value.base
101
+ "--fs-link-color" : colors.value.base,
102
+ ...fontStyles.value
89
103
  };
90
104
  case "light": return {
91
105
  "--fs-span-line-clamp": props.lineClamp.toString(),
92
- "--fs-link-color" : colors.value.light
106
+ "--fs-link-color" : colors.value.light,
107
+ ...fontStyles.value
93
108
  };
94
109
  case "dark": return {
95
110
  "--fs-span-line-clamp": props.lineClamp.toString(),
96
- "--fs-link-color" : colors.value.dark
111
+ "--fs-link-color" : colors.value.dark,
112
+ ...fontStyles.value
97
113
  };
98
114
  }
99
115
  });
@@ -32,7 +32,7 @@ export default defineComponent({
32
32
  default: "0"
33
33
  },
34
34
  variant: {
35
- type: String as PropType<"standard" | "button" | "input" | "field" | "chip" | "text-h1" | "text-h2" | "text-h3" | "text-h4" | "text-body" | "text-button" | "text-overline">,
35
+ type: String as PropType<"standard" | "button" | "input" | "field" | "chip" | "text-h1" | "text-h2" | "text-h3" | "text-body" | "text-button" | "text-overline">,
36
36
  required: false,
37
37
  default: "standard"
38
38
  },
@@ -51,7 +51,7 @@ export default defineComponent({
51
51
  const style = computed((): StyleValue => ({
52
52
  "--fs-loader-background-color": backgrounds.base,
53
53
  "--fs-loader-border-radius" : ["chip"].includes(props.variant) ? "50px" : sizeToVar(props.borderRadius),
54
- "--fs-loader-padding" : sizeToVar(props.padding),
54
+ "--fs-loader-padding" : sizeToVar(getPadding.value),
55
55
  "--fs-loader-height" : sizeToVar(getHeight.value),
56
56
  "--fs-loader-width" : sizeToVar(getWidth.value)
57
57
  }));
@@ -63,22 +63,24 @@ export default defineComponent({
63
63
  case "input" :
64
64
  case "field" : return isMobileSized.value ? "36px" : "40px";
65
65
  case "chip" : return isMobileSized.value ? "20px" : "24px";
66
- case "text-h1" : return isMobileSized.value ? "32px" : "40px";
67
- case "text-h2" : return isMobileSized.value ? "24px" : "32px";
68
- case "text-h3" : return isMobileSized.value ? "20px" : "24px";
69
- case "text-h4" : return isMobileSized.value ? "16px" : "20px";
66
+
67
+ case "text-h1" : return isMobileSized.value ? "28px" : "36px";
68
+ case "text-h2" : return isMobileSized.value ? "22px" : "26px";
69
+ case "text-h3" : return isMobileSized.value ? "16px" : "20px";
70
70
  case "text-body" :
71
- case "text-button" : return isMobileSized.value ? "14px" : "16px";
72
- case "text-overline" :
73
- case "text-overline": return "16px";
71
+ case "text-button" : return isMobileSized.value ? "12px" : "14px";
72
+ case "text-overline" : return isMobileSized.value ? "10px" : "12px";
74
73
  }
75
74
  });
76
75
 
77
76
  const getWidth = computed((): string | number => {
77
+ if (props.width != null) {
78
+ return sizeToVar(props.width);
79
+ }
78
80
  switch (props.variant) {
79
81
  case "standard": return sizeToVar(props.width);
80
- case "button" : return isMobileSized ? "36px" : "40px";
81
- case "input" : return isMobileSized ? "calc(50% - 124px)" : "calc(50% - 132px)";
82
+ case "button" : return isMobileSized.value ? "36px" : "40px";
83
+ case "input" : return isMobileSized.value ? "calc(50% - 124px)" : "calc(50% - 132px)";
82
84
  case "field" : return "100%";
83
85
  case "chip" : return "8vw";
84
86
  case "text-h1" : return "calc(50% - 32px)";
@@ -88,6 +90,21 @@ export default defineComponent({
88
90
  }
89
91
  });
90
92
 
93
+ const getPadding = computed((): string | number => {
94
+ if (props.padding !== "0") {
95
+ return sizeToVar(props.padding);
96
+ }
97
+ switch (props.variant) {
98
+ case "text-h1" : return "2px 0";
99
+ case "text-h2" : return isMobileSized.value ? "1px 0" : "3px 0";
100
+ case "text-h3" : return "2px 0";
101
+ case "text-body" :
102
+ case "text-button" : return isMobileSized.value ? "2px 0" : "3px 0";;
103
+ case "text-overline" : return isMobileSized.value ? "3px 0" : "2px 0";
104
+ default : return sizeToVar(props.padding);
105
+ }
106
+ });
107
+
91
108
  return {
92
109
  style
93
110
  };
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <FSWrapGroup
3
- v-if="['wrap'].includes(props.variant)"
3
+ v-if="props.variant === 'wrap'"
4
4
  class="fs-option-group"
5
5
  :padding="props.padding"
6
6
  :gap="props.gap"
@@ -46,7 +46,7 @@
46
46
  />
47
47
  </FSWrapGroup>
48
48
  <FSSlideGroup
49
- v-else
49
+ v-else-if="props.variant === 'slide'"
50
50
  class="fs-option-group"
51
51
  :padding="props.padding"
52
52
  :gap="props.gap"
@@ -91,6 +91,54 @@
91
91
  v-bind="{ toggle, getVariant, getColor, getClass }"
92
92
  />
93
93
  </FSSlideGroup>
94
+ <FSRow
95
+ v-else
96
+ class="fs-option-group-full-width"
97
+ width="100%"
98
+ :padding="props.padding"
99
+ :gap="props.gap"
100
+ :style="style"
101
+ :wrap="false"
102
+ >
103
+ <template
104
+ v-if="props.values.length"
105
+ >
106
+ <template
107
+ v-if="!$slots.item"
108
+ >
109
+ <FSOptionItem
110
+ v-for="(item, index) in props.values"
111
+ :padding="props.optionPadding"
112
+ :editable="props.editable"
113
+ :prependIcon="item.prependIcon"
114
+ :appendIcon="item.appendIcon"
115
+ :variant="getVariant(item)"
116
+ :color="getColor(item)"
117
+ :class="getClass(item)"
118
+ :label="item.label"
119
+ :icon="item.icon"
120
+ :key="index"
121
+ @click="toggle(item)"
122
+ />
123
+ </template>
124
+ <template
125
+ v-else
126
+ >
127
+ <template
128
+ v-for="item in props.values"
129
+ >
130
+ <slot
131
+ name="item"
132
+ v-bind="{ item, toggle, getVariant, getColor, getClass }"
133
+ />
134
+ </template>
135
+ </template>
136
+ </template>
137
+ <slot
138
+ v-else
139
+ v-bind="{ toggle, getVariant, getColor, getClass }"
140
+ />
141
+ </FSRow>
94
142
  </template>
95
143
 
96
144
  <script lang="ts">
@@ -128,7 +176,7 @@ export default defineComponent({
128
176
  default: "4px"
129
177
  },
130
178
  variant: {
131
- type: String as PropType<"wrap" | "slide">,
179
+ type: String as PropType<"wrap" | "slide" | "fullwidth">,
132
180
  required: false,
133
181
  default: "wrap"
134
182
  },
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <router-link
3
+ :to="$props.to"
4
+ @auxclick="handleRoutingEvent($event, $props.to)"
5
+ @click="handleRoutingEvent($event, $props.to)"
6
+ v-bind="$attrs"
7
+ >
8
+ <template
9
+ v-for="(_, name) in $slots"
10
+ v-slot:[name]="slotData"
11
+ >
12
+ <slot
13
+ :name="name"
14
+ v-bind="{ ...slotData }"
15
+ />
16
+ </template>
17
+ </router-link>
18
+ </template>
19
+
20
+ <script lang="ts">
21
+ import { defineComponent, type PropType } from "vue";
22
+ import { type RouteLocation } from "vue-router";
23
+
24
+ import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
25
+
26
+ export default defineComponent({
27
+ name: "FSRouterLink",
28
+ props: {
29
+ to: {
30
+ type: Object as PropType<RouteLocation>,
31
+ required: true
32
+ }
33
+ },
34
+ setup() {
35
+ const { handleRoutingEvent } = useRouting();
36
+
37
+ return {
38
+ handleRoutingEvent
39
+ };
40
+ }
41
+ });
42
+ </script>
@@ -42,7 +42,7 @@
42
42
  <script lang="ts">
43
43
  import { computed, defineComponent, onMounted, onUnmounted, type PropType, ref, type StyleValue } from "vue";
44
44
 
45
- import { useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
45
+ import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
46
46
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
47
47
  import { sizeToVar } from "@dative-gpi/foundation-shared-components/utils";
48
48
  import { uuidv4 } from "@dative-gpi/bones-ui/tools/uuid";
@@ -59,6 +59,16 @@ export default defineComponent({
59
59
  FSButton
60
60
  },
61
61
  props: {
62
+ height: {
63
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
64
+ required: false,
65
+ default: "fit-content"
66
+ },
67
+ width: {
68
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
69
+ required: false,
70
+ default: "fit-content"
71
+ },
62
72
  padding: {
63
73
  type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
64
74
  required: false,
@@ -76,6 +86,7 @@ export default defineComponent({
76
86
  }
77
87
  },
78
88
  setup(props) {
89
+ const { isMobileSized } = useBreakpoints();
79
90
  const { getChildren } = useSlots();
80
91
  const { getColors } = useColors();
81
92
 
@@ -89,10 +100,13 @@ export default defineComponent({
89
100
  const elementId = `id${uuidv4()}`;
90
101
 
91
102
  const style = computed((): StyleValue => ({
92
- "--fs-group-padding" : sizeToVar(props.padding),
93
- "--fs-group-gap" : sizeToVar(props.gap),
94
- "--fs-group-color" : darks.soft,
95
- "--fs-group-hover-color" : darks.dark
103
+ "--fs-group-padding" : sizeToVar(props.padding),
104
+ "--fs-group-gap" : sizeToVar(props.gap),
105
+ "--fs-group-color" : darks.soft,
106
+ "--fs-group-hover-color": darks.dark,
107
+ "--fs-group-width" : sizeToVar(props.width),
108
+ "--fs-group-height" : sizeToVar(props.height),
109
+ "--fs-group-icon-size" : isMobileSized.value ? "20px" : "24px",
96
110
  }));
97
111
 
98
112
  const nextClasses = computed((): string[] => {
@@ -13,7 +13,7 @@
13
13
  <script lang="ts">
14
14
  import { computed, defineComponent, type PropType, type StyleValue } from "vue";
15
15
 
16
- import { useSlots } from "@dative-gpi/foundation-shared-components/composables";
16
+ import { useBreakpoints, useSlots } from "@dative-gpi/foundation-shared-components/composables";
17
17
 
18
18
  export default defineComponent({
19
19
  name: "FSSpan",
@@ -37,13 +37,20 @@ export default defineComponent({
37
37
  type: Boolean,
38
38
  required: false,
39
39
  default: true
40
+ },
41
+ align: {
42
+ type: String as PropType<"left" | "center" | "right">,
43
+ required: false,
44
+ default: "left"
40
45
  }
41
46
  },
42
47
  setup(props) {
48
+ const { fontStyles } = useBreakpoints();
43
49
  const { slots } = useSlots();
44
50
 
45
51
  const style = computed((): StyleValue => ({
46
- "--fs-span-line-clamp": props.lineClamp.toString()
52
+ "--fs-span-line-clamp": props.lineClamp.toString(),
53
+ ...fontStyles.value
47
54
  }));
48
55
 
49
56
  const classes = computed((): string[] => {
@@ -1,10 +1,58 @@
1
1
  <template>
2
- <FSCol
2
+ <FSRow
3
3
  width="hug"
4
+ align="top-left"
5
+ gap="16px"
6
+ padding="8px 0px"
7
+ :wrap="false"
4
8
  >
9
+ <v-switch
10
+ v-if="variant == 'left'"
11
+ class="fs-switch"
12
+ hide-details
13
+ inset
14
+ :validateOn="validateOn"
15
+ :rules="$props.rules"
16
+ :ripple="false"
17
+ :style="style"
18
+ :modelValue="$props.modelValue"
19
+ @update:modelValue="onToggle"
20
+ v-bind="$attrs"
21
+ />
22
+ <slot>
23
+ <FSCol
24
+ width="hug"
25
+ v-if="$props.label || $props.description || $slots.description"
26
+ >
27
+ <FSSpan
28
+ v-if="$props.label"
29
+ class="fs-switch-label"
30
+ :style="style"
31
+ :font="font"
32
+ @click.stop="onToggle"
33
+ >
34
+ {{ $props.label }}
35
+ </FSSpan>
36
+ <slot
37
+ name="description"
38
+ >
39
+ <FSSpan
40
+ v-if="$props.description"
41
+ class="fs-switch-description"
42
+ font="text-overline"
43
+ :style="style"
44
+ >
45
+ {{ $props.description }}
46
+ </FSSpan>
47
+ </slot>
48
+ <slot
49
+ name="footer"
50
+ />
51
+ </FSCol>
52
+ </slot>
5
53
  <FSRow
6
- width="hug"
7
- align="center-left"
54
+ v-if="variant == 'right'"
55
+ align="center-right"
8
56
  >
9
57
  <v-switch
10
58
  class="fs-switch"
@@ -18,31 +66,8 @@
18
66
  @update:modelValue="onToggle"
19
67
  v-bind="$attrs"
20
68
  />
21
- <slot>
22
- <FSSpan
23
- v-if="$props.label"
24
- class="fs-switch-label"
25
- :style="style"
26
- :font="font"
27
- @click.stop="onToggle"
28
- >
29
- {{ $props.label }}
30
- </FSSpan>
31
- </slot>
32
69
  </FSRow>
33
- <slot
34
- name="description"
35
- >
36
- <FSSpan
37
- v-if="$props.description"
38
- class="fs-switch-description"
39
- font="text-overline"
40
- :style="style"
41
- >
42
- {{ $props.description }}
43
- </FSSpan>
44
- </slot>
45
- </FSCol>
70
+ </FSRow>
46
71
  </template>
47
72
 
48
73
  <script lang="ts">
@@ -78,6 +103,11 @@ export default defineComponent({
78
103
  required: false,
79
104
  default: false
80
105
  },
106
+ variant: {
107
+ type: String as PropType<"left" | "right">,
108
+ required: false,
109
+ default: "left"
110
+ },
81
111
  color: {
82
112
  type: String as PropType<ColorBase>,
83
113
  required: false,
@@ -26,19 +26,6 @@
26
26
  {{ $props.label }}
27
27
  </FSSpan>
28
28
  </slot>
29
- <v-spacer
30
- v-if="$props.tag"
31
- />
32
- <slot
33
- name="tag"
34
- >
35
- <FSSpan
36
- v-if="$props.tag"
37
- class="fs-tab-tag"
38
- >
39
- {{ $props.tag }}
40
- </FSSpan>
41
- </slot>
42
29
  <slot
43
30
  name="append"
44
31
  >
@@ -49,6 +36,21 @@
49
36
  {{ $props.appendIcon }}
50
37
  </FSIcon>
51
38
  </slot>
39
+ <FSRow
40
+ align="center-right"
41
+ :wrap="false"
42
+ >
43
+ <slot
44
+ name="tag"
45
+ >
46
+ <FSSpan
47
+ v-if="$props.tag"
48
+ class="fs-tab-tag"
49
+ >
50
+ {{ $props.tag }}
51
+ </FSSpan>
52
+ </slot>
53
+ </FSRow>
52
54
  </FSRow>
53
55
  </slot>
54
56
  </v-tab>