Upload files to "/"

This commit is contained in:
2026-01-17 15:48:31 +00:00
parent 312fd9702b
commit 7e5186aeab
3 changed files with 1018 additions and 1018 deletions

View File

@@ -1,10 +1,10 @@
# LittleWhiteBox # LittleWhiteBox
SillyTavern 扩展插件 - 小白X SillyTavern 扩展插件 - 小白X
## 📁 目录结构 ## 📁 目录结构
``` ```
LittleWhiteBox/ LittleWhiteBox/
├── index.js # 主入口,初始化所有模块,管理总开关 ├── index.js # 主入口,初始化所有模块,管理总开关
├── manifest.json # 插件清单,版本、依赖声明 ├── manifest.json # 插件清单,版本、依赖声明
@@ -78,12 +78,12 @@ LittleWhiteBox/
├── LICENSE.md # 许可证 ├── LICENSE.md # 许可证
└── NOTICE # 通知 └── NOTICE # 通知
``` ```
## 🔄 版本历史 ## 🔄 版本历史
- v2.2.2 - 目录结构重构2025-12-08 - v2.2.2 - 目录结构重构2025-12-08
## 📄 许可证 ## 📄 许可证
详见 `docs/LICENSE.md` 详见 `docs/LICENSE.md`

File diff suppressed because it is too large Load Diff

942
style.css
View File

