@dative-gpi/foundation-shared-components 1.1.2 → 1.1.3-groupings

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.
@@ -13,7 +13,7 @@
13
13
  <slot />
14
14
  </FSWrapGroup>
15
15
  <FSSlideGroup
16
- v-if="$props.variant === 'slide'"
16
+ v-else-if="$props.variant === 'slide'"
17
17
  v-bind="$attrs"
18
18
  >
19
19
  <FSChip
@@ -25,23 +25,103 @@
25
25
  />
26
26
  <slot />
27
27
  </FSSlideGroup>
28
+ <FSRow
29
+ v-else-if="$props.variant === 'menu'"
30
+ align="center-left"
31
+ width="hug"
32
+ :wrap="false"
33
+ v-bind="$attrs"
34
+ >
35
+ <component
36
+ v-if="hasSlots"
37
+ :is="slotElements[0]"
38
+ />
39
+ <FSChip
40
+ v-else
41
+ :variant="$props.chipVariant"
42
+ :color="$props.color"
43
+ :label="menuLabels[0]"
44
+ />
45
+ <FSMenu
46
+ v-if="slotElements.length > 1 || menuLabels.length > 1"
47
+ location="bottom end"
48
+ v-model="menuOpen"
49
+ >
50
+ <template
51
+ #activator="{ props: activatorProps }"
52
+ >
53
+ <FSChip
54
+ v-bind="activatorProps"
55
+ variant="full"
56
+ :label="`+${hasSlots ? (slotElements.length - 1) : (menuLabels.length - 1)}`"
57
+ :color="menuActivatorColor"
58
+ :clickable="true"
59
+ />
60
+ </template>
61
+ <FSCard
62
+ padding="16px 24px"
63
+ >
64
+ <FSButton
65
+ style="position: absolute;top:3px;right:3px;"
66
+ icon="mdi-close"
67
+ variant="icon"
68
+ iconSize="18px"
69
+ :color="ColorEnum.Dark"
70
+ @click="menuOpen = false"
71
+ />
72
+ <FSCol
73
+ v-if="hasSlots"
74
+ gap="12px"
75
+ >
76
+ <component
77
+ v-for="(element, index) in slotElements.slice(1)"
78
+ :key="index"
79
+ :is="element"
80
+ />
81
+ </FSCol>
82
+ <FSCol
83
+ v-else
84
+ gap="12px"
85
+ >
86
+ <FSChip
87
+ v-for="(label, index) in menuLabels"
88
+ :key="index"
89
+ :variant="$props.chipVariant"
90
+ :color="$props.color"
91
+ :label="label"
92
+ />
93
+ </FSCol>
94
+ </FSCard>
95
+ </FSMenu>
96
+ </FSRow>
28
97
  </template>
29
98
 
30
99
  <script lang="ts">
31
- import { defineComponent, type PropType } from "vue";
100
+ import { defineComponent, ref, type PropType, useSlots, computed, type VNode } from "vue";
32
101
 
