@dative-gpi/foundation-shared-components 1.0.66 → 1.0.67-tree-view-02

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 (295) 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/FSTreeView.vue +107 -0
  56. package/components/FSWindow.vue +122 -5
  57. package/components/FSWrapGroup.vue +13 -1
  58. package/components/agenda/FSAgenda.vue +26 -7
  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 +0 -1
  65. package/components/agenda/FSMonthAgenda.vue +1 -6
  66. package/components/agenda/FSSelectAgendaMode.vue +2 -2
  67. package/components/agenda/FSWeekAgenda.vue +5 -10
  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 +5 -3
  106. package/components/deviceOrganisations/FSStatus.vue +5 -3
  107. package/components/deviceOrganisations/FSStatusCard.vue +7 -9
  108. package/components/deviceOrganisations/FSStatusRichCard.vue +171 -0
  109. package/components/deviceOrganisations/FSWorstAlert.vue +24 -36
  110. package/components/deviceOrganisations/FSWorstAlertCard.vue +8 -47
  111. package/components/fields/FSAutocompleteField.vue +85 -82
  112. package/components/fields/FSAutocompleteTag.vue +1 -1
  113. package/components/fields/FSBaseField.vue +42 -25
  114. package/components/fields/FSClosableSearchField.vue +83 -0
  115. package/components/fields/FSColorField.vue +12 -10
  116. package/components/fields/FSCommentField.vue +28 -16
  117. package/components/fields/FSDateField.vue +13 -10
  118. package/components/fields/FSDateRangeField.vue +6 -5
  119. package/components/fields/FSDateTimeField.vue +14 -11
  120. package/components/fields/FSDateTimeRangeDialog.vue +160 -0
  121. package/components/fields/FSDateTimeRangeField.vue +23 -115
  122. package/components/fields/FSEntityFieldUI.vue +19 -16
  123. package/components/fields/FSGradientField.vue +5 -5
  124. package/components/fields/FSIconField.vue +16 -9
  125. package/components/fields/FSMagicConfigField.vue +15 -7
  126. package/components/fields/FSMagicField.vue +7 -2
  127. package/components/fields/FSMapAddressField.vue +187 -0
  128. package/components/fields/FSNumberField.vue +8 -4
  129. package/components/fields/FSPasswordField.vue +7 -7
  130. package/components/fields/FSRichTextField.vue +78 -58
  131. package/components/fields/FSSearchField.vue +9 -115
  132. package/components/fields/FSSelectField.vue +69 -71
  133. package/components/fields/FSTagField.vue +9 -9
  134. package/components/fields/FSTermField.vue +69 -46
  135. package/components/fields/FSTextArea.vue +17 -11
  136. package/components/fields/FSTextField.vue +15 -10
  137. package/components/fields/FSTimeField.vue +14 -10
  138. package/components/fields/FSTimeRangeField.vue +310 -0
  139. package/components/fields/FSTimeStepField.vue +5 -5
  140. package/components/fields/FSTranslateField.vue +10 -10
  141. package/components/fields/FSTranslateRichTextField.vue +41 -20
  142. package/components/fields/FSTranslateTextArea.vue +10 -10
  143. package/components/fields/FSTreeViewField.vue +21 -19
  144. package/components/fields/periodicField/FSPeriodicDailyField.vue +7 -7
  145. package/components/fields/periodicField/FSPeriodicField.vue +15 -15
  146. package/components/fields/periodicField/FSPeriodicMonthlyField.vue +16 -16
  147. package/components/fields/periodicField/FSPeriodicWeeklyField.vue +28 -18
  148. package/components/fields/periodicField/FSPeriodicYearlyField.vue +12 -12
  149. package/components/lists/FSDataIteratorItem.vue +23 -67
  150. package/components/lists/FSDataTableUI.vue +198 -123
  151. package/components/lists/FSDraggable.vue +2 -2
  152. package/components/lists/FSFilterButton.vue +14 -16
  153. package/components/lists/FSHeaderButton.vue +11 -9
  154. package/components/lists/FSHiddenButton.vue +9 -9
  155. package/components/lists/FSLoadDataTable.vue +10 -7
  156. package/components/lists/FSSimpleList.vue +95 -88
  157. package/components/lists/FSSimpleListItem.vue +131 -0
  158. package/components/map/FSMap.vue +144 -158
  159. package/components/map/FSMapFeatureGroup.vue +7 -1
  160. package/components/map/FSMapLayerButton.vue +4 -3
  161. package/components/map/FSMapMarker.vue +103 -42
  162. package/components/map/FSMapMarkerClusterGroup.vue +32 -7
  163. package/components/map/FSMapOverlay.vue +44 -24
  164. package/components/map/FSMapPolygon.vue +16 -4
  165. package/components/map/FSMapTileLayer.vue +26 -9
  166. package/components/map/layers.ts +0 -0
  167. package/components/selects/FSSelectAutoRefresh.vue +8 -8
  168. package/components/selects/FSSelectDashboardVariableType.vue +4 -3
  169. package/components/selects/FSSelectDateSetting.vue +2 -2
  170. package/components/selects/FSSelectDays.vue +8 -8
  171. package/components/selects/FSSelectListMode.vue +2 -2
  172. package/components/selects/FSSelectMapLayer.vue +68 -0
  173. package/components/selects/FSSelectMonths.vue +13 -13
  174. package/components/selects/chartSelectors/FSAggregationSelector.vue +52 -0
  175. package/components/selects/chartSelectors/FSAxisTypeSelector.vue +49 -0
  176. package/components/selects/chartSelectors/FSDisplayAsSelector.vue +53 -0
  177. package/components/selects/chartSelectors/FSFilterTypeSelector.vue +54 -0
  178. package/components/selects/chartSelectors/FSHeatmapRuleSelector.vue +54 -0
  179. package/components/selects/chartSelectors/FSOperationOnSelector.vue +53 -0
  180. package/components/selects/chartSelectors/FSPlanningTypeSelector.vue +53 -0
  181. package/components/selects/chartSelectors/FSPlotPerSelector.vue +52 -0
  182. package/components/selects/chartSelectors/FSSelectEntityType.vue +59 -0
  183. package/components/selects/chartSelectors/FSSerieTypeSelector.vue +53 -0
  184. package/components/tiles/FSAlertTileUI.vue +90 -0
  185. package/components/tiles/FSChartTileUI.vue +61 -52
  186. package/components/tiles/FSCommentTileUI.vue +38 -13
  187. package/components/tiles/FSDashboardOrganisationTypeTileUI.vue +14 -2
  188. package/components/tiles/FSDashboardShallowTileUI.vue +14 -2
  189. package/components/tiles/FSDeviceOrganisationTileUI.vue +0 -6
  190. package/components/tiles/FSEntityCountBadge.vue +72 -0
  191. package/components/tiles/FSFolderTileUI.vue +38 -4
  192. package/components/tiles/FSGroupTileUI.vue +32 -136
  193. package/components/tiles/FSLoadTile.vue +16 -10
  194. package/components/tiles/FSLocationTileUI.vue +45 -63
  195. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +0 -6
  196. package/components/tiles/FSSimpleTileUI.vue +30 -24
  197. package/components/tiles/FSTile.vue +46 -39
  198. package/components/tiles/FSUserOrganisationTileUI.vue +1 -7
  199. package/components/tiles/FSUserTileUI.vue +119 -0
  200. package/components/toggleSets/FSToggleSetPosition.vue +1 -1
  201. package/components/views/FSBaseView.vue +64 -0
  202. package/components/views/FSEntityView.vue +12 -146
  203. package/components/views/FSSimpleView.vue +29 -0
  204. package/components/views/desktop/FSBaseDefaultDesktopView.vue +135 -0
  205. package/components/views/desktop/FSBaseDesktopView.vue +53 -0
  206. package/components/views/desktop/FSBaseEntityDesktopView.vue +211 -0
  207. package/components/views/mobile/FSBaseDefaultMobileView.vue +133 -0
  208. package/components/views/mobile/FSBaseEntityMobileView.vue +206 -0
  209. package/components/views/mobile/FSBaseMobileView.vue +53 -0
  210. package/composables/index.ts +1 -0
  211. package/composables/useAddress.ts +40 -8
  212. package/composables/useBreakpoints.ts +40 -4
  213. package/composables/useColors.ts +16 -7
  214. package/composables/useMagicFieldProvider.ts +1 -0
  215. package/composables/useMapLayers.ts +69 -0
  216. package/composables/useSlots.ts +2 -1
  217. package/models/colors.ts +2 -1
  218. package/models/deviceAlerts.ts +1 -0
  219. package/models/magicFields.ts +1 -0
  220. package/models/map.ts +12 -10
  221. package/models/rules.ts +5 -2
  222. package/models/tables.ts +2 -1
  223. package/models/variableNode.ts +8 -5
  224. package/package.json +5 -5
  225. package/styles/components/fs_agenda.scss +4 -0
  226. package/styles/components/fs_agenda_event.scss +1 -1
  227. package/styles/components/fs_agenda_hours_row.scss +0 -8
  228. package/styles/components/fs_autocomplete_field.scss +0 -13
  229. package/styles/components/fs_breadcrumbs.scss +18 -36
  230. package/styles/components/fs_button.scss +7 -5
  231. package/styles/components/fs_calendar.scss +1 -0
  232. package/styles/components/fs_card.scss +9 -0
  233. package/styles/components/fs_chip.scss +13 -7
  234. package/styles/components/fs_clickable.scss +16 -23
  235. package/styles/components/fs_clock.scss +0 -10
  236. package/styles/components/fs_col.scss +1 -1
  237. package/styles/components/fs_color_field.scss +0 -4
  238. package/styles/components/fs_data_table.scss +6 -9
  239. package/styles/components/fs_dialog.scss +4 -10
  240. package/styles/components/fs_dialog_menu.scss +4 -2
  241. package/styles/components/fs_draggable.scss +0 -5
  242. package/styles/components/fs_fade_out.scss +10 -2
  243. package/styles/components/fs_filter_button.scss +1 -1
  244. package/styles/components/fs_hidden_button.scss +2 -7
  245. package/styles/components/fs_image_card.scss +6 -4
  246. package/styles/components/fs_magic_config_field.scss +1 -2
  247. package/styles/components/fs_map.scss +57 -17
  248. package/styles/components/fs_meta_field.scss +3 -5
  249. package/styles/components/fs_password_field.scss +4 -2
  250. package/styles/components/fs_progress_bar.scss +14 -0
  251. package/styles/components/fs_radio.scss +0 -11
  252. package/styles/components/fs_rich_text_field.scss +1 -10
  253. package/styles/components/fs_select_field.scss +4 -13
  254. package/styles/components/fs_slide_group.scss +7 -0
  255. package/styles/components/fs_slider.scss +0 -40
  256. package/styles/components/fs_span.scss +13 -5
  257. package/styles/components/fs_status_rich_card.scss +6 -0
  258. package/styles/components/fs_tabs.scss +18 -37
  259. package/styles/components/fs_tag.scss +8 -22
  260. package/styles/components/fs_text_area.scss +2 -21
  261. package/styles/components/fs_tile.scss +0 -19
  262. package/styles/components/fs_window.scss +3 -1
  263. package/styles/components/fs_wrap_group.scss +7 -0
  264. package/styles/components/index.scss +2 -6
  265. package/styles/globals/index.scss +1 -5
  266. package/styles/globals/overrides.scss +26 -54
  267. package/styles/globals/scrollbars.scss +8 -0
  268. package/styles/globals/text_fonts.scss +18 -66
  269. package/styles/globals/touchscreen.scss +2 -2
  270. package/tools/alertsTools.ts +94 -18
  271. package/tools/chartsTools.ts +155 -16
  272. package/tools/index.ts +3 -1
  273. package/tools/reportsTools.ts +38 -0
  274. package/tools/timeRangeTools.ts +125 -0
  275. package/utils/badge.ts +9 -5
  276. package/utils/filter.ts +4 -1
  277. package/utils/index.ts +2 -0
  278. package/utils/leafletMarkers.ts +4 -4
  279. package/utils/operations.ts +108 -0
  280. package/utils/picker.ts +40 -0
  281. package/utils/sort.ts +2 -2
  282. package/utils/time.ts +13 -13
  283. package/components/fields/FSTimeSlotField.vue +0 -250
  284. package/components/views/FSEntityHeader.vue +0 -343
  285. package/components/views/FSListHeader.vue +0 -83
  286. package/components/views/FSListView.vue +0 -83
  287. package/components/views/FSSkeletonView.vue +0 -100
  288. package/styles/components/fs_data_iterator_item.scss +0 -33
  289. package/styles/components/fs_icon_field.scss +0 -12
  290. package/styles/components/fs_search_field.scss +0 -3
  291. package/styles/components/fs_tag_field.scss +0 -8
  292. package/styles/components/fs_time_field.scss +0 -12
  293. package/styles/components/fs_timeslot_field.scss +0 -12
  294. package/styles/globals/breakpoints.scss +0 -20
  295. package/styles/globals/fixes.scss +0 -5
