@dative-gpi/foundation-shared-components 1.1.24-unit-formatter → 1.1.24-unit-formatter-2

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 (74) hide show
  1. package/assets/images/map/open-street-map.png +0 -0
  2. package/components/FSAccordionPanel.vue +2 -0
  3. package/components/FSButton.vue +43 -87
  4. package/components/FSCard.vue +208 -100
  5. package/components/FSCardPlaceholder.vue +29 -25
  6. package/components/FSChip.vue +54 -127
  7. package/components/FSChipGroup.vue +141 -23
  8. package/components/FSClickable.vue +24 -326
  9. package/components/FSColor.vue +3 -3
  10. package/components/FSColorIcon.vue +1 -0
  11. package/components/FSDialogContent.vue +39 -28
  12. package/components/FSDialogFormBody.vue +2 -0
  13. package/components/FSDialogMenu.vue +8 -1
  14. package/components/FSDialogMultiFormBody.vue +6 -5
  15. package/components/FSDivider.vue +5 -1
  16. package/components/FSEditImageUI.vue +21 -30
  17. package/components/FSGridMosaic.vue +2 -0
  18. package/components/FSGroupingChip.vue +115 -0
  19. package/components/FSIconCard.vue +3 -1
  20. package/components/FSIconCheck.vue +8 -0
  21. package/components/FSImageCard.vue +4 -4
  22. package/components/FSInstantPicker.vue +2 -0
  23. package/components/FSLink.vue +1 -13
  24. package/components/FSOptionItem.vue +4 -4
  25. package/components/FSOptionsMenu.vue +6 -6
  26. package/components/FSPlayButtons.vue +11 -9
  27. package/components/FSProgressBar.vue +142 -28
  28. package/components/FSRangePicker.vue +2 -0
  29. package/components/FSRouterLink.vue +84 -14
  30. package/components/FSSlideGroup.vue +5 -1
  31. package/components/FSSnackbar.vue +146 -0
  32. package/components/FSSubgroupingChip.vue +138 -0
  33. package/components/FSWindow.vue +2 -0
  34. package/components/agenda/FSAgendaHorizontalEvent.vue +4 -4
  35. package/components/agenda/FSAgendaVerticalEvent.vue +4 -4
  36. package/components/deviceOrganisations/FSStatusRichCard.vue +4 -7
  37. package/components/fields/FSAutocompleteField.vue +1 -0
  38. package/components/fields/FSDurationField.vue +184 -0
  39. package/components/fields/FSEntityFieldUI.vue +12 -0
  40. package/components/fields/FSRichTextField.vue +2 -0
  41. package/components/lists/FSDataIteratorItem.vue +2 -0
  42. package/components/lists/FSDataTableUI.vue +12 -0
  43. package/components/lists/FSFilterButton.vue +34 -23
  44. package/components/lists/FSHeaderButton.vue +6 -3
  45. package/components/lists/FSTileList.vue +23 -6
  46. package/components/map/FSMap.vue +1 -1
  47. package/components/map/FSMapMarker.vue +4 -3
  48. package/components/selects/FSSelectMapLayer.vue +5 -0
  49. package/components/tiles/FSChartTileUI.vue +2 -0
  50. package/components/tiles/FSFolderTileUI.vue +2 -2
  51. package/components/tiles/FSLocationTileUI.vue +2 -0
  52. package/components/tiles/FSPlaylistTileUI.vue +149 -0
  53. package/components/tiles/FSServiceAccountOrganisationTileUI.vue +2 -0
  54. package/components/tiles/FSSubgroupingTileUI.vue +97 -0
  55. package/components/tiles/FSTile.vue +32 -64
  56. package/components/tiles/FSUserOrganisationTileUI.vue +2 -0
  57. package/components/toggleSets/FSToggleSetPosition.vue +5 -0
  58. package/composables/useMapLayers.ts +12 -0
  59. package/models/index.ts +2 -1
  60. package/models/map.ts +2 -1
  61. package/models/tables.ts +1 -0
  62. package/models/variants.ts +33 -0
  63. package/package.json +4 -4
  64. package/styles/components/fs_button.scss +1 -7
  65. package/styles/components/fs_card.scss +75 -4
  66. package/styles/components/fs_chip.scss +0 -29
  67. package/styles/components/fs_filter_button.scss +6 -1
  68. package/styles/components/fs_map.scss +7 -1
  69. package/styles/components/fs_progress_bar.scss +62 -6
  70. package/styles/components/fs_snackbar.scss +7 -0
  71. package/styles/components/index.scss +1 -2
  72. package/styles/globals/overrides.scss +1 -1
  73. package/styles/components/fs_clickable.scss +0 -69
  74. package/styles/components/fs_color_icon.scss +0 -3