@@ -1,471 +1,471 @@
/* ==================== 基础工具样式 ==================== */ /* ==================== 基础工具样式 ==================== */
pre:has(+ .xiaobaix-iframe) { pre:has(+ .xiaobaix-iframe) {
display: none; display: none;
} }
/* ==================== 循环任务样式 ==================== */ /* ==================== 循环任务样式 ==================== */
.task-container { .task-container {
margin-top: 10px; margin-top: 10px;
margin-bottom: 10px; margin-bottom: 10px;
} }
.task-container:empty::after { .task-container:empty::after {
content: "No tasks found"; content: "No tasks found";
font-size: 0.95em; font-size: 0.95em;
opacity: 0.7; opacity: 0.7;
display: block; display: block;
text-align: center; text-align: center;
} }
.scheduled-tasks-embedded-warning { .scheduled-tasks-embedded-warning {
padding: 15px; padding: 15px;
background: var(--SmartThemeBlurTintColor); background: var(--SmartThemeBlurTintColor);
border: 1px solid var(--SmartThemeBorderColor); border: 1px solid var(--SmartThemeBorderColor);
border-radius: 8px; border-radius: 8px;
margin: 10px 0; margin: 10px 0;
} }
.warning-note { .warning-note {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 8px; gap: 8px;
margin-top: 10px; margin-top: 10px;
padding: 8px; padding: 8px;
background: rgba(255, 193, 7, 0.1); background: rgba(255, 193, 7, 0.1);
border-left: 3px solid #ffc107; border-left: 3px solid #ffc107;
border-radius: 4px; border-radius: 4px;
} }
.task-item { .task-item {
align-items: center; align-items: center;
border: 1px solid var(--SmartThemeBorderColor); border: 1px solid var(--SmartThemeBorderColor);
border-radius: 10px; border-radius: 10px;
padding: 0 5px; padding: 0 5px;
margin-top: 1px; margin-top: 1px;
margin-bottom: 1px; margin-bottom: 1px;
} }
.task-item:has(.disable_task:checked) .task_name { .task-item:has(.disable_task:checked) .task_name {
text-decoration: line-through; text-decoration: line-through;
filter: grayscale(0.5); filter: grayscale(0.5);
} }
.task_name { .task_name {
font-weight: normal; font-weight: normal;
color: var(--SmartThemeEmColor); color: var(--SmartThemeEmColor);
font-size: 0.9em; font-size: 0.9em;
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
} }
.drag-handle { .drag-handle {
cursor: grab; cursor: grab;
color: var(--SmartThemeQuoteColor); color: var(--SmartThemeQuoteColor);
margin-right: 8px; margin-right: 8px;
user-select: none; user-select: none;
} }
.drag-handle:active { .drag-handle:active {
cursor: grabbing; cursor: grabbing;
} }
.checkbox { .checkbox {
align-items: center; align-items: center;
} }
.task_editor { .task_editor {
width: 100%; width: 100%;
} }
.task_editor .flex-container { .task_editor .flex-container {
gap: 10px; gap: 10px;
} }
.task_editor textarea { .task_editor textarea {
font-family: 'Courier New', monospace; font-family: 'Courier New', monospace;
} }
input.disable_task { input.disable_task {
display: none !important; display: none !important;
} }
.task-toggle-off { .task-toggle-off {
cursor: pointer; cursor: pointer;
opacity: 0.5; opacity: 0.5;
filter: grayscale(0.5); filter: grayscale(0.5);
transition: opacity 0.2s ease-in-out; transition: opacity 0.2s ease-in-out;
} }
.task-toggle-off:hover { .task-toggle-off:hover {
opacity: 1; opacity: 1;
filter: none; filter: none;
} }
.task-toggle-on { .task-toggle-on {
cursor: pointer; cursor: pointer;
} }
.disable_task:checked~.task-toggle-off { .disable_task:checked~.task-toggle-off {
display: block; display: block;
} }
.disable_task:checked~.task-toggle-on { .disable_task:checked~.task-toggle-on {
display: none; display: none;
} }
.disable_task:not(:checked)~.task-toggle-off { .disable_task:not(:checked)~.task-toggle-off {
display: none; display: none;
} }
.disable_task:not(:checked)~.task-toggle-on { .disable_task:not(:checked)~.task-toggle-on {
display: block; display: block;
} }
/* ==================== 沉浸式显示模式样式 ==================== */ /* ==================== 沉浸式显示模式样式 ==================== */
body.immersive-mode #chat { body.immersive-mode #chat {
padding: 0 !important; padding: 0 !important;
border: 0px !important; border: 0px !important;
overflow-y: auto; overflow-y: auto;
margin: 0 0px 0px 4px !important; margin: 0 0px 0px 4px !important;
scrollbar-width: thin; scrollbar-width: thin;
scrollbar-gutter: auto; scrollbar-gutter: auto;
} }
.xiaobaix-top-group { .xiaobaix-top-group {
margin-top: 1em !important; margin-top: 1em !important;
} }
@media screen and (min-width: 1001px) { @media screen and (min-width: 1001px) {
body.immersive-mode #chat { body.immersive-mode #chat {
scrollbar-width: none; scrollbar-width: none;
-ms-overflow-style: none; -ms-overflow-style: none;
/* IE and Edge */ /* IE and Edge */
} }
body.immersive-mode #chat::-webkit-scrollbar { body.immersive-mode #chat::-webkit-scrollbar {
display: none; display: none;
} }
} }
body.immersive-mode .mesAvatarWrapper { body.immersive-mode .mesAvatarWrapper {
margin-top: 1em; margin-top: 1em;
padding-bottom: 0px; padding-bottom: 0px;
} }
body.immersive-mode .swipe_left, body.immersive-mode .swipe_left,
body.immersive-mode .swipeRightBlock { body.immersive-mode .swipeRightBlock {
display: none !important; display: none !important;
} }
body.immersive-mode .mes { body.immersive-mode .mes {
margin: 2% 0 0% 0 !important; margin: 2% 0 0% 0 !important;
} }
body.immersive-mode .ch_name { body.immersive-mode .ch_name {
padding-bottom: 5px; padding-bottom: 5px;
border-bottom: 0.5px dashed color-mix(in srgb, var(--SmartThemeEmColor) 30%, transparent); border-bottom: 0.5px dashed color-mix(in srgb, var(--SmartThemeEmColor) 30%, transparent);
} }
body.immersive-mode .mes_block { body.immersive-mode .mes_block {
padding-left: 0 !important; padding-left: 0 !important;
margin: 0 0 5px 0 !important; margin: 0 0 5px 0 !important;
} }
body.immersive-mode .mes_text { body.immersive-mode .mes_text {
padding: 0px !important; padding: 0px !important;
max-width: 100%; max-width: 100%;
width: 100%; width: 100%;
margin-top: 5px; margin-top: 5px;
} }
body.immersive-mode .mes { body.immersive-mode .mes {
width: 99%; width: 99%;
margin: 0 0.5%; margin: 0 0.5%;
padding: 0px !important; padding: 0px !important;
} }
body.immersive-mode .mes_buttons, body.immersive-mode .mes_buttons,
body.immersive-mode .mes_edit_buttons { body.immersive-mode .mes_edit_buttons {
position: absolute !important; position: absolute !important;
top: 0 !important; top: 0 !important;
right: 0 !important; right: 0 !important;
} }
body.immersive-mode .mes_buttons { body.immersive-mode .mes_buttons {
height: 20px; height: 20px;
overflow-x: clip; overflow-x: clip;
} }
body.immersive-mode .swipes-counter { body.immersive-mode .swipes-counter {
padding-left: 0px; padding-left: 0px;
margin-bottom: 0 !important; margin-bottom: 0 !important;
} }
body.immersive-mode .flex-container.flex1.alignitemscenter { body.immersive-mode .flex-container.flex1.alignitemscenter {
min-height: 32px; min-height: 32px;
} }
.immersive-navigation { .immersive-navigation {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
align-items: flex-end; align-items: flex-end;
margin-top: 5px; margin-top: 5px;
opacity: 0.7; opacity: 0.7;
} }
.immersive-nav-btn { .immersive-nav-btn {
color: var(--SmartThemeBodyColor); color: var(--SmartThemeBodyColor);
cursor: pointer; cursor: pointer;
transition: all 0.2s ease; transition: all 0.2s ease;
background: none; background: none;
border: none; border: none;
font-size: 12px; font-size: 12px;
} }
.immersive-nav-btn:hover:not(:disabled) { .immersive-nav-btn:hover:not(:disabled) {
background-color: rgba(var(--SmartThemeBodyColor), 0.2); background-color: rgba(var(--SmartThemeBodyColor), 0.2);
transform: scale(1.1); transform: scale(1.1);
} }
.immersive-nav-btn:disabled { .immersive-nav-btn:disabled {
opacity: 0.3; opacity: 0.3;
cursor: not-allowed; cursor: not-allowed;
} }
/* ==================== 模板编辑器样式 ==================== */ /* ==================== 模板编辑器样式 ==================== */
.xiaobai_template_editor { .xiaobai_template_editor {
max-height: 80vh; max-height: 80vh;
overflow-y: auto; overflow-y: auto;
padding: 20px; padding: 20px;
border-radius: 8px; border-radius: 8px;
} }
.template-replacer-header { .template-replacer-header {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: space-between; justify-content: space-between;
margin-bottom: 10px; margin-bottom: 10px;
} }
.template-replacer-title { .template-replacer-title {
font-weight: bold; font-weight: bold;
color: var(--SmartThemeEmColor, #007bff); color: var(--SmartThemeEmColor, #007bff);
} }
.template-replacer-controls { .template-replacer-controls {
display: flex; display: flex;
align-items: center; align-items: center;
gap: 15px; gap: 15px;
} }
.template-replacer-status { .template-replacer-status {
font-size: 12px; font-size: 12px;
color: var(--SmartThemeQuoteColor, #888); color: var(--SmartThemeQuoteColor, #888);
font-style: italic; font-style: italic;
} }
.template-replacer-status.has-settings { .template-replacer-status.has-settings {
color: var(--SmartThemeEmColor, #007bff); color: var(--SmartThemeEmColor, #007bff);
} }
.template-replacer-status.no-character { .template-replacer-status.no-character {
color: var(--SmartThemeCheckboxBgColor, #666); color: var(--SmartThemeCheckboxBgColor, #666);
} }
/* ==================== 消息预览插件样式 ==================== */ /* ==================== 消息预览插件样式 ==================== */
#message_preview_btn { #message_preview_btn {
width: var(--bottomFormBlockSize); width: var(--bottomFormBlockSize);
height: var(--bottomFormBlockSize); height: var(--bottomFormBlockSize);
margin: 0; margin: 0;
border: none; border: none;
cursor: pointer; cursor: pointer;
opacity: 0.7; opacity: 0.7;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
transition: opacity 300ms; transition: opacity 300ms;
color: var(--SmartThemeBodyColor); color: var(--SmartThemeBodyColor);
font-size: var(--bottomFormIconSize); font-size: var(--bottomFormIconSize);
} }
#message_preview_btn:hover { #message_preview_btn:hover {
opacity: 1; opacity: 1;
filter: brightness(1.2); filter: brightness(1.2);
} }
.message-preview-content-box { .message-preview-content-box {
font-family: 'Courier New', 'Monaco', 'Menlo', monospace; font-family: 'Courier New', 'Monaco', 'Menlo', monospace;
white-space: pre-wrap; white-space: pre-wrap;
max-height: 82vh; max-height: 82vh;
overflow-y: auto; overflow-y: auto;
padding: 15px; padding: 15px;
background: #000000 !important; background: #000000 !important;
border: 1px solid var(--SmartThemeBorderColor); border: 1px solid var(--SmartThemeBorderColor);
border-radius: 5px; border-radius: 5px;
color: #ffffff !important; color: #ffffff !important;
font-size: 12px; font-size: 12px;
line-height: 1.4; line-height: 1.4;
text-align: left; text-align: left;
padding-bottom: 80px; padding-bottom: 80px;
} }
.mes_history_preview { .mes_history_preview {
opacity: 0.6; opacity: 0.6;
transition: opacity 0.2s ease-in-out; transition: opacity 0.2s ease-in-out;
} }
.mes_history_preview:hover { .mes_history_preview:hover {
opacity: 1; opacity: 1;
} }
/* ==================== 设置菜单和标签样式 ==================== */ /* ==================== 设置菜单和标签样式 ==================== */
.menu-tab { .menu-tab {
flex: 1; flex: 1;
padding: 2px 8px; padding: 2px 8px;
text-align: center; text-align: center;
cursor: pointer; cursor: pointer;
color: #ccc; color: #ccc;
border: none; border: none;
transition: color 0.2s ease; transition: color 0.2s ease;
font-weight: 500; font-weight: 500;
} }
.menu-tab:hover { .menu-tab:hover {
color: #fff; color: #fff;
} }
.menu-tab.active { .menu-tab.active {
color: #007acc; color: #007acc;
border-bottom: 2px solid #007acc; border-bottom: 2px solid #007acc;
} }
.settings-section { .settings-section {
padding: 10px 0; padding: 10px 0;
} }
/* ==================== Wallhaven自定义标签样式 ==================== */ /* ==================== Wallhaven自定义标签样式 ==================== */
.custom-tags-container { .custom-tags-container {
margin-top: 10px; margin-top: 10px;
} }
.custom-tags-list { .custom-tags-list {
display: flex; display: flex;
flex-wrap: wrap; flex-wrap: wrap;
gap: 8px; gap: 8px;
margin-top: 8px; margin-top: 8px;
min-height: 20px; min-height: 20px;
padding: 8px; padding: 8px;
background: #2a2a2a; background: #2a2a2a;
border-radius: 4px; border-radius: 4px;
border: 1px solid #444; border: 1px solid #444;
} }
.custom-tag-item { .custom-tag-item {
display: flex; display: flex;
align-items: center; align-items: center;
background: #007acc; background: #007acc;
color: white; color: white;
padding: 4px 8px; padding: 4px 8px;
border-radius: 12px; border-radius: 12px;
font-size: 12px; font-size: 12px;
gap: 6px; gap: 6px;
} }
.custom-tag-text { .custom-tag-text {
font-weight: 500; font-weight: 500;
} }
.custom-tag-remove { .custom-tag-remove {
cursor: pointer; cursor: pointer;
color: rgba(255, 255, 255, 0.8); color: rgba(255, 255, 255, 0.8);
font-weight: bold; font-weight: bold;
transition: color 0.2s ease; transition: color 0.2s ease;
} }
.custom-tag-remove:hover { .custom-tag-remove:hover {
color: #ff6b6b; color: #ff6b6b;
} }
.custom-tags-empty { .custom-tags-empty {
color: #888; color: #888;
font-style: italic; font-style: italic;
font-size: 12px; font-size: 12px;
text-align: center; text-align: center;
padding: 8px; padding: 8px;
} }
.task_editor .menu_button{ .task_editor .menu_button{
white-space: nowrap; white-space: nowrap;
} }
.message-preview-content-box:hover::-webkit-scrollbar-thumb, .message-preview-content-box:hover::-webkit-scrollbar-thumb,
.xiaobai_template_editor:hover::-webkit-scrollbar-thumb { .xiaobai_template_editor:hover::-webkit-scrollbar-thumb {
background: var(--SmartThemeAccent); background: var(--SmartThemeAccent);
} }
/* ==================== 滚动条样式 ==================== */ /* ==================== 滚动条样式 ==================== */
.message-preview-content-box::-webkit-scrollbar, .message-preview-content-box::-webkit-scrollbar,
.xiaobai_template_editor::-webkit-scrollbar { .xiaobai_template_editor::-webkit-scrollbar {
width: 5px; width: 5px;
} }
.message-preview-content-box::-webkit-scrollbar-track, .message-preview-content-box::-webkit-scrollbar-track,
.xiaobai_template_editor::-webkit-scrollbar-track { .xiaobai_template_editor::-webkit-scrollbar-track {
background: var(--SmartThemeBlurTintColor); background: var(--SmartThemeBlurTintColor);
border-radius: 3px; border-radius: 3px;
} }
.message-preview-content-box::-webkit-scrollbar-thumb, .message-preview-content-box::-webkit-scrollbar-thumb,
.xiaobai_template_editor::-webkit-scrollbar-thumb { .xiaobai_template_editor::-webkit-scrollbar-thumb {
background: var(--SmartThemeBorderColor); background: var(--SmartThemeBorderColor);
border-radius: 3px; border-radius: 3px;
} }
/* ==================== Story Outline PromptManager 编辑表单 ==================== */ /* ==================== Story Outline PromptManager 编辑表单 ==================== */
/* 当编辑 lwb_story_outline 条目时,隐藏名称输入框和内容编辑区 */ /* 当编辑 lwb_story_outline 条目时,隐藏名称输入框和内容编辑区 */
.completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_name { .completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_name {
pointer-events: none; pointer-events: none;
user-select: none; user-select: none;
} }
.1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_prompt { .1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) #completion_prompt_manager_popup_entry_form_prompt {
display: none !important; display: none !important;
} }
/* 显示"内容来自外部"的提示 */ /* 显示"内容来自外部"的提示 */
.1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) .completion_prompt_manager_popup_entry_form_control:has(#completion_prompt_manager_popup_entry_form_prompt)::after { .1completion_prompt_manager_popup_entry_form:has([data-pm-prompt="lwb_story_outline"]) .completion_prompt_manager_popup_entry_form_control:has(#completion_prompt_manager_popup_entry_form_prompt)::after {
content: "此提示词的内容来自「LittleWhiteBox」请在小白板中修改哦"; content: "此提示词的内容来自「LittleWhiteBox」请在小白板中修改哦";
display: block; display: block;
padding: 12px; padding: 12px;
margin-top: 8px; margin-top: 8px;
border: 1px solid var(--SmartThemeBorderColor); border: 1px solid var(--SmartThemeBorderColor);
color: var(--SmartThemeEmColor); color: var(--SmartThemeEmColor);
text-align: center; text-align: center;
} }
/* 隐藏 lwb_story_outline 条目的 Remove 按钮(保留占位) */ /* 隐藏 lwb_story_outline 条目的 Remove 按钮(保留占位) */
.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .prompt-manager-detach-action { .completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .prompt-manager-detach-action {
visibility: hidden !important; visibility: hidden !important;
} }
.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk { .completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk {
visibility: hidden !important; visibility: hidden !important;
position: relative; position: relative;
} }
.completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk::after { .completion_prompt_manager_prompt[data-pm-identifier="lwb_story_outline"] .fa-fw.fa-solid.fa-asterisk::after {
content: "\f00d"; content: "\f00d";
/* fa-xmark 的 unicode */ /* fa-xmark 的 unicode */
font-family: "Font Awesome 6 Free"; font-family: "Font Awesome 6 Free";
visibility: visible; visibility: visible;
position: absolute; position: absolute;
left: 0; left: 0;
font-size: 1.2em; font-size: 1.2em;
} }
#completion_prompt_manager_footer_append_prompt option[value="lwb_story_outline"] { #completion_prompt_manager_footer_append_prompt option[value="lwb_story_outline"] {
display: none; display: none;
} }