django-spire 0.16.0__py3-none-any.whl → 0.16.2__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_spire/ai/chat/intelligence/__init__.py +0 -0
- django_spire/ai/chat/intelligence/maps/__init__.py +0 -0
- django_spire/ai/chat/intelligence/maps/intent_llm_map.py +7 -0
- django_spire/ai/chat/intelligence/prompts.py +17 -0
- django_spire/ai/chat/intelligence/workflows/__init__.py +0 -0
- django_spire/ai/chat/intelligence/workflows/chat_workflow.py +76 -0
- django_spire/ai/chat/templates/django_spire/ai/chat/message/loading_response_message.html +5 -1
- django_spire/ai/chat/templates/django_spire/ai/chat/message/message.html +39 -26
- django_spire/ai/chat/templates/django_spire/ai/chat/widget/dialog_widget.html +33 -30
- django_spire/ai/sms/intelligence/__init__.py +0 -0
- django_spire/ai/sms/intelligence/workflows/__init__.py +0 -0
- django_spire/ai/sms/intelligence/workflows/sms_conversation_workflow.py +27 -0
- django_spire/consts.py +1 -1
- django_spire/core/static/django_spire/css/themes/ayu/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/ayu/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/catppuccin/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/catppuccin/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/default/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/default/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/dracula/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/dracula/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/gruvbox/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/gruvbox/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/material/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/material/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/nord/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/nord/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/oceanic-next/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/oceanic-next/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/one-dark/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/one-dark/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/palenight/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/palenight/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/rose-pine/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/rose-pine/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/synthwave/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/synthwave/app-light.css +0 -7
- django_spire/core/static/django_spire/css/themes/tokyo-night/app-dark.css +0 -7
- django_spire/core/static/django_spire/css/themes/tokyo-night/app-light.css +0 -7
- django_spire/knowledge/intelligence/workflows/knowledge_workflow.py +25 -36
- django_spire/settings.py +9 -0
- {django_spire-0.16.0.dist-info → django_spire-0.16.2.dist-info}/METADATA +1 -1
- {django_spire-0.16.0.dist-info → django_spire-0.16.2.dist-info}/RECORD +46 -37
- {django_spire-0.16.0.dist-info → django_spire-0.16.2.dist-info}/WHEEL +0 -0
- {django_spire-0.16.0.dist-info → django_spire-0.16.2.dist-info}/licenses/LICENSE.md +0 -0
- {django_spire-0.16.0.dist-info → django_spire-0.16.2.dist-info}/top_level.txt +0 -0
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
from dandy.llm import Prompt
|
|
2
|
+
|
|
3
|
+
from django_spire.conf import settings
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def organization_prompt():
|
|
7
|
+
return (
|
|
8
|
+
Prompt()
|
|
9
|
+
.text(f'You are a chat assistant for a company called "{settings.ORGANIZATION_NAME}".')
|
|
10
|
+
.line_break()
|
|
11
|
+
.text(f'Organization Description: "{settings.ORGANIZATION_DESCRIPTION}"')
|
|
12
|
+
.line_break()
|
|
13
|
+
.text('Make sure to follow the rules below')
|
|
14
|
+
.list([
|
|
15
|
+
'Do not talk about being an AI at all to maintain the illusion of being a human assistant.',
|
|
16
|
+
])
|
|
17
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING, Type
|
|
4
|
+
|
|
5
|
+
from dandy.map import Map
|
|
6
|
+
from dandy.recorder import recorder_to_html_file
|
|
7
|
+
from dandy.workflow import BaseWorkflow
|
|
8
|
+
from dandy.llm import LlmBot, MessageHistory, Prompt
|
|
9
|
+
from django.core.handlers.wsgi import WSGIRequest
|
|
10
|
+
|
|
11
|
+
from django_spire.ai.chat.intelligence.maps.intent_llm_map import IntentLlmMap
|
|
12
|
+
from django_spire.ai.chat.intelligence.prompts import organization_prompt
|
|
13
|
+
from django_spire.ai.chat.message_intel import DefaultMessageIntel
|
|
14
|
+
from django_spire.auth.controller.controller import AppAuthController
|
|
15
|
+
from django_spire.knowledge.intelligence.workflows.knowledge_workflow import \
|
|
16
|
+
KnowledgeWorkflow
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
if TYPE_CHECKING:
|
|
20
|
+
from django_spire.ai.chat.message_intel import BaseMessageIntel
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class SpireChatWorkflow(BaseWorkflow):
|
|
24
|
+
@classmethod
|
|
25
|
+
def _generate_intent_map(cls, request: WSGIRequest) -> Type[IntentLlmMap]:
|
|
26
|
+
intent_dict = {}
|
|
27
|
+
|
|
28
|
+
if AppAuthController(app_name='knowledge', request=request).can_view():
|
|
29
|
+
intent_message = (
|
|
30
|
+
'The user is looking for information or knowledge on something.'
|
|
31
|
+
)
|
|
32
|
+
intent_dict[intent_message] = KnowledgeWorkflow
|
|
33
|
+
|
|
34
|
+
intent_dict['None of the above choices match the user\'s intent'] = None
|
|
35
|
+
|
|
36
|
+
IntentLlmMap.map = Map(intent_dict)
|
|
37
|
+
IntentLlmMap._map_enum = IntentLlmMap.map.as_enum()
|
|
38
|
+
return IntentLlmMap
|
|
39
|
+
|
|
40
|
+
@classmethod
|
|
41
|
+
@recorder_to_html_file('spire_chat_workflow')
|
|
42
|
+
def process(
|
|
43
|
+
cls,
|
|
44
|
+
request: WSGIRequest,
|
|
45
|
+
user_input: str,
|
|
46
|
+
message_history: MessageHistory | None = None
|
|
47
|
+
) -> BaseMessageIntel:
|
|
48
|
+
intent_map = cls._generate_intent_map(request)
|
|
49
|
+
intents = intent_map.process(user_input, max_return_values=1)
|
|
50
|
+
|
|
51
|
+
if intents[0] is None:
|
|
52
|
+
response = LlmBot.process(
|
|
53
|
+
prompt=user_input,
|
|
54
|
+
message_history=message_history,
|
|
55
|
+
postfix_system_prompt=organization_prompt()
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
return DefaultMessageIntel(text=response.text)
|
|
59
|
+
|
|
60
|
+
response = LlmBot.process(
|
|
61
|
+
prompt=(
|
|
62
|
+
Prompt()
|
|
63
|
+
.text(f'User Input: {user_input}')
|
|
64
|
+
.line_break()
|
|
65
|
+
.text(
|
|
66
|
+
'Use the following information to the answer the user\'s question '
|
|
67
|
+
'or concern.'
|
|
68
|
+
)
|
|
69
|
+
.line_break()
|
|
70
|
+
.text(intents[0].process(user_input))
|
|
71
|
+
),
|
|
72
|
+
message_history=message_history,
|
|
73
|
+
postfix_system_prompt=organization_prompt()
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
return DefaultMessageIntel(text=response.text)
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
{% load spire_core_tags %}
|
|
2
|
+
|
|
3
|
+
{% generate_id as response_message_intel_id %}
|
|
1
4
|
<div
|
|
2
5
|
x-data="{
|
|
3
6
|
show_loading: false,
|
|
@@ -14,7 +17,7 @@
|
|
|
14
17
|
response_message: new ViewGlue(
|
|
15
18
|
'{% url "django_spire:ai:chat:message:response:new" %}',
|
|
16
19
|
{
|
|
17
|
-
message_body: '{{
|
|
20
|
+
message_body: JSON.parse(document.getElementById('{{ response_message_intel_id }}').textContent),
|
|
18
21
|
chat_id: '{{ chat_id }}',
|
|
19
22
|
synthesis_speech: '{{ synthesis_speech }}' === 'True'
|
|
20
23
|
}
|
|
@@ -23,6 +26,7 @@
|
|
|
23
26
|
x-show="show_loading"
|
|
24
27
|
x-cloak
|
|
25
28
|
>
|
|
29
|
+
{{ message_intel.text|json_script:response_message_intel_id }}
|
|
26
30
|
<div x-ref="loading_response_message" class="row mt-2 pb-3">
|
|
27
31
|
<div class="col-auto align-self-center">
|
|
28
32
|
<div class="row align-items-center">
|
|
@@ -1,37 +1,50 @@
|
|
|
1
|
+
{% load spire_core_tags %}
|
|
2
|
+
|
|
1
3
|
{% block message %}
|
|
2
|
-
|
|
4
|
+
{% generate_id as message_intel_id %}
|
|
5
|
+
<div
|
|
6
|
+
class="col-auto mb-1 {{ message_class }}"
|
|
7
|
+
@mouseover="show_message_menu = true"
|
|
8
|
+
@mouseleave="show_message_menu = false"
|
|
9
|
+
x-data="{
|
|
3
10
|
show_message_menu: false,
|
|
4
|
-
|
|
11
|
+
message_intel_str: '',
|
|
5
12
|
init() {
|
|
6
|
-
this.
|
|
7
|
-
{% if synthesis_speech %}this.start_speaking(this.
|
|
13
|
+
this.message_intel_str = JSON.parse(document.getElementById('{{ message_intel_id }}').textContent)
|
|
14
|
+
{% if synthesis_speech %}this.start_speaking(this.message_intel_str){% endif %}
|
|
8
15
|
$el.scrollIntoView({behavior: 'smooth'})
|
|
9
16
|
}
|
|
10
|
-
}"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
{
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
class="col px-3 py-2 rounded-3 shadow-sm {{ content_class|default:'border' }}">
|
|
21
|
-
{% block message_content %}
|
|
22
|
-
{{ message_intel.content_to_str|linebreaksbr }}
|
|
23
|
-
{% endblock %}
|
|
17
|
+
}"
|
|
18
|
+
>
|
|
19
|
+
<div class="container-fluid">
|
|
20
|
+
{{ message_intel.content_to_str|json_script:message_intel_id }}
|
|
21
|
+
<div class="row">
|
|
22
|
+
<div class="col fs--1 {{ sender_class }}">
|
|
23
|
+
{% block message_sender %}
|
|
24
|
+
{{ sender }}
|
|
25
|
+
{% endblock %}
|
|
26
|
+
</div>
|
|
24
27
|
</div>
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
<div class="row">
|
|
29
|
+
<div class="col-12 px-3 py-2 rounded-3 shadow-sm {{ content_class|default:'border' }}">
|
|
30
|
+
{% block message_content %}
|
|
31
|
+
{{ message_intel.content_to_str|linebreaksbr }}
|
|
32
|
+
{% endblock %}
|
|
30
33
|
</div>
|
|
31
34
|
</div>
|
|
32
|
-
<div
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
<div
|
|
36
|
+
class="row justify-content-end"
|
|
37
|
+
:class="show_message_menu ? 'opacity-100' : 'opacity-0'"
|
|
38
|
+
>
|
|
39
|
+
<div class="col-auto px-0">
|
|
40
|
+
<div @click="start_speaking(message_intel_str)" class="py-1 px-2 cursor-pointer">
|
|
41
|
+
<i class="bi bi-soundwave"></i>
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="col-auto pe-0 ps-1">
|
|
45
|
+
<div @click="send_chat({message_body: message_intel_str})" class="py-1 px-2 cursor-pointer">
|
|
46
|
+
<i class="bi bi-repeat"></i>
|
|
47
|
+
</div>
|
|
35
48
|
</div>
|
|
36
49
|
</div>
|
|
37
50
|
</div>
|
|
@@ -1,36 +1,40 @@
|
|
|
1
1
|
{% extends 'django_spire/speech/speech_recognition.html' %}
|
|
2
2
|
|
|
3
3
|
{% block speech_recognition_content %}
|
|
4
|
+
<div
|
|
5
|
+
class="row"
|
|
6
|
+
x-data="{
|
|
7
|
+
request_message_view: new ViewGlue('{% url "django_spire:ai:chat:message:request:new" %}'),
|
|
8
|
+
load_messages_view: new ViewGlue('{% url "django_spire:ai:chat:message:load_chat" chat_id=chat.id %}'),
|
|
9
|
+
chat_id: '{{ chat.id }}',
|
|
10
|
+
message_body: '',
|
|
4
11
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
load_messages_view: new ViewGlue('{% url "django_spire:ai:chat:message:load_chat" chat_id=chat.id %}'),
|
|
8
|
-
chat_id: '{{ chat.id }}',
|
|
9
|
-
message_body: '',
|
|
10
|
-
async send_chat(synthesis_speech_for_response = false, message_body = '') {
|
|
11
|
-
if(this.message_body !== '') {
|
|
12
|
-
await this.request_message_view.render_insert_adjacent(this.$refs.target_div, {
|
|
13
|
-
message_body: this.message_body.trim(),
|
|
14
|
-
chat_id: this.chat_id,
|
|
15
|
-
synthesis_speech: synthesis_speech_for_response
|
|
16
|
-
})
|
|
17
|
-
this.message_body = ''
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
load_messages() {
|
|
21
|
-
this.load_messages_view.render_insert_adjacent(this.$refs.target_div, {})
|
|
22
|
-
},
|
|
23
|
-
init() {
|
|
24
|
-
setTimeout(() => this.$refs.target_div.scrollTop = this.$refs.target_div.scrollHeight, 1500)
|
|
25
|
-
|
|
12
|
+
init() {
|
|
13
|
+
setTimeout(() => this.$refs.target_div.scrollTop = this.$refs.target_div.scrollHeight, 1500)
|
|
26
14
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
15
|
+
this.speech_recognition.onresult = () => {
|
|
16
|
+
this.message_body = this.speech_transcript
|
|
17
|
+
this.send_chat({message_body: this.message_body, synthesis_speech_for_response: true})
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
load_messages() {
|
|
21
|
+
this.load_messages_view.render_insert_adjacent(this.$refs.target_div, {})
|
|
22
|
+
},
|
|
23
|
+
async send_chat({message_body = '', synthesis_speech_for_response = false}) {
|
|
24
|
+
if (message_body !== '') {
|
|
25
|
+
await this.request_message_view.render_insert_adjacent(
|
|
26
|
+
this.$refs.target_div,
|
|
27
|
+
{
|
|
28
|
+
message_body: message_body,
|
|
29
|
+
chat_id: this.chat_id,
|
|
30
|
+
synthesis_speech: synthesis_speech_for_response
|
|
31
|
+
}
|
|
32
|
+
)
|
|
33
|
+
this.message_body = ''
|
|
34
|
+
}
|
|
30
35
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}" class="row">
|
|
36
|
+
}"
|
|
37
|
+
>
|
|
34
38
|
<div class="col-12">
|
|
35
39
|
<div class="row px-0 border-bottom">
|
|
36
40
|
<div class="col-auto ps-2 pe-0 h-100 d-block d-md-none text-app-primary"
|
|
@@ -45,7 +49,6 @@
|
|
|
45
49
|
<div class="row mb-3">
|
|
46
50
|
<div x-init="load_messages()" x-ref="target_div" class="col-12 overflow-auto p-4"
|
|
47
51
|
style="height: calc(100vh - 90px - var(--app-top-navigation-height));">
|
|
48
|
-
|
|
49
52
|
</div>
|
|
50
53
|
</div>
|
|
51
54
|
|
|
@@ -59,11 +62,11 @@
|
|
|
59
62
|
</button>
|
|
60
63
|
</div>
|
|
61
64
|
<div class="col text-center px-1">
|
|
62
|
-
<input type="text" x-init="$el.focus()" x-model="message_body" @keyup.enter="send_chat()"
|
|
65
|
+
<input type="text" x-init="$el.focus()" x-model="message_body" @keyup.enter="send_chat({message_body: message_body})"
|
|
63
66
|
class="form-control" autocomplete="off" name="request_message">
|
|
64
67
|
</div>
|
|
65
68
|
<div class="col-auto text-center ps-1 pe-2">
|
|
66
|
-
<button class="btn btn-app-primary-outlined" @click="send_chat()">
|
|
69
|
+
<button class="btn btn-app-primary-outlined" @click="send_chat({message_body: message_body})">
|
|
67
70
|
<i class="bi bi-send"></i>
|
|
68
71
|
</button>
|
|
69
72
|
</div>
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from dandy.recorder import recorder_to_html_file
|
|
2
|
+
from dandy.workflow import BaseWorkflow
|
|
3
|
+
from dandy.llm import MessageHistory
|
|
4
|
+
from django.core.handlers.wsgi import WSGIRequest
|
|
5
|
+
|
|
6
|
+
from django_spire.ai.chat.intelligence.workflows.chat_workflow import SpireChatWorkflow
|
|
7
|
+
from django_spire.ai.sms.intel import SmsIntel
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class SpireSmsConversationWorkflow(BaseWorkflow):
|
|
11
|
+
@classmethod
|
|
12
|
+
@recorder_to_html_file('sms_workflow')
|
|
13
|
+
def process(
|
|
14
|
+
cls,
|
|
15
|
+
request: WSGIRequest,
|
|
16
|
+
user_input: str,
|
|
17
|
+
message_history: MessageHistory | None = None
|
|
18
|
+
) -> SmsIntel:
|
|
19
|
+
return SmsIntel(
|
|
20
|
+
body=str(
|
|
21
|
+
SpireChatWorkflow.process(
|
|
22
|
+
request,
|
|
23
|
+
user_input=user_input,
|
|
24
|
+
message_history=message_history,
|
|
25
|
+
)
|
|
26
|
+
)
|
|
27
|
+
)
|
django_spire/consts.py
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
[data-theme="dark"] {
|
|
2
|
-
--app-dark: #0f1419;
|
|
3
|
-
--app-light: #bfbdb6;
|
|
4
|
-
|
|
5
2
|
--app-primary: #59c2ff;
|
|
6
3
|
--app-primary-soft: #1f2430;
|
|
7
4
|
--app-primary-dark: #39bae6;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #1f2430;
|
|
31
28
|
--app-layer-three: #272d38;
|
|
32
29
|
--app-layer-four: #3e4b59;
|
|
33
|
-
--app-layer-five: #5c6773;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #0a0e14;
|
|
36
32
|
--app-alt-layer-two: #1a1f29;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #0f1419;
|
|
42
38
|
--app-default-text-color: #bfbdb6;
|
|
43
39
|
--app-default-alt-text-color: #acaaa2;
|
|
44
|
-
--app-default-bg-color: #0f1419;
|
|
45
40
|
--app-default-link-color: #59c2ff;
|
|
46
41
|
--app-default-link-hover-color: #ffd580;
|
|
47
|
-
--app-default-link-active-color: #95e6cb;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #0d1017;
|
|
50
44
|
--app-side-navigation-text-color: #bfbdb6;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #59c2ff;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #0f1419;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #0d1017;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
--app-dark: #5c6773;
|
|
3
|
-
--app-light: #fafafa;
|
|
4
|
-
|
|
5
2
|
--app-primary: #0066cc;
|
|
6
3
|
--app-primary-soft: #f0f6ff;
|
|
7
4
|
--app-primary-dark: #0052a3;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #f3f4f5;
|
|
31
28
|
--app-layer-three: #edeff1;
|
|
32
29
|
--app-layer-four: #d9dce0;
|
|
33
|
-
--app-layer-five: #828c99;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #ffffff;
|
|
36
32
|
--app-alt-layer-two: #fcfcfc;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #fafafa;
|
|
42
38
|
--app-default-text-color: #5c6773;
|
|
43
39
|
--app-default-alt-text-color: #6b7280;
|
|
44
|
-
--app-default-bg-color: #fafafa;
|
|
45
40
|
--app-default-link-color: #0066cc;
|
|
46
41
|
--app-default-link-hover-color: #ff6a00;
|
|
47
|
-
--app-default-link-active-color: #86b300;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #5c6773;
|
|
50
44
|
--app-side-navigation-text-color: #fafafa;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #59c2ff;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #6b7280;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #fafafa;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
[data-theme="dark"] {
|
|
2
|
-
--app-dark: #1e1e2e;
|
|
3
|
-
--app-light: #cdd6f4;
|
|
4
|
-
|
|
5
2
|
--app-primary: #cba6f7;
|
|
6
3
|
--app-primary-soft: #313244;
|
|
7
4
|
--app-primary-dark: #a385d8;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #313244;
|
|
31
28
|
--app-layer-three: #45475a;
|
|
32
29
|
--app-layer-four: #585b70;
|
|
33
|
-
--app-layer-five: #6c7086;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #11111b;
|
|
36
32
|
--app-alt-layer-two: #1e1e2e;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #1e1e2e;
|
|
42
38
|
--app-default-text-color: #cdd6f4;
|
|
43
39
|
--app-default-alt-text-color: #bac2de;
|
|
44
|
-
--app-default-bg-color: #1e1e2e;
|
|
45
40
|
--app-default-link-color: #cba6f7;
|
|
46
41
|
--app-default-link-hover-color: #f38ba8;
|
|
47
|
-
--app-default-link-active-color: #a6e3a1;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #181825;
|
|
50
44
|
--app-side-navigation-text-color: #cdd6f4;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #cba6f7;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #1e1e2e;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #181825;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
--app-dark: #4c4f69;
|
|
3
|
-
--app-light: #eff1f5;
|
|
4
|
-
|
|
5
2
|
--app-primary: #8839ef;
|
|
6
3
|
--app-primary-soft: #ede2f3;
|
|
7
4
|
--app-primary-dark: #6c2fb3;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #e6e9ef;
|
|
31
28
|
--app-layer-three: #dce0e8;
|
|
32
29
|
--app-layer-four: #bcc0cc;
|
|
33
|
-
--app-layer-five: #9ca0b0;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #cdd6f4;
|
|
36
32
|
--app-alt-layer-two: #bac2de;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #eff1f5;
|
|
42
38
|
--app-default-text-color: #4c4f69;
|
|
43
39
|
--app-default-alt-text-color: #5c5f77;
|
|
44
|
-
--app-default-bg-color: #eff1f5;
|
|
45
40
|
--app-default-link-color: #8839ef;
|
|
46
41
|
--app-default-link-hover-color: #d20f39;
|
|
47
|
-
--app-default-link-active-color: #40a02b;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #4c4f69;
|
|
50
44
|
--app-side-navigation-text-color: #eff1f5;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #cba6f7;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #5c5f77;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #eff1f5;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
[data-theme="dark"] {
|
|
2
|
-
--app-dark: #181818;
|
|
3
|
-
--app-light: #ffffff;
|
|
4
|
-
|
|
5
2
|
--app-primary: #0097c9;
|
|
6
3
|
--app-primary-soft: #1a2a2f;
|
|
7
4
|
--app-primary-dark: #00b8e6;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #232526;
|
|
31
28
|
--app-layer-three: #2d3031;
|
|
32
29
|
--app-layer-four: #3a3d3e;
|
|
33
|
-
--app-layer-five: #797c7d;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #0f0f0f;
|
|
36
32
|
--app-alt-layer-two: #1f2122;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #181818;
|
|
42
38
|
--app-default-text-color: #ffffff;
|
|
43
39
|
--app-default-alt-text-color: #d1d5db;
|
|
44
|
-
--app-default-bg-color: #181818;
|
|
45
40
|
--app-default-link-color: #0097c9;
|
|
46
41
|
--app-default-link-hover-color: #00b8e6;
|
|
47
|
-
--app-default-link-active-color: #10b981;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #0f0f0f;
|
|
50
44
|
--app-side-navigation-text-color: #ffffff;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #0097c9;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #181818;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #0f0f0f;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
--app-dark: #181818;
|
|
3
|
-
--app-light: #ffffff;
|
|
4
|
-
|
|
5
2
|
--app-primary: #0097c9;
|
|
6
3
|
--app-primary-soft: #e6f7fd;
|
|
7
4
|
--app-primary-dark: #007ba3;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #fafafa;
|
|
31
28
|
--app-layer-three: #f5f5f6;
|
|
32
29
|
--app-layer-four: #ededee;
|
|
33
|
-
--app-layer-five: #797c7d;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #ffffff;
|
|
36
32
|
--app-alt-layer-two: #fefefe;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #ffffff;
|
|
42
38
|
--app-default-text-color: #181818;
|
|
43
39
|
--app-default-alt-text-color: #5c5f60;
|
|
44
|
-
--app-default-bg-color: #ffffff;
|
|
45
40
|
--app-default-link-color: #0097c9;
|
|
46
41
|
--app-default-link-hover-color: #007ba3;
|
|
47
|
-
--app-default-link-active-color: #059669;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #181818;
|
|
50
44
|
--app-side-navigation-text-color: #ffffff;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #0097c9;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #5c5f60;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #ffffff;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
[data-theme="dark"] {
|
|
2
|
-
--app-dark: #282a36;
|
|
3
|
-
--app-light: #f8f8f2;
|
|
4
|
-
|
|
5
2
|
--app-primary: #bd93f9;
|
|
6
3
|
--app-primary-soft: #44475a;
|
|
7
4
|
--app-primary-dark: #9580d4;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #44475a;
|
|
31
28
|
--app-layer-three: #6272a4;
|
|
32
29
|
--app-layer-four: #7882b4;
|
|
33
|
-
--app-layer-five: #8e92c4;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #21222c;
|
|
36
32
|
--app-alt-layer-two: #373a4e;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #282a36;
|
|
42
38
|
--app-default-text-color: #f8f8f2;
|
|
43
39
|
--app-default-alt-text-color: #e8e8e2;
|
|
44
|
-
--app-default-bg-color: #282a36;
|
|
45
40
|
--app-default-link-color: #bd93f9;
|
|
46
41
|
--app-default-link-hover-color: #ff79c6;
|
|
47
|
-
--app-default-link-active-color: #50fa7b;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #282a36;
|
|
50
44
|
--app-side-navigation-text-color: #f8f8f2;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #bd93f9;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #282a36;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #282a36;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
:root {
|
|
2
|
-
--app-dark: #6272a4;
|
|
3
|
-
--app-light: #f8f8f2;
|
|
4
|
-
|
|
5
2
|
--app-primary: #bd93f9;
|
|
6
3
|
--app-primary-soft: #f0ebfd;
|
|
7
4
|
--app-primary-dark: #9580d4;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #f0f0ea;
|
|
31
28
|
--app-layer-three: #e8e8e2;
|
|
32
29
|
--app-layer-four: #d0d0ca;
|
|
33
|
-
--app-layer-five: #b8b8b2;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #ffffff;
|
|
36
32
|
--app-alt-layer-two: #f5f5f0;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #f8f8f2;
|
|
42
38
|
--app-default-text-color: #44475a;
|
|
43
39
|
--app-default-alt-text-color: #6272a4;
|
|
44
|
-
--app-default-bg-color: #f8f8f2;
|
|
45
40
|
--app-default-link-color: #bd93f9;
|
|
46
41
|
--app-default-link-hover-color: #ff79c6;
|
|
47
|
-
--app-default-link-active-color: #50fa7b;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #6272a4;
|
|
50
44
|
--app-side-navigation-text-color: #f8f8f2;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #bd93f9;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #44475a;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #f8f8f2;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
[data-theme="dark"] {
|
|
2
|
-
--app-dark: #282828;
|
|
3
|
-
--app-light: #ebdbb2;
|
|
4
|
-
|
|
5
2
|
--app-primary: #fabd2f;
|
|
6
3
|
--app-primary-soft: #3c3836;
|
|
7
4
|
--app-primary-dark: #d79921;
|
|
@@ -30,7 +27,6 @@
|
|
|
30
27
|
--app-layer-two: #3c3836;
|
|
31
28
|
--app-layer-three: #504945;
|
|
32
29
|
--app-layer-four: #665c54;
|
|
33
|
-
--app-layer-five: #7c6f64;
|
|
34
30
|
|
|
35
31
|
--app-alt-layer-one: #1d2021;
|
|
36
32
|
--app-alt-layer-two: #32302f;
|
|
@@ -41,10 +37,8 @@
|
|
|
41
37
|
--app-default-button-text-color: #282828;
|
|
42
38
|
--app-default-text-color: #ebdbb2;
|
|
43
39
|
--app-default-alt-text-color: #d5c4a1;
|
|
44
|
-
--app-default-bg-color: #282828;
|
|
45
40
|
--app-default-link-color: #fabd2f;
|
|
46
41
|
--app-default-link-hover-color: #fe8019;
|
|
47
|
-
--app-default-link-active-color: #b8bb26;
|
|
48
42
|
|
|
49
43
|
--app-side-navigation-bg-color: #1d2021;
|
|
50
44
|
--app-side-navigation-text-color: #ebdbb2;
|
|
@@ -52,7 +46,6 @@
|
|
|
52
46
|
--app-side-navigation-link-hover-color: #fabd2f;
|
|
53
47
|
--app-side-navigation-width: 200px;
|
|
54
48
|
|
|
55
|
-
--app-mobile-navigation-bg-color: #282828;
|
|
56
49
|
--app-mobile-navigation-width: 200px;
|
|
57
50
|
|
|
58
51
|
--app-top-navigation-bg-color: #1d2021;
|