@dative-gpi/foundation-shared-components 1.0.56 → 1.0.58-groupings

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (297) hide show
  1. package/assets/images/map/snow.png +0 -0
  2. package/components/FSAccordionPanel.vue +40 -21
  3. package/components/FSBreadcrumbs.vue +21 -12
  4. package/components/FSButton.vue +16 -16
  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/FSColorIcon.vue +23 -5
  16. package/components/FSDialog.vue +2 -1
  17. package/components/FSDialogContent.vue +12 -11
  18. package/components/FSDialogForm.vue +22 -2
  19. package/components/FSDialogFormBody.vue +50 -31
  20. package/components/FSDialogMenu.vue +17 -8
  21. package/components/FSDialogMultiFormBody.vue +79 -56
  22. package/components/FSDialogRemove.vue +7 -8
  23. package/components/FSDialogSubmit.vue +20 -11
  24. package/components/FSEditImage.vue +1 -1
  25. package/components/FSEditImageUI.vue +20 -10
  26. package/components/FSFadeOut.vue +53 -21
  27. package/components/FSForm.vue +10 -8
  28. package/components/FSGrid.vue +1 -1
  29. package/components/FSIcon.vue +4 -3
  30. package/components/FSIconCard.vue +68 -12
  31. package/components/FSImage.vue +9 -2
  32. package/components/FSImageUI.vue +8 -15
  33. package/components/FSInformationsMenu.vue +142 -0
  34. package/components/FSInstantPicker.vue +269 -0
  35. package/components/FSLink.vue +25 -9
  36. package/components/FSLoader.vue +28 -10
  37. package/components/FSMenu.vue +47 -0
  38. package/components/FSOptionGroup.vue +57 -9
  39. package/components/FSOptionItem.vue +4 -4
  40. package/components/FSPagination.vue +1 -1
  41. package/components/FSPlayButtons.vue +72 -0
  42. package/components/FSProgressBar.vue +94 -0
  43. package/components/FSRadio.vue +5 -4
  44. package/components/FSRadioGroup.vue +3 -3
  45. package/components/FSRouterLink.vue +42 -0
  46. package/components/FSSlideGroup.vue +19 -5
  47. package/components/FSSlider.vue +6 -5
  48. package/components/FSSpan.vue +12 -7
  49. package/components/FSSwitch.vue +47 -21
  50. package/components/FSTab.vue +15 -13
  51. package/components/FSTabs.vue +32 -7
  52. package/components/FSTag.vue +16 -5
  53. package/components/FSTagGroup.vue +4 -4
  54. package/components/FSText.vue +11 -7
  55. package/components/FSToggleSet.vue +7 -7
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +50 -37
  59. package/components/agenda/FSAgendaDialogCalendar.vue +2 -2
  60. package/components/agenda/FSAgendaHeader.vue +35 -10
  61. package/components/agenda/FSAgendaHorizontalEvent.vue +18 -6
  62. package/components/agenda/FSAgendaHoursRow.vue +48 -8
  63. package/components/agenda/FSAgendaVerticalEvent.vue +1 -1
  64. package/components/agenda/FSDayAgenda.vue +1 -2
  65. package/components/agenda/FSMonthAgenda.vue +3 -9
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +7 -13
  68. package/components/autocompletes/FSAutoCompleteAddress.vue +25 -20
  69. package/components/autocompletes/FSAutocompleteLanguage.vue +7 -1
  70. package/components/autocompletes/FSAutocompleteTimeZone.vue +7 -1
  71. package/components/buttons/FSButtonAdd.vue +1 -1
  72. package/components/buttons/FSButtonAddLabel.vue +1 -1
  73. package/components/buttons/FSButtonCancel.vue +1 -1
  74. package/components/buttons/FSButtonCancelLabel.vue +1 -1
  75. package/components/buttons/FSButtonCheckbox.vue +4 -4
  76. package/components/buttons/FSButtonCopy.vue +1 -1
  77. package/components/buttons/FSButtonCopyLabel.vue +1 -1
  78. package/components/buttons/FSButtonDuplicate.vue +1 -1
  79. package/components/buttons/FSButtonDuplicateLabel.vue +1 -1
  80. package/components/buttons/FSButtonEdit.vue +1 -1
  81. package/components/buttons/FSButtonEditLabel.vue +1 -1
  82. package/components/buttons/FSButtonFile.vue +1 -1
  83. package/components/buttons/FSButtonFileLabel.vue +1 -1
  84. package/components/buttons/FSButtonNext.vue +1 -1
  85. package/components/buttons/FSButtonNextLabel.vue +1 -1
  86. package/components/buttons/FSButtonPrevious.vue +1 -1
  87. package/components/buttons/FSButtonPreviousLabel.vue +1 -1
  88. package/components/buttons/FSButtonRedo.vue +1 -1
  89. package/components/buttons/FSButtonRedoLabel.vue +1 -1
  90. package/components/buttons/FSButtonRemove.vue +1 -1
  91. package/components/buttons/FSButtonRemoveLabel.vue +1 -1
  92. package/components/buttons/FSButtonSave.vue +1 -1
  93. package/components/buttons/FSButtonSaveLabel.vue +1 -1
  94. package/components/buttons/FSButtonSearch.vue +1 -1
  95. package/components/buttons/FSButtonSearchLabel.vue +1 -1
  96. package/components/buttons/FSButtonUndo.vue +1 -1
  97. package/components/buttons/FSButtonUndoLabel.vue +1 -1
  98. package/components/buttons/FSButtonUpdate.vue +1 -1
  99. package/components/buttons/FSButtonUpdateLabel.vue +1 -1
  100. package/components/buttons/FSButtonValidate.vue +1 -1
  101. package/components/buttons/FSButtonValidateLabel.vue +1 -1
  102. package/components/calendar/FSSimpleCalendar.vue +145 -0
  103. package/components/calendar/FSSimpleCalendarHeader.vue +60 -0
  104. package/components/calendar/FSSimpleMonthSelector.vue +138 -0
  105. package/components/deviceOrganisations/FSConnectivity.vue +16 -4
  106. package/components/deviceOrganisations/FSConnectivityCard.vue +17 -45
  107. package/components/deviceOrganisations/FSStatus.vue +16 -4
  108. package/components/deviceOrganisations/FSStatusCard.vue +33 -59
  109. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  110. package/components/deviceOrganisations/FSStatusesCarousel.vue +1 -0
  111. package/components/deviceOrganisations/FSStatusesRow.vue +8 -2
  112. package/components/deviceOrganisations/FSWorstAlert.vue +37 -42
  113. package/components/deviceOrganisations/FSWorstAlertCard.vue +35 -84
  114. package/components/fields/FSAutocompleteField.vue +85 -82
  115. package/components/fields/FSAutocompleteTag.vue +1 -1
  116. package/components/fields/FSBaseField.vue +54 -30
  117. package/components/fields/FSClosableSearchField.vue +83 -0
  118. package/components/fields/FSColorField.vue +48 -44
  119. package/components/fields/FSCommentField.vue +28 -16
  120. package/components/fields/FSDateField.vue +13 -10
  121. package/components/fields/FSDateRangeField.vue +6 -5
  122. package/components/fields/FSDateTimeField.vue +14 -11
  123. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  124. package/components/fields/FSDateTimeRangeField.vue +23 -115
  125. package/components/fields/FSEntityFieldUI.vue +36 -19
  126. package/components/fields/FSGradientField.vue +5 -5
  127. package/components/fields/FSIconField.vue +16 -9
  128. package/components/fields/FSMagicConfigField.vue +15 -7
  129. package/components/fields/FSMagicField.vue +7 -2
  130. package/components/fields/FSNumberField.vue +9 -4
  131. package/components/fields/FSPasswordField.vue +7 -7
  132. package/components/fields/FSRichTextField.vue +78 -58
  133. package/components/fields/FSSearchField.vue +9 -115
  134. package/components/fields/FSSelectField.vue +69 -71
  135. package/components/fields/FSTagField.vue +10 -10
  136. package/components/fields/FSTermField.vue +72 -47
  137. package/components/fields/FSTextArea.vue +17 -11
  138. package/components/fields/FSTextField.vue +15 -10
  139. package/components/fields/FSTimeField.vue +14 -10
  140. package/components/fields/FSTimeRangeField.vue +310 -0
  141. package/components/fields/FSTimeStepField.vue +5 -5
  142. package/components/fields/FSTranslateField.vue +10 -10
  143. package/components/fields/FSTranslateRichTextField.vue +41 -20
  144. package/components/fields/FSTranslateTextArea.vue +10 -10
  145. package/components/fields/FSTreeViewField.vue +15 -13
  146. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  147. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  148. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  149. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  150. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  151. package/components/lists/FSDataIteratorItem.vue +23 -67
  152. package/components/lists/FSDataTableUI.vue +220 -137
  153. package/components/lists/FSDraggable.vue +2 -2
  154. package/components/lists/FSFilterButton.vue +14 -16
  155. package/components/lists/FSHeaderButton.vue +11 -9
  156. package/components/lists/FSHiddenButton.vue +9 -9
  157. package/components/lists/FSLoadDataTable.vue +10 -7
  158. package/components/lists/FSSimpleList.vue +96 -102
  159. package/components/lists/FSSimpleListItem.vue +131 -0
  160. package/components/map/FSMap.vue +146 -158
  161. package/components/map/FSMapFeatureGroup.vue +7 -1
  162. package/components/map/FSMapLayerButton.vue +4 -3
  163. package/components/map/FSMapMarker.vue +70 -48
  164. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  165. package/components/map/FSMapOverlay.vue +44 -24
  166. package/components/map/FSMapPolygon.vue +16 -4
  167. package/components/map/FSMapTileLayer.vue +26 -9
  168. package/components/map/layers.ts +0 -0
  169. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  170. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  171. package/components/selects/FSSelectDateSetting.vue +2 -2
  172. package/components/selects/FSSelectDays.vue +8 -8
  173. package/components/selects/FSSelectListMode.vue +2 -2
  174. package/components/selects/FSSelectMapLayer.vue +68 -0
  175. package/components/selects/FSSelectMonths.vue +13 -13
  176. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  177. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  178. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  179. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  180. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  181. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  182. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  183. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  184. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  185. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  186. package/components/tiles/FSAlertTileUI.vue +90 -0
  187. package/components/tiles/FSChartTileUI.vue +61 -52
  188. package/components/tiles/FSCommentTileUI.vue +38 -13
  189. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  190. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  191. package/components/tiles/FSDeviceOrganisationTileUI.vue +6 -6
  192. package/components/tiles/FSGroupTileUI.vue +58 -110
  193. package/components/tiles/FSGroupingTileUI.vue +115 -0
  194. package/components/tiles/FSLoadTile.vue +16 -10
  195. package/components/tiles/FSLocationTileUI.vue +63 -55
  196. package/components/tiles/FSModelTileUI.vue +5 -46
  197. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  198. package/components/tiles/FSSimpleTileUI.vue +34 -29
  199. package/components/tiles/FSTile.vue +46 -39
  200. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  201. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  202. package/components/views/FSBaseView.vue +64 -0
  203. package/components/views/FSEntityView.vue +12 -140
  204. package/components/views/FSSimpleView.vue +29 -0
  205. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  206. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  207. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  208. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  209. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  210. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  211. package/composables/index.ts +1 -0
  212. package/composables/useAddress.ts +40 -8
  213. package/composables/useBreakpoints.ts +40 -4
  214. package/composables/useColors.ts +16 -7
  215. package/composables/useMagicFieldProvider.ts +1 -0
  216. package/composables/useMapLayers.ts +62 -0
  217. package/composables/useSlots.ts +2 -1
  218. package/models/colors.ts +2 -1
  219. package/models/deviceAlerts.ts +1 -0
  220. package/models/magicFields.ts +1 -0
  221. package/models/map.ts +12 -10
  222. package/models/rules.ts +6 -3
  223. package/models/tables.ts +5 -2
  224. package/models/variableNode.ts +8 -5
  225. package/package.json +5 -5
  226. package/styles/components/fs_agenda.scss +4 -0
  227. package/styles/components/fs_agenda_event.scss +1 -1
  228. package/styles/components/fs_agenda_hours_row.scss +0 -8
  229. package/styles/components/fs_autocomplete_field.scss +0 -13
  230. package/styles/components/fs_breadcrumbs.scss +18 -36
  231. package/styles/components/fs_button.scss +7 -5
  232. package/styles/components/fs_calendar.scss +1 -0
  233. package/styles/components/fs_card.scss +9 -0
  234. package/styles/components/fs_chip.scss +13 -7
  235. package/styles/components/fs_clickable.scss +16 -23
  236. package/styles/components/fs_clock.scss +0 -10
  237. package/styles/components/fs_col.scss +1 -1
  238. package/styles/components/fs_color_field.scss +1 -4
  239. package/styles/components/fs_data_table.scss +6 -9
  240. package/styles/components/fs_dialog.scss +4 -10
  241. package/styles/components/fs_dialog_menu.scss +4 -2
  242. package/styles/components/fs_draggable.scss +0 -5
  243. package/styles/components/fs_edit_image.scss +8 -0
  244. package/styles/components/fs_fade_out.scss +10 -2
  245. package/styles/components/fs_filter_button.scss +1 -6
  246. package/styles/components/fs_hidden_button.scss +2 -7
  247. package/styles/components/fs_image_card.scss +6 -4
  248. package/styles/components/fs_magic_config_field.scss +1 -2
  249. package/styles/components/fs_map.scss +57 -17
  250. package/styles/components/fs_meta_field.scss +3 -5
  251. package/styles/components/fs_option_group.scss +15 -5
  252. package/styles/components/fs_password_field.scss +4 -2
  253. package/styles/components/fs_progress_bar.scss +14 -0
  254. package/styles/components/fs_radio.scss +0 -11
  255. package/styles/components/fs_rich_text_field.scss +1 -10
  256. package/styles/components/fs_select_field.scss +4 -13
  257. package/styles/components/fs_slide_group.scss +7 -0
  258. package/styles/components/fs_span.scss +13 -5
  259. package/styles/components/fs_status_rich_card.scss +6 -0
  260. package/styles/components/fs_switch.scss +1 -0
  261. package/styles/components/fs_tabs.scss +19 -33
  262. package/styles/components/fs_tag.scss +8 -22
  263. package/styles/components/fs_text_area.scss +2 -21
  264. package/styles/components/fs_tile.scss +0 -19
  265. package/styles/components/fs_window.scss +3 -1
  266. package/styles/components/fs_wrap_group.scss +7 -0
  267. package/styles/components/index.scss +2 -6
  268. package/styles/globals/index.scss +1 -5
  269. package/styles/globals/overrides.scss +28 -61
  270. package/styles/globals/scrollbars.scss +8 -0
  271. package/styles/globals/text_fonts.scss +18 -66
  272. package/styles/globals/touchscreen.scss +2 -2
  273. package/tools/alertsTools.ts +87 -12
  274. package/tools/chartsTools.ts +143 -16
  275. package/tools/index.ts +3 -1
  276. package/tools/reportsTools.ts +38 -0
  277. package/tools/timeRangeTools.ts +125 -0
  278. package/utils/badge.ts +9 -5
  279. package/utils/filter.ts +7 -4
  280. package/utils/index.ts +1 -0
  281. package/utils/leafletMarkers.ts +4 -4
  282. package/utils/operations.ts +108 -0
  283. package/utils/sort.ts +2 -2
  284. package/utils/time.ts +16 -16
  285. package/components/fields/FSTimeSlotField.vue +0 -250
  286. package/components/views/FSEntityHeader.vue +0 -350
  287. package/components/views/FSListHeader.vue +0 -83
  288. package/components/views/FSListView.vue +0 -83
  289. package/components/views/FSSkeletonView.vue +0 -100
  290. package/styles/components/fs_data_iterator_item.scss +0 -33
  291. package/styles/components/fs_icon_field.scss +0 -12
  292. package/styles/components/fs_search_field.scss +0 -3
  293. package/styles/components/fs_tag_field.scss +0 -8
  294. package/styles/components/fs_time_field.scss +0 -12
  295. package/styles/components/fs_timeslot_field.scss +0 -12
  296. package/styles/globals/breakpoints.scss +0 -20
  297. package/styles/globals/fixes.scss +0 -5
