@dative-gpi/foundation-shared-components 0.0.16 → 0.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.
@@ -17,12 +17,12 @@ export default defineComponent({
17
17
  name: "FSCol",
18
18
  props: {
19
19
  width: {
20
- type: String as PropType<"hug" | "fill" | string>,
20
+ type: [String, Number] as PropType<"hug" | "fill" | string | number>,
21
21
  required: false,
22
22
  default: "fill"
23
23
  },
24
24
  height: {
25
- type: String as PropType<"hug" | "fill" | string>,
25
+ type: [String, Number] as PropType<"hug" | "fill" | string | number>,
26
26
  required: false,
27
27
  default: "hug"
28
28
  },
@@ -1,18 +1,19 @@
1
1
  <template>
2
2
  <v-img
3
3
  class="fs-image"
4
- :src="source"
5
- :style="style"
6
- :cover="$props.cover"
7
- :width="computedWidth"
8
4
  :height="computedHeight"
5
+ :width="computedWidth"
6
+ :cover="$props.cover"
7
+ :style="style"
8
+ :src="source"
9
9
  v-bind="$attrs"
10
10
  >
11
11
  <template #placeholder>
12
- <v-skeleton-loader
12
+ <FSLoader
13
13
  class="fs-load-image"
14
- type="image"
15
- :style="style"
14
+ :borderRadius="$props.borderRadius"
15
+ :height="computedHeight"
16
+ :width="computedWidth"
16
17
  />
17
18
  </template>
18
19
  </v-img>
@@ -24,8 +25,13 @@ import { computed, defineComponent, onMounted, watch } from "vue";
24
25
  import { useImageRaw, useImageBlurHash } from "@dative-gpi/foundation-shared-services/composables";
25
26
  import { sizeToVar } from "@dative-gpi/foundation-shared-components/utils";
26
27
 
28
+ import FSLoader from "./FSLoader.vue";
29
+
27
30
  export default defineComponent({
28
31
  name: "FSImage",
32
+ components: {
33
+ FSLoader
34
+ },
29
35
  props: {
30
36
  imageId: {
31
37
  type: [String, null, undefined],
@@ -68,40 +74,40 @@ export default defineComponent({
68
74
  }
69
75
  });
70
76
 
71
- const computedWidth = computed((): number | string | undefined => {
72
- if (props.width) {
73
- return props.width;
74
- }
77
+ const computedHeight = computed((): number | string | undefined => {
75
78
  if (props.height) {
76
- if (typeof(props.height) === "string") {
79
+ return props.height;
80
+ }
81
+ if (props.width) {
82
+ if (typeof(props.width) === "string") {
77
83
  return undefined;
78
84
  }
79
85
  if (props.aspectRatio) {
80
86
  const split = props.aspectRatio.split('/');
81
87
  if (split.length === 2 && !isNaN(parseFloat(split[0])) && !isNaN(parseFloat(split[1]))) {
82
- return props.height * (parseFloat(split[0]) / parseFloat(split[1]));
88
+ return props.width * (parseFloat(split[1]) / parseFloat(split[0]));
83
89
  }
84
90
  }
85
- return props.height;
91
+ return props.width;
86
92
  }
87
93
  return undefined;
88
94
  });
89
95
 
90
- const computedHeight = computed((): number | string | undefined => {
91
- if (props.height) {
92
- return props.height;
93
- }
96
+ const computedWidth = computed((): number | string | undefined => {
94
97
  if (props.width) {
95
- if (typeof(props.width) === "string") {
98
+ return props.width;
99
+ }
100
+ if (props.height) {
101
+ if (typeof(props.height) === "string") {
96
102
  return undefined;
97
103
  }
98
104
  if (props.aspectRatio) {
99
105
  const split = props.aspectRatio.split('/');
100
106
  if (split.length === 2 && !isNaN(parseFloat(split[0])) && !isNaN(parseFloat(split[1]))) {
101
- return props.width * (parseFloat(split[1]) / parseFloat(split[0]));
107
+ return props.height * (parseFloat(split[0]) / parseFloat(split[1]));
102
108
  }
103
109
  }
104
- return props.width;
110
+ return props.height;
105
111
  }
106
112
  return undefined;
107
113
  });
@@ -141,10 +147,10 @@ export default defineComponent({
141
147
  }
142
148
 
143
149
  return {
144
- style,
145
- source,
150
+ computedHeight,
146
151
  computedWidth,
147
- computedHeight
152
+ source,
153
+ style
148
154
  };
149
155
  }
150
156
  });
@@ -7,21 +7,25 @@
7
7
  >
8
8
  {{ $props.label }}
9
9
  </span>
10
- <v-skeleton-loader
10
+ <FSLoader
11
11
  v-else
12
- type="text"
13
- :class="loadClasses"
12
+ :variant="$props.font"
14
13
  />
15
14
  </template>
16
15
 
17
16
  <script lang="ts">
18
17
  import { computed, defineComponent, PropType } from "vue";
19
18
 
20
- import { useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
19
+ import { useBreakpoints, useColors, useSlots } from "@dative-gpi/foundation-shared-components/composables";
21
20
  import { ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
22
21
 
22
+ import FSLoader from "./FSLoader.vue";
23
+
23
24
  export default defineComponent({
24
25
  name: "FSLabel",
26
+ components: {
27
+ FSLoader
28
+ },
25
29
  props: {
26
30
  label: {
27
31
  type: [String, null, undefined],
@@ -55,6 +59,7 @@ export default defineComponent({
55
59
  }
56
60
  },
57
61
  setup(props) {
62
+ const { isMobileSized } = useBreakpoints();
58
63
  const { getColors } = useColors();
59
64
  const { slots } = useSlots();
60
65
 
@@ -74,30 +79,25 @@ export default defineComponent({
74
79
  return classNames;
75
80
  });
76
81
 
77
- const loadClasses = computed((): string[] => {
78
- return ["fs-load-label", props.font];
79
- });
80
-
81
82
  const style = computed((): { [code: string]: string } & Partial<CSSStyleDeclaration> => {
82
83
  switch (props.variant) {
83
84
  case "base": return {
84
85
  "--fs-span-line-clamp": props.lineClamp.toString(),
85
- "--fs-label-color" : colors.value.base
86
+ "--fs-label-color" : colors.value.base
86
87
  };
87
88
  case "light": return {
88
89
  "--fs-span-line-clamp": props.lineClamp.toString(),
89
- "--fs-label-color" : colors.value.light
90
+ "--fs-label-color" : colors.value.light
90
91
  };
91
92
  case "dark": return {
92
93
  "--fs-span-line-clamp": props.lineClamp.toString(),
93
- "--fs-label-color" : colors.value.dark
94
+ "--fs-label-color" : colors.value.dark
94
95
  };
95
96
  }
96
97
  });
97
98
 
98
99
  return {
99
100
  classes,
100
- loadClasses,
101
101
  style
102
102
  };
103
103
  }
@@ -0,0 +1,107 @@
1
+ <template>
2
+ <v-skeleton-loader
3
+ class="fs-loader"
4
+ type="image"
5
+ :style="style"
6
+ />
7
+ </template>
8
+
9
+ <script lang="ts">
10
+ import { computed, defineComponent, PropType } from "vue";
11
+
12
+ import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
13
+ import { sizeToVar } from "@dative-gpi/foundation-shared-components/utils";
14
+
15
+ export default defineComponent({
16
+ name: "FSLoader",
17
+ props: {
18
+ width: {
19
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number>,
20
+ required: false,
21
+ default: null
22
+ },
23
+ height: {
24
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number>,
25
+ required: false,
26
+ default: null
27
+ },
28
+ borderRadius: {
29
+ type: [String, Number],
30
+ required: false,
31
+ default: "4px"
32
+ },
33
+ variant: {
34
+ type: String as PropType<"standard" | "button" | "input" | "chip" | "text-h1" | "text-h2" | "text-h3" | "text-h4" | "text-body" | "text-button" | "text-overline" | "text-underline">,
35
+ required: false,
36
+ default: "standard"
37
+ }
38
+ },
39
+ setup(props) {
40
+ const { isMobileSized, isExtraSmall } = useBreakpoints();
41
+
42
+ const style = computed((): {[code: string]: string} & Partial<CSSStyleDeclaration> => {
43
+ return {
44
+ "--fs-loader-border-radius": ["chip"].includes(props.variant) ? "50px" : sizeToVar(props.borderRadius),
45
+ "--fs-loader-height": sizeToVar(getHeight.value),
46
+ "--fs-loader-width" : sizeToVar(getWidth.value)
47
+ };
48
+ });
49
+
50
+ const getHeight = computed((): string | number => {
51
+ switch (props.variant) {
52
+ case "standard": {
53
+ if (Array.isArray(props.height)) {
54
+ if (isExtraSmall.value) {
55
+ return props.height[2] ?? props.height[1] ?? props.height[0];
56
+ }
57
+ if (isMobileSized.value) {
58
+ return props.height[1] ?? props.height[0];
59
+ }
60
+ return props.height[0];
61
+ }
62
+ return props.height;
63
+ }
64
+ case "button":
65
+ case "input": return isMobileSized.value ? "36px" : "40px";
66
+ case "chip": return isMobileSized.value ? "20px" : "24px";
67
+ case "text-h1": return isMobileSized.value ? "29px" : "36px";
68
+ case "text-h2": return isMobileSized.value ? "22px" : "27px";
69
+ case "text-h3": return isMobileSized.value ? "17px" : "21px";
70
+ case "text-h4": return isMobileSized.value ? "14px" : "16px";
71
+ case "text-body":
72
+ case "text-button": return isMobileSized.value ? "12px" : "14px";
73
+ case "text-overline":
74
+ case "text-underline": return isMobileSized.value ? "10px" : "12px";
75
+ }
76
+ });
77
+
78
+ const getWidth = computed((): string | number => {
79
+ switch (props.variant) {
80
+ case "standard": {
81
+ if (Array.isArray(props.width)) {
82
+ if (isExtraSmall.value) {
83
+ return props.width[2] ?? props.width[1] ?? props.width[0];
84
+ }
85
+ if (isMobileSized.value) {
86
+ return props.width[1] ?? props.width[0];
87
+ }
88
+ return props.width[0];
89
+ }
90
+ return props.width;
91
+ }
92
+ case "button": return isMobileSized ? "36px" : "40px";
93
+ case "input": return isMobileSized ? "calc(50% - 124px)" : "calc(50% - 132px)";
94
+ case "chip": return "8vw";
95
+ case "text-h1": return "calc(50% - 32px)";
96
+ case "text-h2": return "calc(60% - 32px)";
97
+ case "text-h3": return "calc(65% - 32px)";
98
+ default: return "calc(75% - 32px)";
99
+ }
100
+ });
101
+
102
+ return {
103
+ style
104
+ };
105
+ }
106
+ });
107
+ </script>
@@ -17,12 +17,12 @@ export default defineComponent({
17
17
  name: "FSRow",
18
18
  props: {
19
19
  width: {
20
- type: String as PropType<"hug" | "fill" | string>,
20
+ type: [String, Number] as PropType<"hug" | "fill" | string | number>,
21
21
  required: false,
22
22
  default: "fill"
23
23
  },
24
24
  height: {
25
- type: String as PropType<"hug" | "fill" | string>,
25
+ type: [String, Number] as PropType<"hug" | "fill" | string | number>,
26
26
  required: false,
27
27
  default: "hug"
28
28
  },
@@ -367,34 +367,35 @@
367
367
  <FSRow
368
368
  width="hug"
369
369
  >
370
- <template v-for="(item, index) in items">
371
- <FSDataIteratorItem
372
- v-if="item.type === 'item'"
373
- :key="index"
374
- :item="item.raw"
375
- :color="$props.color"
376
- :itemTo="$props.itemTo"
377
- :showSelect="$props.showSelect"
378
- :headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
379
- :modelValue="innerValue.includes(item.raw[$props.itemValue])"
380
- @update:modelValue="toggleSelect"
381
- >
382
- <template #[`item.top`]="props">
383
- <slot name="item.top" v-bind="props" />
384
- </template>
385
- <template v-for="(item, index) in itemsSlots" #[item.slotName]="props">
386
- <slot :name="item.slotName" v-bind="props">
387
- <FSText
388
- :key="index"
389
- >
390
- {{ props.item[item.value] }}
391
- </FSText>
392
- </slot>
393
- </template>
394
- <template #[`item.bottom`]="props">
395
- <slot name="item.bottom" v-bind="props" />
396
- </template>
397
- </FSDataIteratorItem>
370
+ <template v-for="(item, index) in items.filter((item) => item.type === 'item')">
371
+ <slot name="item.tile" v-bind="{ index, item: item.raw, toggleSelect }">
372
+ <FSDataIteratorItem
373
+ :key="index"
374
+ :item="item.raw"
375
+ :color="$props.color"
376
+ :itemTo="$props.itemTo"
377
+ :showSelect="$props.showSelect"
378
+ :headers="innerHeaders.filter(h => !$props.sneakyHeaders.includes(h.value))"
379
+ :modelValue="innerValue.includes(item.raw[$props.itemValue])"
380
+ @update:modelValue="toggleSelect"
381
+ >
382
+ <template #[`item.top`]="props">
383
+ <slot name="item.top" v-bind="props" />
384
+ </template>
385
+ <template v-for="(item, index) in itemsSlots" #[item.slotName]="props">
386
+ <slot :name="item.slotName" v-bind="props">
387
+ <FSText
388
+ :key="index"
389
+ >
390
+ {{ props.item[item.value] }}
391
+ </FSText>
392
+ </slot>
393
+ </template>
394
+ <template #[`item.bottom`]="props">
395
+ <slot name="item.bottom" v-bind="props" />
396
+ </template>
397
+ </FSDataIteratorItem>
398
+ </slot>
398
399
  </template>
399
400
  </FSRow>
400
401
  </template>
@@ -7,29 +7,29 @@
7
7
  <FSRow
8
8
  align="bottom-center"
9
9
  >
10
- <v-skeleton-loader
11
- type="button"
10
+ <FSLoader
11
+ variant="input"
12
12
  />
13
- <v-skeleton-loader
14
- type="button"
13
+ <FSLoader
14
+ variant="button"
15
15
  />
16
16
  <v-spacer />
17
- <v-skeleton-loader
18
- type="button"
17
+ <FSLoader
18
+ variant="button"
19
19
  />
20
- <v-skeleton-loader
21
- type="button"
20
+ <FSLoader
21
+ variant="button"
22
22
  />
23
23
  </FSRow>
24
24
  <FSRow>
25
- <v-skeleton-loader
26
- type="chip"
25
+ <FSLoader
26
+ variant="chip"
27
27
  />
28
- <v-skeleton-loader
29
- type="chip"
28
+ <FSLoader
29
+ variant="chip"
30
30
  />
31
- <v-skeleton-loader
32
- type="chip"
31
+ <FSLoader
32
+ variant="chip"
33
33
  />
34
34
  </FSRow>
35
35
  <v-skeleton-loader
@@ -38,17 +38,17 @@
38
38
  <FSRow
39
39
  align="bottom-right"
40
40
  >
41
- <v-skeleton-loader
42
- type="button"
41
+ <FSLoader
42
+ variant="input"
43
43
  />
44
- <v-skeleton-loader
45
- type="button"
44
+ <FSLoader
45
+ variant="button"
46
46
  />
47
- <v-skeleton-loader
48
- type="button"
47
+ <FSLoader
48
+ variant="button"
49
49
  />
50
- <v-skeleton-loader
51
- type="button"
50
+ <FSLoader
51
+ variant="button"
52
52
  />
53
53
  </FSRow>
54
54
  </FSCol>
@@ -60,12 +60,14 @@ import { computed, defineComponent } from "vue";
60
60
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
61
61
  import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
62
62
 
63
+ import FSLoader from "../FSLoader.vue";
63
64
  import FSCol from "../FSCol.vue";
64
65
  import FSRow from "../FSRow.vue";
65
66
 
66
67
  export default defineComponent({
67
68
  name: "FSLoadDataTable",
68
69
  components: {
70
+ FSLoader,
69
71
  FSCol,
70
72
  FSRow
71
73
  },
@@ -2,20 +2,41 @@
2
2
  <FSCard
3
3
  class="fs-load-tile"
4
4
  padding="11px"
5
+ :height="heights.card"
6
+ :width="widths.card"
5
7
  :style="style"
6
- :width="width"
7
- :height="height"
8
8
  >
9
9
  <FSRow
10
10
  align="center-center"
11
11
  height="fill"
12
+ width="fill"
12
13
  gap="24px"
13
14
  >
14
- <v-skeleton-loader
15
- type="article"
16
- />
17
- <v-skeleton-loader
18
- type="image"
15
+ <FSCol
16
+ :height="heights.col"
17
+ :width="widths.col"
18
+ gap="24px"
19
+ >
20
+ <FSCol>
21
+ <FSLoader
22
+ variant="text-button"
23
+ />
24
+ <FSLoader
25
+ variant="text-overline"
26
+ />
27
+ </FSCol>
28
+ <FSCol>
29
+ <FSLoader
30
+ variant="text-overline"
31
+ />
32
+ <FSLoader
33
+ variant="text-overline"
34
+ />
35
+ </FSCol>
36
+ </FSCol>
37
+ <FSLoader
38
+ :height="heights.image"
39
+ :width="widths.image"
19
40
  />
20
41
  </FSRow>
21
42
  <FSContainer
@@ -39,6 +60,7 @@ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
39
60
 
40
61
  import FSContainer from "../FSContainer.vue";
41
62
  import FSCheckbox from "../FSCheckbox.vue";
63
+ import FSLoader from "../FSLoader.vue";
42
64
  import FSCard from "../FSCard.vue";
43
65
  import FSCol from "../FSCol.vue";
44
66
  import FSRow from "../FSRow.vue";
@@ -48,6 +70,7 @@ export default defineComponent({
48
70
  components: {
49
71
  FSContainer,
50
72
  FSCheckbox,
73
+ FSLoader,
51
74
  FSCard,
52
75
  FSCol,
53
76
  FSRow
@@ -71,12 +94,20 @@ export default defineComponent({
71
94
 
72
95
  const backgroundColors = getColors(ColorEnum.Background);
73
96
 
74
- const width = computed(() => {
75
- return isMobileSized.value ? 336 : 352;
97
+ const heights = computed(() => {
98
+ return {
99
+ image: isMobileSized.value ? "90px" : "100px",
100
+ card: isMobileSized.value ? "156px" : "170px",
101
+ col: isMobileSized.value ? "90px" : "100px"
102
+ }
76
103
  });
77
104
 
78
- const height = computed(() => {
79
- return isMobileSized.value ? 156 : 170;
105
+ const widths = computed(() => {
106
+ return {
107
+ image: isMobileSized.value ? "90px" : "100px",
108
+ card: isMobileSized.value ? "336px" : "352px",
109
+ col: isMobileSized.value ? "198px" : "204px"
110
+ }
80
111
  });
81
112
 
82
113
  const style = computed((): {[code: string]: string} & Partial<CSSStyleDeclaration> => {
@@ -86,8 +117,8 @@ export default defineComponent({
86
117
  });
87
118
 
88
119
  return {
89
- width,
90
- height,
120
+ heights,
121
+ widths,
91
122
  style
92
123
  };
93
124
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-components",
3
3
  "sideEffects": false,
4
- "version": "0.0.16",
4
+ "version": "0.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": "0.0.16",
14
- "@dative-gpi/foundation-shared-services": "0.0.16",
13
+ "@dative-gpi/foundation-shared-domain": "0.0.17",
14
+ "@dative-gpi/foundation-shared-services": "0.0.17",
15
15
  "@fontsource/montserrat": "^5.0.16",
16
16
  "@lexical/clipboard": "^0.12.5",
17
17
  "@lexical/history": "^0.12.5",
@@ -32,5 +32,5 @@
32
32
  "sass": "^1.69.5",
33
33
  "sass-loader": "^13.3.2"
34
34
  },
35
- "gitHead": "fb785c5b56d223d39193f3ab2032efe34981cfb2"
35
+ "gitHead": "306471c4e5e2ba6ccccaf44d9162b5d5f3941bff"
36
36
  }
@@ -1,14 +1,7 @@
1
1
  .fs-autocomplete-field {
2
- padding: 0px !important;
3
- min-width: 240px;
4
- width: 100%;
5
-
6
2
  & > .v-input__control > .v-field {
7
3
  border: 1px solid var(--fs-autocomplete-field-border-color) !important;
8
4
  cursor: var(--fs-autocomplete-field-cursor) !important;
9
- border-radius: 4px !important;
10
- padding: 0 16px !important;
11
- gap: 8px;
12
5
 
13
6
  &--error {
14
7
  border-color: var(--fs-autocomplete-field-error-border-color) !important;
@@ -18,32 +11,9 @@
18
11
  border-color: var(--fs-autocomplete-field-active-border-color) !important;
19
12
  }
20
13
 
21
- & > .v-field__outline {
22
- display: none;
23
- }
24
-
25
14
  & > .v-field__field > .v-field__input {
26
- @extend .text-body;
27
-
28
- flex-wrap: nowrap;
29
- overflow: hidden;
30
- padding-inline: 0 !important;
31
15
  color: var(--fs-autocomplete-field-color);
32
16
  cursor: var(--fs-autocomplete-field-cursor) !important;
33
-
34
- @include web {
35
- min-height: 38px !important;
36
- height: 38px !important;
37
- }
38
-
39
- @include mobile {
40
- min-height: 34px !important;
41
- height: 34px !important;
42
- }
43
- }
44
-
45
- & > .v-field__clearable {
46
- margin-inline: 0px;
47
17
  }
48
18
 
49
19
  & > .v-field__append-inner {
@@ -1,11 +1,3 @@
1
- .fs-color-field {
2
- min-width:190px;
3
- }
4
-
5
- .fs-color-field-opacity {
6
- min-width: 150px;
7
- }
8
-
9
1
  .fs-color-field .v-field__prepend-inner > .v-icon {
10
2
  opacity: 1 !important;
11
3
  }
@@ -1,12 +1,5 @@
1
1
  .fs-load-image {
2
2
  border-radius: var(--fs-image-border-radius);
3
- max-height: 100%;
4
- height: 100%;
5
-
6
- & > .v-skeleton-loader__image {
7
- max-height: 100%;
8
- height: 100%;
9
- }
10
3
  }
11
4
 
12
5
  .fs-image {
@@ -2,85 +2,4 @@
2
2
  color: var(--fs-label-color);
3
3
 
4
4
  @extend .fs-span;
5
- }
6
-
7
- .fs-load-label {
8
- & > .v-skeleton-loader__text {
9
- margin: 0px;
10
- height: 100%;
11
- }
12
-
13
- &.text-h1 {
14
- width: calc(50% - 32px);
15
-
16
- @include web {
17
- height: 36px;
18
- }
19
-
20
- @include mobile {
21
- height: 29px;
22
- }
23
- }
24
-
25
- &.text-h2 {
26
- width: calc(60% - 32px);
27
-
28
- @include web {
29
- height: 27px;
30
- }
31
-
32
- @include mobile {
33
- height: 22px;
34
- }
35
- }
36
-
37
- &.text-h3 {
38
- width: calc(65% - 32px);
39
-
40
- @include web {
41
- height: 21px;
42
- }
43
-
44
- @include mobile {
45
- height: 17px;
46
- }
47
- }
48
-
49
- &.text-h4 {
50
- width: calc(75% - 32px);
51
-
52
- @include web {
53
- height: 16px;
54
- }
55
-
56
- @include mobile {
57
- height: 14px;
58
- }
59
- }
60
-
61
- &.text-body,
62
- &.text-button {
63
- width: calc(75% - 32px);
64
-
65
- @include web {
66
- height: 14px;
67
- }
68
-
69
- @include mobile {
70
- height: 12px;
71
- }
72
- }
73
-
74
- &.text-overline,
75
- &.text-underline {
76
- width: calc(75% - 32px);
77
-
78
- @include web {
79
- height: 12px;
80
- }
81
-
82
- @include mobile {
83
- height: 10px;
84
- }
85
- }
86
5
  }
@@ -2,76 +2,12 @@
2
2
  position: relative;
3
3
  }
4
4
 
5
- .fs-load-data-table .fs-row:first-of-type .v-skeleton-loader__button {
6
- margin: 0;
7
-
8
- @include web {
9
- height: 40px !important;
10
- min-width: 40px;
11
- }
12
-
13
- @include mobile {
14
- height: 36px !important;
15
- min-width: 36px;
16
- }
17
- }
18
-
19
- .fs-load-data-table .fs-row:first-of-type .v-skeleton-loader:first-of-type {
20
- @include web {
21
- min-width: calc(50% - 132px);
22
- }
23
-
24
- @include mobile {
25
- min-width: calc(50% - 124px);
26
- }
27
-
28
- & .v-skeleton-loader__button {
29
- min-width: 100%;
30
- }
31
- }
32
-
33
- .fs-load-data-table .fs-row:nth-of-type(2) .v-skeleton-loader__chip {
34
- margin: 0;
35
- border-radius: 50px !important;
36
- min-width: 10vw;
37
-
38
- @include web {
39
- height: 24px !important;
40
- }
41
-
42
- @include mobile {
43
- height: 20px !important;
44
- }
45
- }
46
-
47
5
  .fs-load-data-table .v-skeleton-loader:has(.v-skeleton-loader__table-row-divider),
48
6
  .fs-load-data-table .v-skeleton-loader:has(.v-skeleton-loader__table-thead) {
49
- background-color: var(--fs-load-tile-background-color);
7
+ background-color: var(--fs-load-data-table-background-color);
50
8
  min-width: 100%;
51
9
  }
52
10
 
53
11
  .fs-load-data-table .v-skeleton-loader__table-row {
54
12
  margin: 0 -8px;
55
- }
56
-
57
- .fs-load-data-table .fs-row:last-of-type .v-skeleton-loader__button {
58
- margin: 0;
59
-
60
- @include web {
61
- height: 40px !important;
62
- min-width: 40px;
63
- }
64
-
65
- @include mobile {
66
- height: 36px !important;
67
- min-width: 36px;
68
- }
69
- }
70
-
71
- .fs-load-data-table .fs-row:last-of-type .v-skeleton-loader:first-of-type {
72
- min-width: 120px;
73
-
74
- & .v-skeleton-loader__button {
75
- min-width: 100%;
76
- }
77
13
  }
@@ -1,49 +1,3 @@
1
1
  .fs-load-tile {
2
2
  position: relative;
3
- }
4
-
5
- .fs-load-tile .v-skeleton-loader {
6
- background-color: var(--fs-load-tile-background-color);
7
-
8
- & .v-skeleton-loader__article {
9
- gap: 8px;
10
-
11
- @include web {
12
- width: 204px;
13
- height: 100px;
14
- }
15
-
16
- @include mobile {
17
- width: 198px;
18
- height: 90px;
19
- }
20
- }
21
-
22
- & .v-skeleton-loader__heading {
23
- margin: 0;
24
- }
25
-
26
- & .v-skeleton-loader__paragraph {
27
- gap: 8px;
28
- }
29
-
30
- & .v-skeleton-loader__text {
31
- margin: 0;
32
- }
33
-
34
- & .v-skeleton-loader__bone {
35
- border-radius: 4px;
36
- }
37
-
38
- & .v-skeleton-loader__image {
39
- @include web {
40
- width: 100px;
41
- height: 100px;
42
- }
43
-
44
- @include mobile {
45
- width: 90px;
46
- height: 90px;
47
- }
48
- }
49
3
  }
@@ -0,0 +1,12 @@
1
+ .fs-loader {
2
+ min-height: var(--fs-loader-height);
3
+ height: var(--fs-loader-height);
4
+ min-width: var(--fs-loader-width);
5
+ width: var(--fs-loader-width);
6
+
7
+ & > .v-skeleton-loader__image {
8
+ border-radius: var(--fs-loader-border-radius) !important;
9
+ height: 100%;
10
+ width: 100%;
11
+ }
12
+ }
@@ -1,58 +1,22 @@
1
- .fs-select-field {
2
- padding: 0px !important;
3
- min-width: 240px;
4
- width: 100%;
1
+ .fs-select-field > .v-input__control > .v-field {
2
+ border: 1px solid var(--fs-select-field-border-color) !important;
3
+ cursor: var(--fs-select-field-cursor) !important;
5
4
 
6
- & > .v-input__control > .v-field {
7
- border: 1px solid var(--fs-select-field-border-color) !important;
8
- cursor: var(--fs-select-field-cursor) !important;
9
- border-radius: 4px !important;
10
- padding: 0 16px !important;
11
- gap: 8px;
12
-
13
- &--error {
14
- border-color: var(--fs-select-field-error-border-color) !important;
15
- }
16
-
17
- &:not(.v-field--error):focus-within {
18
- border-color: var(--fs-select-field-active-border-color) !important;
19
- }
20
-
21
- & > .v-field__outline {
22
- display: none;
23
- }
24
-
25
- & > .v-field__field > .v-field__input {
26
- @extend .text-body;
27
-
28
- flex-wrap: nowrap;
29
- overflow: hidden;
30
- padding-inline: 0 !important;
31
- color: var(--fs-select-field-color);
32
- cursor: var(--fs-select-field-cursor) !important;
33
-
34
- @include web {
35
- min-height: 38px !important;
36
- height: 38px !important;
37
- }
38
-
39
- @include mobile {
40
- min-height: 34px !important;
41
- height: 34px !important;
42
- }
5
+ &--error {
6
+ border-color: var(--fs-select-field-error-border-color) !important;
7
+ }
43
8
 
44
- & > .v-select__selection {
45
- height: 100%;
46
- }
47
- }
9
+ &:not(.v-field--error):focus-within {
10
+ border-color: var(--fs-select-field-active-border-color) !important;
11
+ }
48
12
 
49
- & > .v-field__clearable {
50
- margin-inline: 0px;
51
- }
13
+ & > .v-field__field > .v-field__input {
14
+ color: var(--fs-select-field-color);
15
+ cursor: var(--fs-select-field-cursor) !important;
16
+ }
52
17
 
53
- & > .v-field__append-inner {
54
- color: var(--fs-select-field-color);
55
- }
18
+ & > .v-field__append-inner {
19
+ color: var(--fs-select-field-color);
56
20
  }
57
21
  }
58
22
 
@@ -1,11 +1,6 @@
1
1
  .fs-text-area:not(.fs-text-area-auto-grow) {
2
- padding: 0px !important;
3
- min-width: 240px;
4
- width: 100%;
5
-
6
2
  & > .v-input__control > .v-field {
7
3
  border: 1px solid var(--fs-text-area-border-color) !important;
8
- border-radius: 4px !important;
9
4
  padding: 0 !important;
10
5
 
11
6
  &--error {
@@ -16,19 +11,14 @@
16
11
  border-color: var(--fs-text-area-active-border-color) !important;
17
12
  }
18
13
 
19
- & > .v-field__outline {
20
- display: none;
21
- }
22
-
23
14
  & > .v-field__field > .v-field__input {
24
15
  @extend .text-body;
25
-
16
+
26
17
  @extend .fs-hide-y-scrollbar;
27
18
 
28
19
  mask-image: none !important;
29
20
  -webkit-mask-image: none !important;
30
21
 
31
- padding-inline: 0 !important;
32
22
  margin: 2px 2px 2px 0 !important;
33
23
  cursor: var(--fs-text-area-cursor) !important;
34
24
  min-height: var(--fs-text-area-min-height);
@@ -47,13 +37,8 @@
47
37
  }
48
38
 
49
39
  .fs-text-area-auto-grow {
50
- padding: 0px !important;
51
- min-width: 240px;
52
- width: 100%;
53
-
54
40
  & > .v-input__control > .v-field {
55
41
  border: 1px solid var(--fs-text-area-border-color) !important;
56
- border-radius: 4px !important;
57
42
  padding: 0 !important;
58
43
 
59
44
  &--error {
@@ -64,10 +49,6 @@
64
49
  border-color: var(--fs-text-area-active-border-color) !important;
65
50
  }
66
51
 
67
- & > .v-field__outline {
68
- display: none;
69
- }
70
-
71
52
  & > .v-field__field > .v-field__input {
72
53
  @extend .text-body;
73
54
 
@@ -1,50 +1,18 @@
1
- .fs-text-field {
2
- padding: 0px !important;
3
- min-width: 240px;
4
- width: 100%;
1
+ .fs-text-field > .v-input__control > .v-field {
2
+ border: 1px solid var(--fs-text-field-border-color) !important;
3
+ cursor: var(--fs-text-field-cursor) !important;
5
4
 
6
- & > .v-input__control > .v-field {
7
- border: 1px solid var(--fs-text-field-border-color) !important;
8
- cursor: var(--fs-text-field-cursor) !important;
9
- border-radius: 4px !important;
10
- padding: 0 16px !important;
11
- gap: 8px;
12
-
13
- &--error {
14
- border-color: var(--fs-text-field-error-border-color) !important;
15
- }
16
-
17
- &:not(.v-field--error):focus-within {
18
- border-color: var(--fs-text-field-active-border-color) !important;
19
- }
20
-
21
- & > .v-field__outline {
22
- display: none;
23
- }
5
+ &--error {
6
+ border-color: var(--fs-text-field-error-border-color) !important;
7
+ }
24
8
 
25
- & > .v-field__field {
26
- & > input {
27
- @extend .text-body;
28
-
29
- padding-inline: 0 !important;
30
- color: var(--fs-text-field-color);
31
- cursor: var(--fs-select-field-cursor) !important;
32
-
33
- @include web {
34
- min-height: 38px !important;
35
- height: 38px !important;
36
- }
37
-
38
- @include mobile {
39
- min-height: 34px !important;
40
- height: 34px !important;
41
- }
42
- }
43
- }
9
+ &:not(.v-field--error):focus-within {
10
+ border-color: var(--fs-text-field-active-border-color) !important;
11
+ }
44
12
 
45
- & > .v-field__clearable {
46
- margin-inline: 0px;
47
- }
13
+ & > .v-field__field > .v-field__input {
14
+ color: var(--fs-text-field-color);
15
+ cursor: var(--fs-select-field-cursor) !important;
48
16
  }
49
17
  }
50
18
 
@@ -28,6 +28,7 @@
28
28
  @import "fs_link.scss";
29
29
  @import "fs_load_data_table.scss";
30
30
  @import "fs_load_tile.scss";
31
+ @import "fs_loader.scss";
31
32
  @import "fs_pagination.scss";
32
33
  @import "fs_password_field.scss";
33
34
  @import "fs_radio.scss";
@@ -8,20 +8,60 @@
8
8
  display: none;
9
9
  }
10
10
 
11
- // Margin with prepend / append downgraded to default gap
12
- .v-input > .v-input__prepend {
13
- margin-inline-end: 8px !important;
14
- }
11
+ // Applies to all inputs
12
+ .v-input {
13
+ padding: 0px !important;
14
+ min-width: 240px;
15
+ width: 100%;
15
16
 
16
- .v-input > .v-input__append {
17
- margin-inline-start: 8px !important;
18
- }
17
+ & .v-input__prepend {
18
+ margin-inline-end: 8px !important;
19
+ }
20
+
21
+ & .v-input__append {
22
+ margin-inline-start: 8px !important;
23
+ }
24
+
25
+ & > .v-input__control > .v-field {
26
+ border-radius: 4px !important;
19
27
 
20
- // Clearable icon is always centered vertically
21
- .v-input__control > .v-field > .v-field__clearable {
22
- align-items: center;
23
- padding-top: 0px;
24
- height: 100%;
28
+ & > .v-field__clearable {
29
+ align-items: center;
30
+ margin-inline: 0px;
31
+ padding-top: 0px;
32
+ height: 100%;
33
+ }
34
+
35
+ & > .v-field__outline {
36
+ display: none !important;
37
+ }
38
+ }
39
+
40
+ &:not(.fs-text-area) > .v-input__control > .v-field {
41
+ padding: 0 16px !important;
42
+ gap: 8px;
43
+
44
+ & > .v-field__field > .v-field__input {
45
+ @extend .text-body;
46
+
47
+ padding-inline: 0px !important;
48
+ padding-bottom: 0px !important;
49
+ padding-top: 0px !important;
50
+ align-items: center;
51
+ flex-wrap: nowrap;
52
+ overflow: hidden;
53
+
54
+ @include web {
55
+ min-height: 38px !important;
56
+ height: 38px !important;
57
+ }
58
+
59
+ @include mobile {
60
+ min-height: 34px !important;
61
+ height: 34px !important;
62
+ }
63
+ }
64
+ }
25
65
  }
26
66
 
27
67