@@ -0,0 +1,149 @@
1
+ <template>
2
+ <FSTile
3
+ :activeColor="ColorEnum.Primary"
4
+ :modelValue="$props.modelValue"
5
+ :width="$props.width"
6
+ :height="$props.height"
7
+ padding="16px 24px"
8
+ v-bind="$attrs"
9
+ >
10
+ <FSRow
11
+ :wrap="false"
12
+ >
13
+ <FSCol
14
+ gap="16px"
15
+ width="fill"
16
+ >
17
+ <FSSpan
18
+ font="text-button"
19
+ >
20
+ {{ $props.label }}
21
+ </FSSpan>
22
+ <FSRow
23
+ :wrap="false"
24
+ align="center-left"
25
+ >
26
+ <FSIcon>
27
+ mdi-view-dashboard-outline
28
+ </FSIcon>
29
+ <FSSpan
30
+ font="text-overline"
31
+ >
32
+ {{ $tr('ui.dashboards.dynamic', '{0} dashboard(s)', $props.dashboardsCount) }}
33
+ </FSSpan>
34
+ </FSRow>
35
+ <FSRow
36
+ :wrap="false"
37
+ align="center-left"
38
+ >
39
+ <FSIconCheck
40
+ variant="fill"
41
+ :value="automaticTransition"
42
+ />
43
+ <FSSpan
44
+ font="text-overline"
45
+ v-if="automaticTransition"
46
+ >
47
+ {{$tr('ui.playlist.transition-delay.dynamic', 'Transition : {0}', getTimeBestString($props.delay ?? 0))}}
48
+ </FSSpan>
49
+ <FSSpan
50
+ font="text-overline"
51
+ v-else
52
+ >
53
+ {{ $tr('ui.playlist.automatic-transition', 'Automatic transition') }}
54
+ </FSSpan>
55
+ </FSRow>
56
+ <FSRow
57
+ :wrap="false"
58
+ align="center-left"
59
+ >
60
+ <FSIconCheck
61
+ variant="fill"
62
+ :value="$props.looped"
63
+ />
64
+ <FSSpan
65
+ font="text-overline"
66
+ >
67
+ {{ $tr('entity.playlist.looped', 'Looped') }}
68
+ </FSSpan>
69
+ </FSRow>
70
+ </FSCol>
71
+ <slot
72
+ name="actions"
73
+ />
74
+ </FSRow>
75
+ </FSTile>
76
+ </template>
77
+
78
+ <script lang="ts">
79
+ import { computed, defineComponent, type PropType } from "vue";
80
+
81
+ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
82
+
83
+ import { getTimeBestString } from "@dative-gpi/foundation-shared-components/utils";
84
+
85
+ import FSIconCheck from "../FSIconCheck.vue";
86
+ import FSTile from "../tiles/FSTile.vue";
87
+ import FSIcon from "../FSIcon.vue";
88
+ import FSSpan from "../FSSpan.vue";
89
+ import FSRow from "../FSRow.vue";
90
+ import FSCol from "../FSCol.vue";
91
+
92
+ export default defineComponent({
93
+ name: "FSPlaylistTileUI",
94
+ components: {
95
+ FSIconCheck,
96
+ FSIcon,
97
+ FSTile,
98
+ FSSpan,
99
+ FSRow,
100
+ FSCol
101
+ },
102
+ inheritAttrs: false,
103
+ props: {
104
+ width: {
105
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
106
+ required: false,
107
+ default: () => [352, 336]
108
+ },
109
+ height: {
110
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
111
+ required: false,
112
+ default: () => 'hug'
113
+ },
114
+ label: {
115
+ type: String as PropType<string>,
116
+ required: true
117
+ },
118
+ dashboardsCount: {
119
+ type: Number,
120
+ required: true
121
+ },
122
+ delay: {
123
+ type: Number ,
124
+ required: false
125
+ },
126
+ looped: {
127
+ type: Boolean,
128
+ required: true
129
+ },
130
+ modelValue: {
131
+ type: Boolean,
132
+ required: false,
133
+ default: false
134
+ }
135
+ },
136
+ setup(props) {
137
+
138
+ const automaticTransition = computed((): boolean => {
139
+ return props.delay ? props.delay > 0 : false;
140
+ });
141
+
142
+ return {
143
+ getTimeBestString,
144
+ automaticTransition,
145
+ ColorEnum
146
+ };
147
+ }
148
+ });
149
+ </script>
@@ -64,6 +64,7 @@ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
64
64
 
