@paris-ias/list 1.0.4 → 1.0.7

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 (99) hide show
  1. package/dist/module.ts +119 -0
  2. package/dist/runtime/components/events/Badges.vue +73 -0
  3. package/dist/runtime/components/events/DateTimePlace.vue +77 -0
  4. package/dist/runtime/components/events/DenseItem.vue +40 -0
  5. package/dist/runtime/components/events/ExpandedItem.vue +11 -0
  6. package/dist/runtime/components/events/ListContainer.vue +41 -0
  7. package/dist/runtime/components/events/RegisterModal.vue +51 -0
  8. package/dist/runtime/components/events/RelatedItem.vue +44 -0
  9. package/dist/runtime/components/events/RowsItem.vue +114 -0
  10. package/dist/runtime/components/events/View.vue +333 -0
  11. package/dist/runtime/components/fellowships/Badges.vue +48 -0
  12. package/dist/runtime/components/fellowships/DenseItem.vue +39 -0
  13. package/dist/runtime/components/fellowships/ExpandedItem.vue +7 -0
  14. package/dist/runtime/components/fellowships/RegisterModal.vue +41 -0
  15. package/dist/runtime/components/fellowships/RowsItem.vue +61 -0
  16. package/dist/runtime/components/fellowships/View.vue +210 -0
  17. package/dist/runtime/components/list/atoms/FiltersMenu.vue +46 -0
  18. package/dist/runtime/components/list/atoms/SearchInput.vue +129 -0
  19. package/dist/runtime/components/list/atoms/SearchItem.vue +59 -0
  20. package/dist/runtime/components/list/atoms/SearchString.vue +161 -0
  21. package/dist/runtime/components/list/atoms/SortMenu.vue +97 -0
  22. package/dist/runtime/components/list/atoms/ViewMenu.vue +71 -0
  23. package/dist/runtime/components/list/inputs/AutoComplete.vue +22 -0
  24. package/dist/runtime/components/list/inputs/BooleanSwitch.vue +18 -0
  25. package/dist/runtime/components/list/inputs/Checkbox.vue +21 -0
  26. package/dist/runtime/components/list/inputs/Select.vue +25 -0
  27. package/dist/runtime/components/list/molecules/Filters.vue +97 -0
  28. package/dist/runtime/components/list/molecules/Header.vue +47 -0
  29. package/dist/runtime/components/list/molecules/Pagination.vue +243 -0
  30. package/dist/runtime/components/list/organisms/List.vue +92 -0
  31. package/dist/runtime/components/list/views/Dense.vue +25 -0
  32. package/dist/runtime/components/list/views/Expanded.vue +10 -0
  33. package/dist/runtime/components/list/views/Grid.vue +13 -0
  34. package/dist/runtime/components/list/views/Rows.vue +13 -0
  35. package/dist/runtime/components/list/views/Table.vue +13 -0
  36. package/dist/runtime/components/misc/atoms/CountUp.vue +198 -0
  37. package/dist/runtime/components/misc/atoms/DateStamp.vue +104 -0
  38. package/dist/runtime/components/misc/atoms/ImageContainer.vue +105 -0
  39. package/dist/runtime/components/misc/atoms/ShareMenu.vue +60 -0
  40. package/dist/runtime/components/misc/atoms/Socials.vue +127 -0
  41. package/dist/runtime/components/misc/molecules/ChipContainer.vue +35 -0
  42. package/dist/runtime/components/misc/molecules/Related.vue +41 -0
  43. package/dist/runtime/components/misc/molecules/RelatedItems.vue +29 -0
  44. package/dist/runtime/components/misc/molecules/SearchItem.vue +26 -0
  45. package/dist/runtime/components/news/DenseItem.vue +62 -0
  46. package/dist/runtime/components/news/ExpandedItem.vue +153 -0
  47. package/dist/runtime/components/news/Header.vue +9 -0
  48. package/dist/runtime/components/news/RelatedItem.vue +44 -0
  49. package/dist/runtime/components/news/RowsItem.vue +160 -0
  50. package/dist/runtime/components/news/View.vue +190 -0
  51. package/dist/runtime/components/people/DenseItem.vue +37 -0
  52. package/dist/runtime/components/people/ExpandedItem.vue +16 -0
  53. package/dist/runtime/components/people/GroupBadges.vue +56 -0
  54. package/dist/runtime/components/people/RelatedItem.vue +41 -0
  55. package/dist/runtime/components/people/RowsItem.vue +95 -0
  56. package/dist/runtime/components/people/View.vue +162 -0
  57. package/dist/runtime/components/projects/ExpandedItem.vue +14 -0
  58. package/dist/runtime/components/projects/RelatedItem.vue +44 -0
  59. package/dist/runtime/components/projects/RowsItem.vue +106 -0
  60. package/dist/runtime/components/projects/View.vue +131 -0
  61. package/dist/runtime/components/publications/RelatedItem.vue +44 -0
  62. package/dist/runtime/components/publications/RowsItem.vue +105 -0
  63. package/dist/runtime/components/publications/View.vue +139 -0
  64. package/dist/runtime/composables/useFetchItem.ts +64 -0
  65. package/dist/runtime/composables/useIcons.ts +30 -0
  66. package/dist/runtime/composables/useUtils.ts +75 -0
  67. package/dist/runtime/graphql/queries/buildFiltersValues.gql +35 -0
  68. package/dist/runtime/graphql/queries/item/action.gql +0 -0
  69. package/dist/runtime/graphql/queries/item/apps.gql +0 -0
  70. package/dist/runtime/graphql/queries/item/events.gql +120 -0
  71. package/dist/runtime/graphql/queries/item/fellowships.gql +164 -0
  72. package/dist/runtime/graphql/queries/item/news.gql +129 -0
  73. package/dist/runtime/graphql/queries/item/people.gql +174 -0
  74. package/dist/runtime/graphql/queries/item/projects.gql +171 -0
  75. package/dist/runtime/graphql/queries/item/publications.gql +169 -0
  76. package/dist/runtime/graphql/queries/item/users.gql +0 -0
  77. package/dist/runtime/graphql/queries/list/action.gql +0 -0
  78. package/dist/runtime/graphql/queries/list/apps.gql +32 -0
  79. package/dist/runtime/graphql/queries/list/events.gql +44 -0
  80. package/dist/runtime/graphql/queries/list/fellowships.gql +53 -0
  81. package/dist/runtime/graphql/queries/list/news.gql +39 -0
  82. package/dist/runtime/graphql/queries/list/people.gql +49 -0
  83. package/dist/runtime/graphql/queries/list/projects.gql +37 -0
  84. package/dist/runtime/graphql/queries/list/publications.gql +37 -0
  85. package/dist/runtime/graphql/queries/list/search.gql +148 -0
  86. package/dist/runtime/graphql/queries/list/users.gql +32 -0
  87. package/dist/runtime/graphql/queries/login.gql +0 -0
  88. package/dist/runtime/plugins/pinia.ts +88 -0
  89. package/dist/runtime/plugins/vuetify.js +21 -0
  90. package/dist/runtime/stores/factory.ts +18 -0
  91. package/dist/runtime/stores/root.ts +353 -0
  92. package/dist/runtime/translations/en.json +436 -0
  93. package/dist/runtime/translations/fr.json +429 -0
  94. package/dist/runtime/types/imports.d.ts +13 -0
  95. package/dist/runtime/types/stores.d.ts +11 -0
  96. package/example/.env.example +3 -0
  97. package/example/nuxt.config.ts +19 -0
  98. package/example/pages/index.vue +27 -0
  99. package/package.json +8 -17
