django-lucy-assist 1.2.5__py3-none-any.whl → 1.2.7__py3-none-any.whl
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.
- {django_lucy_assist-1.2.5.dist-info → django_lucy_assist-1.2.7.dist-info}/METADATA +1 -1
- {django_lucy_assist-1.2.5.dist-info → django_lucy_assist-1.2.7.dist-info}/RECORD +8 -8
- lucy_assist/__init__.py +1 -1
- lucy_assist/static/lucy_assist/js/lucy-assist.js +693 -761
- lucy_assist/templates/lucy_assist/chatbot_sidebar.html +120 -366
- lucy_assist/templates/lucy_assist/partials/documentation_content.html +8 -16
- {django_lucy_assist-1.2.5.dist-info → django_lucy_assist-1.2.7.dist-info}/WHEEL +0 -0
- {django_lucy_assist-1.2.5.dist-info → django_lucy_assist-1.2.7.dist-info}/top_level.txt +0 -0
|
@@ -1,425 +1,179 @@
|
|
|
1
1
|
{% load static %}
|
|
2
2
|
|
|
3
3
|
{# Composant Lucy Assist - Sidebar Chatbot #}
|
|
4
|
-
{#
|
|
4
|
+
{# 100% autonome : CSS, JS vanilla et icones SVG inline, zero dependance externe #}
|
|
5
5
|
|
|
6
6
|
{% if lucy_assist_enabled %}
|
|
7
|
-
{# CSS Lucy Assist #}
|
|
8
7
|
<link href="{% static 'lucy_assist/css/lucy-assist.css' %}" rel="stylesheet">
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
<button
|
|
16
|
-
x-show="!isOpen"
|
|
17
|
-
@click="toggleSidebar()"
|
|
18
|
-
class="lucy-float-btn"
|
|
19
|
-
:class="{ 'animate-pulse': hasNewMessage }"
|
|
20
|
-
title="Ouvrir Lucy (Ctrl+K)"
|
|
21
|
-
>
|
|
22
|
-
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor">
|
|
23
|
-
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" />
|
|
9
|
+
<div id="lucy-assist-root">
|
|
10
|
+
{# Bouton flottant #}
|
|
11
|
+
<button id="lucy-float-btn" class="lucy-float-btn" title="Ouvrir Lucy (Ctrl+K)">
|
|
12
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2">
|
|
13
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z"/>
|
|
24
14
|
</svg>
|
|
25
15
|
</button>
|
|
26
16
|
|
|
27
17
|
{# Sidebar #}
|
|
28
|
-
<div
|
|
29
|
-
x-show="isOpen"
|
|
30
|
-
x-transition:enter="transition ease-out duration-300"
|
|
31
|
-
x-transition:enter-start="transform translate-x-full"
|
|
32
|
-
x-transition:enter-end="transform translate-x-0"
|
|
33
|
-
x-transition:leave="transition ease-in duration-200"
|
|
34
|
-
x-transition:leave-start="transform translate-x-0"
|
|
35
|
-
x-transition:leave-end="transform translate-x-full"
|
|
36
|
-
class="lucy-sidebar"
|
|
37
|
-
:class="{ 'hidden': !isOpen, 'expanded': isExpanded }"
|
|
38
|
-
style="display: none;"
|
|
39
|
-
x-cloak
|
|
40
|
-
>
|
|
18
|
+
<div id="lucy-sidebar" class="lucy-sidebar hidden" style="display:none;">
|
|
41
19
|
{# Header #}
|
|
42
20
|
<div class="lucy-header">
|
|
43
21
|
<span class="lucy-header-title">Lucy Assist</span>
|
|
44
22
|
<div class="lucy-header-actions">
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
@click="toggleExpanded()"
|
|
48
|
-
class="lucy-header-btn"
|
|
49
|
-
:class="{ 'active': isExpanded }"
|
|
50
|
-
:title="isExpanded ? 'Reduire la fenetre' : 'Agrandir la fenetre'"
|
|
51
|
-
>
|
|
52
|
-
<i class="fa-solid" :class="isExpanded ? 'fa-compress' : 'fa-expand'"></i>
|
|
23
|
+
<button id="lucy-btn-expand" class="lucy-header-btn" title="Agrandir/Reduire">
|
|
24
|
+
<svg class="lucy-icon-expand" xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5v-4m0 4h-4m4 0l-5-5"/></svg>
|
|
53
25
|
</button>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
<button
|
|
57
|
-
@click="showHistory = !showHistory; showDoc = false"
|
|
58
|
-
class="lucy-header-btn"
|
|
59
|
-
:class="{ 'active': showHistory }"
|
|
60
|
-
title="Historique des conversations"
|
|
61
|
-
>
|
|
62
|
-
<i class="fa-solid fa-clock-rotate-left"></i>
|
|
26
|
+
<button id="lucy-btn-history" class="lucy-header-btn" title="Historique">
|
|
27
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z"/></svg>
|
|
63
28
|
</button>
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
<button
|
|
67
|
-
@click="newConversation()"
|
|
68
|
-
class="lucy-header-btn"
|
|
69
|
-
title="Nouvelle conversation"
|
|
70
|
-
>
|
|
71
|
-
<i class="fa-solid fa-plus"></i>
|
|
29
|
+
<button id="lucy-btn-new" class="lucy-header-btn" title="Nouvelle conversation">
|
|
30
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 4v16m8-8H4"/></svg>
|
|
72
31
|
</button>
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
<button
|
|
76
|
-
@click="showDoc = !showDoc; showHistory = false"
|
|
77
|
-
class="lucy-header-btn"
|
|
78
|
-
:class="{ 'active': showDoc }"
|
|
79
|
-
title="Documentation"
|
|
80
|
-
>
|
|
81
|
-
<i class="fa-solid fa-book"></i>
|
|
32
|
+
<button id="lucy-btn-doc" class="lucy-header-btn" title="Documentation">
|
|
33
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253"/></svg>
|
|
82
34
|
</button>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
<button
|
|
86
|
-
@click="closeSidebar()"
|
|
87
|
-
class="lucy-header-btn"
|
|
88
|
-
title="Fermer (Echap)"
|
|
89
|
-
>
|
|
90
|
-
<i class="fa-solid fa-xmark"></i>
|
|
35
|
+
<button id="lucy-btn-close" class="lucy-header-btn" title="Fermer (Echap)">
|
|
36
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/></svg>
|
|
91
37
|
</button>
|
|
92
38
|
</div>
|
|
93
39
|
</div>
|
|
94
40
|
|
|
95
|
-
{#
|
|
41
|
+
{# Credits #}
|
|
96
42
|
<div class="lucy-credits-bar">
|
|
97
|
-
<span>
|
|
98
|
-
|
|
99
|
-
<span x-text="formatTokens(tokensDisponibles)"></span> credits
|
|
100
|
-
</span>
|
|
101
|
-
<button
|
|
102
|
-
x-show="tokensDisponibles < 100000"
|
|
103
|
-
@click="showBuyCredits = true"
|
|
104
|
-
class="lucy-btn-warning"
|
|
105
|
-
>
|
|
106
|
-
<i class="fa-solid fa-cart-plus"></i>
|
|
107
|
-
Acheter
|
|
108
|
-
</button>
|
|
43
|
+
<span><span id="lucy-tokens">0</span> credits</span>
|
|
44
|
+
<button id="lucy-btn-buy-credits" class="lucy-btn-warning" style="display:none;">🛒 Acheter</button>
|
|
109
45
|
</div>
|
|
110
46
|
|
|
111
47
|
{# Contenu principal #}
|
|
112
48
|
<div class="lucy-content">
|
|
113
49
|
{# Vue Historique #}
|
|
114
|
-
<
|
|
115
|
-
<
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
<p class="lucy-history-empty">Aucune conversation</p>
|
|
119
|
-
</template>
|
|
120
|
-
<div class="lucy-history-list">
|
|
121
|
-
<template x-for="conv in conversations" :key="conv.id">
|
|
122
|
-
<div
|
|
123
|
-
@click="loadConversation(conv.id)"
|
|
124
|
-
class="lucy-history-item"
|
|
125
|
-
:class="{ 'active': currentConversationId === conv.id }"
|
|
126
|
-
>
|
|
127
|
-
<div class="lucy-history-item-title" x-text="conv.titre"></div>
|
|
128
|
-
<div class="lucy-history-item-meta">
|
|
129
|
-
<span x-text="formatDate(conv.created_date)"></span>
|
|
130
|
-
<span style="margin-left: 0.5rem;">
|
|
131
|
-
<i class="fa-solid fa-coins"></i>
|
|
132
|
-
<span x-text="conv.total_tokens"></span> tokens | <span x-text="formatTokenCost(conv.total_tokens)"></span>
|
|
133
|
-
</span>
|
|
134
|
-
</div>
|
|
135
|
-
<button
|
|
136
|
-
@click.stop="deleteConversation(conv.id)"
|
|
137
|
-
class="lucy-btn-delete"
|
|
138
|
-
>
|
|
139
|
-
<i class="fa-solid fa-trash"></i> Supprimer
|
|
140
|
-
</button>
|
|
141
|
-
</div>
|
|
142
|
-
</template>
|
|
143
|
-
</div>
|
|
144
|
-
</div>
|
|
145
|
-
</template>
|
|
50
|
+
<div id="lucy-view-history" class="lucy-history" style="display:none;">
|
|
51
|
+
<h3>Historique des conversations</h3>
|
|
52
|
+
<div id="lucy-history-list" class="lucy-history-list"></div>
|
|
53
|
+
</div>
|
|
146
54
|
|
|
147
55
|
{# Vue Documentation #}
|
|
148
|
-
<
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
</div>
|
|
152
|
-
</template>
|
|
56
|
+
<div id="lucy-view-doc" class="lucy-doc" style="display:none;">
|
|
57
|
+
{% include "lucy_assist/partials/documentation_content.html" %}
|
|
58
|
+
</div>
|
|
153
59
|
|
|
154
60
|
{# Vue Chat #}
|
|
155
|
-
<
|
|
156
|
-
<div class="lucy-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
<template x-if="messages.length === 0">
|
|
164
|
-
<div class="lucy-welcome">
|
|
165
|
-
<div class="lucy-welcome-icon">
|
|
166
|
-
<img src="{% static 'lucy_assist/image/icon-lucy.png' %}" alt="Lucy">
|
|
167
|
-
</div>
|
|
168
|
-
<h3>Bonjour ! Je suis Lucy</h3>
|
|
169
|
-
<p>Comment puis-je vous aider aujourd'hui ?</p>
|
|
170
|
-
|
|
171
|
-
{# Suggestions #}
|
|
172
|
-
<div class="lucy-suggestions">
|
|
173
|
-
<template x-for="suggestion in suggestions" :key="suggestion">
|
|
174
|
-
<button
|
|
175
|
-
@click="sendMessage(suggestion)"
|
|
176
|
-
class="lucy-suggestion-btn"
|
|
177
|
-
>
|
|
178
|
-
<i class="fa-solid fa-lightbulb"></i>
|
|
179
|
-
<span x-text="suggestion"></span>
|
|
180
|
-
</button>
|
|
181
|
-
</template>
|
|
182
|
-
</div>
|
|
183
|
-
</div>
|
|
184
|
-
</template>
|
|
185
|
-
|
|
186
|
-
{# Messages #}
|
|
187
|
-
<template x-for="(msg, index) in messages" :key="msg.id || index">
|
|
188
|
-
<div
|
|
189
|
-
class="lucy-message"
|
|
190
|
-
:class="msg.repondant === 'UTILISATEUR' ? 'user' : 'bot'"
|
|
191
|
-
>
|
|
192
|
-
<div class="lucy-message-avatar">
|
|
193
|
-
<template x-if="msg.repondant === 'UTILISATEUR'">
|
|
194
|
-
{% if lucy_assist_config.avatar_url %}
|
|
195
|
-
<img src="{{ lucy_assist_config.avatar_url }}" alt="Utilisateur">
|
|
196
|
-
{% else %}
|
|
197
|
-
<i class="fa-solid fa-user"></i>
|
|
198
|
-
{% endif %}
|
|
199
|
-
</template>
|
|
200
|
-
<template x-if="msg.repondant !== 'UTILISATEUR'">
|
|
201
|
-
<img src="{% static 'lucy_assist/image/icon-lucy.png' %}" alt="Lucy">
|
|
202
|
-
</template>
|
|
203
|
-
</div>
|
|
204
|
-
<div class="lucy-message-content">
|
|
205
|
-
<div class="lucy-message-bubble">
|
|
206
|
-
<template x-if="msg.contenu">
|
|
207
|
-
<span x-html="formatMessage(msg.contenu)"></span>
|
|
208
|
-
</template>
|
|
209
|
-
<template x-if="!msg.contenu">
|
|
210
|
-
<span class="lucy-loading-dots">
|
|
211
|
-
<span></span>
|
|
212
|
-
<span></span>
|
|
213
|
-
<span></span>
|
|
214
|
-
</span>
|
|
215
|
-
</template>
|
|
216
|
-
</div>
|
|
217
|
-
<div class="lucy-message-time" x-text="formatTime(msg.created_date)"></div>
|
|
218
|
-
</div>
|
|
219
|
-
</div>
|
|
220
|
-
</template>
|
|
221
|
-
</div>
|
|
222
|
-
|
|
223
|
-
{# Bouton Feedback - Lucy n'a pas compris #}
|
|
224
|
-
<template x-if="lucyDidNotUnderstand && messages.length > 0">
|
|
225
|
-
<div class="lucy-feedback-bar info">
|
|
226
|
-
<button
|
|
227
|
-
@click="openFeedback()"
|
|
228
|
-
class="lucy-feedback-btn info"
|
|
229
|
-
>
|
|
230
|
-
<i class="fa-solid fa-headset"></i>
|
|
231
|
-
Contacter le chef de projet Revolucy
|
|
232
|
-
</button>
|
|
61
|
+
<div id="lucy-view-chat" class="lucy-chat">
|
|
62
|
+
<div id="lucy-messages" class="lucy-messages"
|
|
63
|
+
data-avatar-url="{% if lucy_assist_config.avatar_url %}{{ lucy_assist_config.avatar_url }}{% endif %}"
|
|
64
|
+
data-lucy-icon="{% static 'lucy_assist/image/icon-lucy.png' %}">
|
|
65
|
+
{# Bienvenue #}
|
|
66
|
+
<div id="lucy-welcome" class="lucy-welcome">
|
|
67
|
+
<div class="lucy-welcome-icon">
|
|
68
|
+
<img src="{% static 'lucy_assist/image/icon-lucy.png' %}" alt="Lucy">
|
|
233
69
|
</div>
|
|
234
|
-
|
|
70
|
+
<h3>Bonjour ! Je suis Lucy</h3>
|
|
71
|
+
<p>Comment puis-je vous aider aujourd'hui ?</p>
|
|
72
|
+
<div id="lucy-suggestions" class="lucy-suggestions"></div>
|
|
73
|
+
</div>
|
|
74
|
+
</div>
|
|
235
75
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
</
|
|
76
|
+
{# Feedback bars #}
|
|
77
|
+
<div id="lucy-feedback-contact" class="lucy-feedback-bar info" style="display:none;">
|
|
78
|
+
<button id="lucy-btn-feedback-contact" class="lucy-feedback-btn info">
|
|
79
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z"/></svg>
|
|
80
|
+
Contacter le chef de projet Revolucy
|
|
81
|
+
</button>
|
|
82
|
+
</div>
|
|
83
|
+
<div id="lucy-feedback-error" class="lucy-feedback-bar warning" style="display:none;">
|
|
84
|
+
<button id="lucy-btn-feedback-error" class="lucy-feedback-btn warning">
|
|
85
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z"/></svg>
|
|
86
|
+
Souhaites-tu que j'informe Revolucy ?
|
|
87
|
+
</button>
|
|
88
|
+
</div>
|
|
248
89
|
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
@keydown.ctrl.enter.prevent="sendCurrentMessage()"
|
|
257
|
-
@keydown.meta.enter.prevent="sendCurrentMessage()"
|
|
258
|
-
placeholder="Tapez votre message..."
|
|
259
|
-
class="lucy-input"
|
|
260
|
-
rows="1"
|
|
261
|
-
@input="$el.style.height = 'auto'; $el.style.height = Math.min($el.scrollHeight, 128) + 'px'"
|
|
262
|
-
></textarea>
|
|
263
|
-
<button
|
|
264
|
-
type="button"
|
|
265
|
-
@click="sendCurrentMessage()"
|
|
266
|
-
:disabled="isLoading || !currentMessage.trim()"
|
|
267
|
-
class="lucy-send-btn"
|
|
268
|
-
>
|
|
269
|
-
<i class="fa-solid fa-paper-plane"></i>
|
|
270
|
-
</button>
|
|
271
|
-
</div>
|
|
272
|
-
<p class="lucy-input-hint">Ctrl+Entree pour envoyer</p>
|
|
90
|
+
{# Zone de saisie #}
|
|
91
|
+
<div class="lucy-input-area">
|
|
92
|
+
<div class="lucy-input-wrapper">
|
|
93
|
+
<textarea id="lucy-input" placeholder="Tapez votre message..." class="lucy-input" rows="1"></textarea>
|
|
94
|
+
<button id="lucy-btn-send" class="lucy-send-btn" disabled>
|
|
95
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path stroke-linecap="round" stroke-linejoin="round" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8"/></svg>
|
|
96
|
+
</button>
|
|
273
97
|
</div>
|
|
98
|
+
<p class="lucy-input-hint">Ctrl+Entree pour envoyer</p>
|
|
274
99
|
</div>
|
|
275
|
-
</
|
|
100
|
+
</div>
|
|
276
101
|
</div>
|
|
277
102
|
</div>
|
|
278
103
|
|
|
279
104
|
{# Modal Achat de credits #}
|
|
280
|
-
<
|
|
281
|
-
<div class="lucy-modal
|
|
282
|
-
<div class="lucy-modal">
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
105
|
+
<div id="lucy-modal-buy" class="lucy-modal-overlay" style="display:none;">
|
|
106
|
+
<div class="lucy-modal">
|
|
107
|
+
<div class="lucy-modal-header">🛒 Acheter des credits</div>
|
|
108
|
+
<div class="lucy-modal-body">
|
|
109
|
+
<div class="lucy-form-group">
|
|
110
|
+
<label class="lucy-form-label">Montant (EUR HT)</label>
|
|
111
|
+
<input id="lucy-buy-amount" type="number" value="10" min="10" step="10" class="lucy-form-input"/>
|
|
286
112
|
</div>
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
<
|
|
291
|
-
<input
|
|
292
|
-
type="number"
|
|
293
|
-
x-model.number="buyAmount"
|
|
294
|
-
min="10"
|
|
295
|
-
step="10"
|
|
296
|
-
class="lucy-form-input"
|
|
297
|
-
/>
|
|
298
|
-
</div>
|
|
299
|
-
|
|
300
|
-
<div class="lucy-stats-box">
|
|
301
|
-
<div class="lucy-stats-row">
|
|
302
|
-
<span class="lucy-stats-label">Tokens a recevoir</span>
|
|
303
|
-
<span class="lucy-stats-value" x-text="formatTokens(calculateTokens(buyAmount))"></span>
|
|
304
|
-
</div>
|
|
305
|
-
<div class="lucy-stats-row">
|
|
306
|
-
<span class="lucy-stats-label">Conversations estimees</span>
|
|
307
|
-
<span class="lucy-stats-value" x-text="Math.floor(calculateTokens(buyAmount) / 2000)"></span>
|
|
308
|
-
</div>
|
|
113
|
+
<div class="lucy-stats-box">
|
|
114
|
+
<div class="lucy-stats-row">
|
|
115
|
+
<span class="lucy-stats-label">Tokens a recevoir</span>
|
|
116
|
+
<span id="lucy-buy-tokens" class="lucy-stats-value">1.0M</span>
|
|
309
117
|
</div>
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
<
|
|
313
|
-
<span>10 EUR = 1 million de tokens = ~500 conversations</span>
|
|
118
|
+
<div class="lucy-stats-row">
|
|
119
|
+
<span class="lucy-stats-label">Conversations estimees</span>
|
|
120
|
+
<span id="lucy-buy-convs" class="lucy-stats-value">500</span>
|
|
314
121
|
</div>
|
|
315
122
|
</div>
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
<button @click="buyCredits()" class="lucy-btn lucy-btn-primary" :disabled="buyAmount < 10">
|
|
322
|
-
<i class="fa-solid fa-credit-card"></i>
|
|
323
|
-
Acheter
|
|
324
|
-
</button>
|
|
325
|
-
</div>
|
|
123
|
+
<div class="lucy-info-box">ℹ️ <span>10 EUR = 1 million de tokens = ~500 conversations</span></div>
|
|
124
|
+
</div>
|
|
125
|
+
<div class="lucy-modal-footer">
|
|
126
|
+
<button id="lucy-buy-cancel" class="lucy-btn lucy-btn-ghost">Annuler</button>
|
|
127
|
+
<button id="lucy-buy-confirm" class="lucy-btn lucy-btn-primary">💳 Acheter</button>
|
|
326
128
|
</div>
|
|
327
129
|
</div>
|
|
328
|
-
</
|
|
130
|
+
</div>
|
|
329
131
|
|
|
330
132
|
{# Modal Feedback #}
|
|
331
|
-
<
|
|
332
|
-
<div class="lucy-modal
|
|
333
|
-
<div class="lucy-modal">
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
<div class="lucy-modal-body">
|
|
340
|
-
<div class="lucy-info-box">
|
|
341
|
-
<i class="fa-solid fa-info-circle"></i>
|
|
342
|
-
<span>Votre conversation sera envoyée à l'équipe Revolucy pour analyse et amélioration de Lucy Assist.</span>
|
|
343
|
-
</div>
|
|
344
|
-
|
|
345
|
-
<div class="lucy-form-group">
|
|
346
|
-
<label class="lucy-form-label">Description du probleme (optionnel)</label>
|
|
347
|
-
<textarea
|
|
348
|
-
x-model="feedbackDescription"
|
|
349
|
-
class="lucy-form-textarea"
|
|
350
|
-
placeholder="Decrivez ce qui n'a pas fonctionne ou ce que vous attendiez..."
|
|
351
|
-
></textarea>
|
|
352
|
-
</div>
|
|
353
|
-
</div>
|
|
354
|
-
|
|
355
|
-
<div class="lucy-modal-footer">
|
|
356
|
-
<button @click="closeFeedback()" class="lucy-btn lucy-btn-ghost" :disabled="feedbackSending">
|
|
357
|
-
Annuler
|
|
358
|
-
</button>
|
|
359
|
-
<button
|
|
360
|
-
@click="sendFeedback()"
|
|
361
|
-
class="lucy-btn lucy-btn-warning-solid"
|
|
362
|
-
:disabled="feedbackSending"
|
|
363
|
-
>
|
|
364
|
-
<template x-if="!feedbackSending">
|
|
365
|
-
<span>
|
|
366
|
-
<i class="fa-solid fa-paper-plane"></i>
|
|
367
|
-
Envoyer le feedback
|
|
368
|
-
</span>
|
|
369
|
-
</template>
|
|
370
|
-
<template x-if="feedbackSending">
|
|
371
|
-
<span class="lucy-spinner"></span>
|
|
372
|
-
</template>
|
|
373
|
-
</button>
|
|
133
|
+
<div id="lucy-modal-feedback" class="lucy-modal-overlay" style="display:none;">
|
|
134
|
+
<div class="lucy-modal">
|
|
135
|
+
<div class="lucy-modal-header">⚠️ Signaler un probleme</div>
|
|
136
|
+
<div class="lucy-modal-body">
|
|
137
|
+
<div class="lucy-info-box">ℹ️ <span>Votre conversation sera envoyée à l'équipe Revolucy pour analyse et amélioration de Lucy Assist.</span></div>
|
|
138
|
+
<div class="lucy-form-group">
|
|
139
|
+
<label class="lucy-form-label">Description du probleme (optionnel)</label>
|
|
140
|
+
<textarea id="lucy-feedback-desc" class="lucy-form-textarea" placeholder="Decrivez ce qui n'a pas fonctionne ou ce que vous attendiez..."></textarea>
|
|
374
141
|
</div>
|
|
375
142
|
</div>
|
|
143
|
+
<div class="lucy-modal-footer">
|
|
144
|
+
<button id="lucy-feedback-cancel" class="lucy-btn lucy-btn-ghost">Annuler</button>
|
|
145
|
+
<button id="lucy-feedback-confirm" class="lucy-btn lucy-btn-warning-solid">
|
|
146
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2" style="display:inline-block;vertical-align:middle;margin-right:4px"><path stroke-linecap="round" stroke-linejoin="round" d="M12 19l9 2-9-18-9 18 9-2zm0 0v-8"/></svg>
|
|
147
|
+
Envoyer le feedback
|
|
148
|
+
</button>
|
|
149
|
+
</div>
|
|
376
150
|
</div>
|
|
377
|
-
</
|
|
151
|
+
</div>
|
|
378
152
|
|
|
379
|
-
{# Guide interactif
|
|
380
|
-
<
|
|
381
|
-
<div class="lucy-guide-
|
|
382
|
-
<
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
<
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
</
|
|
393
|
-
<ul class="lucy-guide-list">
|
|
394
|
-
<li>Naviguer dans l'application</li>
|
|
395
|
-
<li>Rechercher des informations</li>
|
|
396
|
-
<li>Créer et modifier des elements</li>
|
|
397
|
-
<li>Comprendre les fonctionnalités</li>
|
|
398
|
-
</ul>
|
|
399
|
-
<div class="lucy-guide-actions">
|
|
400
|
-
<button @click="skipGuide()" class="lucy-btn lucy-btn-ghost">
|
|
401
|
-
Passer
|
|
402
|
-
</button>
|
|
403
|
-
<button @click="nextGuideStep()" class="lucy-btn lucy-btn-primary">
|
|
404
|
-
Suivant
|
|
405
|
-
</button>
|
|
406
|
-
</div>
|
|
153
|
+
{# Guide interactif #}
|
|
154
|
+
<div id="lucy-guide-overlay" class="lucy-guide-overlay" style="display:none;">
|
|
155
|
+
<div id="lucy-guide-step1" class="lucy-guide-modal center">
|
|
156
|
+
<h3 class="lucy-guide-title">👋 Bienvenue sur Lucy Assist !</h3>
|
|
157
|
+
<p class="lucy-guide-text">Je suis votre assistant intelligent.<br>Je peux vous aider à :</p>
|
|
158
|
+
<ul class="lucy-guide-list">
|
|
159
|
+
<li>Naviguer dans l'application</li>
|
|
160
|
+
<li>Rechercher des informations</li>
|
|
161
|
+
<li>Créer et modifier des elements</li>
|
|
162
|
+
<li>Comprendre les fonctionnalités</li>
|
|
163
|
+
</ul>
|
|
164
|
+
<div class="lucy-guide-actions">
|
|
165
|
+
<button id="lucy-guide-skip" class="lucy-btn lucy-btn-ghost">Passer</button>
|
|
166
|
+
<button id="lucy-guide-next" class="lucy-btn lucy-btn-primary">Suivant</button>
|
|
407
167
|
</div>
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
<p class="lucy-guide-text">
|
|
414
|
-
Cliquez sur ce bouton ou utilisez <span class="lucy-kbd">Ctrl+K</span> pour ouvrir Lucy Assist a tout moment.
|
|
415
|
-
</p>
|
|
416
|
-
<div class="lucy-guide-actions">
|
|
417
|
-
<button @click="finishGuide()" class="lucy-btn lucy-btn-primary">
|
|
418
|
-
Compris !
|
|
419
|
-
</button>
|
|
420
|
-
</div>
|
|
168
|
+
</div>
|
|
169
|
+
<div id="lucy-guide-step2" class="lucy-guide-modal bottom-right" style="display:none;">
|
|
170
|
+
<p class="lucy-guide-text">Cliquez sur ce bouton ou utilisez <span class="lucy-kbd">Ctrl+K</span> pour ouvrir Lucy Assist a tout moment.</p>
|
|
171
|
+
<div class="lucy-guide-actions">
|
|
172
|
+
<button id="lucy-guide-finish" class="lucy-btn lucy-btn-primary">Compris !</button>
|
|
421
173
|
</div>
|
|
422
174
|
</div>
|
|
423
|
-
</
|
|
175
|
+
</div>
|
|
424
176
|
</div>
|
|
177
|
+
|
|
178
|
+
<script src="{% static 'lucy_assist/js/lucy-assist.js' %}"></script>
|
|
425
179
|
{% endif %}
|
|
@@ -1,16 +1,14 @@
|
|
|
1
|
-
{# Contenu de la documentation Lucy Assist #}
|
|
1
|
+
{# Contenu de la documentation Lucy Assist - 100% autonome, sans Font Awesome #}
|
|
2
2
|
|
|
3
3
|
<div class="prose prose-sm max-w-none">
|
|
4
4
|
<h3 class="text-lg font-bold mb-4">
|
|
5
|
-
|
|
6
|
-
Guide Lucy
|
|
5
|
+
📖 Guide Lucy
|
|
7
6
|
</h3>
|
|
8
7
|
|
|
9
8
|
<div class="collapse collapse-arrow bg-base-200 mb-2">
|
|
10
9
|
<input type="checkbox" checked />
|
|
11
10
|
<div class="collapse-title font-medium">
|
|
12
|
-
|
|
13
|
-
Aide contextuelle
|
|
11
|
+
🧭 Aide contextuelle
|
|
14
12
|
</div>
|
|
15
13
|
<div class="collapse-content text-sm">
|
|
16
14
|
<p>Lucy détecte automatiquement la page où vous vous trouvez pour vous proposer une aide ciblée.</p>
|
|
@@ -20,8 +18,7 @@
|
|
|
20
18
|
<div class="collapse collapse-arrow bg-base-200 mb-2">
|
|
21
19
|
<input type="checkbox" />
|
|
22
20
|
<div class="collapse-title font-medium">
|
|
23
|
-
|
|
24
|
-
Recherche intelligente
|
|
21
|
+
🔍 Recherche intelligente
|
|
25
22
|
</div>
|
|
26
23
|
<div class="collapse-content text-sm">
|
|
27
24
|
<p>Trouvez rapidement n'importe quel élément en posant simplement la question.</p>
|
|
@@ -32,8 +29,7 @@
|
|
|
32
29
|
<div class="collapse collapse-arrow bg-base-200 mb-2">
|
|
33
30
|
<input type="checkbox" />
|
|
34
31
|
<div class="collapse-title font-medium">
|
|
35
|
-
|
|
36
|
-
Création assistée
|
|
32
|
+
➕ Création assistée
|
|
37
33
|
</div>
|
|
38
34
|
<div class="collapse-content text-sm">
|
|
39
35
|
<p>Créez de nouveaux éléments en discutant avec Lucy qui vous guide étape par étape.</p>
|
|
@@ -44,8 +40,7 @@
|
|
|
44
40
|
<div class="collapse collapse-arrow bg-base-200 mb-2">
|
|
45
41
|
<input type="checkbox" />
|
|
46
42
|
<div class="collapse-title font-medium">
|
|
47
|
-
|
|
48
|
-
Analyse de bugs
|
|
43
|
+
🐛 Analyse de bugs
|
|
49
44
|
</div>
|
|
50
45
|
<div class="collapse-content text-sm">
|
|
51
46
|
<p>Signalez un problème et Lucy analysera pour détecter d'éventuels bugs.</p>
|
|
@@ -56,8 +51,7 @@
|
|
|
56
51
|
<div class="collapse collapse-arrow bg-base-200 mb-2">
|
|
57
52
|
<input type="checkbox" />
|
|
58
53
|
<div class="collapse-title font-medium">
|
|
59
|
-
|
|
60
|
-
Raccourcis clavier
|
|
54
|
+
⌨️ Raccourcis clavier
|
|
61
55
|
</div>
|
|
62
56
|
<div class="collapse-content text-sm">
|
|
63
57
|
<ul class="list-none space-y-2">
|
|
@@ -80,7 +74,6 @@
|
|
|
80
74
|
<div class="divider"></div>
|
|
81
75
|
|
|
82
76
|
<h4 class="font-bold mb-2">
|
|
83
|
-
<i class="fa-solid fa-coins mr-2 text-warning"></i>
|
|
84
77
|
Tarification
|
|
85
78
|
</h4>
|
|
86
79
|
|
|
@@ -101,7 +94,6 @@
|
|
|
101
94
|
</div>
|
|
102
95
|
|
|
103
96
|
<div class="alert alert-info mt-4 text-xs">
|
|
104
|
-
<
|
|
105
|
-
<span>Le nombre de tokens utilisés dépend de la complexité de vos questions et des réponses générées.</span>
|
|
97
|
+
ℹ️ <span>Le nombre de tokens utilisés dépend de la complexité de vos questions et des réponses générées.</span>
|
|
106
98
|
</div>
|
|
107
99
|
</div>
|
|
File without changes
|