@@ -26,6 +26,11 @@ export default defineComponent({
26
26
  required: false,
27
27
  default: "fill"
28
28
  },
29
+ maxWidth: {
30
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
31
+ required: false,
32
+ default: null
33
+ },
29
34
  padding: {
30
35
  type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
31
36
  required: false,
@@ -49,11 +54,12 @@ export default defineComponent({
49
54
  },
50
55
  setup(props) {
51
56
  const style = computed((): StyleValue => ({
52
- "--fs-col-overflow": props.overflow,
53
- "--fs-col-padding" : sizeToVar(props.padding),
54
- "--fs-col-gap" : sizeToVar(props.gap),
55
- "--fs-col-width" : sizeToVar(props.width),
56
- "--fs-col-height" : sizeToVar(props.height)
57
+ "--fs-col-overflow" : props.overflow,
58
+ "--fs-col-padding" : sizeToVar(props.padding),
59
+ "--fs-col-gap" : sizeToVar(props.gap),
60
+ "--fs-col-width" : sizeToVar(props.width),
61
+ "--fs-col-max-width" : props.maxWidth ? sizeToVar(props.maxWidth) : "100%",
62
+ "--fs-col-height" : sizeToVar(props.height),
57
63
  }));
58
64
 
59
65
  const classes = computed((): string[] => {
@@ -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
- padding="0 8px 0 0"
16
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,12 +37,13 @@
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"
45
44
  :variant="$props.submitButtonVariant"
46
45
  :color="$props.submitButtonColor"
47
- :editable="$props.editable"
46
+ :disabled="$props.disabled"
48
47
  :label="submitLabel"
49
48
  :load="$props.load"
50
49
  />
@@ -60,16 +59,13 @@
60
59
  gap="24px"
61
60
  >
62
61
  <FSFadeOut
63
- padding="0 8px 0 0"
64
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,
@@ -213,42 +214,54 @@ export default defineComponent({
213
214
  required: false,
214
215
  default: false
215
216
  },
216
- editable: {
217
+ disabled: {
217
218
  type: Boolean,
218
219
  required: false,
219
- default: true
220
+ default: false
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
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,
284
+ onValidate,
264
285
  ColorEnum,
265
286
  maxHeight,
266
- formRef,
267
- valid,
268
- onValidate,
269
- onSubmit
287
+ onSubmit,
288
+ formRef
270
289
  };
271
290
  }
272
291
  });
@@ -5,9 +5,8 @@
5
5
  v-bind="$attrs"
6
6
  >
7
7
  <FSCard
8
- width="calc(100vw - 48px)"
9
- padding="8px"
10
- gap="24px"
8
+ :padding="$props.padding"
9
+ :gap="$props.gap"
11
10
  :color="$props.color"
12
11
  :class="classes"
13
12
  >
@@ -38,11 +37,21 @@ export default defineComponent({
38
37
  FSCard
39
38
  },
40
39
  props: {
41
- cardClasses: {
40
+ classes: {
42
41
  type: [Array, String] as PropType<string[] | string | null>,
43
42
  required: false,
44
43
  default: null
45
44
  },
45
+ padding: {
46
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
47
+ required: false,
48
+ default: "8px"
49
+ },
50
+ gap: {
51
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
52
+ required: false,
53
+ default: "24px"
54
+ },
46
55
  modelValue: {
47
56
  type: Boolean,
48
57
  required: false,
@@ -60,12 +69,12 @@ export default defineComponent({
60
69
 
61
70
  const classes = computed((): string[] => {
62
71
  const classNames = ["fs-dialog-menu"];
63
- if (props.cardClasses) {
64
- if (Array.isArray(props.cardClasses)) {
65
- classNames.push(...props.cardClasses);
72
+ if (props.classes) {
73
+ if (Array.isArray(props.classes)) {
74
+ classNames.push(...props.classes);
66
75
  }
67
76
  else {
68
- classNames.push(props.cardClasses);
77
+ classNames.push(props.classes);
69
78
  }
70
79
  }
71
80
  return classNames;
@@ -1,60 +1,68 @@
1
1
  <template>
2
- <FSWindow
3
- width="100%"
4
- :modelValue="currentStep - 1"
2
+ <FSCol
3
+ gap="24px"
5
4
  >
6
- <FSForm
7
- v-for="(step, index) in $props.steps"
8
- :variant="$props.variant"
9
- :key="index"
10
- @submit="onSubmit"
11
- v-model="valid"
5
+ <FSPagination
6
+ width="calc(100% - 16px)"
7
+ :pages="$props.steps"
8
+ :modelValue="currentStep - 1"
9
+ />
10
+ <FSWindow
11
+ width="100%"
12
+ :modelValue="currentStep - 1"
12
13
  >
13
- <FSCol
14
- gap="24px"
14
+ <FSForm
15
+ v-for="(step, index) in $props.steps"
16
+ :variant="$props.variant"
17
+ :key="index"
18
+ @submit="onSubmit"
19
+ v-model="valid"
15
20
  >
16
- <FSFadeOut
17
- padding="0 8px 0 0"
18
- :maxHeight="maxHeight"
21
+ <FSCol
22
+ gap="24px"
19
23
  >
20
- <slot
21
- :name="`step-${step}`"
22
- />
23
- </FSFadeOut>
24
- <FSRow
25
- padding="0 16px 0 0"
26
- >
27
- <slot
28
- name="left-footer"
29
- />
30
- <FSRow
31
- class="fs-dialog-actions"
32
- align="top-right"
33
- :wrap="false"
24
+ <FSFadeOut
25
+ :maxHeight="maxHeight"
34
26
  >
35
- <FSButton
36
- :prependIcon="$props.cancelButtonPrependIcon"
37
- :appendIcon="$props.cancelButtonAppendIcon"
38
- :variant="$props.cancelButtonVariant"
39
- :color="$props.cancelButtonColor"
40
- :label="previousButtonLabel"
41
- @click="onPrevious()"
27
+ <slot
28
+ :name="`step-${step}`"
42
29
  />
43
- <FSButton
44
- type="submit"
45
- :prependIcon="$props.submitButtonPrependIcon"
46
- :appendIcon="$props.submitButtonAppendIcon"
47
- :color="$props.submitButtonColor"
48
- :variant="nextButtonVariant"
49
- :editable="$props.editable"
50
- :label="nextButtonLabel"
51
- :load="$props.load"
30
+ </FSFadeOut>
31
+ <FSRow>
32
+ <slot
33
+ name="left-footer"
52
34
  />
35
+ <FSRow
36
+ class="fs-dialog-actions"
37
+ align="top-right"
38
+ :wrap="false"
39
+ >
40
+ <FSButton
41
+ v-if="$props.showCancelButton || currentStep > 1"
42
+ :prependIcon="$props.cancelButtonPrependIcon"
43
+ :appendIcon="$props.cancelButtonAppendIcon"
44
+ :variant="$props.cancelButtonVariant"
45
+ :color="$props.cancelButtonColor"
46
+ :label="previousButtonLabel"
47
+ @click="onPrevious()"
48
+ />
49
+ <FSButton
50
+ v-if="$props.showSubmitButton || currentStep < $props.steps"
51
+ type="submit"
52
+ :prependIcon="$props.submitButtonPrependIcon"
53
+ :appendIcon="$props.submitButtonAppendIcon"
54
+ :color="$props.submitButtonColor"
55
+ :variant="nextButtonVariant"
56
+ :disabled="$props.disabled"
57
+ :label="nextButtonLabel"
58
+ :load="$props.load"
59
+ />
60
+ </FSRow>
53
61
  </FSRow>
54
- </FSRow>
55
- </FSCol>
56
- </FSForm>
57
- </FSWindow>
62
+ </FSCol>
63
+ </FSForm>
64
+ </FSWindow>
65
+ </FSCol>
58
66
  </template>
59
67
 
60
68
  <script lang="ts">
@@ -64,17 +72,21 @@ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui
64
72
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
65
73
  import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
66
74
 
75
+ import FSPagination from "./FSPagination.vue";
67
76
  import FSFadeOut from "./FSFadeOut.vue";
68
77
  import FSButton from "./FSButton.vue";
69
78
  import FSForm from "./FSForm.vue";
79
+ import FSCol from "./FSCol.vue";
70
80
  import FSRow from "./FSRow.vue";
71
81
 
72
82
  export default defineComponent({
73
83
  name: "FSDialogMultiFormBody",
74
84
  components: {
85
+ FSPagination,
75
86
  FSFadeOut,
76
87
  FSButton,
77
88
  FSForm,
89
+ FSCol,
78
90
  FSRow
79
91
  },
80
92
  props: {
@@ -97,6 +109,11 @@ export default defineComponent({
97
109
  type: Number,
98
110
  required: true
99
111
  },
112
+ showCancelButton: {
113
+ type: Boolean,
114
+ required: false,
115
+ default: true
116
+ },
100
117
  cancelButtonPrependIcon: {
101
118
  type: String as PropType<string | null>,
102
119
  required: false,
@@ -122,6 +139,11 @@ export default defineComponent({
122
139
  required: false,
123
140
  default: ColorEnum.Light
124
141
  },
142
+ showSubmitButton: {
143
+ type: Boolean,
144
+ required: false,
145
+ default: true
146
+ },
125
147
  submitButtonPrependIcon: {
126
148
  type: String as PropType<string | null>,
127
149
  required: false,
@@ -152,10 +174,10 @@ export default defineComponent({
152
174
  required: false,
153
175
  default: false
154
176
  },
155
- editable: {
177
+ disabled: {
156
178
  type: Boolean,
157
179
  required: false,
158
- default: true
180
+ default: false
159
181
  }
160
182
  },
161
183
  emits: ["click:cancelButton", "click:submitButton"],
@@ -170,21 +192,22 @@ export default defineComponent({
170
192
  const maxHeight = computed(() => {
171
193
  const other = 24 + 24 // Paddings
172
194
  + (isMobileSized.value ? 24 : 32) + 24 // Title
173
- + (props.subtitle ? (isMobileSized.value ? 14 : 16) + 8 : 0) // Subtitle
195
+ + (props.subtitle ? (isMobileSized.value ? 16 : 20) + 8 : 0) // Subtitle
196
+ + (props.steps > 1 ? 24 + 4 : 0) // Pagination
174
197
  + (isMobileSized.value ? 36 : 40) + 24; // Footer
175
- return `calc(100vh - 40px - ${other}px)`;
198
+ return `calc(100vh - 42px - ${other}px)`;
176
199
  });
177
200
 
178
201
  const previousButtonLabel = computed(() => {
179
202
  return currentStep.value == 1
180
- ? props.cancelButtonLabel ?? $tr("ui.button.cancel", "Cancel")
181
- : $tr("ui.button.back", "Back");
203
+ ? props.cancelButtonLabel ?? $tr("ui.common.cancel", "Cancel")
204
+ : $tr("ui.common.back", "Back");
182
205
  });
183
206
 
184
207
  const nextButtonLabel = computed(() => {
185
208
  return currentStep.value == props.steps
186
- ? props.submitButtonLabel ?? $tr("ui.button.validate", "Validate")
187
- : $tr("ui.button.next", "Next");
209
+ ? props.submitButtonLabel ?? $tr("ui.common.validate", "Validate")
210
+ : $tr("ui.common.next", "Next");
188
211
  });
189
212
 
190
213
  const nextButtonVariant = computed(() => {