@dative-gpi/foundation-shared-components 1.0.189-update-fs-card → 1.0.190-feat-time-normalization

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.
@@ -3,7 +3,7 @@
3
3
  width="hug"
4
4
  gap="4px"
5
5
  >
6
- <FSCard
6
+ <FSClickable
7
7
  variant="full"
8
8
  :color="ColorEnum.Light"
9
9
  borderRadius="50%"
@@ -14,8 +14,8 @@
14
14
  size="18px"
15
15
  icon="mdi-skip-backward"
16
16
  />
17
- </FSCard>
18
- <FSCard
17
+ </FSClickable>
18
+ <FSClickable
19
19
  variant="full"
20
20
  :color="ColorEnum.Light"
21
21
  borderRadius="50%"
@@ -26,8 +26,8 @@
26
26
  size="18px"
27
27
  :icon="$props.modelValue ? 'mdi-pause' : 'mdi-play'"
28
28
  />
29
- </FSCard>
30
- <FSCard
29
+ </FSClickable>
30
+ <FSClickable
31
31
  variant="full"
32
32
  :color="ColorEnum.Light"
33
33
  borderRadius="50%"
@@ -38,7 +38,7 @@
38
38
  size="18px"
39
39
  icon="mdi-skip-forward"
40
40
  />
41
- </FSCard>
41
+ </FSClickable>
42
42
  </FSRow>
43
43
  </template>
44
44
 
@@ -48,12 +48,12 @@ import { defineComponent } from "vue";
48
48
  import { ColorEnum } from '@dative-gpi/foundation-shared-components/models';
49
49
 
50
50
  import FSIcon from '@dative-gpi/foundation-shared-components/components/FSIcon.vue';
51
- import FSCard from '@dative-gpi/foundation-shared-components/components/FSCard.vue';
51
+ import FSClickable from '@dative-gpi/foundation-shared-components/components/FSClickable.vue';
52
52
 
