@dative-gpi/foundation-shared-components 1.0.15 → 1.0.17

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.
@@ -2,19 +2,20 @@
2
2
  <FSClickable
3
3
  v-if="$props.variant !== 'icon'"
4
4
  :editable="$props.editable"
5
- :height="['40px', '36px']"
5
+ :padding="$props.padding"
6
6
  :variant="$props.variant"
7
+ :height="$props.height"
7
8
  :color="$props.color"
9
+ :width="$props.width"
8
10
  :load="$props.load"
9
11
  :href="$props.href"
10
- :padding="padding"
11
12
  :to="$props.to"
12
13
  :style="style"
13
- :width="width"
14
14
  @click.stop="onClick"
15
15
  v-bind="$attrs"
16
16
  >
17
17
  <FSRow
18
+ v-if="$props.axis === 'horizontal'"
18
19
  align="center-center"
19
20
  width="fill"
20
21
  :wrap="false"
@@ -51,6 +52,43 @@
51
52
  </FSIcon>
52
53
  </slot>
53
54
  </FSRow>
55
+ <FSCol
56
+ v-else
57
+ align="center-center"
58
+ width="fill"
59
+ >
60
+ <slot
61
+ name="prepend"
62
+ v-bind="{ color: $props.color, colors }"
63
+ >
64
+ <FSIcon
65
+ v-if="$props.prependIcon || $props.icon"
66
+ :size="$props.iconSize"
67
+ >
68
+ {{ $props.prependIcon ?? $props.icon }}
69
+ </FSIcon>
70
+ </slot>
71
+ <slot
72
+ v-bind="{ color: $props.color, colors }"
73
+ >
74
+ <FSSpan
75
+ v-if="$props.label"
76
+ >
77
+ {{ $props.label }}
78
+ </FSSpan>
79
+ </slot>
80
+ <slot
81
+ name="append"
82
+ v-bind="{ color: $props.color, colors }"
83
+ >
84
+ <FSIcon
85
+ v-if="$props.appendIcon"
86
+ :size="$props.iconSize"
87
+ >
88
+ {{ $props.appendIcon }}
89
+ </FSIcon>
90
+ </slot>
91
+ </FSCol>
54
92
  </FSClickable>
55
93
  <FSRow
56
94
  v-else
@@ -132,11 +170,12 @@ import { computed, defineComponent, type PropType, type StyleValue } from "vue";
132
170
  import { type RouteLocation } from "vue-router";
133
171
 
134
172
  import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
