@dative-gpi/foundation-shared-components 1.0.27 → 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 +15 -7
  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
@@ -3,19 +3,19 @@
3
3
  v-if="$props.href"
4
4
  :href="$props.href"
5
5
  :style="style"
6
+ :class="$props.class"
6
7
  @mouseover="hover = true"
7
8
  @mouseleave="hover = false"
8
9
  @mousedown="active = true"
9
10
  @mouseup="active = false"
10
11
  >
11
12
  <FSCard
13
+ height="100%"
14
+ width="100%"
12
15
  :borderRadius="$props.borderRadius"
13
16
  :borderStyle="$props.borderStyle"
14
17
  :padding="$props.padding"
15
- :height="$props.height"
16
- :width="$props.width"
17
18
  :class="classes"
18
- :style="style"
19
19
  v-bind="$attrs"
20
20
  >
21
21
  <template
@@ -40,23 +40,23 @@
40
40
  />
41
41
  </template>
42
42
  </a>
43
- <router-link
43
+ <FSRouterLink
44
44
  v-else-if="$props.to"
45
45
  :style="style"
46
46
  :to="$props.to"
47
+ :class="$props.class"
47
48
  @mouseover="hover = true"
48
49
  @mouseleave="hover = false"
49
50
  @mousedown="active = true"
50
51
  @mouseup="active = false"
51
52
  >
52
53
  <FSCard
54
+ height="100%"
55
+ width="100%"
53
56
  :borderRadius="$props.borderRadius"
54
57
  :borderStyle="$props.borderStyle"
55
58
  :padding="$props.padding"
56
- :height="$props.height"
57
- :width="$props.width"
58
59
  :class="classes"
59
- :style="style"
60
60
  v-bind="$attrs"
61
61
  >
62
62
  <template
@@ -80,11 +80,13 @@
80
80
  :color="loadColor"
81
81
  />
82
82
  </template>
83
- </router-link>
83
+ </FSRouterLink>
84
84
  <button
85
85
  v-else
86
86
  :type="$props.type"
87
87
  :style="style"
88
+ :class="$props.class"
89
+ :disabled="$props.load || !$props.editable"
88
90
  @click.stop="onClick"
89
91
  @mouseover="hover = true"
90
92
  @mouseleave="hover = false"
@@ -92,13 +94,12 @@
92
94
  @mouseup="active = false"
93
95
  >
94
96
  <FSCard
97
+ height="100%"
98
+ width="100%"
95
99
  :borderRadius="$props.borderRadius"
96
100
  :borderStyle="$props.borderStyle"
97
101
  :padding="$props.padding"
98
- :height="$props.height"
99
- :width="$props.width"
100
102
  :class="classes"
101
- :style="style"
102
103
  v-bind="$attrs"
103
104
  >
104
105
  <template
@@ -133,11 +134,13 @@ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-compone
133
134
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
134
135
  import { sizeToVar } from "@dative-gpi/foundation-shared-components/utils";
135
136
 
137
+ import FSRouterLink from "./FSRouterLink.vue";
136
138
  import FSCard from "./FSCard.vue";
137
139
 
