@dative-gpi/foundation-shared-components 1.1.2-fix-dialog-menu → 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,26 +10,18 @@
10
10
  :color="$props.color"
11
11
  :class="classes"
12
12
  >
13
- <template
14
- #default="slotData"
15
- >
13
+ <FSCol>
16
14
  <slot
17
- v-if="$slots.body"
18
15
  name="body"
19
- v-bind="slotData"
20
- />
21
- <slot
22
- v-else
23
- name="default"
24
- v-bind="slotData"
25
16
  />
26
- </template>
17
+ </FSCol>
27
18
  <template
28
- v-if="$slots['top-right']"
29
- #top-right
19
+ v-for="(_, name) in $slots"
20
+ v-slot:[name]="slotData"
30
21
  >
31
22
  <slot
32
- name="top-right"
23
+ :name="name"
24
+ v-bind="slotData"
33
25
  />
34
26
  </template>
35
27
  </FSCard>
@@ -43,11 +35,13 @@ import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-compone
43
35
  import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
44
36
 
45
37
  import FSCard from "./FSCard.vue";
38
+ import FSCol from "./FSCol.vue";
46
39
 
47
40
  export default defineComponent({
48
41
  name: "FSDialogMenu",
49
42
  components: {
50
- FSCard
43
+ FSCard,
44
+ FSCol
51
45
  },
52
46
  props: {
53
47
  classes: {
@@ -104,7 +104,7 @@
104
104
  import { computed, defineComponent, type PropType, ref } from "vue";
105
105
 
106
106
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
107
- import { type ColorBase, ColorEnum } from "@dative-gpi/foundation-shared-components/models";
107
+ import { type ColorBase, ColorEnum, type DialogMultiFormMode, DialogMultiFormModes, type DialogMultiFormVariant } from "@dative-gpi/foundation-shared-components/models";
108
108
  import { useBreakpoints } from "@dative-gpi/foundation-shared-components/composables";
109
109
 
110
110
  import FSPagination from "./FSPagination.vue";
@@ -118,6 +118,7 @@ import FSTabs from "./FSTabs.vue";
118
118
  import FSTab from "./FSTab.vue";
119
119
  import FSIcon from "./FSIcon.vue";
120
120
  import FSWindow from "./FSWindow.vue";
121
+ import { DialogMultiFormVariants } from "@dative-gpi/foundation-shared-components/models";
121
122
 
122
123
  export default defineComponent({
123
124
  name: "FSDialogMultiFormBody",
@@ -146,9 +147,9 @@ export default defineComponent({
146
147
  default: "auto"
147
148
  },
148
149
  variant: {
149
- type: String as PropType<"standard" | "submit">,
150
+ type: String as PropType<DialogMultiFormVariant>,
150
151
  required: false,
151
- default: "submit"
152
+ default: DialogMultiFormVariants.Submit
152
153
  },
153
154
  steps: {
154
155
  type: Number,
@@ -225,9 +226,9 @@ export default defineComponent({
225
226
  default: false
226
227
  },
227
228
  mode: {
228
- type: String as PropType<"pagination" | "tabs">,
229
+ type: String as PropType<DialogMultiFormMode>,
229
230
  required: false,
230
- default: "pagination"
231
+ default: DialogMultiFormModes.Pagination
231
232
  },
232
233
  tabsColor: {
233
234
  type: String as PropType<ColorBase>,
@@ -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>
@@ -14,11 +14,11 @@
14
14
  gap="16px"
15
15
  width="fill"
16
16
  >
17
- <FSText
17
+ <FSSpan
18
18
  font="text-button"
19
19
  >
20
20
  {{ $props.label }}
21
- </FSText>
21
+ </FSSpan>
22
22
  <FSRow
23
23
  :wrap="false"
24
24
  align="center-left"
@@ -26,11 +26,11 @@
26
26
  <FSIcon>
27
27
  mdi-view-dashboard-outline
28
28
  </FSIcon>
29
- <FSText
29
+ <FSSpan
30
30
  font="text-overline"
31
31
  >
32
32
  {{ $tr('ui.dashboards.dynamic', '{0} dashboard(s)', $props.dashboardsCount) }}
33
- </FSText>
33
+ </FSSpan>
34
34
  </FSRow>
35
35
  <FSRow
36
36
  :wrap="false"
@@ -40,18 +40,18 @@
40
40
  variant="fill"
41
41
  :value="automaticTransition"
42
42
  />
43
- <FSText
43
+ <FSSpan
44
44
  font="text-overline"
45
45
  v-if="automaticTransition"
46
46
  >
47
47
  {{$tr('ui.playlist.transition-delay.dynamic', 'Transition : {0}', getTimeBestString($props.delay ?? 0))}}
48
- </FSText>
49
- <FSText
48
+ </FSSpan>
49
+ <FSSpan
50
50
  font="text-overline"
51
51
  v-else
52
52
  >
53
53
  {{ $tr('ui.playlist.automatic-transition', 'Automatic transition') }}
54
- </FSText>
54
+ </FSSpan>
55
55
  </FSRow>
56
56
  <FSRow
57
57
  :wrap="false"
@@ -61,11 +61,11 @@
61
61
  variant="fill"
62
62
  :value="$props.looped"
63
63
  />
64
- <FSText
64
+ <FSSpan
65
65
  font="text-overline"
66
66
  >
67
67
  {{ $tr('entity.playlist.looped', 'Looped') }}
68
- </FSText>
68
+ </FSSpan>
69
69
  </FSRow>
70
70
  </FSCol>
71
71
  <slot
@@ -85,7 +85,7 @@ import { getTimeBestString } from "@dative-gpi/foundation-shared-components/util
85
85
  import FSIconCheck from "../FSIconCheck.vue";
86
86
  import FSTile from "../tiles/FSTile.vue";
87
87
  import FSIcon from "../FSIcon.vue";
88
- import FSText from "../FSText.vue";
88
+ import FSSpan from "../FSSpan.vue";
89
89
  import FSRow from "../FSRow.vue";
90
90
  import FSCol from "../FSCol.vue";
91
91
 
@@ -95,7 +95,7 @@ export default defineComponent({
95
95
  FSIconCheck,
96
96
  FSIcon,
97
97
  FSTile,
98
- FSText,
98
+ FSSpan,
99
99
  FSRow,
100
100
  FSCol
101
101
  },
@@ -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>
@@ -10,4 +10,17 @@ export type SnackbarVariant = "standard" | "full";
10
10
  export enum SnackbarVariants {
11
11
  Standard = "standard",
12
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"
13
26
  }
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-fix-dialog-menu",
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-fix-dialog-menu",
17
- "@dative-gpi/foundation-shared-services": "1.1.2-fix-dialog-menu"
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": "8e2aaaa5517eef8d6488fe114d9dbd782a91d13d"
41
+ "gitHead": "ad40c30f9ecd5b50de62619fa3cfab64e63d7cc5"
42
42
  }