@dative-gpi/foundation-shared-components 1.0.131 → 1.0.133-dashboard-options

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 (37) hide show
  1. package/components/FSBreadcrumbs.vue +20 -12
  2. package/components/FSDialogMenu.vue +17 -8
  3. package/components/FSDialogRemove.vue +1 -1
  4. package/components/FSFadeOut.vue +1 -1
  5. package/components/FSSpan.vue +8 -5
  6. package/components/FSText.vue +7 -5
  7. package/components/fields/FSAutocompleteField.vue +36 -52
  8. package/components/fields/FSSelectField.vue +36 -52
  9. package/components/fields/FSTranslateRichTextField.vue +17 -2
  10. package/components/lists/FSDataTableUI.vue +22 -14
  11. package/components/map/FSMap.vue +18 -8
  12. package/components/map/FSMapOverlay.vue +34 -19
  13. package/components/tiles/FSLocationTileUI.vue +1 -1
  14. package/components/views/desktop/FSBaseDefaultDesktopView.vue +8 -7
  15. package/components/views/desktop/FSBaseEntityDesktopView.vue +1 -0
  16. package/components/views/mobile/FSBaseDefaultMobileView.vue +8 -7
  17. package/components/views/mobile/FSBaseEntityMobileView.vue +1 -0
  18. package/composables/useSlots.ts +2 -1
  19. package/models/rules.ts +5 -2
  20. package/package.json +4 -4
  21. package/styles/components/fs_breadcrumbs.scss +19 -31
  22. package/styles/components/fs_button.scss +7 -5
  23. package/styles/components/fs_chip.scss +8 -6
  24. package/styles/components/fs_clickable.scss +14 -12
  25. package/styles/components/fs_data_iterator_item.scss +12 -10
  26. package/styles/components/fs_dialog.scss +1 -1
  27. package/styles/components/fs_dialog_menu.scss +4 -2
  28. package/styles/components/fs_image_card.scss +5 -3
  29. package/styles/components/fs_map.scss +11 -7
  30. package/styles/components/fs_password_field.scss +4 -2
  31. package/styles/components/fs_span.scss +12 -4
  32. package/styles/components/fs_tabs.scss +9 -5
  33. package/styles/components/fs_tag.scss +9 -7
  34. package/styles/globals/overrides.scss +11 -4
  35. package/styles/globals/scrollbars.scss +10 -0
  36. package/utils/index.ts +1 -0
  37. package/utils/operations.ts +69 -0
@@ -10,7 +10,7 @@
10
10
  v-show="isExtraSmall"
11
11
  ref="mobileOverlayWrapper"
12
12
  class="fs-map-overlay-mobile"
13
- :style="{ height: $props.mode === 'expand' ? '90%' : ($props.mode === 'half' ? '60%' : '20px') }"
13
+ :style="{ height: $props.mode === 'expand' ? '90%' : ($props.mode === 'half' ? '60%' : 'auto') }"
14
14
  >
15
15
  <FSCard
16
16
  width="100%"
@@ -24,14 +24,18 @@
24
24
  >
25
25
  <FSRow
26
26
  align="center-center"
27
- @touchstart="$props.mode === 'expand' ? $emit('update:mode', 'collapse') : $emit('update:mode', 'expand')"
27
+ style="cursor: pointer;"
28
+ @touchstart="onClick"
29
+ @mousedown="onClick"
28
30
  >
29
- <FSButton
30
- variant="icon"
31
- :icon="$props.mode === 'expand' ? 'mdi-chevron-down' : 'mdi-chevron-up'"
32
- @click="$props.mode === 'expand' ? $emit('update:mode', 'collapse') : $emit('update:mode', 'expand')"
33
- />
31
+ <FSIcon>
32
+ {{ $props.mode === 'expand' ? 'mdi-chevron-down' : 'mdi-chevron-up' }}
33
+ </FSIcon>
34
34
  </FSRow>