33
102
  import { type CardVariant, CardVariants, type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
34
103
 
35
104
  import FSSlideGroup from "./FSSlideGroup.vue";
36
105
  import FSWrapGroup from "./FSWrapGroup.vue";
106
+ import FSButton from "./FSButton.vue";
37
107
  import FSChip from "./FSChip.vue";
108
+ import FSCard from "./FSCard.vue";
109
+ import FSMenu from "./FSMenu.vue";
110
+ import FSCol from "./FSCol.vue";
111
+ import FSRow from "./FSRow.vue";
112
+ import { useColors } from "../composables";
38
113
 
39
114
  export default defineComponent({
40
115
  name: "FSChipGroup",
41
116
  components: {
42
117
  FSSlideGroup,
43
118
  FSWrapGroup,
44
- FSChip
119
+ FSButton,
120
+ FSChip,
121
+ FSCard,
122
+ FSMenu,
123
+ FSCol,
124
+ FSRow
45
125
  },
46
126
  props: {
47
127
  labels: {
@@ -50,7 +130,7 @@ export default defineComponent({
50
130
  default: () => []
51
131
  },
52
132
  variant: {
53
- type: String as PropType<"wrap" | "slide">,
133
+ type: String as PropType<"wrap" | "slide" | "menu">,
54
134
  required: false,
55
135
  default: "wrap"
56
136
  },
@@ -64,6 +144,45 @@ export default defineComponent({
64
144
  required: false,
65
145
  default: ColorEnum.Light
66
146
  }
147
+ },
148
+ setup(props) {
149
+ const slots = useSlots();
150
+ const { getColors } = useColors();
151
+ const menuOpen = ref(false);
152
+
153
+ const slotElements = computed((): VNode[] => {
154
+ const defaultSlot = slots.default?.();
155
+ if (!defaultSlot) {
156
+ return [];
157
+ }
158
+ return defaultSlot.flatMap(node => {
159
+ if (node.type === Symbol.for('v-fgt')) {
160
+ return (node.children as VNode[]) ?? [];
161
+ }
162
+ return [node];
163
+ }).filter(node => typeof node.type !== 'symbol');
164
+ });
165
+
166
+ const hasSlots = computed((): boolean => {
167
+ return slotElements.value.length > 0;
168
+ });
169
+
170
+ const menuLabels = computed((): string[] => {
171
+ return props.labels ?? [];
172
+ });
173
+
174
+ const menuActivatorColor = computed((): string => {
175
+ return getColors(props.color).dark;
176
+ });
177
+
178
+ return {
179
+ menuActivatorColor,
180
+ slotElements,
181
+ menuLabels,
182
+ ColorEnum,
183
+ hasSlots,
184
+ menuOpen
185
+ };
67
186
  }
68
187
  });
69
188
  </script>
@@ -10,6 +10,11 @@
10
10
  :color="$props.color"
11
11
  :class="classes"
12
12
  >
13
+ <FSCol>
14
+ <slot
15
+ name="body"
16
+ />
17
+ </FSCol>
13
18
  <template
14
19
  v-for="(_, name) in $slots"
15
20
  v-slot:[name]="slotData"
@@ -30,11 +35,13 @@ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-compone
30
35
  import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
31
36
 
32
37
  import FSCard from "./FSCard.vue";
38
+ import FSCol from "./FSCol.vue";
33
39
 
34
40
  export default defineComponent({
35
41
  name: "FSDialogMenu",
36
42
  components: {
37
- FSCard
43
+ FSCard,
44
+ FSCol
38
45
  },
39
46
  props: {
40
47
  classes: {
@@ -0,0 +1,110 @@
1
+ <template>
2
+ <FSChip
3
+ :height="$props.height"
4
+ :width="$props.width"
5
+ :variant="$props.variant"
6
+ :color="borderColor"
7
+ >
8
+ <FSRow
9
+ align="center-center"
10
+ width="hug"
11
+ :wrap="false"
12
+ >
13
+ <FSRow
14
+ align="center-center"
15
+ width="hug"
16
+ gap="6px"
17
+ :wrap="false"
18
+ >
19
+ <FSIcon
20
+ :color="$props.iconColor"
21
+ :size="$props.iconSize"
22
+ >
23
+ {{ $props.icon }}
24
+ </FSIcon>
25
+ <FSText
26
+ font="text-overline"
27
+ :color="textColor"
28
+ >
29
+ {{ $props.label }}
30
+ </FSText>
31
+ </FSRow>
32
+ </FSRow>
33
+ </FSChip>
34
+ </template>
35
+
36
+ <script lang="ts">
37
+ import { defineComponent, type PropType } from "vue";
38
+
39
+ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
40
+
41
+ import FSIcon from "./FSIcon.vue";
42
+ import FSText from "./FSText.vue";
43
+ import FSChip from "./FSChip.vue";
44
+ import FSRow from "./FSRow.vue";
45
+
46
+ import { useColors } from "../composables";
47
+
48
+ export default defineComponent({
49
+ name: "FSSubgroupingChip",
50
+ components: {
51
+ FSChip,
52
+ FSIcon,
53
+ FSText,
54
+ FSRow
55
+ },
56
+ inheritAttrs: false,
57
+ props: {
58
+ label: {
59
+ type: String as PropType<string>,
60
+ required: true
61
+ },
62
+ icon: {
63
+ type: String as PropType<string>,
64
+ required: true
65
+ },
66
+ iconColor: {
67
+ type: String as PropType<ColorBase>,
68
+ required: false,
69
+ default: ColorEnum.Dark
70
+ },
71
+ height: {
72
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
73
+ required: false,
74
+ default: () => [24, 20]
75
+ },
76
+ width: {
77
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
78
+ required: false,
79
+ default: "hug"
80
+ },
81
+ color: {
82
+ type: String as PropType<ColorBase>,
83
+ required: false,
84
+ default: ColorEnum.Light
85
+ },
86
+ variant: {
87
+ type: String as PropType<"standard" | "full" | "borderless">,
88
+ required: false,
89
+ default: "standard"
90
+ },
91
+ iconSize: {
92
+ type: [Array, String, Number] as PropType<"s" | "m" | "l" | string[] | number[] | string | number | null>,
93
+ required: false,
94
+ default: "18px"
95
+ }
96
+ },
97
+ setup(props) {
98
+ const { getColors } = useColors();
99
+
100
+ const borderColor = getColors(props.color).dark;
101
+ const textColor = getColors(ColorEnum.Dark).dark;
102
+
103
+ return {
104
+ borderColor,
105
+ textColor,
106
+ ColorEnum
107
+ };
108
+ }
109
+ });
110
+ </script>
@@ -0,0 +1,135 @@
1
+ <template>
2
+ <FSChip
3
+ :height="$props.height"
4
+ :width="$props.width"
5
+ :variant="$props.variant"
6
+ :color="borderColor"
7
+ >
8
+ <FSRow
9
+ align="center-center"
10
+ width="hug"
11
+ :wrap="false"
12
+ >
13
+ <FSRow
14
+ align="center-center"
15
+ width="hug"
16
+ gap="6px"
17
+ :wrap="false"
18
+ >
19
+ <FSIcon
20
+ :color="$props.groupingColor"
21
+ :size="$props.iconSize"
22
+ >
23
+ {{ $props.groupingIcon }}
24
+ </FSIcon>
25
+ <FSText
26
+ font="text-overline"
27
+ :color="textColor"
28
+ >
29
+ {{ $props.groupingLabel }}
30
+ </FSText>
31
+ </FSRow>
32
+ <FSRow
33
+ align="center-center"
34
+ width="hug"
35
+ gap="6px"
36
+ :wrap="false"
37
+ >
38
+ <FSIcon
39
+ :size="$props.iconSize"
40
+ :color="textColor"
41
+ >
42
+ {{ $props.icon }}
43
+ </FSIcon>
44
+ <FSText
45
+ font="text-overline"
46
+ :color="textColor"
47
+ >
48
+ {{ $props.label }}
49
+ </FSText>
50
+ </FSRow>
51
+ </FSRow>
52
+ </FSChip>
53
+ </template>
54
+
55
+ <script lang="ts">
56
+ import { defineComponent, type PropType } from "vue";
57
+
58
+ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
59
+
60
+ import FSIcon from "./FSIcon.vue";
61
+ import FSText from "./FSText.vue";
62
+ import FSChip from "./FSChip.vue";
63
+ import FSRow from "./FSRow.vue";
64
+ import { useColors } from "../composables";
65
+
66
+ export default defineComponent({
67
+ name: "FSSubgroupingChip",
68
+ components: {
69
+ FSChip,
70
+ FSIcon,
71
+ FSText,
72
+ FSRow
73
+ },
74
+ props: {
75
+ groupingLabel: {
76
+ type: String as PropType<string>,
77
+ required: true
78
+ },
79
+ groupingIcon: {
80
+ type: String as PropType<string>,
81
+ required: true
82
+ },
83
+ groupingColor: {
84
+ type: String as PropType<ColorBase>,
85
+ required: false,
86
+ default: ColorEnum.Dark
87
+ },
88
+ label: {
89
+ type: String as PropType<string>,
90
+ required: true
91
+ },
92
+ icon: {
93
+ type: String as PropType<string>,
94
+ required: true
95
+ },
96
+ height: {
97
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
98
+ required: false,
99
+ default: () => [24, 20]
100
+ },
101
+ width: {
102
+ type: [Array, String, Number] as PropType<string[] | number[] | string | number | null>,
103
+ required: false,
104
+ default: "hug"
105
+ },
106
+ variant: {
107
+ type: String as PropType<"standard" | "full" | "borderless">,
108
+ required: false,
109
+ default: "standard"
110
+ },
111
+ color: {
112
+ type: String as PropType<ColorBase>,
113
+ required: false,
114
+ default: ColorEnum.Light
115
+ },
116
+ iconSize: {
117
+ type: [Array, String, Number] as PropType<"s" | "m" | "l" | string[] | number[] | string | number | null>,
118
+ required: false,
119
+ default: "18px"
120
+ }
121
+ },
122
+ setup(props) {
123
+ const { getColors } = useColors();
124
+
125
+ const borderColor = getColors(props.color).dark;
126
+ const textColor = getColors(ColorEnum.Dark).dark;
127
+
128
+ return {
129
+ borderColor,
130
+ textColor,
131
+ ColorEnum
132
+ };
133
+ }
134
+ });
135
+ </script>
@@ -0,0 +1,45 @@
1
+ <template>
2
+ <FSSimpleTileUI
3
+ :bottomColor="null"
4
+ v-bind="$attrs"
5
+ >
6
+ <template
7
+ #append-info
8
+ >
9
+ <FSEntityCountBadge
10
+ :label="$tr('ui.common.equipments', 'Équipements')"
11
+ :count="$props.deviceOrganisationsCount ?? 0"
12
+ :color="ColorEnum.Primary"
13
+ />
14
+ </template>
15
+ </FSSimpleTileUI>
16
+ </template>
17
+
18
+ <script lang="ts">
19
+ import { defineComponent } from "vue";
20
+
21
+ import { ColorEnum } from "@dative-gpi/foundation-shared-components/models";
22
+
23
+ import FSEntityCountBadge from "./FSEntityCountBadge.vue";
24
+ import FSSimpleTileUI from './FSSimpleTileUI.vue';
25
+
26
+ export default defineComponent({
27
+ name: "FSSubgroupingTileUI",
28
+ components: {
29
+ FSSimpleTileUI,
30
+ FSEntityCountBadge
31
+ },
32
+ props: {
33
+ deviceOrganisationsCount: {
34
+ type: Number,
35
+ required: false,
36
+ default: null
37
+ }
38
+ },
39
+ setup() {
40
+ return {
41
+ ColorEnum,
42
+ };
43
+ }
44
+ });
45
+ </script>
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.2",
7
+ "version": "1.1.3-groupings",
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.2",
17
- "@dative-gpi/foundation-shared-services": "1.1.2"
16
+ "@dative-gpi/foundation-shared-domain": "1.1.3-groupings",
17
+ "@dative-gpi/foundation-shared-services": "1.1.3-groupings"
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": "de9d8959468d94abe835e551090afbc46ecb4f86"
41
+ "gitHead": "ad40c30f9ecd5b50de62619fa3cfab64e63d7cc5"
42
42
  }