138
140
  export default defineComponent({
139
141
  name: "FSClickable",
140
142
  components: {
143
+ FSRouterLink,
141
144
  FSCard
142
145
  },
143
146
  props: {
@@ -156,8 +159,13 @@ export default defineComponent({
156
159
  required: false,
157
160
  default: "0"
158
161
  },
162
+ class: {
163
+ type: [String, Array] as PropType<string | string[] | null>,
164
+ required: false,
165
+ default: null
166
+ },
159
167
  to: {
160
- type: [String, Object] as PropType<string | RouteLocation | null>,
168
+ type: Object as PropType<RouteLocation | null>,
161
169
  required: false,
162
170
  default: null
163
171
  },
@@ -30,7 +30,7 @@
30
30
  v-if="$props.slider"
31
31
  >
32
32
  <FSSlider
33
- :label="$tr('ui.clock.hours', 'Hours')"
33
+ :label="$tr('ui.common.hours', 'Hours')"
34
34
  :readonly="!$props.editable"
35
35
  :color="$props.color"
36
36
  :step="1"
@@ -39,7 +39,7 @@
39
39
  v-model="innerHours"
40
40
  />
41
41
  <FSSlider
42
- :label="$tr('ui.clock.minutes', 'Minutes')"
42
+ :label="$tr('ui.common.minutes', 'Minutes')"
43
43
  :readonly="!$props.editable"
44
44
  :color="$props.color"
45
45
  :step="1"
@@ -54,9 +54,9 @@
54
54
  <script lang="ts">
55
55
  import { computed, defineComponent, type PropType, ref, type StyleValue, watch } from "vue";
56
56
 
57
+ import { useBreakpoints, useColors } from "@dative-gpi/foundation-shared-components/composables";
57
58
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
58
- import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composables";
59
- import { useColors } from "@dative-gpi/foundation-shared-components/composables";
59
+ import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
60
60
 
61
61
  import FSSlider from "./FSSlider.vue";
62
62
  import FSCol from "./FSCol.vue";
@@ -98,7 +98,8 @@ export default defineComponent({
98
98
  },
99
99
  emits: ["update:modelValue"],
100
100
  setup(props, { emit }) {
101
- const { epochToLongDateFormat } = useAppTimeZone();
101
+ const { epochToLongDateFormat } = useDateFormat();
102
+ const { isMobileSized } = useBreakpoints();
102
103
  const { getColors } = useColors();
103
104
 
104
105
  const colors = computed(() => getColors(props.color));
@@ -116,7 +117,11 @@ export default defineComponent({
116
117
  "--fs-clock-field-background-color" : backgrounds.base,
117
118
  "--fs-clock-field-border-color" : lights.base,
118
119
  "--fs-clock-field-color" : lights.dark,
119
- "--fs-clock-field-active-border-color": lights.base
120
+ "--fs-clock-field-active-border-color": lights.base,
121
+ "--fs-font-font-size" : isMobileSized.value ? "12px" : "14px",
122
+ "--fs-font-line-height" : isMobileSized.value ? "16px" : "20px",
123
+ "--fs-font-letter-spacing" : isMobileSized.value ? "-0.36px" : "-0.42px",
124
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px"
120
125
  };
121
126
  }
122
127
  return {
@@ -124,7 +129,11 @@ export default defineComponent({
124
129
  "--fs-clock-field-background-color" : colors.value.light,
125
130
  "--fs-clock-field-border-color" : colors.value.base,
126
131
  "--fs-clock-field-color" : darks.base,
127
- "--fs-clock-field-active-border-color": colors.value.dark
132
+ "--fs-clock-field-active-border-color": colors.value.dark,
133
+ "--fs-font-font-size" : isMobileSized.value ? "12px" : "14px",
134
+ "--fs-font-line-height" : isMobileSized.value ? "16px" : "20px",
135
+ "--fs-font-letter-spacing" : isMobileSized.value ? "-0.36px" : "-0.42px",
136
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px"
128
137
  };
129
138
  });
130
139
 
@@ -3,15 +3,15 @@
3
3
  class="fs-color-icon"
4
4
  :color="$props.color"
5
5
  :border="false"
6
- :height="size"
7
- :width="size"
6
+ :height="actualSize"
7
+ :width="actualSize"
8
8
  >
9
9
  <FSRow
10
10
  align="center-center"
11
11
  >
12
12
  <FSIcon
13
13
  :color="$props.color"
14
- :size="$props.size"
14
+ :size="iconSize"
15
15
  >
16
16
  <slot />
17
17
  </FSIcon>
@@ -25,6 +25,8 @@ import { computed, defineComponent, type PropType } from "vue";
25
25
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
26
26
  import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
27
27
 
28
+ import { sizeToVar } from "../utils";
29
+
28
30
  import FSColor from "./FSColor.vue";
29
31
  import FSIcon from "./FSIcon.vue";
30
32
  import FSRow from "./FSRow.vue";
@@ -46,12 +48,17 @@ export default defineComponent({
46
48
  type: String as PropType<ColorBase>,
47
49
  required: false,
48
50
  default: ColorEnum.Dark
51
+ },
52
+ padding: {
53
+ type: [String, Number] as PropType<string | number>,
54
+ required: false,
55
+ default: "8px"
49
56
  }
50
57
  },
51
58
  setup(props) {
52
59
  const { isMobileSized } = useBreakpoints();
53
60
 
54
- const size = computed((): string[] | number[] | string | number | null => {
61
+ const actualSize = computed((): string[] | number[] | string | number | null => {
55
62
  switch(props.size) {
56
63
  case "s": return isMobileSized.value ? "18px" : "20px";
57
64
  case "m": return isMobileSized.value ? "20px" : "26px";
@@ -60,8 +67,19 @@ export default defineComponent({
60
67
  }
61
68
  });
62
69
 
70
+ const iconSize = computed((): string => {
71
+ switch(props.size) {
72
+ case "s":
73
+ case "m":
74
+ case "l":
75
+ return props.size;
76
+ default: return `calc(${sizeToVar(props.size)} - ${sizeToVar(props.padding)})`;
77
+ }
78
+ });
79
+
63
80
  return {
64
- size
81
+ actualSize,
82
+ iconSize
65
83
  };
66
84
  }
67
85
  });
@@ -4,6 +4,7 @@
4
4
  :class="classes"
5
5
  :modelValue="$props.modelValue"
6
6
  @update:modelValue="$emit('update:modelValue', $event)"
7
+ :width="$props.width"
7
8
  v-bind="$attrs"
8
9
  >
9
10
  <slot>
@@ -67,7 +68,7 @@ export default defineComponent({
67
68
  default: false
68
69
  }
69
70
  },
70
- emits: ["update:modelValue"],
71
+ emits: ["click", "update:modelValue"],
71
72
  setup() {
72
73
  const { isExtraSmall } = useBreakpoints();
73
74
 
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <FSCard
3
- padding="24px 8px 24px 24px"
3
+ :padding="['24px', '16px', '16px 12px']"
4
4
  gap="24px"
5
5
  :class="$props.cardClasses"
6
6
  :color="$props.color"
@@ -9,9 +9,7 @@
9
9
  <template
10
10
  #header
11
11
  >
12
- <FSCol
13
- padding="0 16px 0 0"
14
- >
12
+ <FSCol>
15
13
  <FSRow
16
14
  align="center-left"
17
15
  :wrap="false"
@@ -21,13 +19,16 @@
21
19
  >
22
20
  {{ $props.title }}
23
21
  </FSText>
24
- <v-spacer />
25
- <FSButton
26
- icon="mdi-close"
27
- variant="icon"
28
- :color="ColorEnum.Dark"
29
- @click="$emit('update:modelValue', false)"
30
- />
22
+ <FSRow
23
+ align="center-right"
24
+ >
25
+ <FSButton
26
+ icon="mdi-close"
27
+ variant="icon"
28
+ :color="ColorEnum.Dark"
29
+ @click="$emit('update:modelValue', false)"
30
+ />
31
+ </FSRow>
31
32
  </FSRow>
32
33
  <FSText
33
34
  v-if="$props.subtitle"
@@ -11,12 +11,14 @@
11
11
  #body
12
12
  >
13
13
  <FSDialogFormBody
14
+ ref="bodyRef"
14
15
  v-bind="$attrs"
15
16
  :subtitle="$props.subtitle"
16
17
  :validation="$props.validation"
17
18
  @click:cancelButton="$emit('update:modelValue', false)"
18
19
  @click:submitButton="$emit('click:submitButton')"
19
20
  @click:validateButton="onValidate"
21
+ @update:isValidForm="isValidForm = $event"
20
22
  >
21
23
  <template
22
24
  v-for="(_, name) in $slots"
@@ -33,8 +35,8 @@
33
35
  </template>
34
36
 
35
37
  <script lang="ts">
36
- import type { PropType} from "vue";
37
- import { defineComponent } from "vue";
38
+ import type { PropType } from "vue";
39
+ import { defineComponent, ref } from "vue";
38
40
 
39
41
  import FSDialogFormBody from "./FSDialogFormBody.vue";
40
42
  import FSDialog from "./FSDialog.vue";
@@ -74,6 +76,8 @@ export default defineComponent({
74
76
  },
75
77
  emits: ["update:modelValue", "click:validateButton", "click:submitButton"],
76
78
  setup(props, { emit }) {
79
+ const bodyRef = ref<typeof FSDialogFormBody | null>(null);
80
+ const isValidForm = ref(false);
77
81
 
78
82
  const onClose = () => {
79
83
  if (props.validation) {
@@ -87,8 +91,24 @@ export default defineComponent({
87
91
  emit("update:modelValue", false);
88
92
  };
89
93
 
94
+ const resetFormValidation = () => {
95
+ if (bodyRef.value) {
96
+ bodyRef.value.resetFormValidation();
97
+ }
98
+ };
99
+
100
+ const validateForm = async () => {
101
+ if (bodyRef.value) {
102
+ return await bodyRef.value.validateForm();
103
+ }
104
+ };
105
+
90
106
  return {
107
+ resetFormValidation,
108
+ validateForm,
109
+ isValidForm,
91
110
  onValidate,
111
+ bodyRef,
92
112
  onClose
93
113
  };
94
114
  }
@@ -6,22 +6,19 @@
6
6
  ref="formRef"
7
7
  :variant="$props.variant"
8
8
  @submit="onSubmit"
9
- v-model="valid"
9
+ v-model="isValidForm"
10
10
  >
11
11
  <FSCol
12
12
  gap="24px"
13
13
  >
14
14
  <FSFadeOut
15
- :height="height"
16
- padding="0 8px 0 0"
15
+ :maxHeight="maxHeight"
17
16
  >
18
17
  <slot
19
18
  name="body"
20
19
  />
21
20
  </FSFadeOut>
22
- <FSRow
23
- padding="0 16px 0 0"
24
- >
21
+ <FSRow>
25
22
  <slot
26
23
  name="left-footer"
27
24
  />
@@ -31,6 +28,7 @@
31
28
  :wrap="false"
32
29
  >
33
30
  <FSButton
31
+ v-if="$props.showCancelButton"
34
32
  :prependIcon="$props.cancelButtonPrependIcon"
35
33
  :appendIcon="$props.cancelButtonAppendIcon"
36
34
  :variant="$props.cancelButtonVariant"
@@ -39,6 +37,7 @@
39
37
  @click="() => $emit('click:cancelButton', false)"
40
38
  />
41
39
  <FSButton
40
+ v-if="$props.showSubmitButton"
42
41
  type="submit"
43
42
  :prependIcon="$props.submitButtonPrependIcon"
44
43
  :appendIcon="$props.submitButtonAppendIcon"
@@ -60,16 +59,13 @@
60
59
  gap="24px"
61
60
  >
62
61
  <FSFadeOut
63
- :height="height"
64
- padding="0 8px 0 0"
62
+ :maxHeight="maxHeight"
65
63
  >
66
64
  <slot
67
65
  name="validation"
68
66
  />
69
67
  </FSFadeOut>
70
- <FSRow
71
- padding="0 16px 0 0"
72
- >
68
+ <FSRow>
73
69
  <slot
74
70
  name="left-footer"
75
71
  />
@@ -93,7 +89,7 @@
93
89
  </template>
94
90
 
95
91
  <script lang="ts">
96
- import { computed, defineComponent, type PropType, ref } from "vue";
92
+ import { computed, defineComponent, type PropType, ref, watch } from "vue";
97
93
 
98
94
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
99
95
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -118,16 +114,16 @@ export default defineComponent({
118
114
  required: false,
119
115
  default: "submit"
120
116
  },
121
- modelValue: {
122
- type: Boolean,
123
- required: false,
124
- default: false
125
- },
126
117
  subtitle: {
127
118
  type: String as PropType<string | null>,
128
119
  required: false,
129
120
  default: null
130
121
  },
122
+ showCancelButton: {
123
+ type: Boolean,
124
+ required: false,
125
+ default: true
126
+ },
131
127
  cancelButtonPrependIcon: {
132
128
  type: String as PropType<string | null>,
133
129
  required: false,
@@ -153,6 +149,11 @@ export default defineComponent({
153
149
  required: false,
154
150
  default: ColorEnum.Light
155
151
  },
152
+ showSubmitButton: {
153
+ type: Boolean,
154
+ required: false,
155
+ default: true
156
+ },
156
157
  submitButtonPrependIcon: {
157
158
  type: String as PropType<string | null>,
158
159
  required: false,
@@ -219,36 +220,48 @@ export default defineComponent({
219
220
  default: true
220
221
  }
221
222
  },
222
- emits: ["click:cancelButton", "click:submitButton", "click:validateButton"],
223
+ emits: ["click:cancelButton", "click:submitButton", "click:validateButton", "update:isValidForm"],
223
224
  setup(props, { emit }) {
224
225
  const { isMobileSized } = useBreakpoints();
225
226
  const { $tr } = useTranslationsProvider();
226
227
 
227
- const formRef = ref<HTMLElement | null>(null);
228
- const valid = ref(false);
228
+ const formRef = ref<typeof FSForm | null>(null);
229
+ const isValidForm = ref(null);
229
230
 
230
- const height = computed(() => {
231
+ const maxHeight = computed(() => {
231
232
  const other = 24 + 24 // Paddings
232
233
  + (isMobileSized.value ? 24 : 32) + 24 // Title
233
- + (props.subtitle ? (isMobileSized.value ? 14 : 16) + 8 : 0) // Subtitle
234
+ + (props.subtitle ? (isMobileSized.value ? 16 : 20) + 8 : 0) // Subtitle
234
235
  + (isMobileSized.value ? 36 : 40) + 24; // Footer
235
- return `calc(100vh - 40px - ${other}px)`;
236
+ return `calc(100vh - 42px - ${other}px)`;
236
237
  });
237
238
 
238
239
  const cancelLabel = computed(() => {
239
- return props.cancelButtonLabel ?? $tr("ui.button.cancel", "Cancel");
240
+ return props.cancelButtonLabel ?? $tr("ui.common.cancel", "Cancel");
240
241
  });
241
242
 
242
243
  const submitLabel = computed(() => {
243
- return props.submitButtonLabel ?? $tr("ui.button.submit", "Submit");
244
+ return props.submitButtonLabel ?? $tr("ui.common.submit", "Submit");
244
245
  });
245
246
 
246
247
  const validateLabel = computed(() => {
247
- return props.validateButtonLabel ?? $tr("ui.button.validate", "Done");
248
+ return props.validateButtonLabel ?? $tr("ui.common.validate", "Validate");
248
249
  });
249
250
 
251
+ const resetFormValidation = () => {
252
+ if (formRef.value) {
253
+ formRef.value.resetValidation();
254
+ }
255
+ };
256
+
257
+ const validateForm = async () => {
258
+ if (formRef.value) {
259
+ return await formRef.value.validate();
260
+ }
261
+ };
262
+
250
263
  const onSubmit = () => {
251
- if (valid.value) {
264
+ if (isValidForm.value) {
252
265
  emit("click:submitButton");
253
266
  }
254
267
  };
@@ -256,17 +269,23 @@ export default defineComponent({
256
269
  const onValidate = () => {
257
270
  emit("click:validateButton");
258
271
  };
272
+
273
+ watch(() => isValidForm.value, () => {
274
+ emit("update:isValidForm", isValidForm.value);
275
+ }, { immediate: true });
259
276
 
260
277
  return {
278
+ resetFormValidation,
261
279
  validateLabel,
280
+ validateForm,
281
+ isValidForm,
262
282
  cancelLabel,
263
283
  submitLabel,
264
- ColorEnum,
265
- formRef,
266
- height,
267
- valid,
268
284
  onValidate,
269
- onSubmit
285
+ ColorEnum,
286
+ maxHeight,
287
+ onSubmit,
288
+ formRef
270
289
  };
271
290
  }
272
291
  });