@@ -20,7 +20,7 @@
20
20
  :description="$props.description"
21
21
  :hideHeader="$props.hideHeader"
22
22
  :clearable="$props.clearable"
23
- :editable="$props.editable"
23
+ :disabled="$props.disabled"
24
24
  :required="$props.required"
25
25
  :validateOn="validateOn"
26
26
  :label="$props.label"
@@ -64,7 +64,7 @@
64
64
  name="clear"
65
65
  >
66
66
  <FSButton
67
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
67
+ v-if="$props.clearable && !$props.disabled && !!$props.modelValue"
68
68
  icon="mdi-close"
69
69
  variant="icon"
70
70
  :color="ColorEnum.Dark"
@@ -79,7 +79,7 @@
79
79
  <FSButton
80
80
  icon="mdi-chevron-down"
81
81
  variant="icon"
82
- :editable="$props.editable"
82
+ :disabled="$props.disabled"
83
83
  :color="ColorEnum.Dark"
84
84
  @click="openMobileOverlay"
85
85
  />
@@ -122,6 +122,7 @@
122
122
  </FSCard>
123
123
  </FSSlideGroup>
124
124
  <FSDialogMenu
125
+ padding="16px"
125
126
  v-model="dialog"
126
127
  >
127
128
  <template
@@ -135,69 +136,52 @@
135
136
  >