65
65
  import FSImage from "../FSImage.vue";
66
66
  import FSSpan from "../FSSpan.vue";
67
+ import FSIcon from "../FSIcon.vue";
67
68
  import FSTile from "./FSTile.vue";
68
69
  import FSCol from "../FSCol.vue";
69
70
  import FSRow from "../FSRow.vue";
@@ -73,6 +74,7 @@ export default defineComponent({
73
74
  components: {
74
75
  FSImage,
75
76
  FSSpan,
77
+ FSIcon,
76
78
  FSTile,
77
79
  FSCol,
78
80
  FSRow
@@ -0,0 +1,97 @@
1
+ <template>
2
+ <FSSimpleTileUI
3
+ :bottomColor="null"
4
+ v-bind="$attrs"
5
+ >
6
+ <template
7
+ #append-info
8
+ >
9
+ <FSRow
10
+ v-if="$props.groupingLabel && $props.groupingIcon"
11
+ align="center-left"
12
+ :wrap="false"
13
+ >
14
+ <FSColor
15
+ height="24px"
16
+ :color="$props.groupingColor"
17
+ :border="false"
18
+ variant="standard"
19
+ >
20
+ <FSRow
21
+ align="center-center"
22
+ width="24px"
23
+ >
24
+ <FSIcon
25
+ size="16px"
26
+ >
27
+ {{ $props.groupingIcon }}
28
+ </FSIcon>
29
+ </FSRow>
30
+ </FSColor>
31
+ <FSSpan
32
+ font="text-overline"
33
+ >
34
+ {{ $props.groupingLabel }}
35
+ </FSSpan>
36
+ </FSRow>
37
+ <FSEntityCountBadge
38
+ :label="$tr('ui.common.devices', 'Devices')"
39
+ :count="$props.deviceOrganisationsCount ?? 0"
40
+ :color="ColorEnum.Primary"
41
+ />
42
+ </template>
43
+ </FSSimpleTileUI>
44
+ </template>
45
+
46
+ <script lang="ts">
47
+ import { defineComponent, type PropType } from "vue";
48
+
49
+ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
50
+
51
+ import FSEntityCountBadge from "./FSEntityCountBadge.vue";
52
+ import FSSimpleTileUI from './FSSimpleTileUI.vue';
53
+ import FSColor from "../FSColor.vue";
54
+ import FSIcon from "../FSIcon.vue";
55
+ import FSSpan from "../FSSpan.vue";
56
+ import FSRow from "../FSRow.vue";
57
+
58
+ export default defineComponent({
59
+ name: "FSSubgroupingTileUI",
60
+ components: {
61
+ FSEntityCountBadge,
62
+ FSSimpleTileUI,
63
+ FSColor,
64
+ FSIcon,
65
+ FSSpan,
66
+ FSRow
67
+ },
68
+ props: {
69
+ groupingLabel: {
70
+ type: String as PropType<string | null>,
71
+ required: false,
72
+ default: null
73
+ },
74
+ groupingIcon: {
75
+ type: String as PropType<string | null>,
76
+ required: false,
77
+ default: null
78
+ },
79
+ groupingColor: {
80
+ type: String as PropType<ColorBase>,
81
+ required: false,
82
+ default: ColorEnum.Dark
83
+ },
84
+ deviceOrganisationsCount: {
85
+ type: Number,
86
+ required: false,
87
+ default: null
88
+ }
89
+ },
90
+ inheritAttrs: false,
91
+ setup() {
92
+ return {
93
+ ColorEnum,
94
+ };
95
+ }
96
+ });
97
+ </script>
@@ -1,67 +1,26 @@
1
1
  <template>
2
2
  <FSCol
3
3
  class="fs-tile"
4
- :height="$props.height"
4
+ :style="style"
5
5
  :width="$props.width"
6
+ :height="$props.height"
6
7
  >
7
- <FSClickable
8
- v-if="($props.href || $props.to || $attrs.onClick)"
9
- variant="background"
10
- class="fs-tile"
11
- padding="12px"
12
- :href="$props.href"
13
- width="100%"
14
- height="100%"
15
- topRightPadding="1px"
16
- :to="$props.to"
17
- :style="style"
18
- v-bind="$attrs"
19
- >
20
- <slot />
21
- <template
22
- v-if="$props.selectable"
23
- #top-right
24
- >
25
- <FSCard
26
- padding="8px"
27
- :border="false"
28
- >
29
- <FSCheckbox
30
- :modelValue="$props.modelValue"
31
- @update:modelValue="() => $emit('update:modelValue', !$props.modelValue)"
32
- />
33
- </FSCard>
34
- </template>
35
- </FSClickable>
36
-
37
- <FSClickable
38
- v-else-if="$props.selectable && $props.singleSelect"
39
- padding="12px"
40
- :variant="variant"
41
- :color="color"
42
- :style="style"
43
- width="100%"
44
- height="100%"
45
- @click="() => $emit('update:modelValue', !$props.modelValue)"
46
- v-bind="$attrs"
47
- >
48
- <slot />
49
- </FSClickable>
50
-
51
8
  <FSCard
52
- v-else
53
- variant="background"
54
9
  class="fs-tile"
10
+ :variant="selectionState.variant"
11
+ :color="selectionState.color"
55
12
  padding="12px"
56
- :style="style"
57
13
  width="100%"
58
14
  height="100%"
59
15
  topRightPadding="1px"
16
+ :to="$props.to"
17
+ :href="$props.href"
18
+ v-on="selectionState.listeners"
60
19
  v-bind="$attrs"
61
20
  >
62
21
  <slot />
63
22
  <template
64
- v-if="$props.selectable"
23
+ v-if="selectionState.showCheckbox"
65
24
  #top-right
66
25
  >
67
26
  <FSCard
@@ -74,8 +33,7 @@
74
33
  />
75
34
  </FSCard>
76
35
  </template>
77
- </FSCard>
78
-
36
+ </FSCard>
79
37
  <div
80
38
  v-if="$props.leftColor"
81
39
  class="fs-tile-left"
@@ -96,17 +54,17 @@ import { type RouteLocation } from "vue-router";
96
54
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
97
55
  import { ColorEnum, type ColorBase } from "@dative-gpi/foundation-shared-components/models";
98
56
 
99
- import FSClickable from "../FSClickable.vue";
100
- import FSCheckbox from "../FSCheckbox.vue";
101
57
  import FSCard from "../FSCard.vue";
58
+ import FSCheckbox from "../FSCheckbox.vue";
59
+ import FSCol from "../FSCol.vue";
102
60
 
103
61
  export default defineComponent({
104
62
  name: "FSTile",
105
63
  inheritAttrs: false,
106
64
  components: {
107
- FSClickable,
65
+ FSCard,
108
66
  FSCheckbox,
109
- FSCard
67
+ FSCol
110
68
  },
111
69
  props: {
112
70
  to: {
@@ -161,7 +119,7 @@ export default defineComponent({
161
119
  },
162
120
  },
163
121
  emits: ["update:modelValue"],
164
- setup(props) {
122
+ setup(props, { emit }) {
165
123
  const { getGradients } = useColors();
166
124
 
167
125
  const style = computed((): StyleValue => {
@@ -177,18 +135,28 @@ export default defineComponent({
177
135
  return result;
178
136
  });
179
137
 
180
- const variant = computed((): "standard" | "background" => {
181
- return (props.singleSelect && props.modelValue) ? "standard" : "background";
182
- });
183
-
184
- const color = computed((): ColorBase => {
185
- return (props.singleSelect && props.modelValue) ? props.activeColor : ColorEnum.Background;
138
+ const selectionState = computed(() => {
139
+ const isSingleSelect = props.selectable && props.singleSelect && !props.href && !props.to;
140
+ const showCheckbox = props.selectable && !isSingleSelect;
141
+ const variant: "standard" | "background" = (isSingleSelect && props.modelValue) ? "standard" : "background";
142
+ const color: ColorBase = (isSingleSelect && props.modelValue) ? props.activeColor : ColorEnum.Background;
143
+ const onClick = () => { emit("update:modelValue", !props.modelValue); };
144
+ const listeners: Record<string, (...args: any[]) => void> = {};
145
+ if (isSingleSelect) {
146
+ listeners.click = onClick;
147
+ }
148
+ return {
149
+ isSingleSelect,
150
+ showCheckbox,
151
+ variant,
152
+ color,
153
+ listeners
154
+ };
186
155
  });
187
156
 
188
157
  return {
158
+ selectionState,
189
159
  ColorEnum,
190
- variant,
191
- color,
192
160
  style
193
161
  };
194
162
  }
@@ -65,6 +65,7 @@ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
65
65
 
66
66
  import FSImage from "../FSImage.vue";
67
67
  import FSSpan from "../FSSpan.vue";
68
+ import FSIcon from "../FSIcon.vue";
68
69
  import FSTile from "./FSTile.vue";
69
70
  import FSCol from "../FSCol.vue";
70
71
  import FSRow from "../FSRow.vue";
@@ -74,6 +75,7 @@ export default defineComponent({
74
75
  components: {
75
76
  FSImage,
76
77
  FSSpan,
78
+ FSIcon,
77
79
  FSTile,
78
80
  FSCol,
79
81
  FSRow
@@ -24,8 +24,13 @@ import type { PropType } from "vue";
24
24
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
25
25
  import { Position } from "@dative-gpi/foundation-shared-domain/enums";
26
26
 
27
+ import FSToggleSet from "../FSToggleSet.vue";
28
+
27
29
  export default defineComponent({
28
30
  name: "FSToggleSetPosition",
31
+ components: {
32
+ FSToggleSet
33
+ },
29
34
  props: {
30
35
  modelValue: {
31
36
  type: Number as PropType<Position>,
@@ -57,6 +57,18 @@ export const useMapLayers = () => {
57
57
  className: 'fs-map-tile-base-layer'
58
58
  })
59
59
  ]
60
+ },
61
+ {
62
+ name: MapLayers.OpenStreetMap,
63
+ label: $tr("ui.map-layer.open-street-map", "OpenStreetMap"),
64
+ image: new URL("../assets/images/map/open-street-map.png", import.meta.url).href,
65
+ layers: [
66
+ tileLayer(`https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png`, {
67
+ maxZoom: 19,
68
+ attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
69
+ className: 'fs-map-tile-base-layer'
70
+ })
71
+ ]
60
72
  }
61
73
  ];
62
74
  } catch (err) {
package/models/index.ts CHANGED
@@ -12,4 +12,5 @@ export * from "./modelStatuses";
12
12
  export * from "./rules";
13
13
  export * from "./tables";
14
14
  export * from "./toggleSets";
15
- export * from "./translations";
15
+ export * from "./variants";
16
+ export * from "./translations";
package/models/map.ts CHANGED
@@ -10,7 +10,8 @@ export interface MapLayer {
10
10
  export enum MapLayers {
11
11
  Map = "map",
12
12
  Imagery = "imagery",
13
- Snow= "snow"
13
+ Snow= "snow",
14
+ OpenStreetMap = "open-street-map"
14
15
  }
15
16
 
16
17
  export enum MapOverlayPositions {
package/models/tables.ts CHANGED
@@ -26,6 +26,7 @@ export interface FSDataTableFilter {
26
26
  text: string;
27
27
  value: string;
28
28
  hidden: boolean;
29
+ custom?: boolean;
29
30
  filter?: ((value: any, property: any, item: any) => boolean) | null;
30
31
  }
31
32
 
@@ -0,0 +1,33 @@
1
+ export type CardVariant = "background" | "standard" | "full" | "gradient";
2
+ export enum CardVariants {
3
+ Background = "background",
4
+ Standard = "standard",
5
+ Full = "full",
6
+ Gradient = "gradient"
7
+ }
8
+
9
+ export type SnackbarVariant = "standard" | "full";
10
+ export enum SnackbarVariants {
11
+ Standard = "standard",
12
+ Full = "full"
13
+ }
14
+
15
+ export type DialogMultiFormVariant = "standard" | "submit";
16
+ export enum DialogMultiFormVariants {
17
+ Standard = "standard",
18
+ Submit = "submit"
19
+ }
20
+
21
+ export type DialogMultiFormMode = "pagination" | "tabs" | "hidden";
22
+ export enum DialogMultiFormModes {
23
+ Pagination = "pagination",
24
+ Tabs = "tabs",
25
+ Hidden = "hidden"
26
+ }
27
+
28
+ export type ChipGroupVariant = "wrap" | "slide" | "menu";
29
+ export enum ChipGroupVariants {
30
+ Wrap = "wrap",
31
+ Slide = "slide",
32
+ Menu = "menu"
33
+ }
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "url": "https://github.com/Dative-GPI/foundation-shared-ui.git"
5
5
  },
6
6
  "sideEffects": false,
7
- "version": "1.1.24-unit-formatter",
7
+ "version": "1.1.24-unit-formatter-2",
8
8
  "description": "",
9
9
  "publishConfig": {
10
10
  "access": "public"
@@ -13,8 +13,8 @@
13
13
  "author": "",
14
14
  "license": "ISC",
15
15
  "dependencies": {
16
- "@dative-gpi/foundation-shared-domain": "1.1.24-unit-formatter",
17
- "@dative-gpi/foundation-shared-services": "1.1.24-unit-formatter"
16
+ "@dative-gpi/foundation-shared-domain": "1.1.24-unit-formatter-2",
17
+ "@dative-gpi/foundation-shared-services": "1.1.24-unit-formatter-2"
18
18
  },
19
19
  "peerDependencies": {
20
20
  "@dative-gpi/bones-ui": "^1.0.0",
@@ -38,5 +38,5 @@
38
38
  "sass": "1.71.1",
39
39
  "sass-loader": "13.3.2"
40
40
  },
41
- "gitHead": "ac04fd5da2ebd73bfb31ff6ffc4f5ff54a872e9e"
41
+ "gitHead": "8e4e425fd5a9d635fd66121d110beb5745e337f3"
42
42
  }
@@ -1,20 +1,14 @@
1
1
  .fs-button-icon {
2
+ text-decoration: none;
2
3
  transition: color 0.28s cubic-bezier(0.4, 0, 0.2, 1) !important;
3
- color: var(--fs-button-color) !important;
4
4
 
5
5
  &.fs-button-disabled,
6
6
  &:has(.fs-button-load) {
7
7
  cursor: default !important;
8
8
  }
9
9
 
10
- & > a, a:hover, a:visited, a:active {
11
- color: inherit;
12
- text-decoration: none;
13
- }
14
-
15
10
  @include clickscreen {
16
11
  &:not(.fs-button-disabled, :has(.fs-button-load)):hover {
17
- color: var(--fs-button-hover-color) !important;
18
12
  cursor: pointer !important;
19
13
  }
20
14
  }
@@ -2,11 +2,11 @@
2
2
  border: var(--fs-card-border-size) var(--fs-card-border-style);
3
3
  border-radius: var(--fs-card-border-radius);
4
4
  padding: var(--fs-card-padding);
5
- height: var(--fs-card-height);
6
- width: var(--fs-card-width);
7
- max-width: var(--fs-card-max-width);
5
+ height: 100%;
6
+ width: 100%;
8
7
  position: relative;
9
8
  display: flex;
9
+ transition: all 0.28s cubic-bezier(0.4, 0, 0.2, 1);
10
10
 
11
11
  border-color: var(--fs-card-border-color);
12
12
  color: var(--fs-card-color);
@@ -24,10 +24,81 @@
24
24
  background: var(--fs-card-background-color);
25
25
  }
26
26
 
27
+ &-load {
28
+ content: "";
29
+
30
+ & > *:not(.fs-card-load__spinner) {
31
+ opacity: 0;
32
+ }
33
+ }
34
+
35
+ &-clickable {
36
+ cursor: pointer;
37
+
38
+ &.fs-card-disabled {
39
+ cursor: default;
40
+ }
41
+
42
+ &:not(.fs-card-disabled):active:not(:has( .fs-stopclick:hover)) {
43
+ background-color: var(--fs-card-active-background-color) !important;
44
+ border-color: var(--fs-card-active-border-color) !important;
45
+ color: var(--fs-card-active-color) !important;
46
+
47
+ & .fs-card-clickable:not(.fs-card-disable-hover-style) {
48
+ transition: background-color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
49
+ background-color: var(--fs-card-active-background-color);
50
+ }
51
+ }
52
+
53
+ @include clickscreen {
54
+ &:not(.fs-card-disabled):not(.fs-card-disable-hover-style):hover:not(:has( .fs-stopclick:hover)) {
55
+ background-color: var(--fs-card-hover-background-color) !important;
56
+ border-color: var(--fs-card-hover-border-color) !important;
57
+ color: var(--fs-card-hover-color) !important;
58
+
59
+ & .fs-card-clickable:not(.fs-card-disable-hover-style) {
60
+ transition: background-color 0.28s cubic-bezier(0.4, 0, 0.2, 1);
61
+ background-color: var(--fs-card-hover-background-color);
62
+ }
63
+ }
64
+ // Désactive le hover si un parent a .fs-card-load
65
+ .fs-card-load & {
66
+ pointer-events: none;
67
+ }
68
+ }
69
+ }
70
+
27
71
  .fs-card-top-right {
28
72
  position: absolute;
29
73
  line-height: normal;
30
74
  right: var(--fs-card-top-right-padding);
31
75
  top: var(--fs-card-top-right-padding);
32
76
  }
33
- }
77
+ }
78
+
79
+ .fs-card-wrapper {
80
+ display: block;
81
+ position: relative;
82
+ padding: 0 !important;
83
+ height: var(--fs-card-height);
84
+ width: var(--fs-card-width);
85
+ max-width: var(--fs-card-max-width);
86
+ background: none;
87
+ border: none;
88
+ text-decoration: none;
89
+ box-sizing: border-box;
90
+ }
91
+
92
+ .fs-card-load__spinner {
93
+ cursor: default;
94
+ position: absolute !important;
95
+ height: 100% !important;
96
+ width: 100% !important;
97
+ left: 0;
98
+ top: 0;
99
+
100
+ & > svg {
101
+ height: 24px !important;
102
+ }
103
+ }
104
+