135
- import { useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
173
+ import { useColors } from "@dative-gpi/foundation-shared-components/composables";
136
174
 
137
175
  import FSClickable from "./FSClickable.vue";
138
176
  import FSSpan from "./FSSpan.vue";
139
177
  import FSIcon from "./FSIcon.vue";
178
+ import FSCol from "./FSCol.vue";
140
179
  import FSRow from "./FSRow.vue";
141
180
 
142
181
  export default defineComponent({
@@ -145,9 +184,25 @@ export default defineComponent({
145
184
  FSClickable,
146
185
  FSSpan,
147
186
  FSIcon,
187
+ FSCol,
148
188
  FSRow
149
189
  },
150
190
  props: {
191
+ height: {
192
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
193
+ required: false,
194
+ default: () => ["40px", "36px"]
195
+ },
196
+ width: {
197
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
198
+ required: false,
199
+ default: "fit-content"
200
+ },
201
+ padding: {
202
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
203
+ required: false,
204
+ default: "0 16px"
205
+ },
151
206
  to: {
152
207
  type: [String, Object] as PropType<string | RouteLocation | null>,
153
208
  required: false,
@@ -188,16 +243,16 @@ export default defineComponent({
188
243
  required: false,
189
244
  default: "standard"
190
245
  },
246
+ axis: {
247
+ type: String as PropType<"horizontal" | "vertical">,
248
+ required: false,
249
+ default: "horizontal"
250
+ },
191
251
  color: {
192
252
  type: String as PropType<ColorBase>,
193
253
  required: false,
194
254
  default: ColorEnum.Light
195
255
  },
196
- fullWidth: {
197
- type: Boolean,
198
- required: false,
199
- default: false
200
- },
201
256
  load: {
202
257
  type: Boolean,
203
258
  required: false,
@@ -212,7 +267,6 @@ export default defineComponent({
212
267
  emits: ["click"],
213
268
  setup(props, { emit }) {
214
269
  const { getColors } = useColors();
215
- const { slots } = useSlots();
216
270
 
217
271
  const colors = computed(() => getColors(props.color));
218
272
  const lights = getColors(ColorEnum.Light);
@@ -260,21 +314,6 @@ export default defineComponent({
260
314
  }
261
315
  });
262
316
 
263
- const padding = computed((): string | number => {
264
- switch (props.variant) {
265
- case "standard":
266
- case "full": return (!slots.default && !props.label) ? "0 7px" : "0 16px";
267
- default: return "0px";
268
- }
269
- });
270
-
271
- const width = computed((): string | number => {
272
- if (props.fullWidth) {
273
- return "100%";
274
- }
275
- return "fit-content";
276
- });
277
-
278
317
  const onClick = (event: MouseEvent) => {
279
318
  if (!props.to && !props.href && props.editable && !props.load) {
280
319
  emit("click", event);
@@ -284,10 +323,8 @@ export default defineComponent({
284
323
  return {
285
324
  iconClasses,
286
325
  loadColor,
287
- padding,
288
326
  colors,
289
327
  style,
290
- width,
291
328
  onClick
292
329
  };
293
330
  }
@@ -11,6 +11,7 @@
11
11
  <FSCard
12
12
  :borderRadius="$props.borderRadius"
13
13
  :borderStyle="$props.borderStyle"
14
+ :padding="$props.padding"
14
15
  :height="$props.height"
15
16
  :width="$props.width"
16
17
  :class="classes"
@@ -51,6 +52,7 @@
51
52
  <FSCard
52
53
  :borderRadius="$props.borderRadius"
53
54
  :borderStyle="$props.borderStyle"
55
+ :padding="$props.padding"
54
56
  :height="$props.height"
55
57
  :width="$props.width"
56
58
  :class="classes"
@@ -92,6 +94,7 @@
92
94
  <FSCard
93
95
  :borderRadius="$props.borderRadius"
94
96
  :borderStyle="$props.borderStyle"
97
+ :padding="$props.padding"
95
98
  :height="$props.height"
96
99
  :width="$props.width"
97
100
  :class="classes"
@@ -148,6 +151,11 @@ export default defineComponent({
148
151
  required: false,
149
152
  default: null
150
153
  },
154
+ padding: {
155
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
156
+ required: false,
157
+ default: "0"
158
+ },
151
159
  to: {
152
160
  type: [String, Object] as PropType<string | RouteLocation | null>,
153
161
  required: false,
@@ -1,298 +1,53 @@
1
1
  <template>
2
- <FSCol
3
- gap="8px"
4
- >
5
- <slot
6
- v-if="!$props.hideHeader"
7
- name="label"
8
- >
9
- <FSRow
10
- :wrap="false"
11
- >
12
- <FSSpan
13
- v-if="$props.label"
14
- class="fs-edit-image-label"
15
- font="text-overline"
16
- :style="style"
17
- >
18
- {{ $props.label }}
19
- </FSSpan>
20
- <FSSpan
21
- v-if="$props.label && $props.required"
22
- class="fs-edit-image-label"
23
- style="margin-left: -8px;"
24
- font="text-overline"
25
- :ellipsis="false"
26
- :style="style"
27
- >
28
- *
29
- </FSSpan>
30
- </FSRow>
31
- </slot>
32
- <FSCard
33
- v-if="['standard'].includes($props.variant)"
34
- padding="12px"
35
- width="100%"
36
- >
37
- <FSRow
38
- align="center-left"
39
- :wrap="false"
40
- >
41
- <FSRow
42
- gap="24px"
43
- :wrap="false"
44
- >
45
- <FSImage
46
- v-if="$props.imageId || $props.modelValue"
47
- :aspectRatio="$props.aspectRatio"
48
- :height="$props.height"
49
- :width="$props.width"
50
- :imageId="$props.imageId"
51
- :imageB64="$props.modelValue"
52
- />
53
- <FSCard
54
- v-else
55
- borderStyle="dashed"
56
- :aspectRatio="$props.aspectRatio"
57
- :height="$props.height"
58
- :width="$props.width"
59
- />
60
- <FSCol
61
- align="center-left"
62
- height="fill"
63
- width="hug"
64
- gap="10px"
65
- >
66
- <FSText
67
- v-if="fileSelected && fileSelected.fileName"
68
- font="text-body"
69
- :lineClamp="2"
70
- >
71
- {{ fileSelected.fileName }}
72
- </FSText>
73
- <FSCol
74
- gap="0px"
75
- >
76
- <FSText
77
- class="fs-edit-image-overline"
78
- font="text-overline"
79
- :style="style"
80
- >
81
- {{ $tr('ui.edit-image.format', 'PNG or JPG format') }}
82
- </FSText>
83
- <FSText
84
- class="fs-edit-image-overline"
85
- font="text-overline"
86
- :style="style"
87
- >
88
- {{ $tr('ui.edit-image.size', '10 MB Maximum') }}
89
- </FSText>
90
- </FSCol>
91
- </FSCol>
92
- </FSRow>
93
- <v-spacer />
94
- <FSRow
95
- width="hug"
96
- >
97
- <FSButtonFileMini
98
- accept="image/*"
99
- :readFile="false"
100
- @update:metadata="onUpload"
101
- />
102
- <FSButtonRemoveMini
103
- @click="onRemove"
104
- />
105
- </FSRow>
106
- </FSRow>
107
- </FSCard>
108
- <FSRow
109
- v-else-if="$props.imageId || $props.modelValue"
110
- :width="$props.width"
111
- class="fs-edit-image-full"
112
- >
113
- <FSImage
114
- :aspectRatio="$props.aspectRatio"
115
- :height="$props.height"
116
- :width="$props.width"
117
- :imageId="$props.imageId"
118
- :imageB64="$props.modelValue"
119
- />
120
- <FSRow
121
- class="fs-edit-image-full-toolbar"
122
- padding="4px"
123
- >
124
- <FSButtonFileMini
125
- accept="image/*"
126
- :readFile="false"
127
- @update:metadata="onUpload"
128
- />
129
- <FSButtonRemoveMini
130
- @click="onRemove"
131
- />
132
- </FSRow>
133
- </FSRow>
134
- <FSClickable
135
- v-else
136
- borderStyle="dashed"
137
- variant="background"
138
- :height="$props.height"
139
- :width="$props.width"
140
- @click="() => invisibleButtonRef.input.click()"
141
- >
142
- <FSRow
143
- align="center-center"
144
- :wrap="false"
145
- >
146
- <FSIcon>
147
- mdi-plus-box-outline
148
- </FSIcon>
149
- <FSText
150
- font="text-body"
151
- :lineClamp="2"
152
- >
153
- {{ $tr('ui.edit-image.add-image', 'Add an image.') }}
154
- </FSText>
155
- <FSButtonFileMini
156
- class="fs-edit-image-hidden-button"
157
- ref="invisibleButtonRef"
158
- accept="image/*"
159
- :readFile="false"
160
- @update:metadata="onUpload"
161
- />
162
- </FSRow>
163
- </FSClickable>
164
- </FSCol>
2
+ <FSEditImageUI
3
+ :source="source"
4
+ :blurHash="image"
5
+ @error="onError"
6
+ @update:source="$emit('update:imageId', $event)"
7
+ v-bind="$attrs"
8
+ />
165
9
  </template>
166
10
 
167
11
  <script lang="ts">
168
- import { computed, defineComponent, type PropType, ref, type StyleValue, watch } from "vue";
12
+ import { computed, defineComponent, type PropType } from "vue";
169
13
 
170
- import { useBreakpoints, useColors } from "@dative-gpi/foundation-shared-components/composables";
171
- import { ColorEnum, type FileImage } from "@dative-gpi/foundation-shared-components/models";
172
- import { useFiles } from "@dative-gpi/foundation-shared-services/composables";
14
+ import { IMAGE_RAW_URL } from "@dative-gpi/foundation-shared-services/config";
173
15
 
174
- import FSButtonRemoveMini from "./buttons/FSButtonRemoveMini.vue";
175
- import FSButtonFileMini from "./buttons/FSButtonFileMini.vue";
176
- import FSClickable from "./FSClickable.vue";
177
- import FSImage from "./FSImage.vue";
178
- import FSCard from "./FSCard.vue";
179
- import FSText from "./FSText.vue";
180
- import FSCol from "./FSCol.vue";
181
- import FSRow from "./FSRow.vue";
16
+ import { useImage } from "@dative-gpi/foundation-shared-services/composables";
17
+
18
+ import FSEditImageUI from "./FSEditImageUI.vue";
182
19
 
183
20
  export default defineComponent({
184
21
  name: "FSEditImage",
185
22
  components: {
186
- FSButtonRemoveMini,
187
- FSButtonFileMini,
188
- FSClickable,
189
- FSImage,
190
- FSCard,
191
- FSText,
192
- FSCol,
193
- FSRow
23
+ FSEditImageUI
194
24
  },
195
25
  props: {
196
- height: {
197
- type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
198
- required: false,
199
- default: null
200
- },
201
- width: {
202
- type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
203
- required: false,
204
- default: null
205
- },
206
- label: {
207
- type: String as PropType<string | null>,
208
- required: false,
209
- default: null
210
- },
211
26
  imageId: {
212
27
  type: String as PropType<string | null>,
213
28
  required: false,
214
29
  default: null
215
- },
216
- aspectRatio: {
217
- type: String as PropType<string | null>,
218
- required: false,
219
- default: null
220
- },
221
- modelValue: {
222
- type: String as PropType<string | null>,
223
- required: false,
224
- default: null
225
- },
226
- variant: {
227
- type: String as PropType<"standard" | "full">,
228
- required: false,
229
- default: "standard"
230
- },
231
- hideHeader: {
232
- type: Boolean,
233
- required: false,
234
- default: false
235
- },
236
- required: {
237
- type: Boolean,
238
- required: false,
239
- default: false
240
30
  }
241
31
  },
242
- emits: ["update:modelValue", "update:imageId"],
243
- setup(props, { emit }) {
244
- const { isExtraSmall } = useBreakpoints();
245
- const { getColors } = useColors();
246
- const { readFile } = useFiles();
247
-
248
- const fileSelected = ref<FileImage>({ fileName: "", fileContent: null });
249
- const invisibleButtonRef = ref<HTMLFormElement | null>(null);
250
-
251
- const errors = getColors(ColorEnum.Error);
252
- const lights = getColors(ColorEnum.Light);
253
- const darks = getColors(ColorEnum.Dark);
254
-
255
- const style = computed((): StyleValue => ({
256
- "--fs-edit-image-overline-text-color": lights.dark,
257
- "--fs-edit-image-color" : darks.base,
258
- "--fs-edit-image-error-color" : errors.base
259
- }));
260
-
261
- const onUpload = async (payload: File) => {
262
- const content = (await readFile(payload)) as string;
263
- fileSelected.value.fileName = payload.name;
264
- fileSelected.value.fileContent = content;
265
- emit("update:modelValue", content.substring(content.indexOf(',') + 1));
32
+ emits: ["update:imageId"],
33
+ setup(props) {
34
+ const { get: getImage, entity: image } = useImage();
35
+
36
+ const source = computed(() => {
37
+ return props.imageId ? IMAGE_RAW_URL(props.imageId) : null;
38
+ })
39
+
40
+ const onError = (): void => {
266
41
  if (props.imageId) {
267
- emit("update:imageId", null);
42
+ console.log("onError");
43
+ getImage(props.imageId);
268
44
  }
269
45
  };
270
46
 
271
- const onRemove = () => {
272
- fileSelected.value.fileName = "";
273
- fileSelected.value.fileContent = null;
274
- if (props.modelValue) {
275
- emit("update:modelValue", null);
276
- }
277
- else {
278
- emit("update:imageId", null);
279
- }
280
- };
281
-
282
- watch(() => props.modelValue, () => {
283
- if (!props.modelValue) {
284
- fileSelected.value.fileName = "";
285
- fileSelected.value.fileContent = null;
286
- }
287
- });
288
-
289
47
  return {
290
- invisibleButtonRef,
291
- fileSelected,
292
- isExtraSmall,
293
- style,
294
- onUpload,
295
- onRemove
48
+ image,
49
+ source,
50
+ onError
296
51
  };
297
52
  }
298
53
  });
@@ -0,0 +1,301 @@
1
+ <template>
2
+ <FSCol
3
+ gap="8px"
4
+ >
5
+ <slot
6
+ v-if="!$props.hideHeader"
7
+ name="label"
8
+ >
9
+ <FSRow
10
+ :wrap="false"
11
+ >
12
+ <FSSpan
13
+ v-if="$props.label"
14
+ class="fs-edit-image-label"
15
+ font="text-overline"
16
+ :style="style"
17
+ >
18
+ {{ $props.label }}
19
+ </FSSpan>
20
+ <FSSpan
21
+ v-if="$props.label && $props.required"
22
+ class="fs-edit-image-label"
23
+ style="margin-left: -8px;"
24
+ font="text-overline"
25
+ :ellipsis="false"
26
+ :style="style"
27
+ >
28
+ *
29
+ </FSSpan>
30
+ </FSRow>
31
+ </slot>
32
+ <FSCard
33
+ v-if="['standard'].includes($props.variant)"
34
+ padding="12px"
35
+ width="100%"
36
+ >
37
+ <FSRow
38
+ align="center-left"
39
+ :wrap="false"
40
+ >
41
+ <FSRow
42
+ gap="24px"
43
+ :wrap="false"
44
+ >
45
+ <FSImageUI
46
+ v-if="$props.source || $props.modelValue"
47
+ :aspectRatio="$props.aspectRatio"
48
+ :height="$props.height"
49
+ :width="$props.width"
50
+ :source="$props.source"
51
+ :imageB64="$props.modelValue"
52
+ v-bind="$attrs"
53
+ />
54
+ <FSCard
55
+ v-else
56
+ borderStyle="dashed"
57
+ :aspectRatio="$props.aspectRatio"
58
+ :height="$props.height"
59
+ :width="$props.width"
60
+ />
61
+ <FSCol
62
+ align="center-left"
63
+ height="fill"
64
+ width="hug"
65
+ gap="10px"
66
+ >
67
+ <FSText
68
+ v-if="fileSelected && fileSelected.fileName"
69
+ font="text-body"
70
+ :lineClamp="2"
71
+ >
72
+ {{ fileSelected.fileName }}
73
+ </FSText>
74
+ <FSCol
75
+ gap="0px"
76
+ >
77
+ <FSText
78
+ class="fs-edit-image-overline"
79
+ font="text-overline"
80
+ :style="style"
81
+ >
82
+ {{ $tr('ui.edit-image.format', 'PNG or JPG format') }}
83
+ </FSText>
84
+ <FSText
85
+ class="fs-edit-image-overline"
86
+ font="text-overline"
87
+ :style="style"
88
+ >
89
+ {{ $tr('ui.edit-image.size', '10 MB Maximum') }}
90
+ </FSText>
91
+ </FSCol>
92
+ </FSCol>
93
+ </FSRow>
94
+ <v-spacer />
95
+ <FSRow
96
+ width="hug"
97
+ >
98
+ <FSButtonFileMini
99
+ accept="image/*"
100
+ :readFile="false"
101
+ @update:metadata="onUpload"
102
+ />
103
+ <FSButtonRemoveMini
104
+ @click="onRemove"
105
+ />
106
+ </FSRow>
107
+ </FSRow>
108
+ </FSCard>
109
+ <FSRow
110
+ v-else-if="$props.source || $props.modelValue"
111
+ :width="$props.width"
112
+ class="fs-edit-image-full"
113
+ >
114
+ <FSImageUI
115
+ :aspectRatio="$props.aspectRatio"
116
+ :height="$props.height"
117
+ :width="$props.width"
118
+ :source="$props.source"
119
+ :imageB64="$props.modelValue"
120
+ v-bind="$attrs"
121
+ />
122
+ <FSRow
123
+ class="fs-edit-image-full-toolbar"
124
+ padding="4px"
125
+ >
126
+ <FSButtonFileMini
127
+ accept="image/*"
128
+ :readFile="false"
129
+ @update:metadata="onUpload"
130
+ />
131
+ <FSButtonRemoveMini
132
+ @click="onRemove"
133
+ />
134
+ </FSRow>
135
+ </FSRow>
136
+ <FSClickable
137
+ v-else
138
+ borderStyle="dashed"
139
+ variant="background"
140
+ :height="$props.height"
141
+ :width="$props.width"
142
+ @click="() => invisibleButtonRef.input.click()"
143
+ >
144
+ <FSRow
145
+ align="center-center"
146
+ :wrap="false"
147
+ >
148
+ <FSIcon>
149
+ mdi-plus-box-outline
150
+ </FSIcon>
151
+ <FSText
152
+ font="text-body"
153
+ :lineClamp="2"
154
+ >
155
+ {{ $tr('ui.edit-image.add-image', 'Add an image.') }}
156
+ </FSText>
157
+ <FSButtonFileMini
158
+ class="fs-edit-image-hidden-button"
159
+ ref="invisibleButtonRef"
160
+ accept="image/*"
161
+ :readFile="false"
162
+ @update:metadata="onUpload"
163
+ />
164
+ </FSRow>
165
+ </FSClickable>
166
+ </FSCol>
167
+ </template>
168
+
169
+ <script lang="ts">
170
+ import { computed, defineComponent, type PropType, ref, type StyleValue, watch } from "vue";
171
+
172
+ import { useBreakpoints, useColors } from "@dative-gpi/foundation-shared-components/composables";
173
+ import { ColorEnum, type FileImage } from "@dative-gpi/foundation-shared-components/models";
174
+ import { useFiles } from "@dative-gpi/foundation-shared-services/composables";
175
+
176
+ import FSButtonRemoveMini from "./buttons/FSButtonRemoveMini.vue";
177
+ import FSButtonFileMini from "./buttons/FSButtonFileMini.vue";
178
+ import FSClickable from "./FSClickable.vue";
179
+ import FSImageUI from "./FSImageUI.vue";
180
+ import FSCard from "./FSCard.vue";
181
+ import FSText from "./FSText.vue";
182
+ import FSCol from "./FSCol.vue";
183
+ import FSRow from "./FSRow.vue";
184
+
185
+ export default defineComponent({
186
+ name: "FSEditImageUI",
187
+ components: {
188
+ FSButtonRemoveMini,
189
+ FSButtonFileMini,
190
+ FSClickable,
191
+ FSImageUI,
192
+ FSCard,
193
+ FSText,
194
+ FSCol,
195
+ FSRow
196
+ },
197
+ props: {
198
+ height: {
199
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
200
+ required: false,
201
+ default: null
202
+ },
203
+ width: {
204
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
205
+ required: false,
206
+ default: null
207
+ },
208
+ label: {
209
+ type: String as PropType<string | null>,
210
+ required: false,
211
+ default: null
212
+ },
213
+ source: {
214
+ type: String as PropType<string | null>,
215
+ required: false,
216
+ default: null
217
+ },
218
+ aspectRatio: {
219
+ type: String as PropType<string | null>,
220
+ required: false,
221
+ default: null
222
+ },
223
+ modelValue: {
224
+ type: String as PropType<string | null>,
225
+ required: false,
226
+ default: null
227
+ },
228
+ variant: {
229
+ type: String as PropType<"standard" | "full">,
230
+ required: false,
231
+ default: "standard"
232
+ },
233
+ hideHeader: {
234
+ type: Boolean,
235
+ required: false,
236
+ default: false
237
+ },
238
+ required: {
239
+ type: Boolean,
240
+ required: false,
241
+ default: false
242
+ }
243
+ },
244
+ emits: ["update:modelValue", "update:source"],
245
+ setup(props, { emit }) {
246
+ const { isExtraSmall } = useBreakpoints();
247
+ const { getColors } = useColors();
248
+ const { readFile } = useFiles();
249
+
250
+ const fileSelected = ref<FileImage>({ fileName: "", fileContent: null });
251
+ const invisibleButtonRef = ref<HTMLFormElement | null>(null);
252
+
253
+ const errors = getColors(ColorEnum.Error);
254
+ const lights = getColors(ColorEnum.Light);
255
+ const darks = getColors(ColorEnum.Dark);
256
+
257
+ const style = computed((): StyleValue => ({
258
+ "--fs-edit-image-overline-text-color": lights.dark,
259
+ "--fs-edit-image-color" : darks.base,
260
+ "--fs-edit-image-error-color" : errors.base
261
+ }));
262
+
263
+ const onUpload = async (payload: File) => {
264
+ const content = (await readFile(payload)) as string;
265
+ fileSelected.value.fileName = payload.name;
266
+ fileSelected.value.fileContent = content;
267
+ emit("update:modelValue", content.substring(content.indexOf(',') + 1));
268
+ if (props.source) {
269
+ emit("update:source", null);
270
+ }
271
+ };
272
+
273
+ const onRemove = () => {
274
+ fileSelected.value.fileName = "";
275
+ fileSelected.value.fileContent = null;
276
+ if (props.modelValue) {
277
+ emit("update:modelValue", null);
278
+ }
279
+ else {
280
+ emit("update:source", null);
281
+ }
282
+ };
283
+
284
+ watch(() => props.modelValue, () => {
285
+ if (!props.modelValue) {
286
+ fileSelected.value.fileName = "";
287
+ fileSelected.value.fileContent = null;
288
+ }
289
+ });
290
+
291
+ return {
292
+ invisibleButtonRef,
293
+ fileSelected,
294
+ isExtraSmall,
295
+ style,
296
+ onUpload,
297
+ onRemove
298
+ };
299
+ }
300
+ });
301
+ </script>
@@ -1,6 +1,6 @@
1
1
  <template>
2
2
  <FSImageUI
3
- :blurhash="image"
3
+ :blurHash="image"
4
4
  :source="source"
5
5
  @error="onError"
6
6
  v-bind="$attrs"
@@ -74,7 +74,7 @@ export default defineComponent({
74
74
  default: null
75
75
  },
76
76
  modelValue: {
77
- type: Boolean,
77
+ type: Boolean as PropType<boolean | null>,
78
78
  required: false,
79
79
  default: false
80
80
  },
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-plus-circle-outline"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-cancel"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Light"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-content-copy"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Light"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-pencil-outline"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Light"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <div>
3
3
  <FSButton
4
+ padding="0 7px"
4
5
  :prependIcon="$props.icon"
5
6
  :color="ColorEnum.Light"
6
7
  @click="onClick"
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-chevron-right"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-chevron-left"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-redo-variant"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Light"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-delete-outline"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Error"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-content-save-outline"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-magnify"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-undo-variant"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Light"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-pencil-outline"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -1,6 +1,7 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-check"
4
+ padding="0 7px"
4
5
  :color="ColorEnum.Primary"
5
6
  v-bind="$attrs"
6
7
  />
@@ -41,16 +41,16 @@
41
41
  >
42
42
  <FSButton
43
43
  prependIcon="mdi-cancel"
44
+ width="100%"
44
45
  :label="$tr('ui.translateRichTextField.cancelButton.label', 'Cancel')"
45
- :fullWidth="true"
46
46
  @click="onCancelTranslations"
47
47
  />
48
48
  <FSButton
49
49
  v-if="$props.editable"
50
50
  prependIcon="mdi-check"
51
51
  color="primary"
52
+ width="100%"
52
53
  :label="$tr('ui.translateRichTextField.validateButton.label', 'Validate translations')"
53
- :fullWidth="true"
54
54
  @click="onSubmitTranslations"
55
55
  />
56
56
  </FSRow>
@@ -68,8 +68,8 @@
68
68
  <FSButton
69
69
  prependIcon="mdi-translate"
70
70
  color="primary"
71
+ width="100%"
71
72
  :label="$tr('ui.translateRichTextField.translateButton.label', 'Manage translations')"
72
- :fullWidth="true"
73
73
  @click="() => $emit('update:translationsExpanded', true)"
74
74
  />
75
75
  </template>
@@ -22,6 +22,7 @@
22
22
  <FSButton
23
23
  v-if="filterableHeaders.length > 0"
24
24
  prependIcon="mdi-filter-variant"
25
+ padding="0 7px"
25
26
  :variant="showFilters ? 'full' : 'standard'"
26
27
  @click="showFilters = !showFilters"
27
28
  />
@@ -65,6 +65,7 @@
65
65
  <FSButton
66
66
  v-if="$props.showFullScreen"
67
67
  prependIcon="mdi-fullscreen"
68
+ padding="0 7px"
68
69
  :elevation="true"
69
70
  @click="fullScreen = !fullScreen"
70
71
  />
@@ -86,10 +87,10 @@
86
87
  <FSButton
87
88
  v-if="$props.showMyLocation"
88
89
  prependIcon="mdi-crosshairs-gps"
90
+ padding="0 7px"
89
91
  color="primary"
90
92
  variant="full"
91
93
  :elevation="true"
92
- :border="false"
93
94
  @click="locate"
94
95
  />
95
96
  <FSCol
@@ -98,17 +99,15 @@
98
99
  >
99
100
 
100
101
  <FSButton
101
- class="fs-map-zoom-plus"
102
102
  prependIcon="mdi-plus"
103
+ padding="0 7px"
103
104
  :elevation="true"
104
- :border="false"
105
105
  @click="zoomIn"
106
106
  />
107
107
  <FSButton
108
- class="fs-map-zoom-minus"
109
108
  prependIcon="mdi-minus"
109
+ padding="0 7px"
110
110
  :elevation="true"
111
- :border="false"
112
111
  @click="zoomOut"
113
112
  />
114
113
  </FSCol>
@@ -1,19 +1,21 @@
1
1
  <template>
2
2
  <FSButton
3
3
  prependIcon="mdi-layers-outline"
4
+ padding="0 7px"
4
5
  :elevation="true"
5
6
  @click="dialog = true"
6
7
  />
7
8
  <FSDialog
8
9
  v-model="dialog"
9
- title="Select Layers"
10
- width="442px"
10
+ width="500px"
11
+ :title="$tr('ui.map.select-layer', 'Select layer')"
11
12
  >
12
13
  <template
13
14
  v-slot:body
14
15
  >
15
16
  <FSRow
16
17
  align="center-center"
18
+ padding="0 16px 0 0"
17
19
  >
18
20
  <FSImageCard
19
21
  v-for="layer in layers"
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-components",
3
3
  "sideEffects": false,
4
- "version": "1.0.15",
4
+ "version": "1.0.17",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -10,8 +10,8 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "@dative-gpi/foundation-shared-domain": "1.0.15",
14
- "@dative-gpi/foundation-shared-services": "1.0.15"
13
+ "@dative-gpi/foundation-shared-domain": "1.0.17",
14
+ "@dative-gpi/foundation-shared-services": "1.0.17"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@dative-gpi/bones-ui": "^0.0.75",
@@ -35,5 +35,5 @@
35
35
  "sass": "1.71.1",
36
36
  "sass-loader": "13.3.2"
37
37
  },
38
- "gitHead": "0d954dc13c1fbf94cbaae8c75b8f10b474baa9e4"
38
+ "gitHead": "83f8eb02faf9ad8eb20422e4f02a5da6ec46e2d2"
39
39
  }