136
137
  <FSRow
137
138
  v-for="(item, index) in $props.items"
139
+ align="center-left"
140
+ height="36px"
141
+ :wrap="false"
138
142
  :key="index"
143
+ @click="$props.multiple ?
144
+ onCheckboxChange(item[$props.itemValue!]) :
145
+ onRadioChange(item[$props.itemValue!])
146
+ "
139
147
  >
140
- <FSCheckbox
141
- v-if="$props.multiple"
142
- :label="item[$props.itemTitle!]"
143
- :editable="$props.editable"
144
- :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
145
- @update:modelValue="() => onCheckboxChange(item[$props.itemValue!])"
146
- >
147
- <template
148
- #label="{ font }"
149
- >
150
- <FSRow
151
- align="center-left"
152
- :wrap="false"
153
- >
154
- <slot
155
- name="item-prepend"
156
- v-bind="{ item }"
157
- />
158
- <FSSpan
159
- :font="font"
160
- >
161
- {{ item[$props.itemTitle!] }}
162
- </FSSpan>
163
- </FSRow>
164
- </template>
165
- </FSCheckbox>
166
- <FSRadio
167
- v-else
168
- :selected="$props.modelValue === item[$props.itemValue!]"
169
- :label="item[$props.itemTitle!]"
170
- :editable="$props.editable"
171
- :item="item"
172
- :modelValue="item[$props.itemValue!]"
173
- @update:modelValue="() => onRadioChange(item[$props.itemValue!])"
148
+ <FSRow
149
+ style="min-width: 0;"
150
+ :wrap="false"
174
151
  >
