@oxyfoo/whymeet-types 0.0.20 → 0.0.22
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.
- package/dist/Models/Activity.d.ts +1 -1
- package/dist/Models/Intention.d.ts +86 -16
- package/dist/Models/Intention.js +1181 -245
- package/dist/Models/InterestCategory.d.ts +9 -0
- package/dist/Models/InterestCategory.js +40 -0
- package/dist/Models/Match.d.ts +8 -3
- package/dist/Models/Profile.d.ts +2 -2
- package/dist/Models/Search.d.ts +5 -2
- package/dist/Models/index.d.ts +4 -2
- package/dist/Models/index.js +2 -1
- package/dist/WS/Request.d.ts +31 -14
- package/package.json +1 -1
package/dist/Models/Intention.js
CHANGED
|
@@ -1,254 +1,1190 @@
|
|
|
1
|
-
export const
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export const SOCIAL_MOMENT_KEYS = [
|
|
2
|
+
'do_something_together',
|
|
3
|
+
'go_out_or_move',
|
|
4
|
+
'talk_and_share',
|
|
5
|
+
'build_connection',
|
|
6
|
+
'see_if_it_clicks',
|
|
7
|
+
'grow_or_build'
|
|
8
|
+
];
|
|
9
|
+
export const INTENTION_KEYS = [
|
|
10
|
+
'go_out_coffee',
|
|
11
|
+
'go_out_drink',
|
|
12
|
+
'go_out_meal',
|
|
13
|
+
'go_out_walk',
|
|
14
|
+
'go_out_tonight',
|
|
15
|
+
'go_out_discover',
|
|
16
|
+
'activity_sports',
|
|
17
|
+
'activity_play',
|
|
18
|
+
'activity_play_video_games',
|
|
19
|
+
'activity_play_board_games',
|
|
20
|
+
'activity_culture',
|
|
21
|
+
'activity_creative',
|
|
22
|
+
'activity_food',
|
|
23
|
+
'activity_outdoor',
|
|
24
|
+
'talk_light',
|
|
25
|
+
'talk_deep',
|
|
26
|
+
'talk_topic',
|
|
27
|
+
'talk_media',
|
|
28
|
+
'talk_language_exchange',
|
|
29
|
+
'talk_online',
|
|
30
|
+
'meet_make_acquaintance',
|
|
31
|
+
'meet_feeling',
|
|
32
|
+
'meet_simple_first_date',
|
|
33
|
+
'meet_relaxed_date',
|
|
34
|
+
'meet_spontaneous',
|
|
35
|
+
'meet_online_first',
|
|
36
|
+
'regular_sports_partner',
|
|
37
|
+
'regular_game_partner',
|
|
38
|
+
'regular_talk_buddy',
|
|
39
|
+
'regular_social_habit',
|
|
40
|
+
'regular_small_group',
|
|
41
|
+
'regular_go_out_often',
|
|
42
|
+
'build_coworking',
|
|
43
|
+
'build_project',
|
|
44
|
+
'build_entrepreneurship',
|
|
45
|
+
'build_create_together',
|
|
46
|
+
'build_learn_together',
|
|
47
|
+
'build_mentoring',
|
|
48
|
+
'build_collaboration'
|
|
49
|
+
];
|
|
50
|
+
export const SOCIAL_MOMENTS = [
|
|
6
51
|
{
|
|
7
|
-
key: '
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
52
|
+
key: 'go_out_or_move',
|
|
53
|
+
emoji: '🌆',
|
|
54
|
+
order: 10,
|
|
55
|
+
i18n: {
|
|
56
|
+
fr: {
|
|
57
|
+
label: 'Sortir',
|
|
58
|
+
description: 'Trouver une sortie simple et concrète pour se voir dans la vraie vie.'
|
|
59
|
+
},
|
|
60
|
+
en: { label: 'Go out', description: 'Find a simple and concrete outing to meet in real life.' }
|
|
61
|
+
}
|
|
11
62
|
},
|
|
12
|
-
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
{
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
{
|
|
23
|
-
key: 'promenade',
|
|
24
|
-
label: 'Promenade',
|
|
25
|
-
emoji: '🚶',
|
|
26
|
-
tags: ['Balade', 'Parc', 'Nature', 'Plage', 'Pique-nique', 'Sunset']
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
key: 'dinner',
|
|
30
|
-
label: 'Dîner',
|
|
31
|
-
emoji: '🍽️',
|
|
32
|
-
tags: ['Restaurant', 'Cuisine', 'Gastronomie', 'Street food', 'Sushi', 'Brunch']
|
|
33
|
-
},
|
|
34
|
-
{
|
|
35
|
-
key: 'cine_culture',
|
|
36
|
-
label: 'Ciné & culture',
|
|
37
|
-
emoji: '🎬',
|
|
38
|
-
tags: ['Cinéma', 'Musée', 'Théâtre', 'Expo', 'Concert', 'Opéra']
|
|
39
|
-
},
|
|
40
|
-
{ key: 'sortie', label: 'Soirée', emoji: '🌃', tags: ['Club', 'Bar', 'Live', 'DJ', 'Afterparty', 'Rooftop'] },
|
|
41
|
-
{
|
|
42
|
-
key: 'escapade',
|
|
43
|
-
label: 'Escapade',
|
|
44
|
-
emoji: '🌍',
|
|
45
|
-
tags: ['Week-end', 'Road trip', 'Voyage', 'Aventure', 'Hôtel', 'Camping']
|
|
46
|
-
},
|
|
47
|
-
{
|
|
48
|
-
key: 'online',
|
|
49
|
-
label: 'En ligne',
|
|
50
|
-
emoji: '💻',
|
|
51
|
-
tags: ['Vidéo', 'Chat', 'Jeux', 'Netflix', 'Long distance', 'Appel']
|
|
63
|
+
{
|
|
64
|
+
key: 'do_something_together',
|
|
65
|
+
emoji: '🎯',
|
|
66
|
+
order: 20,
|
|
67
|
+
i18n: {
|
|
68
|
+
fr: {
|
|
69
|
+
label: 'Partager une activité',
|
|
70
|
+
description: 'Se voir autour d’une activité précise à faire ensemble.'
|
|
71
|
+
},
|
|
72
|
+
en: { label: 'Share an activity', description: 'Meet around a specific activity to do together.' }
|
|
52
73
|
}
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
{
|
|
62
|
-
key: 'gaming',
|
|
63
|
-
label: 'Gaming',
|
|
64
|
-
emoji: '🎮',
|
|
65
|
-
tags: ['PC', 'Console', 'Multijoueur', 'Tournoi', 'Retrogaming', 'VR']
|
|
66
|
-
},
|
|
67
|
-
{
|
|
68
|
-
key: 'sport',
|
|
69
|
-
label: 'Sport',
|
|
70
|
-
emoji: '🏃',
|
|
71
|
-
tags: ['Course', 'Salle', 'Foot', 'Basket', 'Tennis', 'Escalade']
|
|
72
|
-
},
|
|
73
|
-
{
|
|
74
|
-
key: 'sorties',
|
|
75
|
-
label: 'Sorties',
|
|
76
|
-
emoji: '🎉',
|
|
77
|
-
tags: ['Bar', 'Concert', 'Festival', 'Karaoké', 'Bowling', 'Karting']
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
key: 'creative',
|
|
81
|
-
label: 'Créatif',
|
|
82
|
-
emoji: '🎨',
|
|
83
|
-
tags: ['Art', 'Photo', 'Musique', 'Écriture', 'DIY', 'Craft']
|
|
84
|
-
},
|
|
85
|
-
{
|
|
86
|
-
key: 'online',
|
|
87
|
-
label: 'En ligne',
|
|
88
|
-
emoji: '💻',
|
|
89
|
-
tags: ['Discord', 'Gaming online', 'Podcasts', 'Séries', 'Watch party', 'Co-working']
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
key: 'talk_and_share',
|
|
77
|
+
emoji: '💬',
|
|
78
|
+
order: 30,
|
|
79
|
+
i18n: {
|
|
80
|
+
fr: { label: 'Discuter', description: 'Lancer une vraie conversation, légère, profonde ou ciblée.' },
|
|
81
|
+
en: { label: 'Chat', description: 'Start a real conversation, light, deep, or focused.' }
|
|
90
82
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
label: '
|
|
102
|
-
emoji: '💻',
|
|
103
|
-
tags: ['Dev', 'IA', 'Produit', 'UX', 'Data', 'Cybersécurité']
|
|
104
|
-
},
|
|
105
|
-
{
|
|
106
|
-
key: 'creative_pro',
|
|
107
|
-
label: 'Créatif & Médias',
|
|
108
|
-
emoji: '🎨',
|
|
109
|
-
tags: ['Design', 'Brand', 'Contenu', 'Photo', 'Vidéo', 'Marketing']
|
|
110
|
-
},
|
|
111
|
-
{
|
|
112
|
-
key: 'freelance',
|
|
113
|
-
label: 'Freelance',
|
|
114
|
-
emoji: '🔧',
|
|
115
|
-
tags: ['Consulting', 'Missions', 'Indépendant', 'Portage', 'Auto-entrepreneur', 'Remote']
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
key: 'finance',
|
|
119
|
-
label: 'Finance & Invest',
|
|
120
|
-
emoji: '📈',
|
|
121
|
-
tags: ['VC', 'Angel', 'Trading', 'Crypto', 'Immobilier', 'Fintech']
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
key: 'mentoring',
|
|
125
|
-
label: 'Mentorat',
|
|
126
|
-
emoji: '🎓',
|
|
127
|
-
tags: ['Mentor', 'Mentoré', 'Reconversion', 'Carrière', 'Coaching', 'Académique']
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
key: 'see_if_it_clicks',
|
|
86
|
+
emoji: '✨',
|
|
87
|
+
order: 40,
|
|
88
|
+
i18n: {
|
|
89
|
+
fr: {
|
|
90
|
+
label: 'Rencontrer quelqu’un',
|
|
91
|
+
description: 'Faire connaissance simplement et voir si le feeling passe.'
|
|
92
|
+
},
|
|
93
|
+
en: { label: 'Meet someone', description: 'Get to know each other simply and see if the vibe is there.' }
|
|
128
94
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
label: '
|
|
140
|
-
emoji: '🎮',
|
|
141
|
-
tags: ['PC', 'Console', 'Multijoueur', 'RPG', 'FPS', 'Tournoi', 'Board games']
|
|
142
|
-
},
|
|
143
|
-
{
|
|
144
|
-
key: 'food_cuisine',
|
|
145
|
-
label: 'Food & Cuisine',
|
|
146
|
-
emoji: '🍳',
|
|
147
|
-
tags: ['Cuisine', 'Restaurant', 'Brunch', 'Street food', 'Pâtisserie', 'Vin']
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
key: 'outdoors',
|
|
151
|
-
label: 'Plein air',
|
|
152
|
-
emoji: '🏕️',
|
|
153
|
-
tags: ['Randonnée', 'Camping', 'Nature', 'Vélo', 'Kayak', 'Escalade']
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
key: 'music',
|
|
157
|
-
label: 'Musique',
|
|
158
|
-
emoji: '🎵',
|
|
159
|
-
tags: ['Concert', 'Festival', 'Instrument', 'DJ', 'Chant', 'Composition']
|
|
160
|
-
},
|
|
161
|
-
{ key: 'creative', label: 'Créatif', emoji: '🎨', tags: ['Art', 'Photo', 'Vidéo', 'DIY', 'Craft', 'Peinture'] },
|
|
162
|
-
{
|
|
163
|
-
key: 'cinema_series',
|
|
164
|
-
label: 'Ciné & Séries',
|
|
165
|
-
emoji: '🎬',
|
|
166
|
-
tags: ['Cinéma', 'Série', 'Watch party', 'Ciné-club', 'Documentaire', 'Anime']
|
|
167
|
-
},
|
|
168
|
-
{
|
|
169
|
-
key: 'travel',
|
|
170
|
-
label: 'Voyage',
|
|
171
|
-
emoji: '✈️',
|
|
172
|
-
tags: ['Road trip', 'Backpacking', 'Week-end', 'City trip', 'Aventure', 'Photos de voyage']
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
key: 'build_connection',
|
|
98
|
+
emoji: '🤝',
|
|
99
|
+
order: 50,
|
|
100
|
+
i18n: {
|
|
101
|
+
fr: {
|
|
102
|
+
label: 'Se revoir régulièrement',
|
|
103
|
+
description: 'Créer une habitude sociale ou un binôme qu’on a envie de retrouver.'
|
|
104
|
+
},
|
|
105
|
+
en: { label: 'Meet regularly', description: 'Build a social habit or a duo you enjoy seeing again.' }
|
|
173
106
|
}
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
{ key: 'gaming', label: 'Gaming', emoji: '🎮', tags: ['JV', 'Retrogaming', 'Esport', 'Tests', 'RPG', 'Indé'] },
|
|
189
|
-
{
|
|
190
|
-
key: 'tech_sciences',
|
|
191
|
-
label: 'Tech & Sciences',
|
|
192
|
-
emoji: '💻',
|
|
193
|
-
tags: ['IA', 'Espace', 'Physique', 'Biotech', 'Futurisme', 'Open Source']
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
key: 'travel_stories',
|
|
197
|
-
label: 'Voyages',
|
|
198
|
-
emoji: '✈️',
|
|
199
|
-
tags: ['Récits', 'Tips', 'Destinations', 'Cultures', 'Gastronomie', 'Aventures']
|
|
200
|
-
},
|
|
201
|
-
{
|
|
202
|
-
key: 'philosophy',
|
|
203
|
-
label: 'Société & Philo',
|
|
204
|
-
emoji: '🤔',
|
|
205
|
-
tags: ['Philo', 'Éthique', 'Débat', 'Spiritualité', 'Psychologie', 'Stoïcisme']
|
|
206
|
-
},
|
|
207
|
-
{
|
|
208
|
-
key: 'humor',
|
|
209
|
-
label: 'Humour',
|
|
210
|
-
emoji: '😂',
|
|
211
|
-
tags: ['Mèmes', 'Stand-up', 'Impro', 'Culture internet', 'Absurde', 'Sketches']
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
key: 'grow_or_build',
|
|
110
|
+
emoji: '🚀',
|
|
111
|
+
order: 60,
|
|
112
|
+
i18n: {
|
|
113
|
+
fr: {
|
|
114
|
+
label: 'Construire quelque chose',
|
|
115
|
+
description: 'Apprendre, créer, collaborer ou faire avancer une idée ensemble.'
|
|
116
|
+
},
|
|
117
|
+
en: {
|
|
118
|
+
label: 'Build something',
|
|
119
|
+
description: 'Learn, create, collaborate, or move an idea forward together.'
|
|
120
|
+
}
|
|
212
121
|
}
|
|
213
|
-
|
|
214
|
-
};
|
|
215
|
-
export const INTEREST_CATEGORY_KEYS = [
|
|
216
|
-
'sports',
|
|
217
|
-
'music',
|
|
218
|
-
'nightlife',
|
|
219
|
-
'gaming',
|
|
220
|
-
'food',
|
|
221
|
-
'culture',
|
|
222
|
-
'cinema',
|
|
223
|
-
'reading',
|
|
224
|
-
'outdoors',
|
|
225
|
-
'wellness',
|
|
226
|
-
'travel',
|
|
227
|
-
'creative',
|
|
228
|
-
'learning',
|
|
229
|
-
'tech',
|
|
230
|
-
'cooking',
|
|
231
|
-
'craft',
|
|
232
|
-
'pro',
|
|
233
|
-
'coaching'
|
|
122
|
+
}
|
|
234
123
|
];
|
|
235
|
-
export const
|
|
236
|
-
{
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
124
|
+
export const INTENTIONS = [
|
|
125
|
+
{
|
|
126
|
+
key: 'go_out_coffee',
|
|
127
|
+
parentKey: 'go_out_or_move',
|
|
128
|
+
momentKey: 'go_out_or_move',
|
|
129
|
+
level: 2,
|
|
130
|
+
emoji: '☕',
|
|
131
|
+
i18n: {
|
|
132
|
+
fr: {
|
|
133
|
+
label: 'Prendre un café',
|
|
134
|
+
shortLabel: 'Café',
|
|
135
|
+
description: 'Se retrouver autour d’un café simple, léger et facile à caler.'
|
|
136
|
+
},
|
|
137
|
+
en: {
|
|
138
|
+
label: 'Get a coffee',
|
|
139
|
+
shortLabel: 'Coffee',
|
|
140
|
+
description: 'Grab a simple, light, easy-to-schedule coffee.'
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
tags: ['Café', 'Pause', 'Terrasse', 'Matin', 'Afterwork', 'Simple'],
|
|
144
|
+
domainKeys: ['food'],
|
|
145
|
+
order: 10
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
key: 'go_out_drink',
|
|
149
|
+
parentKey: 'go_out_or_move',
|
|
150
|
+
momentKey: 'go_out_or_move',
|
|
151
|
+
level: 2,
|
|
152
|
+
emoji: '🍷',
|
|
153
|
+
i18n: {
|
|
154
|
+
fr: {
|
|
155
|
+
label: 'Aller boire un verre',
|
|
156
|
+
shortLabel: 'Un verre',
|
|
157
|
+
description: 'Partager un verre sans se compliquer le moment.'
|
|
158
|
+
},
|
|
159
|
+
en: {
|
|
160
|
+
label: 'Go for a drink',
|
|
161
|
+
shortLabel: 'A drink',
|
|
162
|
+
description: 'Share a drink without overcomplicating the moment.'
|
|
163
|
+
}
|
|
164
|
+
},
|
|
165
|
+
tags: ['Bar', 'Afterwork', 'Cocktail', 'Apéro', 'Terrasse', 'Soir'],
|
|
166
|
+
domainKeys: ['nightlife', 'food'],
|
|
167
|
+
order: 20
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
key: 'go_out_meal',
|
|
171
|
+
parentKey: 'go_out_or_move',
|
|
172
|
+
momentKey: 'go_out_or_move',
|
|
173
|
+
level: 2,
|
|
174
|
+
emoji: '🍽️',
|
|
175
|
+
i18n: {
|
|
176
|
+
fr: {
|
|
177
|
+
label: 'Aller manger',
|
|
178
|
+
shortLabel: 'Manger',
|
|
179
|
+
description: 'Partager un repas, un brunch ou tester une bonne adresse.'
|
|
180
|
+
},
|
|
181
|
+
en: {
|
|
182
|
+
label: 'Grab a bite',
|
|
183
|
+
shortLabel: 'Eat out',
|
|
184
|
+
description: 'Share a meal, brunch, or try a good spot.'
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
tags: ['Restaurant', 'Brunch', 'Dîner', 'Street food', 'Adresse', 'Cuisine'],
|
|
188
|
+
domainKeys: ['food', 'cooking'],
|
|
189
|
+
order: 30
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
key: 'go_out_walk',
|
|
193
|
+
parentKey: 'go_out_or_move',
|
|
194
|
+
momentKey: 'go_out_or_move',
|
|
195
|
+
level: 2,
|
|
196
|
+
emoji: '🚶',
|
|
197
|
+
i18n: {
|
|
198
|
+
fr: {
|
|
199
|
+
label: 'Faire une balade',
|
|
200
|
+
shortLabel: 'Balade',
|
|
201
|
+
description: 'Marcher, prendre l’air et laisser la discussion venir naturellement.'
|
|
202
|
+
},
|
|
203
|
+
en: {
|
|
204
|
+
label: 'Go for a walk',
|
|
205
|
+
shortLabel: 'Walk',
|
|
206
|
+
description: 'Walk, get some fresh air, and let the conversation flow naturally.'
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
tags: ['Parc', 'Ville', 'Nature', 'Sunset', 'Bord de l’eau', 'Pique-nique'],
|
|
210
|
+
domainKeys: ['outdoors', 'wellness', 'travel'],
|
|
211
|
+
order: 40
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
key: 'go_out_tonight',
|
|
215
|
+
parentKey: 'go_out_or_move',
|
|
216
|
+
momentKey: 'go_out_or_move',
|
|
217
|
+
level: 2,
|
|
218
|
+
emoji: '🌃',
|
|
219
|
+
i18n: {
|
|
220
|
+
fr: {
|
|
221
|
+
label: 'Sortir ce soir',
|
|
222
|
+
shortLabel: 'Ce soir',
|
|
223
|
+
description: 'Improviser une sortie du soir qui donne envie de bouger maintenant.'
|
|
224
|
+
},
|
|
225
|
+
en: {
|
|
226
|
+
label: 'Go out tonight',
|
|
227
|
+
shortLabel: 'Tonight',
|
|
228
|
+
description: 'Spontaneously plan an evening out when the urge strikes.'
|
|
229
|
+
}
|
|
230
|
+
},
|
|
231
|
+
tags: ['Ce soir', 'Concert', 'Bar', 'Live', 'Spontané', 'Dernière minute'],
|
|
232
|
+
domainKeys: ['nightlife', 'music', 'culture'],
|
|
233
|
+
order: 50
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
key: 'go_out_discover',
|
|
237
|
+
parentKey: 'go_out_or_move',
|
|
238
|
+
momentKey: 'go_out_or_move',
|
|
239
|
+
level: 2,
|
|
240
|
+
emoji: '🗺️',
|
|
241
|
+
i18n: {
|
|
242
|
+
fr: {
|
|
243
|
+
label: 'Découvrir un lieu ou un événement',
|
|
244
|
+
shortLabel: 'Découvrir',
|
|
245
|
+
description: 'Explorer une expo, un lieu, un marché ou un événement du coin.'
|
|
246
|
+
},
|
|
247
|
+
en: {
|
|
248
|
+
label: 'Discover a place or event',
|
|
249
|
+
shortLabel: 'Explore',
|
|
250
|
+
description: 'Check out an exhibition, venue, market, or local event.'
|
|
251
|
+
}
|
|
252
|
+
},
|
|
253
|
+
tags: ['Expo', 'Marché', 'Lieu', 'Quartier', 'Événement', 'Découverte'],
|
|
254
|
+
domainKeys: ['culture', 'travel', 'outdoors', 'music'],
|
|
255
|
+
order: 60
|
|
256
|
+
},
|
|
257
|
+
{
|
|
258
|
+
key: 'activity_sports',
|
|
259
|
+
parentKey: 'do_something_together',
|
|
260
|
+
momentKey: 'do_something_together',
|
|
261
|
+
level: 2,
|
|
262
|
+
emoji: '🏃',
|
|
263
|
+
i18n: {
|
|
264
|
+
fr: {
|
|
265
|
+
label: 'Faire du sport',
|
|
266
|
+
shortLabel: 'Sport',
|
|
267
|
+
description: 'Bouger ensemble autour d’un sport, d’un effort doux ou d’une séance motivante.'
|
|
268
|
+
},
|
|
269
|
+
en: {
|
|
270
|
+
label: 'Do sports',
|
|
271
|
+
shortLabel: 'Sports',
|
|
272
|
+
description: 'Move together around a sport, a gentle effort, or a motivating session.'
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
tags: ['Running', 'Salle', 'Yoga', 'Escalade', 'Footing', 'Bien-être'],
|
|
276
|
+
domainKeys: ['sports', 'wellness', 'outdoors'],
|
|
277
|
+
order: 10
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
key: 'activity_play',
|
|
281
|
+
parentKey: 'do_something_together',
|
|
282
|
+
momentKey: 'do_something_together',
|
|
283
|
+
level: 2,
|
|
284
|
+
emoji: '🎲',
|
|
285
|
+
i18n: {
|
|
286
|
+
fr: {
|
|
287
|
+
label: 'Jouer',
|
|
288
|
+
shortLabel: 'Jouer',
|
|
289
|
+
description: 'Partager un moment ludique, à l’écran ou autour d’une table.'
|
|
290
|
+
},
|
|
291
|
+
en: {
|
|
292
|
+
label: 'Play something',
|
|
293
|
+
shortLabel: 'Play',
|
|
294
|
+
description: 'Share a fun moment, on screen or around a table.'
|
|
295
|
+
}
|
|
296
|
+
},
|
|
297
|
+
tags: ['Jeux', 'Fun', 'Coop', 'Challenge', 'Détente', 'Soirée'],
|
|
298
|
+
domainKeys: ['gaming'],
|
|
299
|
+
broad: true,
|
|
300
|
+
order: 20
|
|
301
|
+
},
|
|
302
|
+
{
|
|
303
|
+
key: 'activity_play_video_games',
|
|
304
|
+
parentKey: 'activity_play',
|
|
305
|
+
momentKey: 'do_something_together',
|
|
306
|
+
level: 3,
|
|
307
|
+
emoji: '🎮',
|
|
308
|
+
i18n: {
|
|
309
|
+
fr: {
|
|
310
|
+
label: 'Jeux vidéo',
|
|
311
|
+
shortLabel: 'Jeux vidéo',
|
|
312
|
+
description: 'Jouer en ligne ou en local autour d’un jeu vidéo précis.'
|
|
313
|
+
},
|
|
314
|
+
en: {
|
|
315
|
+
label: 'Video games',
|
|
316
|
+
shortLabel: 'Video games',
|
|
317
|
+
description: 'Play online or locally around a specific video game.'
|
|
318
|
+
}
|
|
319
|
+
},
|
|
320
|
+
tags: ['Co-op', 'Multi', 'Console', 'PC', 'Ranked', 'Casual'],
|
|
321
|
+
domainKeys: ['gaming', 'tech'],
|
|
322
|
+
order: 21
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
key: 'activity_play_board_games',
|
|
326
|
+
parentKey: 'activity_play',
|
|
327
|
+
momentKey: 'do_something_together',
|
|
328
|
+
level: 3,
|
|
329
|
+
emoji: '🃏',
|
|
330
|
+
i18n: {
|
|
331
|
+
fr: {
|
|
332
|
+
label: 'Jeux de société',
|
|
333
|
+
shortLabel: 'Jeux de société',
|
|
334
|
+
description: 'Partager une partie de jeu de société, de cartes ou de rôle.'
|
|
335
|
+
},
|
|
336
|
+
en: {
|
|
337
|
+
label: 'Board games',
|
|
338
|
+
shortLabel: 'Board games',
|
|
339
|
+
description: 'Share a board game, card game, or role-playing session.'
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
tags: ['Plateau', 'Cartes', 'Coop', 'Stratégie', 'Ambiance', 'Soirée jeux'],
|
|
343
|
+
domainKeys: ['gaming', 'culture'],
|
|
344
|
+
order: 22
|
|
345
|
+
},
|
|
346
|
+
{
|
|
347
|
+
key: 'activity_culture',
|
|
348
|
+
parentKey: 'do_something_together',
|
|
349
|
+
momentKey: 'do_something_together',
|
|
350
|
+
level: 2,
|
|
351
|
+
emoji: '🎭',
|
|
352
|
+
i18n: {
|
|
353
|
+
fr: {
|
|
354
|
+
label: 'Faire une activité culturelle',
|
|
355
|
+
shortLabel: 'Culture',
|
|
356
|
+
description: 'Se voir autour d’un film, d’une expo, d’un musée ou d’une sortie culturelle.'
|
|
357
|
+
},
|
|
358
|
+
en: {
|
|
359
|
+
label: 'Do a cultural activity',
|
|
360
|
+
shortLabel: 'Culture',
|
|
361
|
+
description: 'Meet around a film, exhibition, museum, or cultural outing.'
|
|
362
|
+
}
|
|
363
|
+
},
|
|
364
|
+
tags: ['Cinéma', 'Expo', 'Musée', 'Théâtre', 'Concert', 'Patrimoine'],
|
|
365
|
+
domainKeys: ['culture', 'cinema', 'music'],
|
|
366
|
+
order: 30
|
|
367
|
+
},
|
|
368
|
+
{
|
|
369
|
+
key: 'activity_creative',
|
|
370
|
+
parentKey: 'do_something_together',
|
|
371
|
+
momentKey: 'do_something_together',
|
|
372
|
+
level: 2,
|
|
373
|
+
emoji: '🎨',
|
|
374
|
+
i18n: {
|
|
375
|
+
fr: {
|
|
376
|
+
label: 'Faire une activité créative',
|
|
377
|
+
shortLabel: 'Créatif',
|
|
378
|
+
description: 'Créer, bricoler ou expérimenter quelque chose à plusieurs mains.'
|
|
379
|
+
},
|
|
380
|
+
en: {
|
|
381
|
+
label: 'Do something creative',
|
|
382
|
+
shortLabel: 'Creative',
|
|
383
|
+
description: 'Create, craft, or experiment something with multiple hands.'
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
tags: ['Photo', 'DIY', 'Atelier', 'Dessiner', 'Écriture', 'Création'],
|
|
387
|
+
domainKeys: ['creative', 'craft', 'culture'],
|
|
388
|
+
order: 40
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
key: 'activity_food',
|
|
392
|
+
parentKey: 'do_something_together',
|
|
393
|
+
momentKey: 'do_something_together',
|
|
394
|
+
level: 2,
|
|
395
|
+
emoji: '🍳',
|
|
396
|
+
i18n: {
|
|
397
|
+
fr: {
|
|
398
|
+
label: 'Cuisiner ou tester une adresse',
|
|
399
|
+
shortLabel: 'Cuisine',
|
|
400
|
+
description: 'Cuisiner ensemble ou partir tester une adresse qui donne envie.'
|
|
401
|
+
},
|
|
402
|
+
en: {
|
|
403
|
+
label: 'Cook or try a restaurant',
|
|
404
|
+
shortLabel: 'Food',
|
|
405
|
+
description: 'Cook together or go try a spot that sounds appealing.'
|
|
406
|
+
}
|
|
407
|
+
},
|
|
408
|
+
tags: ['Cuisine', 'Recette', 'Adresse', 'Brunch', 'Street food', 'Dessert'],
|
|
409
|
+
domainKeys: ['food', 'cooking'],
|
|
410
|
+
order: 50
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
key: 'activity_outdoor',
|
|
414
|
+
parentKey: 'do_something_together',
|
|
415
|
+
momentKey: 'do_something_together',
|
|
416
|
+
level: 2,
|
|
417
|
+
emoji: '🌿',
|
|
418
|
+
i18n: {
|
|
419
|
+
fr: {
|
|
420
|
+
label: 'Faire une activité en plein air',
|
|
421
|
+
shortLabel: 'Plein air',
|
|
422
|
+
description: 'Partager une activité dehors pour prendre l’air et bouger autrement.'
|
|
423
|
+
},
|
|
424
|
+
en: {
|
|
425
|
+
label: 'Do an outdoor activity',
|
|
426
|
+
shortLabel: 'Outdoors',
|
|
427
|
+
description: 'Share an outdoor activity to get some air and move differently.'
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
tags: ['Nature', 'Rando', 'Vélo', 'Kayak', 'Air libre', 'Aventure douce'],
|
|
431
|
+
domainKeys: ['outdoors', 'travel', 'sports'],
|
|
432
|
+
order: 60
|
|
433
|
+
},
|
|
434
|
+
{
|
|
435
|
+
key: 'talk_light',
|
|
436
|
+
parentKey: 'talk_and_share',
|
|
437
|
+
momentKey: 'talk_and_share',
|
|
438
|
+
level: 2,
|
|
439
|
+
emoji: '🙂',
|
|
440
|
+
i18n: {
|
|
441
|
+
fr: {
|
|
442
|
+
label: 'Conversation légère',
|
|
443
|
+
shortLabel: 'Légère',
|
|
444
|
+
description: 'Discuter sans pression, juste pour passer un bon moment.'
|
|
445
|
+
},
|
|
446
|
+
en: {
|
|
447
|
+
label: 'Light conversation',
|
|
448
|
+
shortLabel: 'Light',
|
|
449
|
+
description: 'Chat without pressure, just to have a good time.'
|
|
450
|
+
}
|
|
451
|
+
},
|
|
452
|
+
tags: ['Humour', 'Mèmes', 'Quotidien', 'Détente', 'Vocal', 'Simple'],
|
|
453
|
+
domainKeys: ['culture', 'cinema'],
|
|
454
|
+
order: 10
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
key: 'talk_deep',
|
|
458
|
+
parentKey: 'talk_and_share',
|
|
459
|
+
momentKey: 'talk_and_share',
|
|
460
|
+
level: 2,
|
|
461
|
+
emoji: '🫶',
|
|
462
|
+
i18n: {
|
|
463
|
+
fr: {
|
|
464
|
+
label: 'Discussion profonde',
|
|
465
|
+
shortLabel: 'Profonde',
|
|
466
|
+
description: 'Prendre le temps d’aller un peu plus loin que la petite conversation.'
|
|
467
|
+
},
|
|
468
|
+
en: {
|
|
469
|
+
label: 'Deep talk',
|
|
470
|
+
shortLabel: 'Deep',
|
|
471
|
+
description: 'Take time to go a little further than small talk.'
|
|
472
|
+
}
|
|
473
|
+
},
|
|
474
|
+
tags: ['Valeurs', 'Parcours', 'Société', 'Émotions', 'Réflexion', 'Confiance'],
|
|
475
|
+
domainKeys: ['reading', 'learning', 'culture'],
|
|
476
|
+
order: 20
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
key: 'talk_topic',
|
|
480
|
+
parentKey: 'talk_and_share',
|
|
481
|
+
momentKey: 'talk_and_share',
|
|
482
|
+
level: 2,
|
|
483
|
+
emoji: '🧠',
|
|
484
|
+
i18n: {
|
|
485
|
+
fr: {
|
|
486
|
+
label: 'Parler d’un sujet précis',
|
|
487
|
+
shortLabel: 'Sujet précis',
|
|
488
|
+
description: 'Échanger sur un thème clair qui passionne déjà les deux côtés.'
|
|
489
|
+
},
|
|
490
|
+
en: {
|
|
491
|
+
label: 'Talk about a specific topic',
|
|
492
|
+
shortLabel: 'Topic',
|
|
493
|
+
description: 'Discuss a clear theme that both sides are already passionate about.'
|
|
494
|
+
}
|
|
495
|
+
},
|
|
496
|
+
tags: ['Tech', 'Histoire', 'IA', 'Science', 'Politique', 'Culture web'],
|
|
497
|
+
domainKeys: ['learning', 'tech', 'culture', 'reading'],
|
|
498
|
+
order: 30
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
key: 'talk_media',
|
|
502
|
+
parentKey: 'talk_and_share',
|
|
503
|
+
momentKey: 'talk_and_share',
|
|
504
|
+
level: 2,
|
|
505
|
+
emoji: '📚',
|
|
506
|
+
i18n: {
|
|
507
|
+
fr: {
|
|
508
|
+
label: 'Échanger sur des films / séries / livres',
|
|
509
|
+
shortLabel: 'Films & livres',
|
|
510
|
+
description: 'Partager des recommandations et parler des œuvres qui marquent.'
|
|
511
|
+
},
|
|
512
|
+
en: {
|
|
513
|
+
label: 'Talk about movies / shows / books',
|
|
514
|
+
shortLabel: 'Media',
|
|
515
|
+
description: 'Share recommendations and talk about works that stand out.'
|
|
516
|
+
}
|
|
517
|
+
},
|
|
518
|
+
tags: ['Films', 'Séries', 'Livres', 'Manga', 'Docs', 'Recommandations'],
|
|
519
|
+
domainKeys: ['reading', 'cinema', 'culture'],
|
|
520
|
+
order: 40
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
key: 'talk_language_exchange',
|
|
524
|
+
parentKey: 'talk_and_share',
|
|
525
|
+
momentKey: 'talk_and_share',
|
|
526
|
+
level: 2,
|
|
527
|
+
emoji: '🗣️',
|
|
528
|
+
i18n: {
|
|
529
|
+
fr: {
|
|
530
|
+
label: 'Échange linguistique',
|
|
531
|
+
shortLabel: 'Langues',
|
|
532
|
+
description: 'Pratiquer une langue dans un échange simple et naturel.'
|
|
533
|
+
},
|
|
534
|
+
en: {
|
|
535
|
+
label: 'Language exchange',
|
|
536
|
+
shortLabel: 'Languages',
|
|
537
|
+
description: 'Practice a language in a simple and natural exchange.'
|
|
538
|
+
}
|
|
539
|
+
},
|
|
540
|
+
tags: ['Anglais', 'Espagnol', 'Italien', 'Japonais', 'Conversation', 'Tandem'],
|
|
541
|
+
domainKeys: ['learning', 'travel'],
|
|
542
|
+
order: 50
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
key: 'talk_online',
|
|
546
|
+
parentKey: 'talk_and_share',
|
|
547
|
+
momentKey: 'talk_and_share',
|
|
548
|
+
level: 2,
|
|
549
|
+
emoji: '💻',
|
|
550
|
+
i18n: {
|
|
551
|
+
fr: {
|
|
552
|
+
label: 'Discuter en ligne',
|
|
553
|
+
shortLabel: 'En ligne',
|
|
554
|
+
description: 'Commencer à distance quand c’est plus simple ou plus naturel.'
|
|
555
|
+
},
|
|
556
|
+
en: {
|
|
557
|
+
label: 'Chat online',
|
|
558
|
+
shortLabel: 'Online',
|
|
559
|
+
description: 'Start remotely when it’s easier or more natural.'
|
|
560
|
+
}
|
|
561
|
+
},
|
|
562
|
+
tags: ['Chat', 'Vocal', 'À distance', 'Remote', 'Facile', 'Progressif'],
|
|
563
|
+
domainKeys: ['tech', 'learning'],
|
|
564
|
+
order: 60
|
|
565
|
+
},
|
|
566
|
+
{
|
|
567
|
+
key: 'meet_make_acquaintance',
|
|
568
|
+
parentKey: 'see_if_it_clicks',
|
|
569
|
+
momentKey: 'see_if_it_clicks',
|
|
570
|
+
level: 2,
|
|
571
|
+
emoji: '👋',
|
|
572
|
+
i18n: {
|
|
573
|
+
fr: {
|
|
574
|
+
label: 'Faire connaissance',
|
|
575
|
+
shortLabel: 'Faire connaissance',
|
|
576
|
+
description: 'Se rencontrer pour découvrir qui est l’autre, simplement.'
|
|
577
|
+
},
|
|
578
|
+
en: {
|
|
579
|
+
label: 'Get acquainted',
|
|
580
|
+
shortLabel: 'Meet',
|
|
581
|
+
description: 'Meet to discover who the other person is, simply.'
|
|
582
|
+
}
|
|
583
|
+
},
|
|
584
|
+
tags: ['Première fois', 'Simple', 'Bienveillance', 'Découverte', 'Curiosité', 'Vrai monde'],
|
|
585
|
+
domainKeys: ['culture', 'food'],
|
|
586
|
+
order: 10
|
|
587
|
+
},
|
|
588
|
+
{
|
|
589
|
+
key: 'meet_feeling',
|
|
590
|
+
parentKey: 'see_if_it_clicks',
|
|
591
|
+
momentKey: 'see_if_it_clicks',
|
|
592
|
+
level: 2,
|
|
593
|
+
emoji: '✨',
|
|
594
|
+
i18n: {
|
|
595
|
+
fr: {
|
|
596
|
+
label: 'Voir si le feeling passe',
|
|
597
|
+
shortLabel: 'Feeling',
|
|
598
|
+
description: 'Se voir sans scénario pour sentir si l’énergie est là.'
|
|
599
|
+
},
|
|
600
|
+
en: {
|
|
601
|
+
label: 'See if the vibe is there',
|
|
602
|
+
shortLabel: 'Vibe',
|
|
603
|
+
description: 'Meet without a script to feel if the energy is right.'
|
|
604
|
+
}
|
|
605
|
+
},
|
|
606
|
+
tags: ['Feeling', 'Affinité', 'Simple', 'Sans pression', 'Présence', 'Rencontre'],
|
|
607
|
+
domainKeys: ['culture', 'food', 'outdoors'],
|
|
608
|
+
order: 20
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
key: 'meet_simple_first_date',
|
|
612
|
+
parentKey: 'see_if_it_clicks',
|
|
613
|
+
momentKey: 'see_if_it_clicks',
|
|
614
|
+
level: 2,
|
|
615
|
+
emoji: '☕',
|
|
616
|
+
i18n: {
|
|
617
|
+
fr: {
|
|
618
|
+
label: 'Premier rendez-vous simple',
|
|
619
|
+
shortLabel: 'Premier rendez-vous',
|
|
620
|
+
description: 'Un premier moment facile à proposer et facile à vivre.'
|
|
621
|
+
},
|
|
622
|
+
en: {
|
|
623
|
+
label: 'Simple first date',
|
|
624
|
+
shortLabel: 'First date',
|
|
625
|
+
description: 'A first moment that’s easy to suggest and easy to live.'
|
|
626
|
+
}
|
|
627
|
+
},
|
|
628
|
+
tags: ['Café', 'Verre', 'Après-midi', 'Terrasse', 'Simple', 'Court'],
|
|
629
|
+
domainKeys: ['food', 'nightlife'],
|
|
630
|
+
order: 30
|
|
631
|
+
},
|
|
632
|
+
{
|
|
633
|
+
key: 'meet_relaxed_date',
|
|
634
|
+
parentKey: 'see_if_it_clicks',
|
|
635
|
+
momentKey: 'see_if_it_clicks',
|
|
636
|
+
level: 2,
|
|
637
|
+
emoji: '🌙',
|
|
638
|
+
i18n: {
|
|
639
|
+
fr: {
|
|
640
|
+
label: 'Rencontre posée',
|
|
641
|
+
shortLabel: 'Posée',
|
|
642
|
+
description: 'Prendre plus de temps pour une rencontre calme et assumée.'
|
|
643
|
+
},
|
|
644
|
+
en: {
|
|
645
|
+
label: 'Relaxed date',
|
|
646
|
+
shortLabel: 'Relaxed',
|
|
647
|
+
description: 'Take more time for a calm and assumed meeting.'
|
|
648
|
+
}
|
|
649
|
+
},
|
|
650
|
+
tags: ['Dîner', 'Adresse', 'Sortie', 'Temps', 'Calme', 'Qualité'],
|
|
651
|
+
domainKeys: ['food', 'culture', 'cinema'],
|
|
652
|
+
order: 40
|
|
653
|
+
},
|
|
654
|
+
{
|
|
655
|
+
key: 'meet_spontaneous',
|
|
656
|
+
parentKey: 'see_if_it_clicks',
|
|
657
|
+
momentKey: 'see_if_it_clicks',
|
|
658
|
+
level: 2,
|
|
659
|
+
emoji: '⚡',
|
|
660
|
+
i18n: {
|
|
661
|
+
fr: {
|
|
662
|
+
label: 'Rencontre spontanée',
|
|
663
|
+
shortLabel: 'Spontanée',
|
|
664
|
+
description: 'Se voir rapidement quand l’envie est là maintenant.'
|
|
665
|
+
},
|
|
666
|
+
en: {
|
|
667
|
+
label: 'Spontaneous meetup',
|
|
668
|
+
shortLabel: 'Spontaneous',
|
|
669
|
+
description: 'Meet quickly when the urge is there right now.'
|
|
670
|
+
}
|
|
671
|
+
},
|
|
672
|
+
tags: ['Maintenant', 'Dernière minute', 'Simple', 'Ville', 'Spontané', 'Réel'],
|
|
673
|
+
domainKeys: ['outdoors', 'nightlife', 'food'],
|
|
674
|
+
order: 50
|
|
675
|
+
},
|
|
676
|
+
{
|
|
677
|
+
key: 'meet_online_first',
|
|
678
|
+
parentKey: 'see_if_it_clicks',
|
|
679
|
+
momentKey: 'see_if_it_clicks',
|
|
680
|
+
level: 2,
|
|
681
|
+
emoji: '📱',
|
|
682
|
+
i18n: {
|
|
683
|
+
fr: {
|
|
684
|
+
label: 'Première rencontre en ligne',
|
|
685
|
+
shortLabel: 'En ligne',
|
|
686
|
+
description: 'Commencer par un échange à distance avant de se voir.'
|
|
687
|
+
},
|
|
688
|
+
en: {
|
|
689
|
+
label: 'First online meeting',
|
|
690
|
+
shortLabel: 'Online',
|
|
691
|
+
description: 'Start with a remote exchange before meeting in person.'
|
|
692
|
+
}
|
|
693
|
+
},
|
|
694
|
+
tags: ['Chat', 'Vocal', 'Visio', 'À distance', 'Progressif', 'Première approche'],
|
|
695
|
+
domainKeys: ['tech', 'culture'],
|
|
696
|
+
order: 60
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
key: 'regular_sports_partner',
|
|
700
|
+
parentKey: 'build_connection',
|
|
701
|
+
momentKey: 'build_connection',
|
|
702
|
+
level: 2,
|
|
703
|
+
emoji: '🏋️',
|
|
704
|
+
i18n: {
|
|
705
|
+
fr: {
|
|
706
|
+
label: 'Partenaire de sport',
|
|
707
|
+
shortLabel: 'Sport régulier',
|
|
708
|
+
description: 'Trouver quelqu’un qu’on a envie de retrouver pour bouger souvent.'
|
|
709
|
+
},
|
|
710
|
+
en: {
|
|
711
|
+
label: 'Sports partner',
|
|
712
|
+
shortLabel: 'Regular sport',
|
|
713
|
+
description: 'Find someone you want to meet regularly to stay active.'
|
|
714
|
+
}
|
|
715
|
+
},
|
|
716
|
+
tags: ['Routine', 'Motivation', 'Salle', 'Running', 'Régulier', 'Binôme'],
|
|
717
|
+
domainKeys: ['sports', 'wellness'],
|
|
718
|
+
order: 10
|
|
719
|
+
},
|
|
720
|
+
{
|
|
721
|
+
key: 'regular_game_partner',
|
|
722
|
+
parentKey: 'build_connection',
|
|
723
|
+
momentKey: 'build_connection',
|
|
724
|
+
level: 2,
|
|
725
|
+
emoji: '🎲',
|
|
726
|
+
i18n: {
|
|
727
|
+
fr: {
|
|
728
|
+
label: 'Partenaire de jeu',
|
|
729
|
+
shortLabel: 'Jeu régulier',
|
|
730
|
+
description: 'Avoir un ou une partenaire de jeu qu’on recontacte naturellement.'
|
|
731
|
+
},
|
|
732
|
+
en: {
|
|
733
|
+
label: 'Game partner',
|
|
734
|
+
shortLabel: 'Regular game',
|
|
735
|
+
description: 'Have a game partner you naturally reconnect with.'
|
|
736
|
+
}
|
|
737
|
+
},
|
|
738
|
+
tags: ['Co-op', 'Board games', 'Gaming', 'Habitude', 'Régulier', 'Soirée'],
|
|
739
|
+
domainKeys: ['gaming'],
|
|
740
|
+
order: 20
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
key: 'regular_talk_buddy',
|
|
744
|
+
parentKey: 'build_connection',
|
|
745
|
+
momentKey: 'build_connection',
|
|
746
|
+
level: 2,
|
|
747
|
+
emoji: '🫱',
|
|
748
|
+
i18n: {
|
|
749
|
+
fr: {
|
|
750
|
+
label: 'Binôme de discussion',
|
|
751
|
+
shortLabel: 'Binôme',
|
|
752
|
+
description: 'Retrouver une personne avec qui parler revient naturellement.'
|
|
753
|
+
},
|
|
754
|
+
en: {
|
|
755
|
+
label: 'Talk buddy',
|
|
756
|
+
shortLabel: 'Buddy',
|
|
757
|
+
description: 'Find someone you naturally come back to for conversation.'
|
|
758
|
+
}
|
|
759
|
+
},
|
|
760
|
+
tags: ['Discussion', 'Écoute', 'Régulier', 'Lien', 'Confiance', 'Vocal'],
|
|
761
|
+
domainKeys: ['culture', 'learning'],
|
|
762
|
+
order: 30
|
|
763
|
+
},
|
|
764
|
+
{
|
|
765
|
+
key: 'regular_social_habit',
|
|
766
|
+
parentKey: 'build_connection',
|
|
767
|
+
momentKey: 'build_connection',
|
|
768
|
+
level: 2,
|
|
769
|
+
emoji: '🗓️',
|
|
770
|
+
i18n: {
|
|
771
|
+
fr: {
|
|
772
|
+
label: 'Habitude sociale régulière',
|
|
773
|
+
shortLabel: 'Habitude',
|
|
774
|
+
description: 'Installer un rythme simple de retrouvailles qui devient naturel.'
|
|
775
|
+
},
|
|
776
|
+
en: {
|
|
777
|
+
label: 'Regular social habit',
|
|
778
|
+
shortLabel: 'Habit',
|
|
779
|
+
description: 'Build a simple rhythm of meetups that becomes natural.'
|
|
780
|
+
}
|
|
781
|
+
},
|
|
782
|
+
tags: ['Rituel', 'Hebdo', 'Mensuel', 'Afterwork', 'Café', 'Routine'],
|
|
783
|
+
domainKeys: ['culture', 'food', 'outdoors'],
|
|
784
|
+
order: 40
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
key: 'regular_small_group',
|
|
788
|
+
parentKey: 'build_connection',
|
|
789
|
+
momentKey: 'build_connection',
|
|
790
|
+
level: 2,
|
|
791
|
+
emoji: '👥',
|
|
792
|
+
i18n: {
|
|
793
|
+
fr: {
|
|
794
|
+
label: 'Petit groupe récurrent',
|
|
795
|
+
shortLabel: 'Petit groupe',
|
|
796
|
+
description: 'Former un petit cercle qu’on retrouve avec plaisir.'
|
|
797
|
+
},
|
|
798
|
+
en: {
|
|
799
|
+
label: 'Recurring small group',
|
|
800
|
+
shortLabel: 'Small group',
|
|
801
|
+
description: 'Form a small circle you enjoy meeting again.'
|
|
802
|
+
}
|
|
803
|
+
},
|
|
804
|
+
tags: ['Groupe', 'Récurrent', 'Jeux', 'Sorties', 'Tranquille', 'Local'],
|
|
805
|
+
domainKeys: ['gaming', 'culture', 'food'],
|
|
806
|
+
order: 50
|
|
807
|
+
},
|
|
808
|
+
{
|
|
809
|
+
key: 'regular_go_out_often',
|
|
810
|
+
parentKey: 'build_connection',
|
|
811
|
+
momentKey: 'build_connection',
|
|
812
|
+
level: 2,
|
|
813
|
+
emoji: '🌙',
|
|
814
|
+
i18n: {
|
|
815
|
+
fr: {
|
|
816
|
+
label: 'Personne avec qui sortir souvent',
|
|
817
|
+
shortLabel: 'Sortir souvent',
|
|
818
|
+
description: 'Trouver quelqu’un avec qui refaire souvent des sorties.'
|
|
819
|
+
},
|
|
820
|
+
en: {
|
|
821
|
+
label: 'Someone to go out with often',
|
|
822
|
+
shortLabel: 'Go out often',
|
|
823
|
+
description: 'Find someone to regularly go out with.'
|
|
824
|
+
}
|
|
825
|
+
},
|
|
826
|
+
tags: ['Sorties', 'Ville', 'Habitude', 'Spontané', 'Régulier', 'Complicité'],
|
|
827
|
+
domainKeys: ['nightlife', 'food', 'culture'],
|
|
828
|
+
order: 60
|
|
829
|
+
},
|
|
830
|
+
{
|
|
831
|
+
key: 'build_coworking',
|
|
832
|
+
parentKey: 'grow_or_build',
|
|
833
|
+
momentKey: 'grow_or_build',
|
|
834
|
+
level: 2,
|
|
835
|
+
emoji: '🧑💻',
|
|
836
|
+
i18n: {
|
|
837
|
+
fr: {
|
|
838
|
+
label: 'Co-working',
|
|
839
|
+
shortLabel: 'Co-working',
|
|
840
|
+
description: 'Travailler côte à côte, se motiver et avancer mieux ensemble.'
|
|
841
|
+
},
|
|
842
|
+
en: {
|
|
843
|
+
label: 'Co-working',
|
|
844
|
+
shortLabel: 'Co-working',
|
|
845
|
+
description: 'Work side by side, stay motivated, and move forward together.'
|
|
846
|
+
}
|
|
847
|
+
},
|
|
848
|
+
tags: ['Focus', 'Café', 'Remote', 'Session', 'Études', 'Productivité'],
|
|
849
|
+
domainKeys: ['pro', 'learning', 'tech'],
|
|
850
|
+
order: 10
|
|
851
|
+
},
|
|
852
|
+
{
|
|
853
|
+
key: 'build_project',
|
|
854
|
+
parentKey: 'grow_or_build',
|
|
855
|
+
momentKey: 'grow_or_build',
|
|
856
|
+
level: 2,
|
|
857
|
+
emoji: '🛠️',
|
|
858
|
+
i18n: {
|
|
859
|
+
fr: {
|
|
860
|
+
label: 'Monter un projet',
|
|
861
|
+
shortLabel: 'Projet',
|
|
862
|
+
description: 'Faire avancer une idée concrète avec une autre personne.'
|
|
863
|
+
},
|
|
864
|
+
en: {
|
|
865
|
+
label: 'Build a project',
|
|
866
|
+
shortLabel: 'Project',
|
|
867
|
+
description: 'Move a concrete idea forward with another person.'
|
|
868
|
+
}
|
|
869
|
+
},
|
|
870
|
+
tags: ['Projet', 'Produit', 'Idée', 'Roadmap', 'Prototype', 'Avancer'],
|
|
871
|
+
domainKeys: ['pro', 'tech', 'creative'],
|
|
872
|
+
order: 20
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
key: 'build_entrepreneurship',
|
|
876
|
+
parentKey: 'grow_or_build',
|
|
877
|
+
momentKey: 'grow_or_build',
|
|
878
|
+
level: 2,
|
|
879
|
+
emoji: '📈',
|
|
880
|
+
i18n: {
|
|
881
|
+
fr: {
|
|
882
|
+
label: 'Entreprendre',
|
|
883
|
+
shortLabel: 'Entreprendre',
|
|
884
|
+
description: 'Partager une énergie entrepreneuriale et construire plus grand.'
|
|
885
|
+
},
|
|
886
|
+
en: {
|
|
887
|
+
label: 'Entrepreneurship',
|
|
888
|
+
shortLabel: 'Entrepreneurship',
|
|
889
|
+
description: 'Share an entrepreneurial energy and build something bigger.'
|
|
890
|
+
}
|
|
891
|
+
},
|
|
892
|
+
tags: ['Startup', 'Business', 'Freelance', 'Go-to-market', 'Produit', 'Ambition'],
|
|
893
|
+
domainKeys: ['pro', 'tech', 'coaching'],
|
|
894
|
+
order: 30
|
|
895
|
+
},
|
|
896
|
+
{
|
|
897
|
+
key: 'build_create_together',
|
|
898
|
+
parentKey: 'grow_or_build',
|
|
899
|
+
momentKey: 'grow_or_build',
|
|
900
|
+
level: 2,
|
|
901
|
+
emoji: '🎨',
|
|
902
|
+
i18n: {
|
|
903
|
+
fr: {
|
|
904
|
+
label: 'Créer ensemble',
|
|
905
|
+
shortLabel: 'Créer',
|
|
906
|
+
description: 'Imaginer et produire quelque chose à deux ou à plusieurs.'
|
|
907
|
+
},
|
|
908
|
+
en: {
|
|
909
|
+
label: 'Create together',
|
|
910
|
+
shortLabel: 'Create',
|
|
911
|
+
description: 'Imagine and produce something together, two or more.'
|
|
912
|
+
}
|
|
913
|
+
},
|
|
914
|
+
tags: ['Création', 'Photo', 'Vidéo', 'Design', 'Écriture', 'Projet créatif'],
|
|
915
|
+
domainKeys: ['creative', 'craft', 'culture'],
|
|
916
|
+
order: 40
|
|
917
|
+
},
|
|
918
|
+
{
|
|
919
|
+
key: 'build_learn_together',
|
|
920
|
+
parentKey: 'grow_or_build',
|
|
921
|
+
momentKey: 'grow_or_build',
|
|
922
|
+
level: 2,
|
|
923
|
+
emoji: '📘',
|
|
924
|
+
i18n: {
|
|
925
|
+
fr: {
|
|
926
|
+
label: 'Apprendre ensemble',
|
|
927
|
+
shortLabel: 'Apprendre',
|
|
928
|
+
description: 'Se motiver ensemble pour apprendre plus vite et plus loin.'
|
|
929
|
+
},
|
|
930
|
+
en: {
|
|
931
|
+
label: 'Learn together',
|
|
932
|
+
shortLabel: 'Learn',
|
|
933
|
+
description: 'Motivate each other to learn faster and further.'
|
|
934
|
+
}
|
|
935
|
+
},
|
|
936
|
+
tags: ['Langues', 'Code', 'Études', 'Cours', 'Méthode', 'Progression'],
|
|
937
|
+
domainKeys: ['learning', 'tech', 'coaching'],
|
|
938
|
+
order: 50
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
key: 'build_mentoring',
|
|
942
|
+
parentKey: 'grow_or_build',
|
|
943
|
+
momentKey: 'grow_or_build',
|
|
944
|
+
level: 2,
|
|
945
|
+
emoji: '🎓',
|
|
946
|
+
i18n: {
|
|
947
|
+
fr: {
|
|
948
|
+
label: 'Mentorat / entraide',
|
|
949
|
+
shortLabel: 'Mentorat',
|
|
950
|
+
description: 'Partager de l’expérience, aider, transmettre ou demander un coup de main.'
|
|
951
|
+
},
|
|
952
|
+
en: {
|
|
953
|
+
label: 'Mentoring / mutual aid',
|
|
954
|
+
shortLabel: 'Mentoring',
|
|
955
|
+
description: 'Share experience, help, pass on knowledge, or ask for support.'
|
|
956
|
+
}
|
|
957
|
+
},
|
|
958
|
+
tags: ['Mentorat', 'Conseil', 'Entraide', 'Parcours', 'Carrière', 'Transmission'],
|
|
959
|
+
domainKeys: ['coaching', 'learning', 'pro'],
|
|
960
|
+
order: 60
|
|
961
|
+
},
|
|
962
|
+
{
|
|
963
|
+
key: 'build_collaboration',
|
|
964
|
+
parentKey: 'grow_or_build',
|
|
965
|
+
momentKey: 'grow_or_build',
|
|
966
|
+
level: 2,
|
|
967
|
+
emoji: '🤝',
|
|
968
|
+
i18n: {
|
|
969
|
+
fr: {
|
|
970
|
+
label: 'Collaboration pro ou créative',
|
|
971
|
+
shortLabel: 'Collaboration',
|
|
972
|
+
description: 'Trouver une personne avec qui collaborer sérieusement sur un vrai sujet.'
|
|
973
|
+
},
|
|
974
|
+
en: {
|
|
975
|
+
label: 'Professional or creative collaboration',
|
|
976
|
+
shortLabel: 'Collaboration',
|
|
977
|
+
description: 'Find someone to collaborate seriously on a real topic.'
|
|
978
|
+
}
|
|
979
|
+
},
|
|
980
|
+
tags: ['Collab', 'Freelance', 'Créatif', 'Mission', 'Partenaire', 'Pro'],
|
|
981
|
+
domainKeys: ['pro', 'creative', 'tech'],
|
|
982
|
+
order: 70
|
|
983
|
+
}
|
|
254
984
|
];
|
|
985
|
+
const SOCIAL_PARENT_KEYS = [...SOCIAL_MOMENT_KEYS, ...INTENTION_KEYS];
|
|
986
|
+
function toRecord(entries) {
|
|
987
|
+
return Object.freeze(Object.fromEntries(entries));
|
|
988
|
+
}
|
|
989
|
+
function getDeprecatedActiveIntentionKeys(value) {
|
|
990
|
+
return DEPRECATED_INTENTION_TO_ACTIVE_INTENTIONS[value] ?? [];
|
|
991
|
+
}
|
|
992
|
+
export const INTENTIONS_BY_KEY = toRecord(INTENTIONS.map((intention) => [intention.key, intention]));
|
|
993
|
+
export const SOCIAL_MOMENTS_BY_KEY = toRecord(SOCIAL_MOMENTS.map((moment) => [moment.key, moment]));
|
|
994
|
+
export const INTENTIONS_BY_PARENT = toRecord(SOCIAL_PARENT_KEYS.map((parentKey) => [
|
|
995
|
+
parentKey,
|
|
996
|
+
INTENTIONS.filter((intention) => intention.parentKey === parentKey).sort((a, b) => a.order - b.order)
|
|
997
|
+
]));
|
|
998
|
+
export const INTENTIONS_BY_MOMENT = toRecord(SOCIAL_MOMENT_KEYS.map((momentKey) => [momentKey, INTENTIONS_BY_PARENT[momentKey] ?? []]));
|
|
999
|
+
export const NESTED_INTENTIONS_BY_MOMENT = toRecord(SOCIAL_MOMENT_KEYS.map((momentKey) => [
|
|
1000
|
+
momentKey,
|
|
1001
|
+
INTENTIONS.filter((intention) => intention.momentKey === momentKey).sort((a, b) => a.order - b.order)
|
|
1002
|
+
]));
|
|
1003
|
+
export const INTENTION_TAG_MAPPINGS = INTENTIONS.flatMap((intention) => intention.tags.map((tag) => ({ intentionKey: intention.key, tag })));
|
|
1004
|
+
export const INTENTION_DOMAIN_MAPPINGS = INTENTIONS.flatMap((intention) => intention.domainKeys.map((domainKey) => ({
|
|
1005
|
+
intentionKey: intention.key,
|
|
1006
|
+
domainKey,
|
|
1007
|
+
weight: intention.broad ? 0.7 : 1
|
|
1008
|
+
})));
|
|
1009
|
+
export const LEGACY_INTENTION_TO_INTENTIONS = Object.freeze({
|
|
1010
|
+
dating: ['meet_feeling', 'meet_simple_first_date', 'meet_relaxed_date'],
|
|
1011
|
+
friendship: ['meet_make_acquaintance', 'regular_social_habit', 'regular_small_group'],
|
|
1012
|
+
networking: ['build_project', 'build_mentoring', 'build_collaboration'],
|
|
1013
|
+
activities: ['activity_sports', 'activity_play', 'activity_culture'],
|
|
1014
|
+
discussion: ['talk_light', 'talk_deep', 'talk_media'],
|
|
1015
|
+
serious_relationship: ['meet_feeling', 'meet_relaxed_date'],
|
|
1016
|
+
activity_partner: ['activity_sports', 'activity_outdoor'],
|
|
1017
|
+
group_activity: ['regular_small_group', 'activity_play_board_games'],
|
|
1018
|
+
casual_chat: ['talk_light', 'talk_online']
|
|
1019
|
+
});
|
|
1020
|
+
export const DEPRECATED_INTENTION_TO_ACTIVE_INTENTIONS = Object.freeze({
|
|
1021
|
+
do_together_open: [
|
|
1022
|
+
'activity_sports',
|
|
1023
|
+
'activity_play',
|
|
1024
|
+
'activity_culture',
|
|
1025
|
+
'activity_creative',
|
|
1026
|
+
'activity_food',
|
|
1027
|
+
'activity_outdoor'
|
|
1028
|
+
],
|
|
1029
|
+
sports_partner: ['activity_sports'],
|
|
1030
|
+
food_cooking: ['activity_food'],
|
|
1031
|
+
culture_creative: ['activity_culture', 'activity_creative', 'activity_play'],
|
|
1032
|
+
go_out_open: [
|
|
1033
|
+
'go_out_coffee',
|
|
1034
|
+
'go_out_drink',
|
|
1035
|
+
'go_out_meal',
|
|
1036
|
+
'go_out_walk',
|
|
1037
|
+
'go_out_tonight',
|
|
1038
|
+
'go_out_discover'
|
|
1039
|
+
],
|
|
1040
|
+
coffee_or_drink_now: ['go_out_coffee', 'go_out_drink'],
|
|
1041
|
+
walk_and_talk: ['go_out_walk'],
|
|
1042
|
+
nightlife_event: ['go_out_tonight', 'go_out_discover'],
|
|
1043
|
+
talk_share_open: [
|
|
1044
|
+
'talk_light',
|
|
1045
|
+
'talk_deep',
|
|
1046
|
+
'talk_topic',
|
|
1047
|
+
'talk_media',
|
|
1048
|
+
'talk_language_exchange',
|
|
1049
|
+
'talk_online'
|
|
1050
|
+
],
|
|
1051
|
+
light_conversation: ['talk_light'],
|
|
1052
|
+
books_ideas: ['talk_topic', 'talk_media'],
|
|
1053
|
+
languages_exchange: ['talk_language_exchange'],
|
|
1054
|
+
build_connection_open: [
|
|
1055
|
+
'regular_sports_partner',
|
|
1056
|
+
'regular_game_partner',
|
|
1057
|
+
'regular_talk_buddy',
|
|
1058
|
+
'regular_social_habit',
|
|
1059
|
+
'regular_small_group',
|
|
1060
|
+
'regular_go_out_often'
|
|
1061
|
+
],
|
|
1062
|
+
new_friends: ['meet_make_acquaintance', 'regular_social_habit'],
|
|
1063
|
+
small_group: ['regular_small_group'],
|
|
1064
|
+
local_community: ['regular_social_habit', 'regular_small_group'],
|
|
1065
|
+
see_if_clicks_open: [
|
|
1066
|
+
'meet_make_acquaintance',
|
|
1067
|
+
'meet_feeling',
|
|
1068
|
+
'meet_simple_first_date',
|
|
1069
|
+
'meet_relaxed_date',
|
|
1070
|
+
'meet_spontaneous',
|
|
1071
|
+
'meet_online_first'
|
|
1072
|
+
],
|
|
1073
|
+
simple_first_meet: ['meet_simple_first_date'],
|
|
1074
|
+
dinner_date: ['meet_relaxed_date'],
|
|
1075
|
+
walk_date: ['meet_simple_first_date', 'meet_spontaneous'],
|
|
1076
|
+
grow_build_open: [
|
|
1077
|
+
'build_coworking',
|
|
1078
|
+
'build_project',
|
|
1079
|
+
'build_entrepreneurship',
|
|
1080
|
+
'build_create_together',
|
|
1081
|
+
'build_learn_together',
|
|
1082
|
+
'build_mentoring',
|
|
1083
|
+
'build_collaboration'
|
|
1084
|
+
],
|
|
1085
|
+
professional_exchange: ['build_project', 'build_collaboration'],
|
|
1086
|
+
mentoring: ['build_mentoring'],
|
|
1087
|
+
coworking: ['build_coworking'],
|
|
1088
|
+
gaming_tabletop: ['activity_play_board_games'],
|
|
1089
|
+
outdoors_adventure: ['activity_outdoor'],
|
|
1090
|
+
music_show: ['go_out_discover'],
|
|
1091
|
+
brunch_or_lunch: ['go_out_meal'],
|
|
1092
|
+
local_event: ['go_out_discover'],
|
|
1093
|
+
culture_news: ['talk_topic'],
|
|
1094
|
+
movies_series: ['talk_media'],
|
|
1095
|
+
support_circle: ['regular_social_habit', 'regular_talk_buddy'],
|
|
1096
|
+
cultural_date: ['meet_relaxed_date'],
|
|
1097
|
+
online_date: ['meet_online_first'],
|
|
1098
|
+
startup_project: ['build_project', 'build_entrepreneurship'],
|
|
1099
|
+
freelance_creative: ['build_collaboration'],
|
|
1100
|
+
tech_product: ['build_project']
|
|
1101
|
+
});
|
|
1102
|
+
export const DEPRECATED_INTENTION_TO_ACTIVE_INTENTION = Object.freeze(Object.fromEntries(Object.entries(DEPRECATED_INTENTION_TO_ACTIVE_INTENTIONS)
|
|
1103
|
+
.filter(([, intentionKeys]) => intentionKeys.length > 0)
|
|
1104
|
+
.map(([deprecatedKey, intentionKeys]) => [deprecatedKey, intentionKeys[0]])));
|
|
1105
|
+
export function isSocialMomentKey(value) {
|
|
1106
|
+
return SOCIAL_MOMENT_KEYS.includes(value);
|
|
1107
|
+
}
|
|
1108
|
+
export function isIntentionKey(value) {
|
|
1109
|
+
return INTENTION_KEYS.includes(value);
|
|
1110
|
+
}
|
|
1111
|
+
export function normalizeIntentionKey(value) {
|
|
1112
|
+
if (isIntentionKey(value))
|
|
1113
|
+
return value;
|
|
1114
|
+
const [intentionKey] = getDeprecatedActiveIntentionKeys(value);
|
|
1115
|
+
return intentionKey ?? null;
|
|
1116
|
+
}
|
|
1117
|
+
export function normalizeIntentionKeys(values) {
|
|
1118
|
+
const normalized = new Set();
|
|
1119
|
+
for (const value of values ?? []) {
|
|
1120
|
+
if (isIntentionKey(value)) {
|
|
1121
|
+
normalized.add(value);
|
|
1122
|
+
continue;
|
|
1123
|
+
}
|
|
1124
|
+
for (const intentionKey of getDeprecatedActiveIntentionKeys(value)) {
|
|
1125
|
+
normalized.add(intentionKey);
|
|
1126
|
+
}
|
|
1127
|
+
}
|
|
1128
|
+
return [...normalized];
|
|
1129
|
+
}
|
|
1130
|
+
export function getSocialMoment(key) {
|
|
1131
|
+
return SOCIAL_MOMENTS_BY_KEY[key];
|
|
1132
|
+
}
|
|
1133
|
+
export function getIntention(key) {
|
|
1134
|
+
return INTENTIONS_BY_KEY[key];
|
|
1135
|
+
}
|
|
1136
|
+
export function getIntentionsForMoment(momentKey) {
|
|
1137
|
+
return INTENTIONS_BY_MOMENT[momentKey] ?? [];
|
|
1138
|
+
}
|
|
1139
|
+
export function getAllIntentionsForMoment(momentKey) {
|
|
1140
|
+
return NESTED_INTENTIONS_BY_MOMENT[momentKey] ?? [];
|
|
1141
|
+
}
|
|
1142
|
+
export function getChildIntentions(parentKey) {
|
|
1143
|
+
return INTENTIONS_BY_PARENT[parentKey] ?? [];
|
|
1144
|
+
}
|
|
1145
|
+
export function hasChildIntentions(parentKey) {
|
|
1146
|
+
return getChildIntentions(parentKey).length > 0;
|
|
1147
|
+
}
|
|
1148
|
+
export function getParentKeyForIntention(intentionKey) {
|
|
1149
|
+
return INTENTIONS_BY_KEY[intentionKey].parentKey;
|
|
1150
|
+
}
|
|
1151
|
+
export function getMomentKeyForIntention(intentionKey) {
|
|
1152
|
+
return INTENTIONS_BY_KEY[intentionKey].momentKey;
|
|
1153
|
+
}
|
|
1154
|
+
export function getAncestorIntentionKeys(intentionKey) {
|
|
1155
|
+
const ancestors = [];
|
|
1156
|
+
let parentKey = getParentKeyForIntention(intentionKey);
|
|
1157
|
+
while (isIntentionKey(parentKey)) {
|
|
1158
|
+
ancestors.unshift(parentKey);
|
|
1159
|
+
parentKey = getParentKeyForIntention(parentKey);
|
|
1160
|
+
}
|
|
1161
|
+
return ancestors;
|
|
1162
|
+
}
|
|
1163
|
+
export function getDescendantIntentionKeys(parentKey) {
|
|
1164
|
+
const descendants = [];
|
|
1165
|
+
const visit = (currentKey) => {
|
|
1166
|
+
for (const child of getChildIntentions(currentKey)) {
|
|
1167
|
+
descendants.push(child.key);
|
|
1168
|
+
visit(child.key);
|
|
1169
|
+
}
|
|
1170
|
+
};
|
|
1171
|
+
visit(parentKey);
|
|
1172
|
+
return descendants;
|
|
1173
|
+
}
|
|
1174
|
+
export function normalizeIntentionSelection(selection) {
|
|
1175
|
+
const resolvedIntentionKeys = isIntentionKey(selection.intentionKey)
|
|
1176
|
+
? [selection.intentionKey]
|
|
1177
|
+
: [...getDeprecatedActiveIntentionKeys(selection.intentionKey)];
|
|
1178
|
+
if (resolvedIntentionKeys.length !== 1)
|
|
1179
|
+
return null;
|
|
1180
|
+
const [intentionKey] = resolvedIntentionKeys;
|
|
1181
|
+
const intention = INTENTIONS_BY_KEY[intentionKey];
|
|
1182
|
+
if (!intention || intention.momentKey !== selection.momentKey)
|
|
1183
|
+
return null;
|
|
1184
|
+
return {
|
|
1185
|
+
momentKey: selection.momentKey,
|
|
1186
|
+
intentionKey,
|
|
1187
|
+
tags: selection.tags?.map((tag) => tag.trim()).filter((tag) => tag.length > 0),
|
|
1188
|
+
query: selection.query?.trim() || undefined
|
|
1189
|
+
};
|
|
1190
|
+
}
|