mirror of
https://github.com/ParisNeo/lollms-webui.git
synced 2025-04-04 17:39:15 +00:00
Upgraded ui and fixed docker
This commit is contained in:
parent
3c9da01b63
commit
3261f6087c
3
.env.example
Normal file
3
.env.example
Normal file
@ -0,0 +1,3 @@
|
||||
# Select one binding: elf, openrouter, openai, groq, mistralai, ollama, vllm, litellm,
|
||||
# exllamav2, python_llama_cpp, huggingface, remote_lollms, xAI, gemini
|
||||
BINDING=python_llama_cpp
|
64
Dockerfile
64
Dockerfile
@ -1,46 +1,36 @@
|
||||
# Use an official Python runtime as a parent image
|
||||
FROM python:3.11-slim
|
||||
|
||||
# Set the working directory in the container
|
||||
WORKDIR /app
|
||||
|
||||
# Install system dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
git \
|
||||
curl \
|
||||
# Add retry logic and include OpenGL libraries
|
||||
RUN apt-get update --option Acquire::Retries=5 \
|
||||
&& apt-get install -y --no-install-recommends \
|
||||
git \
|
||||
build-essential \
|
||||
xauth \
|
||||
libgl1 \
|
||||
libglib2.0-0 \
|
||||
libsm6 \
|
||||
libxext6 \
|
||||
libxrender-dev \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install Miniconda
|
||||
RUN curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh \
|
||||
&& bash Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda \
|
||||
&& rm Miniconda3-latest-Linux-x86_64.sh
|
||||
# Set working directory
|
||||
WORKDIR /app
|
||||
|
||||
# Add Conda to PATH
|
||||
ENV PATH /opt/conda/bin:$PATH
|
||||
# Clone LoLLMs-webui repository with submodules
|
||||
RUN git clone --recursive https://github.com/ParisNeo/lollms-webui.git . && \
|
||||
git submodule update --init --recursive
|
||||
|
||||
# Create and activate Conda environment
|
||||
RUN conda create --name lollms_env python=3.11 git pip -y
|
||||
SHELL ["conda", "run", "-n", "lollms_env", "/bin/bash", "-c"]
|
||||
# Install Python dependencies
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
RUN pip install torch
|
||||
RUN pip install -e lollms_core
|
||||
RUN echo "lollms_path: /app/lollms-webui/lollms_core/lollms\nlollms_personal_path: /app/personal_data" > /app/global_paths_cfg.yaml
|
||||
|
||||
# Clone the repository
|
||||
RUN git clone --depth 1 --recurse-submodules https://github.com/ParisNeo/lollms-webui.git \
|
||||
&& cd lollms-webui/lollms_core \
|
||||
&& pip install -e . \
|
||||
&& cd ../.. \
|
||||
&& cd lollms-webui/utilities/pipmaster \
|
||||
&& pip install -e . \
|
||||
&& cd ../..
|
||||
|
||||
# Install project dependencies
|
||||
WORKDIR /app/lollms-webui
|
||||
COPY requirements.txt .
|
||||
RUN pip install -r requirements.txt
|
||||
|
||||
# Copy the rest of the application code
|
||||
COPY . .
|
||||
|
||||
# Expose port 9600
|
||||
# Expose default web UI port
|
||||
EXPOSE 9600
|
||||
|
||||
# Set the default command to run the application
|
||||
CMD ["python", "app.py"]
|
||||
# Set the entrypoint to our start script
|
||||
CMD ["python", "/app/app.py","--host","0.0.0.0"]
|
||||
|
||||
|
||||
|
@ -1,11 +1,22 @@
|
||||
version: '3'
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
lollms-webui:
|
||||
build: .
|
||||
build:
|
||||
context: .
|
||||
dockerfile: Dockerfile
|
||||
ports:
|
||||
- "9600:9600"
|
||||
- "${PORT:-9621}:9621"
|
||||
volumes:
|
||||
- ./lollms-webui:/app/lollms-webui
|
||||
environment:
|
||||
- PYTHONUNBUFFERED=1
|
||||
command: python app.py
|
||||
- ./personal_data:/app/personal_data # For configurations and user data
|
||||
- ./models:/app/models # For model storage
|
||||
- ./custom_personalities:/app/custom_personalities # For custom personalities
|
||||
restart: unless-stopped
|
||||
# Add GPU support if needed
|
||||
deploy:
|
||||
resources:
|
||||
reservations:
|
||||
devices:
|
||||
- driver: nvidia
|
||||
count: all
|
||||
capabilities: [gpu]
|
||||
|
17
web/dist/assets/index-BIdoK8Yo.css
vendored
17
web/dist/assets/index-BIdoK8Yo.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
17
web/dist/assets/index-D-1JTBOJ.css
vendored
Normal file
17
web/dist/assets/index-D-1JTBOJ.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
web/dist/index.html
vendored
4
web/dist/index.html
vendored
@ -6,8 +6,8 @@
|
||||
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-svg.js"></script>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>LoLLMS WebUI</title>
|
||||
<script type="module" crossorigin src="/assets/index-DD1gUR26.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-BIdoK8Yo.css">
|
||||
<script type="module" crossorigin src="/assets/index-BQ9rK9Ub.js"></script>
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-D-1JTBOJ.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
|
@ -1367,7 +1367,7 @@ export default {
|
||||
"There are more possible ways to shuffle a deck of 52 cards than there are atoms on Earth.",
|
||||
"The first computer virus was created in 1983 as an experiment.",
|
||||
"The speed of light in a vacuum is exactly 299,792,458 meters per second.",
|
||||
|
||||
"In version 18 (Matrix), the changelog contained a binary secret message from ParisNeo.\nDid you get it?\nIt meant THERE IS NO SPOON, the matirx's famous scene.",
|
||||
"ParisNeo started coding at age 11 after an older programmer refused to teach him BASIC programming",
|
||||
"ParisNeo learned BASIC by reverse engineering other people's games, even before he learned English",
|
||||
"At age 12, ParisNeo co-created SAIF14, a suite of programs on a Tandy 1000 computer built by two kids",
|
||||
|
@ -357,7 +357,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.use_user_name_in_discussions"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -368,7 +368,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.use_assistant_name_in_discussion"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -379,7 +379,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.use_model_name_in_discussions"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -390,7 +390,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.use_user_informations_in_discussion"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -408,7 +408,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.debug"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -419,7 +419,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.debug_show_final_full_prompt"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -430,7 +430,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.debug_show_chunks"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -448,7 +448,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_update"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -459,7 +459,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_sync_personalities"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -470,7 +470,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_sync_extensions"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -481,7 +481,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_sync_bindings"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -492,7 +492,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_sync_models"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -545,7 +545,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_title"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -561,7 +561,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.auto_show_browser"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -580,8 +580,8 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.force_accept_remote_access"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-red-500">
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
</div>
|
||||
@ -607,7 +607,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.copy_to_clipboard_add_all_details"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -620,7 +620,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.headless_server_mode"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -774,7 +774,8 @@
|
||||
id="use_continue_message"
|
||||
v-model="configFile.use_continue_message"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer">
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label for="use_continue_message"
|
||||
class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer">
|
||||
</label>
|
||||
@ -919,7 +920,8 @@
|
||||
required
|
||||
v-model="configFile.turn_on_code_execution"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox"
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -936,7 +938,8 @@
|
||||
required
|
||||
v-model="configFile.turn_on_code_validation"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox"
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -953,7 +956,8 @@
|
||||
required
|
||||
v-model="configFile.turn_on_setting_update_validation"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox"
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -969,7 +973,8 @@
|
||||
required
|
||||
v-model="configFile.turn_on_open_file_validation"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox"
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -985,7 +990,8 @@
|
||||
required
|
||||
v-model="configFile.turn_on_send_file_validation"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox"
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
@ -1238,7 +1244,7 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.datalakes[index].mounted"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
@ -1395,15 +1401,15 @@
|
||||
<input type="checkbox"
|
||||
v-model="configFile.rag_local_services[index].start_at_startup"
|
||||
@change="settingsChanged=true"
|
||||
class="toggle-checkbox absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
class="absolute block w-6 h-6 rounded-full bg-white border-4 appearance-none cursor-pointer
|
||||
transition-transform duration-200 ease-in-out checked:translate-x-6 checked:bg-blue-500">
|
||||
<label class="toggle-label block overflow-hidden h-6 rounded-full bg-gray-300 dark:bg-gray-600 cursor-pointer"></label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<input type="file" ref="fileInput" @change="handleFileUpload"
|
||||
<input type="file" ref="fileInput2" @change="handleFileUpload"
|
||||
accept=".pdf,.txt,.doc,.docx,.csv,.md" class="hidden" multiple />
|
||||
|
||||
<button @click="triggerFileInput"
|
||||
@ -4401,20 +4407,6 @@
|
||||
/>
|
||||
</template>
|
||||
<style scoped>
|
||||
.toggle-checkbox {
|
||||
@apply appearance-none w-9 h-5 rounded-full bg-gray-300 dark:bg-gray-600
|
||||
checked:bg-blue-500 transition-colors duration-200 relative cursor-pointer;
|
||||
}
|
||||
|
||||
.toggle-checkbox:before {
|
||||
content: '';
|
||||
@apply absolute w-4 h-4 bg-white rounded-full left-0.5 top-0.5
|
||||
transform transition-transform duration-200;
|
||||
}
|
||||
|
||||
.toggle-checkbox:checked:before {
|
||||
@apply translate-x-4;
|
||||
}
|
||||
.input-field {
|
||||
@apply w-full px-3 py-2 bg-white dark:bg-gray-700 border border-gray-300 dark:border-gray-600 rounded-md shadow-sm focus:ring-2 focus:ring-blue-500 focus:border-transparent dark:text-white transition-colors duration-200;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user