175
- <template
176
- #label="{ font }"
152
+ <slot
153
+ name="item-prepend"
154
+ v-bind="{ item }"
155
+ />
156
+ <FSSpan
157
+ :font="selectedItems.includes(item) ? 'text-button' : 'text-body'"
177
158
  >
178
- <FSRow
179
- align="center-left"
180
- :wrap="false"
181
- >
182
- <slot
183
- name="item-prepend"
184
- v-bind="{ item }"
185
- />
186
- <FSSpan
187
- :font="font"
188
- >
189
- {{ item[$props.itemTitle!] }}
190
- </FSSpan>
191
- </FSRow>
192
- </template>
193
- </FSRadio>
159
+ {{ item[$props.itemTitle!] }}
160
+ </FSSpan>
161
+ </FSRow>
194
162
  <FSRow
195
163
  align="center-right"
164
+ width="hug"
165
+ :wrap="false"
196
166
  >
197
167
  <slot
198
168
  name="item-append"
199
169
  v-bind="{ item }"
200
170
  />
171
+ <FSCheckbox
172
+ v-if="$props.multiple"
173
+ :disabled="$props.disabled"
174
+ :modelValue="$props.modelValue?.includes(item[$props.itemValue!])"
175
+ @update:modelValue="onCheckboxChange(item[$props.itemValue!])"
176
+ />
177
+ <FSRadio
178
+ v-else
179
+ :selected="$props.modelValue === item[$props.itemValue!]"
180
+ :disabled="$props.disabled"
181
+ :item="item"
182
+ :modelValue="item[$props.itemValue!]"
183
+ @update:modelValue="onRadioChange(item[$props.itemValue!])"
184
+ />
201
185
  </FSRow>
202
186
  </FSRow>
203
187
  </FSCol>
@@ -207,7 +191,7 @@
207
191
  padding="4px 3px"
208
192
  >
209
193
  <FSSpan>
210
- {{ $tr("ui.select-field.no-data", "No data") }}
194
+ {{ $tr("ui.common.no-data", "No data") }}
211
195
  </FSSpan>
212
196
  </FSRow>
213
197
  </template>
@@ -215,16 +199,17 @@
215
199
  </FSCol>
216
200
  <FSBaseField
217
201
  v-else
202
+ :style="style"
218
203
  :description="$props.description"
219
204
  :hideHeader="$props.hideHeader"
220
205
  :required="$props.required"
221
- :editable="$props.editable"
206
+ :disabled="$props.disabled"
222
207
  :label="$props.label"
223
208
  :messages="messages"
224
209
  >
225
210
  <FSToggleSet
226
211
  v-if="$props.toggleSet"
227
- :editable="$props.editable"
212
+ :disabled="$props.disabled"
228
213
  :multiple="$props.multiple"
229
214
  :required="$props.required"
230
215
  :values="$props.items"