53
53
  export default defineComponent({
54
54
  name: "FSPlayButtons",
55
55
  components: {
56
- FSCard,
56
+ FSClickable,
57
57
  FSIcon
58
58
  },
59
59
  props: {
@@ -1,9 +1,9 @@
1
1
  <template>
2
- <component
3
- :is="wrapperComponent"
4
- v-bind="mergedProps"
5
- @click="onClick"
6
- @auxclick="onAuxClick"
2
+ <router-link
3
+ :to="$props.to"
4
+ @auxclick="handleRoutingEvent($event, $props.to)"
5
+ @click="handleRoutingEvent($event, $props.to)"
6
+ v-bind="$attrs"
7
7
  >
8
8
  <template
9
9
  v-for="(_, name) in $slots"
@@ -14,99 +14,29 @@
14
14
  v-bind="{ ...slotData }"
15
15
  />
16
16
  </template>
17
- </component>
17
+ </router-link>
18
18
  </template>
19
19
 
20
20
  <script lang="ts">
21
- import { computed, defineComponent, type PropType } from "vue";
22
- import { RouterLink, type RouteLocation } from "vue-router";
21
+ import { defineComponent, type PropType } from "vue";
22
+ import { type RouteLocation } from "vue-router";
23
+
23
24
  import { useRouting } from "@dative-gpi/foundation-shared-services/composables";
24
25
 
25
26
  export default defineComponent({
26
27
  name: "FSRouterLink",
27
28
  props: {
28
29
  to: {
29
- type: Object as PropType<RouteLocation | null>,
30
- default: null
31
- },
32
- href: {
33
- type: String as PropType<string | null>,
34
- default: null
35
- },
36
- passive: {
37
- type: Boolean as PropType<boolean | null>,
38
- default: null
39
- },
40
- type: {
41
- type: String as PropType<"button" | "submit" | "reset">,
42
- default: "button"
43
- },
44
- defaultWrapper: {
45
- type: String as PropType<"div" | "a" | "button">,
46
- default: "button"
47
- },
48
- passiveWrapper: {
49
- type: String as PropType<"div" | "a" | "button">,
50
- default: "div"
30
+ type: Object as PropType<RouteLocation>,
31
+ required: true
51
32
  }
52
33
  },
53
- setup(props, { attrs, slots }) {
34
+ setup() {
54
35
  const { handleRoutingEvent } = useRouting();
55
36
 
56
- const actualPassive = computed(() => {
57
- if (props.passive !== null) {return props.passive;}
58
- return !props.to && !props.href && !attrs.onClick;
59
- });
60
-
61
- const wrapperComponent = computed(() => {
62
- if (actualPassive.value) {
63
- return props.passiveWrapper;
64
- }
65
- if (props.href) {
66
- return "a";
67
- }
68
- if (props.to) {
69
- return RouterLink;
70
- }
71
- return props.defaultWrapper;
72
- });
73
-
74
- const componentProps = computed(() => {
75
- if (wrapperComponent.value === RouterLink) {
76
- return { to: props.to };
77
- } else if (wrapperComponent.value === "a") {
78
- return { href: props.href };
79
- } else if (wrapperComponent.value === "button") {
80
- return { type: props.type };
81
- } else {
82
- return {};
83
- }
84
- });
85
-
86
- const mergedProps = computed(() => ({
87
- ...componentProps.value,
88
- ...attrs
89
- }));
90
-
91
- const onClick = (event: MouseEvent) => {
92
- if (props.to) {
93
- handleRoutingEvent(event, props.to);
94
- }
95
- };
96
-
97
- const onAuxClick = (event: MouseEvent) => {
98
- if (props.to) {
99
- handleRoutingEvent(event, props.to);
100
- }
101
- };
102
-
103
37
  return {
104
- wrapperComponent,
105
- mergedProps,
106
- slots,
107
- onClick,
108
- onAuxClick
38
+ handleRoutingEvent
109
39
  };
110
40
  }
111
41
  });
112
- </script>
42
+ </script>
@@ -29,7 +29,7 @@
29
29
  />
30
30
  </template>
31
31
  </FSAgendaHorizontalEvent>
32
- <FSCard
32
+ <FSClickable
33
33
  v-if="$props.variant !== 'current' || $props.dayStart < $props.now"
34
34
  :class="`fs-agenda-event fs-agenda-event-${$props.variant}`"
35
35
  :variant="$props.variant === 'current' ? 'full' : 'standard'"
@@ -50,7 +50,7 @@
50
50
  :variant="$props.variant"
51
51
  :width="width"
52
52
  />
53
- </FSCard>
53
+ </FSClickable>
54
54
  </template>
55
55
 
56
56
  <script lang="ts">
@@ -58,13 +58,13 @@ import { defineComponent, computed, type StyleValue, type PropType } from 'vue';
58
58
 
59
59
  import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
60
60
 
61
- import FSCard from '../FSCard.vue';
61
+ import FSClickable from '../FSClickable.vue';
62
62
 
63
63
 
64
64
  export default defineComponent({
65
65
  name: 'FSAgendaHorizontalEvent',
66
66
  components: {
67
- FSCard
67
+ FSClickable
68
68
  },
69
69
  emits: ['click'],
70
70
  props: {
@@ -28,7 +28,7 @@
28
28
  />
29
29
  </template>
30
30
  </FSAgendaVerticalEvent>
31
- <FSCard
31
+ <FSClickable
32
32
  v-if="$props.variant !== 'current' || $props.dayStart < $props.now"
33
33
  :class="`fs-agenda-event fs-agenda-vertical-event fs-agenda-event-${$props.variant}`"
34
34
  :variant="$props.variant === 'current' ? 'full' : 'standard'"
@@ -48,7 +48,7 @@
48
48
  :timeEnd="epochToShortTimeOnlyFormat($props.end)"
49
49
  :variant="$props.variant"
50
50
  />
51
- </FSCard>
51
+ </FSClickable>
52
52
  </template>
53
53
 
54
54
  <script lang="ts">
@@ -56,12 +56,12 @@ import { defineComponent, computed, type StyleValue, type PropType } from 'vue';
56
56
 
57
57
  import { useDateFormat } from "@dative-gpi/foundation-shared-services/composables";
58
58
 
59
- import FSCard from '../FSCard.vue';
59
+ import FSClickable from '../FSClickable.vue';
60
60
 
61
61
  export default defineComponent({
62
62
  name: 'FSAgendaVerticalEvent',
63
63
  components: {
64
- FSCard
64
+ FSClickable
65
65
  },
66
66
  emits: ['click'],
67
67
  props: {
@@ -1,9 +1,10 @@
1
1
  <template>
2
- <FSCard
2
+ <component
3
3
  v-if="$props.modelStatus"
4
4
  class="fs-status-rich-card"
5
5
  topRightPadding="2px"
6
6
  variant="standard"
7
+ :is="$attrs.onClick ? FSClickable : FSCard"
7
8
  :padding="$props.padding"
8
9
  :height="$props.height"
9
10
  :width="$props.width"
@@ -49,7 +50,7 @@
49
50
  v-bind="{ color }"
50
51
  />
51
52
  </template>
52
- </FSCard>
53
+ </component>
53
54
  </template>
54
55
 
55
56
  <script lang="ts">
@@ -58,6 +59,7 @@ import { computed, defineComponent, type PropType, type StyleValue } from "vue";
58
59
  import { ColorEnum, type FSDeviceStatusGroup, type FSModelStatus } from "@dative-gpi/foundation-shared-components/models";
59
60
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
60
61
 
62
+ import FSClickable from "../FSClickable.vue";
61
63
  import FSCard from "../FSCard.vue";
62
64
  import FSIcon from "../FSChip.vue";
63
65
  import FSText from "../FSText.vue";
@@ -66,6 +68,7 @@ import FSCol from "../FSCol.vue";
66
68
  export default defineComponent({
67
69
  name: "FSStatusRichCard",
68
70
  components: {
71
+ FSClickable,
69
72
  FSCard,
70
73
  FSIcon,
71
74
  FSText,
@@ -155,6 +158,8 @@ export default defineComponent({
155
158
  }));
156
159
 
157
160
  return {
161
+ FSClickable,
162
+ FSCard,
158
163
  color,
159
164
  style,
160
165
  title,
@@ -40,7 +40,6 @@
40
40
  :height="['30px', '24px']"
41
41
  :variant="getAllVariant()"
42
42
  :color="$props.color"
43
- align="center-left"
44
43
  :clickable="true"
45
44
  @click="onToggleAll"
46
45
  />
@@ -64,9 +63,7 @@
64
63
  :height="['30px', '24px']"
65
64
  :color="$props.color"
66
65
  :label="filter.text"
67
- align="center-left"
68
66
  :clickable="true"
69
- :border="false"
70
67
  :key="index"
71
68
  @click="() => onToggle(filter)"
72
69
  >
@@ -88,7 +85,7 @@
88
85
  <script lang="ts">
89
86
  import { computed, defineComponent, type PropType, ref } from "vue";
90
87
 
91
- import { type CardVariant, CardVariants, type ColorBase, ColorEnum, type FSDataTableColumn, type FSDataTableFilter } from "@dative-gpi/foundation-shared-components/models";
88
+ import { type ColorBase, ColorEnum, type FSDataTableColumn, type FSDataTableFilter } from "@dative-gpi/foundation-shared-components/models";
92
89
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
93
90
 
94
91
  import FSSearchField from "../fields/FSSearchField.vue";
@@ -156,21 +153,21 @@ export default defineComponent({
156
153
  return props.filters;
157
154
  });
158
155
 
159
- const getVariant = (filter: FSDataTableFilter): CardVariant => {
156
+ const getVariant = (filter: FSDataTableFilter): "standard" | "full" | "borderless" => {
160
157
  if (singlePick.value || props.filters.filter(f => f.hidden).length > 0) {
161
158
  if (filter.hidden) {
162
- return CardVariants.Background;
159
+ return "borderless";
163
160
  }
164
- return CardVariants.Full;
161
+ return "full";
165
162
  }
166
- return CardVariants.Background;
163
+ return "borderless";
167
164
  };
168
165
 
169
- const getAllVariant = (): CardVariant => {
166
+ const getAllVariant = (): "standard" | "full" => {
170
167
  if (singlePick.value || props.filters.filter(f => f.hidden).length > 0) {
171
- return CardVariants.Background;
168
+ return "standard";
172
169
  }
173
- return CardVariants.Full;
170
+ return "full";
174
171
  };
175
172
 
176
173
  const onToggle = (filter: FSDataTableFilter): void => {
@@ -32,8 +32,7 @@
32
32
  <FSChip
33
33
  prependIcon="mdi-eye-off-outline"
34
34
  class="fs-header-button-chip"
35
- variant="background"
36
- :border="false"
35
+ variant="borderless"
37
36
  :label="$tr('data-table.hide-column', 'Hide column')"
38
37
  :height="[30, 24]"
39
38
  :clickable="true"
@@ -42,8 +41,7 @@
42
41
  <FSChip
43
42
  v-if="!$props.first"
44
43
  class="fs-header-button-chip"
45
- variant="background"
46
- :border="false"
44
+ variant="borderless"
47
45
  prependIcon="mdi-chevron-left"
48
46
  :label="$tr('data-table.move-left', 'Move to the left')"
49
47
  :height="[30, 24]"
@@ -53,8 +51,7 @@
53
51
  <FSChip
54
52
  v-if="!$props.last"
55
53
  class="fs-header-button-chip"
56
- variant="background"
57
- :border="false"
54
+ variant="borderless"
58
55
  prependIcon="mdi-chevron-right"
59
56
  :label="$tr('data-table.move-right', 'Move to the right')"
60
57
  :height="[30, 24]"
@@ -1,26 +1,67 @@
1
1
  <template>
2
2
  <FSCol
3
3
  class="fs-tile"
4
- :style="style"
5
- :width="$props.width"
6
4
  :height="$props.height"
5
+ :width="$props.width"
7
6
  >
8
- <FSCard
7
+ <FSClickable
8
+ v-if="($props.href || $props.to || $attrs.onClick)"
9
+ variant="background"
9
10
  class="fs-tile"
10
- :variant="selectionState.variant"
11
- :color="selectionState.color"
12
11
  padding="12px"
12
+ :href="$props.href"
13
13
  width="100%"
14
14
  height="100%"
15
15
  topRightPadding="1px"
16
16
  :to="$props.to"
17
- :href="$props.href"
18
- v-on="selectionState.listeners"
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
+ <FSCard
52
+ v-else
53
+ variant="background"
54
+ class="fs-tile"
55
+ padding="12px"
56
+ :style="style"
57
+ width="100%"
58
+ height="100%"
59
+ topRightPadding="1px"
19
60
  v-bind="$attrs"
20
61
  >
21
62
  <slot />
22
63
  <template
23
- v-if="selectionState.showCheckbox"
64
+ v-if="$props.selectable"
24
65
  #top-right
25
66
  >
26
67
  <FSCard
@@ -33,7 +74,8 @@
33
74
  />
34
75
  </FSCard>
35
76
  </template>
36
- </FSCard>
77
+ </FSCard>
78
+
37
79
  <div
38
80
  v-if="$props.leftColor"
39
81
  class="fs-tile-left"
@@ -54,15 +96,17 @@ import { type RouteLocation } from "vue-router";
54
96
  import { useColors } from "@dative-gpi/foundation-shared-components/composables";
55
97
  import { ColorEnum, type ColorBase } from "@dative-gpi/foundation-shared-components/models";
56
98
 
57
- import FSCard from "../FSCard.vue";
99
+ import FSClickable from "../FSClickable.vue";
58
100
  import FSCheckbox from "../FSCheckbox.vue";
101
+ import FSCard from "../FSCard.vue";
59
102
 
60
103
  export default defineComponent({
61
104
  name: "FSTile",
62
105
  inheritAttrs: false,
63
106
  components: {
64
- FSCard,
65
- FSCheckbox
107
+ FSClickable,
108
+ FSCheckbox,
109
+ FSCard
66
110
  },
67
111
  props: {
68
112
  to: {
@@ -117,7 +161,7 @@ export default defineComponent({
117
161
  },
118
162
  },
119
163
  emits: ["update:modelValue"],
120
- setup(props, { emit }) {
164
+ setup(props) {
121
165
  const { getGradients } = useColors();
122
166
 
123
167
  const style = computed((): StyleValue => {
@@ -133,28 +177,18 @@ export default defineComponent({
133
177
  return result;
134
178
  });
135
179
 
136
- const selectionState = computed(() => {
137
- const isSingleSelect = props.selectable && props.singleSelect && !props.href && !props.to;
138
- const showCheckbox = props.selectable && !isSingleSelect;
139
- const variant: "standard" | "background" = (isSingleSelect && props.modelValue) ? "standard" : "background";
140
- const color: ColorBase = (isSingleSelect && props.modelValue) ? props.activeColor : ColorEnum.Background;
141
- const onClick = () => { emit("update:modelValue", !props.modelValue); };
142
- const listeners: Record<string, (...args: any[]) => void> = {};
143
- if (isSingleSelect) {
144
- listeners.click = onClick;
145
- }
146
- return {
147
- isSingleSelect,
148
- showCheckbox,
149
- variant,
150
- color,
151
- listeners
152
- };
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;
153
186
  });
154
187
 
155
188
  return {
156
- selectionState,
157
189
  ColorEnum,
190
+ variant,
191
+ color,
158
192
  style
159
193
  };
160
194
  }
package/models/index.ts CHANGED
@@ -12,5 +12,4 @@ export * from "./modelStatuses";
12
12
  export * from "./rules";
13
13
  export * from "./tables";
14
14
  export * from "./toggleSets";
15
- export * from "./variants";
16
- export * from "./translations";
15
+ export * from "./translations";
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.0.189-update-fs-card",
7
+ "version": "1.0.190-feat-time-normalization",
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.0.189-update-fs-card",
17
- "@dative-gpi/foundation-shared-services": "1.0.189-update-fs-card"
16
+ "@dative-gpi/foundation-shared-domain": "1.0.190-feat-time-normalization",
17
+ "@dative-gpi/foundation-shared-services": "1.0.190-feat-time-normalization"
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": "351173f80c72b2923965cffa08c34f551759f6c3"
41
+ "gitHead": "5b6a1e99713533f6c226ea9b02466101980da6c4"
42
42
  }
@@ -1,15 +1,20 @@
1
1
  .fs-button-icon {
2
- text-decoration: none;
3
2
  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
+
10
15
  @include clickscreen {
11
16
  &:not(.fs-button-disabled, :has(.fs-button-load)):hover {
12
- filter: brightness(0.8) !important;
17
+ color: var(--fs-button-hover-color) !important;
13
18
  cursor: pointer !important;
14
19
  }
15
20
  }
@@ -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: 100%;
6
- width: 100%;
5
+ height: var(--fs-card-height);
6
+ width: var(--fs-card-width);
7
+ max-width: var(--fs-card-max-width);
7
8
  position: relative;
8
9
  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,81 +24,10 @@
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 {
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):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 {
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
-
71
27
  .fs-card-top-right {
72
28
  position: absolute;
73
29
  line-height: normal;
74
30
  right: var(--fs-card-top-right-padding);
75
31
  top: var(--fs-card-top-right-padding);
76
32
  }
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
-
33
+ }