@@ -0,0 +1,333 @@
1
+ <template>
2
+ <div class="">
3
+ <v-row>
4
+ <v-col v-if="mdAndUp" cols="12" md="3">
5
+ <MiscAtomsImageContainer
6
+ cover
7
+ :src="
8
+ item && item.image && item.image.url ? item.image : '/default.png'
9
+ "
10
+ :ratio="1 / 1"
11
+ :loading="loading"
12
+ />
13
+ </v-col>
14
+
15
+ <v-col
16
+ cols="12"
17
+ md="9"
18
+ class="d-flex flex-sm-column flex-md-column justify-md-end flex-wrap"
19
+ >
20
+ <v-skeleton-loader
21
+ v-if="loading"
22
+ width="100%"
23
+ :type="
24
+ [
25
+ 'subtitle, heading@2, text, button',
26
+ 'subtitle, heading@2, text, button',
27
+ 'subtitle, heading@2, text, button',
28
+ 'subtitle, heading@2, text, button',
29
+ 'subtitle, heading@2, text, button',
30
+ 'subtitle, heading@2, text, button',
31
+ ][['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')]
32
+ "
33
+ />
34
+
35
+ <template v-else>
36
+ <div class="d-flex align-center flex-column">
37
+ <div class="d-flex text-center text-wrap text-h3 text-black">
38
+ {{ item.name }}
39
+ </div>
40
+
41
+ <v-divider width="154px" class="mb-1 mt-6" />
42
+ <v-divider width="154px" />
43
+
44
+ <div
45
+ v-if="item && item.category"
46
+ class="d-flex text-center text-wrap text-h5 font-weight-black mt-6"
47
+ >
48
+ {{ $t("list.filters.events.category." + item.category) }}
49
+ </div>
50
+
51
+ <MDC
52
+ v-if="item.subtitle"
53
+ class="d-flex text-center text-wrap text-h5 text-black mt-4"
54
+ :value="item.subtitle"
55
+ />
56
+
57
+ <div class="d-flex text-center text-wrap text-h5 text-black mt-4">
58
+ <!-- <EventsBadges :item="item" /> -->
59
+ </div>
60
+
61
+ <v-divider width="154px" class="mb-1 mt-6" />
62
+ <v-divider width="154px" />
63
+ </div>
64
+ </template>
65
+ </v-col>
66
+ </v-row>
67
+
68
+ <v-row class="mt-md-3 mt-lg-10 mt-xl-12">
69
+ <v-col v-if="mdAndUp" class="d-flex flex-column" cols="12" md="3">
70
+ <v-skeleton-loader
71
+ v-if="loading"
72
+ height="100%"
73
+ :type="
74
+ [
75
+ '',
76
+ '',
77
+ 'image, image, heading, list-item@2',
78
+ 'image, image, heading, list-item@2',
79
+ 'image, image, heading, list-item@2',
80
+ 'image, image, heading, list-item@2',
81
+ ][['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')]
82
+ "
83
+ />
84
+
85
+ <template v-else>
86
+ <div class="bg-grey-lighten-4">
87
+ <div class="ma-md-4 ma-lg-8">
88
+ <EventsDateTimePlace :item="item" />
89
+ <template v-if="bookingState === 'OPEN'">
90
+ <div class="mt-md-4">
91
+ <!-- TODO: bind -->
92
+ {{ $t("register-until-0", [getLocalizedDate(item.stop)]) }}
93
+ </div>
94
+ <div class="mt-md-4">
95
+ {{ $t("inscription-gratuite-et-obligatoire") }}
96
+ </div></template
97
+ >
98
+ </div>
99
+ </div>
100
+
101
+ <div class="mt-md-4 mt-lg-6 mt-xl-8 d-flex">
102
+ <EventsRegisterModal
103
+ v-if="!loading && bookingState === 'OPEN'"
104
+ :item="item"
105
+ >
106
+ <template #activator="activatorProps"
107
+ ><v-btn
108
+ color="grey-lighten-3"
109
+ v-bind="activatorProps"
110
+ flat
111
+ tile
112
+ block
113
+ class="my-2"
114
+ style="height: auto"
115
+ >
116
+ <template #append>
117
+ <v-icon class="text-green" size="x-large">
118
+ mdi-circle-medium</v-icon
119
+ >
120
+ </template>
121
+ {{ $t("inscription-ouverte") }}
122
+ </v-btn></template
123
+ >
124
+ </EventsRegisterModal>
125
+ </div>
126
+
127
+ <v-sheet class="mt-md-0 mt-lg-2 mt-xl-4">
128
+ <v-list v-if="!loading && item.files && item.files.length">
129
+ <v-list-subheader class="text-overline font-weight-bold">{{
130
+ $t("document")
131
+ }}</v-list-subheader>
132
+
133
+ <v-list-item
134
+ v-for="(file, i) in item.files"
135
+ :key="i"
136
+ :value="file"
137
+ >
138
+ <template #prepend>
139
+ <v-icon v-if="mdAndUp" :icon="getFileIcon(file.url)" />
140
+ </template>
141
+ <v-list-item-title class="text-wrap" v-text="file.name" />
142
+ </v-list-item>
143
+ </v-list>
144
+ </v-sheet>
145
+ </template>
146
+ </v-col>
147
+
148
+ <v-col v-if="sm" class="d-flex flex-row" cols="12">
149
+ <v-row class="ml-sm-1">
150
+ <v-col cols="6">
151
+ <MiscAtomsImageContainer
152
+ cover
153
+ :src="item.image.url ? item.image : '/default.png'"
154
+ :ratio="1 / 1"
155
+ :loading="loading"
156
+ />
157
+ </v-col>
158
+ <v-col cols="6">
159
+ <v-skeleton-loader
160
+ v-if="loading"
161
+ type="heading, subtitle, heading, subtitle, ossein, button"
162
+ />
163
+ <EventsDateTimePlace v-else :item="item" />
164
+ </v-col>
165
+ </v-row>
166
+ </v-col>
167
+
168
+ <v-col v-if="xs" class="ml-2" cols="12">
169
+ <MiscAtomsImageContainer
170
+ cover
171
+ :src="item.image.url ? item.image : '/default.png'"
172
+ :ratio="1 / 1"
173
+ :loading="loading"
174
+ />
175
+ </v-col>
176
+
177
+ <v-col v-if="xs" class="ml-2" cols="12">
178
+ <v-skeleton-loader
179
+ v-if="loading"
180
+ type="heading, subtitle, heading, subtitle, ossein, button"
181
+ />
182
+ <EventsDateTimePlace v-else :item="item" />
183
+ </v-col>
184
+
185
+ <v-col cols="12" md="9" class="px-0">
186
+ <v-skeleton-loader
187
+ v-if="loading"
188
+ :type="
189
+ [
190
+ 'avatar, text, ossein, avatar, text, ossein, avatar, text',
191
+ 'avatar, text, ossein, avatar, text, ossein, avatar, text',
192
+ 'button, button, ossein, text@40',
193
+ 'button, button, ossein, text@50',
194
+ 'button, button, ossein, text@50',
195
+ 'button, button, ossein, text@50',
196
+ ][['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')]
197
+ "
198
+ />
199
+
200
+ <template v-else>
201
+ <div class="ml-md-8 ml-lg-10 ml-xl-12">
202
+ <v-expansion-panels
203
+ v-model="panel"
204
+ outlined
205
+ flat
206
+ eager
207
+ ripple
208
+ variant="accordion"
209
+ class="py-8"
210
+ >
211
+ <v-expansion-panel
212
+ v-if="item.description"
213
+ :value="panel[0]"
214
+ class="border-thin text-black"
215
+ :color="key === accordeon ? 'light-grey' : 'white'"
216
+ >
217
+ <v-expansion-panel-title
218
+ collapse-icon="mdi-minus"
219
+ expand-icon="mdi-plus"
220
+ class="text-h6"
221
+ :class="{ 'font-weight-black': key === accordeon }"
222
+ >
223
+ {{ $t("presentation") }}
224
+ </v-expansion-panel-title>
225
+ <v-expansion-panel-text
226
+ class="py-2"
227
+ style="white-space: pre; text-wrap: auto"
228
+ >
229
+ <MDC v-if="item.description" :value="item.description" />
230
+ </v-expansion-panel-text>
231
+ </v-expansion-panel>
232
+
233
+ <v-expansion-panel
234
+ v-if="item.program"
235
+ class="border-thin text-black"
236
+ :color="key === accordeon ? 'light-grey' : 'white'"
237
+ >
238
+ <v-expansion-panel-title
239
+ collapse-icon="mdi-minus"
240
+ expand-icon="mdi-plus"
241
+ class="text-h6"
242
+ :class="{ 'font-weight-black': key === accordeon }"
243
+ >
244
+ {{ $t("programme") }}
245
+ </v-expansion-panel-title>
246
+ <v-expansion-panel-text>
247
+ <MDC v-if="item.program" :value="item.program" />
248
+
249
+ ></v-expansion-panel-text
250
+ >
251
+ </v-expansion-panel>
252
+
253
+ <v-expansion-panel
254
+ v-if="item.details"
255
+ class="border-thin text-black"
256
+ :color="key === accordeon ? 'light-grey' : 'white'"
257
+ >
258
+ <v-expansion-panel-title
259
+ collapse-icon="mdi-minus"
260
+ expand-icon="mdi-plus"
261
+ class="text-h6"
262
+ :class="{ 'font-weight-black': key === accordeon }"
263
+ >
264
+ {{ $t("details-0") }}
265
+ </v-expansion-panel-title>
266
+ <v-expansion-panel-text
267
+ class="border-thin text-black"
268
+ :color="key === accordeon ? 'light-grey' : 'white'"
269
+ >
270
+ <MDC v-if="item.details" :value="item.details" />
271
+ </v-expansion-panel-text>
272
+ </v-expansion-panel>
273
+ </v-expansion-panels>
274
+ </div>
275
+ </template>
276
+ </v-col>
277
+ </v-row>
278
+
279
+ <!-- DIVIDERS -->
280
+ <v-responsive class="mx-auto my-9" width="120">
281
+ <v-divider class="mb-1" />
282
+ <v-divider />
283
+ </v-responsive>
284
+ <!-- <MiscAtomsSlidingCarousel
285
+ v-if="!loading && item && item.gallery && item.gallery.length"
286
+ ref="MiscAtomsImage"
287
+ key="MiscAtomsImage"
288
+ :items="item.gallery"
289
+ type="MiscAtomsImage"
290
+ :loading="false"
291
+ :more="false"
292
+ >
293
+ <div :class="mdAndUp ? 'text-h5' : 'text-h6'">
294
+ {{ $t("gallery") }}
295
+ </div>
296
+ </MiscAtomsSlidingCarousel> -->
297
+ <v-responsive class="mx-auto my-9" width="120">
298
+ <v-divider class="mb-1" />
299
+ <v-divider />
300
+ </v-responsive>
301
+ <MiscMoleculesRelated
302
+ v-if="!loading && item && item.related"
303
+ :related="item.related"
304
+ />
305
+ </div>
306
+ </template>
307
+
308
+ <script setup>
309
+ import { useDisplay } from "vuetify"
310
+ import getFileIcon from "../../composables/useIcons"
311
+ const { name, mdAndUp, sm, xs } = useDisplay()
312
+ const router = useRouter()
313
+ const props = defineProps({
314
+ item: {
315
+ type: Object,
316
+ required: true,
317
+ },
318
+ loading: {
319
+ type: Boolean,
320
+ required: false,
321
+ default: false,
322
+ },
323
+ })
324
+
325
+ // UI components models
326
+ const panel = ref(["presentation"])
327
+
328
+ function redirectToMap(long, lat) {
329
+ router.push(
330
+ `https://www.openstreetmap.org/?mlat=${lat}&amp;mlon=${long}#map=19/${lat}/${long}`
331
+ )
332
+ }
333
+ </script>
@@ -0,0 +1,48 @@
1
+ <template>
2
+ <div v-if="registrationStatus === 0" class="text-overline">
3
+ {{
4
+ $t("opening-applications-on-0", [getLocalizedDate(item.applicationStart)])
5
+ }}
6
+ </div>
7
+
8
+ <FellowshipsRegisterModal
9
+ v-else-if="registrationStatus === 1"
10
+ :item="item"
11
+ :view="view"
12
+ class="mr-2"
13
+ />
14
+
15
+ <div v-else-if="registrationStatus === 2" class="my-2 text-overline">
16
+ <v-icon class="text-grey" size="x-large"> mdi-circle-medium</v-icon>
17
+ {{
18
+ $t("applications-closed-since-0", [
19
+ getLocalizedDate(item.applicationStop),
20
+ ])
21
+ }}
22
+ </div>
23
+ </template>
24
+
25
+ <script setup>
26
+ const props = defineProps({
27
+ item: { type: Object, required: true },
28
+ view: { type: Boolean, required: false, default: false },
29
+ })
30
+
31
+ const registrationStatus = computed(() => {
32
+ const currentDate = new Date()
33
+ const startDate = new Date(props.item.applicationStart)
34
+ const endDate = new Date(props.item.applicationStop)
35
+ switch (true) {
36
+ case currentDate < startDate:
37
+ return 0
38
+ case currentDate > startDate && currentDate < endDate:
39
+ return 1
40
+ case currentDate > startDate && currentDate > endDate:
41
+ return 2
42
+ default:
43
+ return false
44
+ }
45
+ })
46
+ </script>
47
+
48
+ <style lang="scss" scoped></style>
@@ -0,0 +1,39 @@
1
+ <template>
2
+ <v-row
3
+ v-ripple
4
+ class="cursor-pointer highlight-on-hover"
5
+ @click="
6
+ $router.push(localePath('/activities/fellowships' + item.slug[locale]))
7
+ "
8
+ >
9
+ <v-col align-self="center" cols="8" class="text-h6">
10
+ {{ item.name }}
11
+ <FellowshipsBadges :item="item" />
12
+ </v-col>
13
+ <v-col align-self="center" cols="4">
14
+ <MiscMoleculesChipContainer
15
+ :items="[
16
+ $t('list.filters.fellowships.fellowshipType.' + item.fellowshipType),
17
+ ...(props.item && props.item.disciplines
18
+ ? props.item.disciplines.map((discipline) => discipline.name)
19
+ : []),
20
+ ]"
21
+ class="mt-2"
22
+ /></v-col>
23
+ </v-row>
24
+ </template>
25
+ <script setup>
26
+ const { locale } = useI18n()
27
+
28
+ const localePath = useLocalePath()
29
+ const props = defineProps({
30
+ item: {
31
+ type: Object,
32
+ required: true,
33
+ },
34
+ index: {
35
+ type: Number,
36
+ required: true,
37
+ },
38
+ })
39
+ </script>
@@ -0,0 +1,7 @@
1
+ <template>
2
+ <div></div>
3
+ </template>
4
+
5
+ <script lang="ts" setup></script>
6
+
7
+ <style></style>
@@ -0,0 +1,41 @@
1
+ <template>
2
+ <v-dialog max-width="500">
3
+ <template #activator="{ props: activatorProps }">
4
+ <v-btn
5
+ v-bind="activatorProps"
6
+ tile
7
+ :variant="view ? 'outlined' : 'text'"
8
+ class="text-overline"
9
+ >
10
+ {{
11
+ $t("register-until-0", [getLocalizedDate(item.applicationStop)])
12
+ }}</v-btn
13
+ >
14
+ </template>
15
+
16
+ <template #default="{ isActive }">
17
+ <v-card :title="$t('fellowship-register')">
18
+ <v-card-text>
19
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
20
+ eiusmod tempor incididunt ut labore et dolore magna aliqua.
21
+ </v-card-text>
22
+
23
+ <v-card-actions>
24
+ <v-spacer />
25
+
26
+ <v-btn :text="$t('cancel')" @click="isActive.value = false" />
27
+ <v-btn
28
+ :text="$t('events.register-me')"
29
+ @click="isActive.value = false"
30
+ />
31
+ </v-card-actions>
32
+ </v-card>
33
+ </template>
34
+ </v-dialog>
35
+ </template>
36
+ <script setup>
37
+ const props = defineProps({
38
+ item: { type: Object, required: true },
39
+ view: { type: Boolean, required: false, default: false },
40
+ })
41
+ </script>
@@ -0,0 +1,61 @@
1
+ <template>
2
+ <v-col cols="12" md="6" class="highlight-on-hover">
3
+ <div v-ripple class="border-thin pa-6">
4
+ <FellowshipsBadges :item="item" />
5
+ <div class="d-flex">
6
+ <nuxt-link
7
+ :to="
8
+ localePath({
9
+ name: 'activities-fellowships-slug',
10
+ params: { slug: item.slug[locale] },
11
+ })
12
+ "
13
+ class="text-h4 text-black text-wrap mt-4 pb-4"
14
+ >
15
+ {{ item.name }}
16
+ </nuxt-link>
17
+ </div>
18
+ <div class="d-flex">
19
+ <MDC
20
+ v-if="item.description"
21
+ :value="item.description"
22
+ class="text-wrap clamped-text"
23
+ :style="
24
+ '-webkit-line-clamp:' +
25
+ [5, 5, 5, 10, 12, 14][
26
+ ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'].indexOf(name || 'md')
27
+ ]
28
+ "
29
+ />
30
+ </div>
31
+ <MiscMoleculesChipContainer
32
+ :items="[
33
+ $t('list.filters.fellowships.fellowshipType.' + item.fellowshipType),
34
+ ...(props.item && props.item.disciplines
35
+ ? props.item.disciplines.map((discipline) => discipline.name)
36
+ : []),
37
+ ]"
38
+ class="mt-2"
39
+ />
40
+ </div>
41
+ </v-col>
42
+ </template>
43
+
44
+ <script setup>
45
+ import { useDisplay } from "vuetify"
46
+ const { name } = useDisplay()
47
+ const localePath = useLocalePath()
48
+ const { locale } = useI18n()
49
+
50
+ const props = defineProps({
51
+ item: {
52
+ type: Object,
53
+ required: true,
54
+ },
55
+ index: {
56
+ type: Number,
57
+ required: true,
58
+ },
59
+ })
60
+ </script>
61
+ <style lang="scss"></style>