@@ -249,10 +234,11 @@
249
234
  <v-select
250
235
  class="fs-select-field"
251
236
  variant="outlined"
252
- :clearable="$props.clearable && $props.editable && !!$props.modelValue"
237
+ :clearable="$props.clearable && !$props.disabled && !!$props.modelValue"
253
238
  :itemTitle="$props.itemTitle"
254
239
  :itemValue="$props.itemValue"
255
- :readonly="!$props.editable"
240
+ :disabled="$props.disabled"
241
+ :readonly="$props.readonly"
256
242
  :multiple="$props.multiple"
257
243
  :validateOn="validateOn"
258
244
  :persistentClear="true"
@@ -262,7 +248,6 @@
262
248
  :rules="$props.rules"
263
249
  :hideDetails="true"
264
250
  :menuIcon="null"
265
- :style="style"
266
251
  :modelValue="$props.modelValue"
267
252
  @update:modelValue="onSingleChange"
268
253
  v-bind="$attrs"
@@ -363,7 +348,7 @@
363
348
  name="clear"
364
349
  >
365
350
  <FSButton
366
- v-if="$props.clearable && $props.editable && !!$props.modelValue"
351
+ v-if="$props.clearable && $props.disabled && !!$props.modelValue"
367
352
  icon="mdi-close"
368
353
  variant="icon"
369
354
  :color="ColorEnum.Dark"
@@ -381,7 +366,7 @@
381
366
  <FSButton
382
367
  icon="mdi-chevron-down"
383
368
  variant="icon"
384
- :editable="$props.editable"
369
+ :disabled="$props.disabled"
385
370
  :color="ColorEnum.Dark"
386
371
  />
387
372
  </slot>
@@ -394,13 +379,14 @@
394
379
  padding="15px"
395
380
  >
396
381
  <FSSpan>
397
- {{ $tr("ui.select-field.no-data", "No data") }}
382
+ {{ $tr("ui.common.no-data", "No data") }}
398
383
  </FSSpan>
399
384
  </FSRow>
400
385
  </template>
401
386
  </v-select>
402
387
  <FSSlideGroup
403
388
  v-if="$props.multiple && Array.isArray($props.modelValue)"
389
+ class="fs-select-field-multiple-slide-group"
404
390
  >
405
391
  <FSCard
406
392
  v-for="(item, index) in $props.items.filter((item: any) => $props.modelValue.includes(item[$props.itemValue!]))"
@@ -428,6 +414,7 @@
428
414
  <FSButton
429
415
  icon="mdi-close"
430
416
  variant="icon"
417
+ :disabled="$props.disabled"
431
418
  :color="ColorEnum.Dark"
432
419
  @click="() => onCheckboxChange(item[$props.itemValue!])"
433
420
  />
