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

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