35
+ <slot
36
+ v-if="$props.mode === 'collapse'"
37
+ name="collapsed"
38
+ />
35
39
  <FSCol
36
40
  v-if="$props.mode !== 'collapse'"
37
41
  height="fill"
@@ -44,7 +48,6 @@
44
48
  </FSCol>
45
49
  </FSCard>
46
50
  </div>
47
-
48
51
  <FSCard
49
52
  v-show="!isExtraSmall"
50
53
  class="fs-map-overlay-desktop"
@@ -64,14 +67,22 @@
64
67
 
65
68
  <script lang="ts">
66
69
  import { defineComponent, type PropType, onUnmounted, onMounted, ref } from "vue";
70
+
67
71
  import { useBreakpoints } from "../../composables";
68
- import FSButton from "../FSButton.vue";
72
+
69
73
  import FSCard from "../FSCard.vue";
74
+ import FSIcon from "../FSIcon.vue";
70
75
  import FSCol from "../FSCol.vue";
71
76
  import FSRow from "../FSRow.vue";
72
77
 
73
78
  export default defineComponent({
74
79
  name: "FSMapOverlay",
80
+ components: {
81
+ FSCard,
82
+ FSIcon,
83
+ FSCol,
84
+ FSRow
85
+ },
75
86
  props: {
76
87
  mode: {
77
88
  type: String as PropType<"collapse" | "half" | "expand">,
@@ -79,15 +90,9 @@ export default defineComponent({
79
90
  default: "collapse"
80
91
  }
81
92
  },
82
- components: {
83
- FSButton,
84
- FSCard,
85
- FSCol,
86
- FSRow
87
- },
88
93
  emits: ["update:mode", "update:height", "update:width"],
89
- setup(_, { emit }) {
90
- const { isExtraSmall } = useBreakpoints();
94
+ setup(props, { emit }) {
95
+ const { isExtraSmall, isTouchScreenEnabled } = useBreakpoints();
91
96
 
92
97
  const mobileOverlayWrapper = ref<HTMLDivElement | null>(null);
93
98
  const desktopOverlay = ref<InstanceType<typeof FSCard> | null>(null);
@@ -95,6 +100,14 @@ export default defineComponent({
95
100
  const mobileResizeObserver = ref<ResizeObserver | null>(null);
96
101
  const desktopResizeObserver = ref<ResizeObserver | null>(null);
97
102
 
103
+ const onClick = (): void => {
104
+ if (props.mode === "expand") {
105
+ emit("update:mode", "collapse");
106
+ return;
107
+ }
108
+ emit("update:mode", "expand");
109
+ }
110
+
98
111
  onMounted(() => {
99
112
  mobileResizeObserver.value = new ResizeObserver(entries => {
100
113
  entries.forEach((entry) => {
@@ -129,9 +142,11 @@ export default defineComponent({
129
142
  });
130
143
 
131
144
  return {
132
- isExtraSmall,
133
145
  mobileOverlayWrapper,
134
- desktopOverlay
146
+ isTouchScreenEnabled,
147
+ desktopOverlay,
148
+ isExtraSmall,
149
+ onClick
135
150
  };
136
151
  }
137
152
  });
@@ -46,7 +46,7 @@
46
46
  align="center-left"
47
47
  >
48
48
  <FSColor
49
- width="24px"
49
+ padding="0 8px"
50
50
  height="24px"
51
51
  :color="ColorEnum.Light"
52
52
  :border="false"
@@ -12,11 +12,10 @@
12
12
  <slot
13
13
  name="header"
14
14
  >
15
-
16
15
  <FSRow
17
- padding="24px 16px 16px 24px"
18
16
  style="position: sticky; top: 0px; z-index: 3;"
19
17
  :style="{ backgroundColor, marginTop: $props.stickyTitleTopOffset }"
18
+ :padding="`24px ${isTouchScreenEnabled ? '24px' : '16px'} 16px 24px`"
20
19
  >
21
20
  <slot
22
21
  name="title"
@@ -45,8 +44,8 @@
45
44
  </FSCol>
46
45
  <FSRow
47
46
  v-if="$slots.toolbar"
48
- padding="0px 16px 8px 24px"
49
47
  :style="stickyToolbar ? `position: sticky; top: ${$props.toolbarTopOffset}; z-index: 3; background-color: ${backgroundColor}` : undefined"
48
+ :padding="`0px ${isTouchScreenEnabled ? '24px' : '16px'} 8px 24px`"
50
49
  >
51
50
  <FSSlideGroup
52
51
  width="100%"
@@ -60,8 +59,8 @@
60
59
 
61
60
  <FSCol
62
61
  height="fill"
63
- :padding="$slots.toolbar ? '8px 16px 24px 24px' : '16px 16px 24px 24px'"
64
62
  gap="0px"
63
+ :padding="`${$slots.toolbar ? '8px' : '16px'} ${isTouchScreenEnabled ? '24px' : '16px'} 24px 24px`"
65
64
  >
66
65
  <slot />
67
66
  </FSCol>
@@ -74,7 +73,7 @@ import { defineComponent, type PropType, computed } from "vue";
74
73
 
75
74
  import { type FSBreadcrumbItem, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
76
75
 
77
- import { useColors } from "../../../composables"
76
+ import { useBreakpoints, useColors } from "../../../composables"
78
77
 
79
78
  import FSCol from "../../FSCol.vue";
80
79
  import FSRow from "../../FSRow.vue"
@@ -119,7 +118,8 @@ export default defineComponent({
119
118
  default: "0px"
120
119
  }
121
120
  },
122
- setup(){
121
+ setup() {
122
+ const { isTouchScreenEnabled } = useBreakpoints();
123
123
  const { getColors } = useColors();
124
124
 
125
125
  const backgroundColor = computed(() => {
@@ -127,8 +127,9 @@ export default defineComponent({
127
127
  });
128
128
 
129
129
  return {
130
+ isTouchScreenEnabled,
130
131
  backgroundColor
131
- }
132
+ };
132
133
  }
133
134
  });
134
135
  </script>
@@ -36,6 +36,7 @@
36
36
  :icon="$props.icon"
37
37
  />
38
38
  <FSCol
39
+ style="min-width: 0"
39
40
  align="center-left"
40
41
  height="fill"
41
42
  >
@@ -12,11 +12,10 @@
12
12
  <slot
13
13
  name="header"
14
14
  >
15
-
16
15
  <FSRow
17
- padding="24px 16px 16px 24px"
18
16
  style="position: sticky; top: 0px; z-index: 3;"
19
17
  :style="{ backgroundColor, marginTop: $props.stickyTitleTopOffset }"
18
+ :padding="`24px ${isTouchScreenEnabled ? '24px' : '16px'} 16px 24px`"
20
19
  >
21
20
  <slot
22
21
  name="title"
@@ -45,8 +44,8 @@
45
44
  </FSCol>
46
45
  <FSRow
47
46
  v-if="$slots.toolbar"
48
- padding="0px 16px 8px 24px"
49
47
  :style="stickyToolbar ? `position: sticky; top: ${$props.toolbarTopOffset}; z-index: 3; background-color: ${backgroundColor}` : undefined"
48
+ :padding="`0px ${isTouchScreenEnabled ? '24px' : '16px'} 8px 24px`"
50
49
  >
51
50
  <FSSlideGroup>
52
51
  <slot
@@ -58,8 +57,8 @@
58
57
 
59
58
  <FSCol
60
59
  height="fill"
61
- :padding="$slots.toolbar ? '8px 16px 24px 24px' : '16px 16px 24px 24px'"
62
60
  gap="0px"
61
+ :padding="`${$slots.toolbar ? '8px' : '16px'} ${isTouchScreenEnabled ? '24px' : '16px'} 24px 24px`"
63
62
  >
64
63
  <slot />
65
64
  </FSCol>
@@ -72,7 +71,7 @@ import { defineComponent, type PropType, computed } from "vue";
72
71
 
73
72
  import { type FSBreadcrumbItem, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
74
73
 
75
- import { useColors } from "../../../composables"
74
+ import { useBreakpoints, useColors } from "../../../composables"
76
75
 
77
76
  import FSCol from "../../FSCol.vue";
78
77
  import FSRow from "../../FSRow.vue"
@@ -117,7 +116,8 @@ export default defineComponent({
117
116
  default: "0px"
118
117
  }
119
118
  },
120
- setup(){
119
+ setup() {
120
+ const { isTouchScreenEnabled } = useBreakpoints();
121
121
  const { getColors } = useColors();
122
122
 
123
123
  const backgroundColor = computed(() => {
@@ -125,8 +125,9 @@ export default defineComponent({
125
125
  });
126
126
 
127
127
  return {
128
+ isTouchScreenEnabled,
128
129
  backgroundColor
129
- }
130
+ };
130
131
  }
131
132
  });
132
133
  </script>
@@ -28,6 +28,7 @@
28
28
  :size="actualImageSize"
29
29
  />
30
30
  <FSCol
31
+ style="min-width: 0"
31
32
  align="center-left"
32
33
  height="fill"
33
34
  >
@@ -20,11 +20,12 @@ export const useSlots = () => {
20
20
  // Directive wrapper (v-for, v-if)
21
21
  case "symbol":
22
22
  switch (element.type) {
23
+ // On a v-for, we want to get the children of the v-for
23
24
  case Symbol.for("v-fgt"):
24
25
  returnElements.push(...recursiveGetChildren(element.children));
25
26
  break;
27
+ // On a negative v-if, we want to get nothing
26
28
  case Symbol.for("v-cmt"):
27
- returnElements.push(element);
28
29
  break;
29
30
  default:
30
31
  returnElements.push(element);
package/models/rules.ts CHANGED
@@ -2,8 +2,9 @@ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui
2
2
  import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
3
3
  import { validateExpression } from "@dative-gpi/foundation-shared-domain/tools";
4
4
 
5
- import { getTimeBestString } from "../utils";
6
- import type { TimeUnit } from "@/shared/foundation-shared-domain/enums";
5
+ import type { TimeUnit } from "@dative-gpi/foundation-shared-domain/enums";
6
+
7
+ import { getTimeBestString, validateOperation } from "../utils";
7
8
 
8
9
  const { epochToLongDateFormat } = useDateFormat()!;
9
10
  const { $tr } = useTranslationsProvider();
@@ -22,6 +23,8 @@ export const TextRules = {
22
23
  different: (original: string, message: string | undefined = undefined) => (value: string) => value != original || (message ?? $tr("ui.rules.text-different", "Must be different from original")),
23
24
  outside: (values: string[], message: string | undefined = undefined) => (value: string) => !values.includes(value) || (message ?? $tr("ui.rules.text-outside", "Must be different from others")),
24
25
  inside: (values: string[], message: string | undefined = undefined) => (value: string) => values.includes(value) || (message ?? $tr("ui.rules.text-inside", "Must be one of the options")),
26
+ operation: (operands: string[], variables: string[], message: string | undefined = undefined) => (value: string) => validateOperation(value, operands, variables) || (message ?? $tr("ui.rules.text-operation", "Invalid operation")),
27
+ singleWord: (message: string | undefined = undefined) => (value: string) => !value.includes(" ") || (message ?? $tr("ui.rules.text-single-word", "Must be a single word")),
25
28
  };
26
29
 
27
30
  export const TagRules = {
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.131",
4
+ "version": "1.0.133-dashboard-options",
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.131",
14
- "@dative-gpi/foundation-shared-services": "1.0.131"
13
+ "@dative-gpi/foundation-shared-domain": "1.0.133-dashboard-options",
14
+ "@dative-gpi/foundation-shared-services": "1.0.133-dashboard-options"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@dative-gpi/bones-ui": "^1.0.0",
@@ -35,5 +35,5 @@
35
35
  "sass": "1.71.1",
36
36
  "sass-loader": "13.3.2"
37
37
  },
38
- "gitHead": "4949c203e17fb9bd4f74122efb56552cf550f5b6"
38
+ "gitHead": "fbf279177a3d3399161c1cee211aca716c59f335"
39
39
  }
@@ -1,48 +1,36 @@
1
- .fs-breadcrumbs-label {
2
- cursor: pointer;
3
- user-select: none;
4
- color: var(--fs-breadcrumbs-color);
5
-
6
- &-disabled {
7
- color: var(--fs-breadcrumbs-disabled-color) !important;
8
- }
9
-
10
- &:hover {
11
- text-decoration: underline;
12
- }
1
+ .fs-breadcrumbs {
2
+ height: var(--fs-breadcrumbs-height) !important;
3
+ padding: 0 !important;
4
+ gap: 0 !important;
13
5
 
14
- &:active {
15
- color: var(--fs-breadcrumbs-active-color) !important;
16
- }
6
+ max-width: 100%;
17
7
  }
18
8
 
19
- // .fs-breadcrumbs-divider {
20
- // margin-bottom: 2px !important;
21
- // }
22
-
23
- .fs-breadcrumbs.v-breadcrumbs {
24
- line-height: normal!important;
9
+ .v-breadcrumbs-item,
10
+ .v-breadcrumbs-item--link {
25
11
  padding: 0 !important;
26
- gap: 8px !important;
27
- height: 20px;
28
- }
12
+ user-select: none;
13
+ cursor: pointer;
29
14
 
30
- .v-breadcrumbs-item {
31
- padding: 0 !important;
15
+ align-self: stretch;
16
+ display: flex;
17
+ flex: 1 0 0;
18
+
19
+ max-width: fit-content;
20
+ min-width: 20px;
32
21
 
33
22
  &--disabled {
34
23
  opacity: 1 !important;
35
24
  color: var(--fs-breadcrumbs-disabled-color) !important;
36
25
  }
26
+ }
37
27
 
38
- &:last-child > .fs-breadcrumbs-label-disabled {
39
- @extend .text-button;
28
+ .v-breadcrumbs-item:last-child > .fs-breadcrumbs-label {
29
+ @extend .text-button;
40
30
 
41
- color: var(--fs-breadcrumbs-active-color) !important;
42
- }
31
+ color: var(--fs-breadcrumbs-active-color) !important;
43
32
  }
44
33
 
45
34
  .v-breadcrumbs-divider {
46
- padding: 0 !important;
47
35
  color: var(--fs-breadcrumbs-color) !important;
48
36
  }
@@ -2,11 +2,6 @@
2
2
  transition: color 0.28s cubic-bezier(0.4, 0, 0.2, 1) !important;
3
3
  color: var(--fs-button-color) !important;
4
4
 
5
- &:not(.fs-button-disabled, :has(.fs-button-load)):hover {
6
- color: var(--fs-button-hover-color) !important;
7
- cursor: pointer !important;
8
- }
9
-
10
5
  &.fs-button-disabled,
11
6
  &:has(.fs-button-load) {
12
7
  cursor: default !important;
@@ -16,4 +11,11 @@
16
11
  color: inherit;
17
12
  text-decoration: none;
18
13
  }
14
+
15
+ @include clickscreen {
16
+ &:not(.fs-button-disabled, :has(.fs-button-load)):hover {
17
+ color: var(--fs-button-hover-color) !important;
18
+ cursor: pointer !important;
19
+ }
20
+ }
19
21
  }
@@ -12,15 +12,17 @@
12
12
  .fs-chip-editable {
13
13
  cursor: pointer !important;
14
14
 
15
- &:hover {
16
- background-color: var(--fs-chip-hover-background-color) !important;
17
- border-color: var(--fs-chip-hover-border-color) !important;
18
- color: var(--fs-chip-hover-color) !important;
19
- }
20
-
21
15
  &:active {
22
16
  background-color: var(--fs-chip-active-background-color) !important;
23
17
  border-color: var(--fs-chip-active-border-color) !important;
24
18
  color: var(--fs-chip-active-color) !important;
25
19
  }
20
+
21
+ @include clickscreen {
22
+ &:hover {
23
+ background-color: var(--fs-chip-hover-background-color) !important;
24
+ border-color: var(--fs-chip-hover-border-color) !important;
25
+ color: var(--fs-chip-hover-color) !important;
26
+ }
27
+ }
26
28
  }
@@ -11,18 +11,7 @@
11
11
  &.fs-clickable-disabled {
12
12
  cursor: default;
13
13
  }
14
-
15
- &:not(.fs-clickable-disabled):hover:not(:has( .fs-stopclick:hover)) {
16
- background-color: var(--fs-clickable-hover-background-color) !important;
17
- border-color: var(--fs-clickable-hover-border-color) !important;
18
- color: var(--fs-clickable-hover-color) !important;
19
-
20
- & .fs-card-clickable {
21
- transition: background-color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
22
- background-color: var(--fs-clickable-hover-background-color);
23
- }
24
- }
25
-
14
+
26
15
  &:not(.fs-clickable-disabled):active:not(:has( .fs-stopclick:hover)) {
27
16
  background-color: var(--fs-clickable-active-background-color) !important;
28
17
  border-color: var(--fs-clickable-active-border-color) !important;
@@ -33,6 +22,19 @@
33
22
  background-color: var(--fs-clickable-active-background-color);
34
23
  }
35
24
  }
25
+
26
+ @include clickscreen {
27
+ &:not(.fs-clickable-disabled):hover:not(:has( .fs-stopclick:hover)) {
28
+ background-color: var(--fs-clickable-hover-background-color) !important;
29
+ border-color: var(--fs-clickable-hover-border-color) !important;
30
+ color: var(--fs-clickable-hover-color) !important;
31
+
32
+ & .fs-card-clickable {
33
+ transition: background-color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
34
+ background-color: var(--fs-clickable-hover-background-color);
35
+ }
36
+ }
37
+ }
36
38
  }
37
39
 
38
40
  a:has(.fs-clickable) {
@@ -8,16 +8,18 @@
8
8
  padding-right: 32px;
9
9
  }
10
10
 
11
- &:hover::after {
12
- content: "";
13
- background-color: black;
14
- pointer-events: none;
15
- position: absolute;
16
- opacity: 0.04;
17
- height: 100%;
18
- width: 100%;
19
- left: 0;
20
- top: 0;
11
+ @include clickscreen {
12
+ &:hover::after {
13
+ content: "";
14
+ background-color: black;
15
+ pointer-events: none;
16
+ position: absolute;
17
+ opacity: 0.04;
18
+ height: 100%;
19
+ width: 100%;
20
+ left: 0;
21
+ top: 0;
22
+ }
21
23
  }
22
24
  }
23
25
 
@@ -1,5 +1,5 @@
1
1
  .fs-dialog-mobile > .v-overlay__content {
2
- max-height: 100vh !important;
2
+ max-height: 100dvh !important;
3
3
  max-width: 100vw !important;
4
4
  width: 100% !important;
5
5
  margin: 0 !important;
@@ -1,11 +1,13 @@
1
1
  .v-overlay__content:has(.fs-dialog-menu) {
2
2
  width: fit-content !important;
3
- max-height: calc(100vh - 40px) !important;
3
+ max-height: calc(100dvh - 40px) !important;
4
+ max-width: calc(100vw - 40px) !important;
4
5
  justify-content: center;
5
6
  align-items: center;
7
+ margin: 20px;
6
8
  }
7
9
 
8
10
  .fs-dialog-menu {
9
- max-height: calc(100vh - 40px) !important;
11
+ max-height: calc(100dvh - 40px) !important;
10
12
  max-width: calc(100vw - 40px) !important;
11
13
  }
@@ -11,8 +11,10 @@
11
11
  }
12
12
  }
13
13
 
14
- .fs-image-card:hover {
15
- > .fs-card {
16
- background-size: 105%;
14
+ @include clickscreen {
15
+ .fs-image-card:hover {
16
+ > .fs-card {
17
+ background-size: 105%;
18
+ }
17
19
  }
18
20
  }
@@ -92,11 +92,13 @@
92
92
  align-items: center;
93
93
  justify-content: center;
94
94
 
95
- &:hover {
96
- filter: brightness(0.92) drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.4));
97
-
98
- > * {
99
- transform: scale(1.15);
95
+ @include clickscreen {
96
+ &:hover {
97
+ filter: brightness(0.92) drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.4));
98
+
99
+ > * {
100
+ transform: scale(1.15);
101
+ }
100
102
  }
101
103
  }
102
104
  }
@@ -128,8 +130,10 @@
128
130
  opacity: 0.6;
129
131
  transition: opacity 0.28s cubic-bezier(0.4, 0, 0.2, 1);
130
132
 
131
- &:hover {
132
- opacity: 1;
133
+ @include clickscreen {
134
+ &:hover {
135
+ opacity: 1;
136
+ }
133
137
  }
134
138
  }
135
139
  }
@@ -4,7 +4,9 @@
4
4
  color: var(--fs-password-field-color) !important;
5
5
  transition: color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
6
6
 
7
- &:hover {
8
- color: var(--fs-password-field-hover-color) !important;
7
+ @include clickscreen {
8
+ &:hover {
9
+ color: var(--fs-password-field-hover-color) !important;
10
+ }
9
11
  }
10
12
  }
@@ -1,9 +1,17 @@
1
1
  .fs-span {
2
+ display: flex;
3
+
4
+ max-width: 100%;
5
+ min-width: 0;
6
+ }
7
+
8
+ .fs-span > span {
9
+ text-align: var(--fs-span-text-align);
10
+ align-content: center;
2
11
  max-width: 100%;
3
- text-align: left;
4
12
  }
5
13
 
6
- .fs-span-line-clamp {
14
+ .fs-span-line-clamp > span {
7
15
  overflow: hidden;
8
16
  display: -webkit-box;
9
17
  line-clamp: var(--fs-span-line-clamp);
@@ -11,12 +19,12 @@
11
19
  -webkit-line-clamp: var(--fs-span-line-clamp);
12
20
  }
13
21
 
14
- .fs-span-ellipsis {
22
+ .fs-span-ellipsis > span {
15
23
  overflow: hidden;
16
24
  white-space: nowrap;
17
25
  text-overflow: ellipsis;
18
26
  }
19
27
 
20
- .fs-span-pre-wrap {
28
+ .fs-span-pre-wrap > span {
21
29
  white-space: pre-wrap;
22
30
  }
@@ -23,9 +23,11 @@
23
23
  @extend .text-button;
24
24
  }
25
25
 
26
- &:hover {
27
- border-bottom: 1px solid var(--fs-tab-hover-border-color) !important;
28
- color: var(--fs-group-hover-color) !important;
26
+ @include clickscreen {
27
+ &:hover {
28
+ border-bottom: 1px solid var(--fs-tab-hover-border-color) !important;
29
+ color: var(--fs-group-hover-color) !important;
30
+ }
29
31
  }
30
32
  }
31
33
 
@@ -34,8 +36,10 @@
34
36
  color: var(--fs-group-hover-color) !important;
35
37
  border-bottom: 0 !important;
36
38
 
37
- &:hover {
38
- border-bottom: 0 !important;
39
+ @include clickscreen {
40
+ &:hover {
41
+ border-bottom: 0 !important;
42
+ }
39
43
  }
40
44
  }
41
45