@@ -542,10 +529,15 @@ export default defineComponent({
542
529
  required: false,
543
530
  default: true
544
531
  },
545
- editable: {
532
+ disabled: {
546
533
  type: Boolean,
547
534
  required: false,
548
- default: true
535
+ default: false
536
+ },
537
+ readonly: {
538
+ type: Boolean,
539
+ required: false,
540
+ default: false
549
541
  },
550
542
  loading: {
551
543
  type: Boolean,
@@ -560,8 +552,8 @@ export default defineComponent({
560
552
  },
561
553
  emits: ["update:modelValue"],
562
554
  setup(props, { emit }) {
555
+ const { fontStyles, isExtraSmall, isMobileSized } = useBreakpoints();
563
556
  const { validateOn, getMessages } = useRules();
564
- const { isExtraSmall } = useBreakpoints();
565
557
  const { getColors } = useColors();
566
558
  const { slots } = useSlots();
567
559
 
@@ -576,12 +568,15 @@ export default defineComponent({
576
568
  const dialog = ref(false);
577
569
 
578
570
  const style = computed((): StyleValue => {
579
- if (!props.editable) {
571
+ if (props.disabled) {
580
572
  return {
581
573
  "--fs-select-field-cursor" : "default",
582
574
  "--fs-select-field-border-color" : lights.base,
583
575
  "--fs-select-field-color" : lights.dark,
584
- "--fs-select-field-active-border-color": lights.base
576
+ "--fs-select-field-active-border-color": lights.base,
577
+ "--fs-select-field-multiple-opacity" : "var(--v-disabled-opacity)",
578
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
579
+ ...fontStyles.value
585
580
  };
586
581
  }
587
582
  return {
@@ -590,7 +585,10 @@ export default defineComponent({
590
585
  "--fs-select-field-border-color" : lights.dark,
591
586
  "--fs-select-field-color" : darks.base,
592
587
  "--fs-select-field-active-border-color": darks.dark,
593
- "--fs-select-field-error-border-color" : errors.base
588
+ "--fs-select-field-error-border-color" : errors.base,
589
+ "--fs-select-field-multiple-opacity" : "1",
590
+ "--fs-base-field-input-height" : isMobileSized.value ? "34px" : "38px",
591
+ ...fontStyles.value
594
592
  };
595
593
  });
596
594
 
@@ -658,7 +656,7 @@ export default defineComponent({
658
656
  });
659
657
 
660
658
  const openMobileOverlay = () => {
661
- if (!props.editable) {
659
+ if (props.disabled) {
662
660
  return;
663
661
  }
664
662
  dialog.value = true;
@@ -5,7 +5,7 @@
5
5
  :description="$props.description"
6
6
  :hideHeader="$props.hideHeader"
7
7
  :required="$props.required"
8
- :editable="$props.editable"
8
+ :disabled="$props.disabled"
9
9
  :rules="$props.rules"
10
10
  :messages="messages"
11
11
  :validateOn="validateOn"
@@ -29,7 +29,7 @@
29
29
  <FSButton
30
30
  variant="icon"
31
31
  icon="mdi-tag-outline"
32
- :editable="$props.editable"
32
+ :disabled="$props.disabled"
33
33
  :color="ColorEnum.Dark"
34
34
  @click="onAdd"
35
35
  />
@@ -40,7 +40,7 @@
40
40
  </FSTextField>
41
41
  <FSTagGroup
42
42
  :tagVariant="$props.tagVariant"
43
- :editable="$props.editable"
43
+ :showRemove="!$props.disabled"
44
44
  :tags="$props.modelValue"
45
45
  :color="$props.tagColor"
46
46
  @remove="onRemove"
@@ -49,7 +49,7 @@
49
49
  </template>
50
50
 
51
51
  <script lang="ts">
52
- import { computed, defineComponent, type PropType, ref } from "vue";
52
+ import { computed, defineComponent, type PropType, ref, type StyleValue } from "vue";
53
53
 
54
54
  import { useColors, useRules, useSlots } from "@dative-gpi/foundation-shared-components/composables";
55
55
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
@@ -108,10 +108,10 @@ export default defineComponent({
108
108
  required: false,
109
109
  default: () => []
110
110
  },
111
- editable: {
111
+ disabled: {
112
112
  type: Boolean,
113
113
  required: false,
114
- default: true
114
+ default: false
115
115
  }
116
116
  },
117
117
  emits: ["update:modelValue"],
@@ -129,7 +129,7 @@ export default defineComponent({
129
129
  const innerValue = ref("");
130
130
 
131
131
  const style = computed((): StyleValue => {
132
- if (!props.editable) {
132
+ if (props.disabled) {
133
133
  return {
134
134
  "--fs-tag-field-color": lights.dark
135
135
  };
@@ -145,7 +145,7 @@ export default defineComponent({
145
145
  const onAdd = (event: Event): void => {
146
146
  event.stopImmediatePropagation();
147
147
  event.preventDefault();
148
- if (!props.editable) {
148
+ if (props.disabled) {
149
149
  return;
150
150
  }
151
151
  const tags = props.modelValue ?? [];
@@ -157,7 +157,7 @@ export default defineComponent({
157
157
  }
158
158
 
159
159
  const onRemove = (label: string): void => {
160
- if (!props.editable) {
160
+ if (props.disabled) {
161
161
  return;
162
162
  }
163
163
  const tags = props.modelValue ?? [];
@@ -3,7 +3,7 @@
3
3
  :description="$props.description"
4
4
  :hideHeader="$props.hideHeader"
5
5
  :required="$props.required"
6
- :editable="$props.editable"
6
+ :disabled="$props.disabled"
7
7
  :label="$props.label"
8
8
  :messages="messages"
9
9
  >
@@ -16,7 +16,7 @@
16
16
  <FSSelectDateSetting
17
17
  minWidth="180px"
18
18
  :lastPeriod="$props.lastPeriod"
19
- :editable="$props.editable"
19
+ :disabled="$props.disabled"
20
20
  :variant="$props.variant"
21
21
  :hideHeader="true"
22
22
  :modelValue="innerDateSetting"
@@ -26,7 +26,7 @@
26
26
  minWidth="60px"
27
27
  v-if="pastSettings.includes(innerDateSetting)"
28
28
  :rules="[NumberRules.required(), NumberRules.min(0)]"
29
- :editable="$props.editable"
29
+ :disabled="$props.disabled"
30
30
  :hideHeader="true"
31
31
  :clearable="false"
32
32
  :modelValue="innerDateValue"
@@ -44,8 +44,9 @@
44
44
  </FSIcon>
45
45
  <FSTextField
46
46
  :rules="[TextRules.required(), DateRules.validateExpression($props.variant)]"
47
- :editable="$props.editable"
47
+ :disabled="$props.disabled"
48
48
  :hideHeader="true"
49
+ :clearable="false"
49
50
  :modelValue="innerStartDate"
50
51
  @update:modelValue="innerStartDateChange"
51
52
  />
@@ -59,28 +60,38 @@
59
60
  </FSIcon>
60
61
  <FSTextField
61
62
  :rules="[TextRules.required(), DateRules.validateExpression($props.variant)]"
62
- :editable="$props.editable"
63
+ :disabled="$props.disabled"
63
64
  :hideHeader="true"
65
+ :clearable="false"
64
66
  :modelValue="innerEndDate"
65
67
  @update:modelValue="innerEndDateChange"
66
68
  />
67
69
  </FSRow>
68
70
  </template>
69
- <FSDateTimeRangeField
71
+ <template
70
72
  v-else-if="innerDateSetting === DateSetting.Pick"
71
- :rules="[DateRules.required()]"
72
- :editable="$props.editable"
73
- :hideHeader="true"
74
- :modelValue="actualValue"
75
- @update:modelValue="onPickDates"
76
- />
73
+ >
74
+ <FSDateTimeRangeField
75
+ :width="['350px', '310px']"
76
+ :disabled="$props.disabled"
77
+ :hideHeader="true"
78
+ :clearable="false"
79
+ :modelValue="actualValue"
80
+ @update:modelValue="onPickDates"
81
+ />
82
+ <FSDateTimeRangeDialog
83
+ :dialog="dateTimeRangeDialog"
84
+ @cancel="onCancelPickDates"
85
+ @update:modelValue="onPickDates"
86
+ />
87
+ </template>
77
88
  </FSRow>
78
89
  </FSForm>
79
90
  </FSBaseField>
80
91
  </template>
81
92
 
82
93
  <script lang="ts">
83
- import { computed, defineComponent, type PropType, ref, watch } from "vue";
94
+ import { computed, defineComponent, onMounted, type PropType, ref, watch } from "vue";
84
95
  import _ from "lodash";
85
96
 
86
97
  import { DateRules, NumberRules, TextRules } from "@dative-gpi/foundation-shared-components/models";
@@ -89,6 +100,7 @@ import { useRules } from "@dative-gpi/foundation-shared-components/composables";
89
100
  import { DateSetting } from "@dative-gpi/foundation-shared-domain/enums";
90
101
 
91
102
  import FSSelectDateSetting from "../selects/FSSelectDateSetting.vue";
103
+ import FSDateTimeRangeDialog from './FSDateTimeRangeDialog.vue';
92
104
  import FSDateTimeRangeField from "./FSDateTimeRangeField.vue";
93
105
  import FSNumberField from "./FSNumberField.vue";
94
106
  import FSBaseField from "./FSBaseField.vue";
@@ -100,6 +112,7 @@ import FSRow from "../FSRow.vue";
100
112
  export default defineComponent({
101
113
  name: "FSTermField",
102
114
  components: {
115
+ FSDateTimeRangeDialog,
103
116
  FSDateTimeRangeField,
104
117
  FSSelectDateSetting,
105
118
  FSNumberField,
@@ -158,21 +171,22 @@ export default defineComponent({
158
171
  required: false,
159
172
  default: null
160
173
  },
161
- editable: {
174
+ disabled: {
162
175
  type: Boolean,
163
176
  required: false,
164
- default: true
177
+ default: false
165
178
  }
166
179
  },
167
- emits: ["update:startDate", "update:endDate"],
180
+ emits: ["update", "update:startDate", "update:endDate"],
168
181
  setup(props, { emit }) {
169
- const { parseForPicker, epochToISO, todayToPicker, yesterdayToPicker } = useDateFormat();
182
+ const { parseForPicker, epochToISO } = useDateFormat();
170
183
  const { getMessages } = useRules();
171
184
 
172
185
  const innerDateSetting = ref<DateSetting>(DateSetting.PastDays);
173
186
  const innerDateValue = ref<number>(1);
174
187
  const innerStartDate = ref<string>("now - 1d");
175
188
  const innerEndDate = ref<string>("now");
189
+ const dateTimeRangeDialog = ref(false);
176
190
 
177
191
  const valid = ref<boolean>(false);
178
192
 
@@ -185,8 +199,8 @@ export default defineComponent({
185
199
  });
186
200
 
187
201
  const actualValue = computed(() => {
188
- const dates = [parseForPicker(innerStartDate.value), parseForPicker(innerEndDate.value)]
189
- if(dates.some(d => d == null)) {
202
+ const dates = [parseForPicker(innerStartDate.value), parseForPicker(innerEndDate.value)];
203
+ if (dates.some(d => d == null)) {
190
204
  return null;
191
205
  }
192
206
  return dates as [number, number];
@@ -205,6 +219,7 @@ export default defineComponent({
205
219
  innerStartDate.value = value;
206
220
  if (valid.value) {
207
221
  emit("update:startDate", value);
222
+ emit("update", { startDate: innerStartDate.value, endDate: props.endDate });
208
223
  }
209
224
  };
210
225
 
@@ -218,6 +233,7 @@ export default defineComponent({
218
233
  innerEndDate.value = value;
219
234
  if (valid.value) {
220
235
  emit("update:endDate", value);
236
+ emit("update", { startDate: props.startDate, endDate: innerEndDate.value });
221
237
  }
222
238
  };
223
239
 
@@ -347,12 +363,12 @@ export default defineComponent({
347
363
  }
348
364
  break;
349
365
  case DateSetting.Pick:
350
- innerEndDate.value = todayToPicker();
351
- innerStartDate.value = yesterdayToPicker();
352
- break;
366
+ dateTimeRangeDialog.value = true;
367
+ return;
353
368
  }
354
369
  emit("update:startDate", innerStartDate.value);
355
370
  emit("update:endDate", innerEndDate.value);
371
+ emit("update", { startDate: innerStartDate.value, endDate: innerEndDate.value });
356
372
  };
357
373
 
358
374
  const innerDateValueChange = (value: number) => {
@@ -416,33 +432,35 @@ export default defineComponent({
416
432
  }
417
433
  emit("update:startDate", innerStartDate.value);
418
434
  emit("update:endDate", innerEndDate.value);
435
+ emit("update", { startDate: innerStartDate.value, endDate: innerEndDate.value });
419
436
  };
420
437
 
421
- const onPickDates = (value: number[] | null) => {
422
- if (!value) {
423
- innerEndDate.value = todayToPicker();
424
- innerStartDate.value = yesterdayToPicker();
425
- if (valid.value) {
426
- emit("update:startDate", innerStartDate.value);
427
- emit("update:endDate", innerEndDate.value);
428
- }
438
+ const onPickDates = (value: number[]) => {
439
+ dateTimeRangeDialog.value = false;
440
+
441
+ if(value.length < 2) {
442
+ return;
429
443
  }
430
- else {
431
- if (value && value[0] != null && epochToISO(value[0]) !== innerStartDate.value) {
432
- innerStartDate.value = epochToISO(value[0]);
433
- if (valid.value) {
434
- emit("update:startDate", innerStartDate.value);
435
- }
444
+
445
+ innerStartDate.value = epochToISO(value[0]);
446
+ innerEndDate.value = epochToISO(value[1]);
447
+
448
+ if (valid.value !== false) {
449
+ if(props.startDate !== innerStartDate.value) {
450
+ emit("update:startDate", innerStartDate.value);
436
451
  }
437
- if (value && value[1] != null && epochToISO(value[1]) !== innerEndDate.value) {
438
- innerEndDate.value = epochToISO(value[1]);
439
- if (valid.value) {
440
- emit("update:endDate", innerEndDate.value);
441
- }
452
+ if (props.endDate !== innerEndDate.value) {
453
+ emit("update:endDate", innerEndDate.value);
442
454
  }
455
+ emit("update", { startDate: innerStartDate.value, endDate: innerEndDate.value });
443
456
  }
444
457
  };
445
458
 
459
+ const onCancelPickDates = () => {
460
+ dateTimeRangeDialog.value = false;
461
+ reset();
462
+ };
463
+
446
464
  const reset = (): void => {
447
465
  innerStartDate.value = props.startDate;
448
466
  innerEndDate.value = props.endDate;
@@ -639,16 +657,20 @@ export default defineComponent({
639
657
  innerDateValue.value = 1;
640
658
  };
641
659
 
660
+ // This watcher is called once even if both value are set at the same time
642
661
  watch([() => props.startDate, () => props.endDate], () => {
643
- if (
644
- innerStartDate.value !== props.startDate ||
645
- innerEndDate.value !== props.endDate
646
- ) {
662
+ // Having one of those different from the inner value means something up the chain is updating
663
+ if (props.startDate !== innerStartDate.value || props.endDate !== innerEndDate.value) {
647
664
  reset();
648
665
  }
649
- }, { immediate: true });
666
+ });
667
+
668
+ onMounted((): void => {
669
+ reset();
670
+ });
650
671
 
651
672
  return {
673
+ dateTimeRangeDialog,
652
674
  innerDateSetting,
653
675
  innerDateValue,
654
676
  innerStartDate,
@@ -665,6 +687,7 @@ export default defineComponent({
665
687
  innerDateValueChange,
666
688
  innerStartDateChange,
667
689
  innerEndDateChange,
690
+ onCancelPickDates,
668
691
  parseForPicker,
669
692
  onPickDates
670
693
  };