- fix charPanel div heights - fix noHotswap area height & flex dir

506e2f2c6f186fb30a0fff6ce80c54b732e8cd2d

RossAscends <124905043+RossAscends@users.noreply.github.com>

6 files changed, +59 -21Ignore whitespace
public/css/st-tailwind.css+5 -1
@@ -332,6 +332,10 @@
332 overflow: hidden;332 overflow: hidden;
333}333}
334334
335.overflowYScroll {
336 overflow-y: scroll;
337}
338
335.padding0 {339.padding0 {
336 padding: 0;340 padding: 0;
337}341}
@@ -614,4 +618,4 @@ ul.li-padding-bot10 li {
614618
615.wordBreakAll {619.wordBreakAll {
616 word-break: break-all;620 word-break: break-all;
617}621}
\ No newline at end of file621 \ No newline at end of file
public/css/toggle-dependent.css+8 -1
@@ -19,6 +19,7 @@ body:not(.tts) #ttsExtensionNarrateAll {
19}19}
2020
21body.no-hotswap .hotswap,21body.no-hotswap .hotswap,
22body.no-hotswap .hotswap~hr,
22body.no-timer .mes_timer,23body.no-timer .mes_timer,
23body.no-timestamps .timestamp,24body.no-timestamps .timestamp,
24body.no-tokenCount .tokenCounterDisplay,25body.no-tokenCount .tokenCounterDisplay,
@@ -28,6 +29,12 @@ body.hideChatAvatars .mesAvatarWrapper .avatar {
28 display: none !important;29 display: none !important;
29}30}
3031
32body.no-hotswap #CharListButtonAndHotSwaps .flex-container {
33 flex-wrap: nowrap;
34 align-items: flex-end;
35 flex-flow: row;
36}
37
31body.hideChatAvatars .last_mes:not(.smallSysMes) {38body.hideChatAvatars .last_mes:not(.smallSysMes) {
32 padding-bottom: 20px !important;39 padding-bottom: 20px !important;
33}40}
@@ -521,4 +528,4 @@ label[for="trim_spaces"]:not(:has(input:checked)) small {
521528
522label[for="bind_preset_to_connection"]:has(input:checked) {529label[for="bind_preset_to_connection"]:has(input:checked) {
523 color: var(--active);530 color: var(--active);
524}531}
\ No newline at end of file531 \ No newline at end of file
public/index.html+19 -17
@@ -140,7 +140,7 @@
140 <div data-preset-manager-import="novel" class="margin0 menu_button_icon menu_button" title="Import preset" data-i18n="[title]Import preset">140 <div data-preset-manager-import="novel" class="margin0 menu_button_icon menu_button" title="Import preset" data-i18n="[title]Import preset">
141 <i class="fa-fw fa-solid fa-file-import"></i>141 <i class="fa-fw fa-solid fa-file-import"></i>
142 </div>142 </div>
143 <div data-preset-manager-export="novel" class="margin0 menu_button_icon menu_button" title="Export preset" data-i18n="[title]Export preset">143 <div data-preset-manager-export="novel" class="margin0 menu_button_icon menu_button" title="Export preset" data-i18n="[title]Export preset">
144 <i class="fa-fw fa-solid fa-file-export"></i>144 <i class="fa-fw fa-solid fa-file-export"></i>
145 </div>145 </div>
146 <div data-preset-manager-delete="novel" class="margin0 menu_button_icon menu_button" title="Delete the preset" data-i18n="[title]Delete the preset">146 <div data-preset-manager-delete="novel" class="margin0 menu_button_icon menu_button" title="Delete the preset" data-i18n="[title]Delete the preset">
@@ -663,7 +663,7 @@
663 <div data-source="openrouter" class="range-block">663 <div data-source="openrouter" class="range-block">
664 <div class="range-block-title" title="Allow compressing requests by removing messages from the middle of the prompt.">664 <div class="range-block-title" title="Allow compressing requests by removing messages from the middle of the prompt.">
665 <span data-i18n="Middle-out Transform">Middle-out Transform</span>665 <span data-i18n="Middle-out Transform">Middle-out Transform</span>
666 <a href="https://openrouter.ai/docs/transforms" target="_blank" rel="noreferrer noopener" class="note-link-span fa-solid fa-circle-question"></a>666 <a href="https://openrouter.ai/docs/transforms" target="_blank" rel="noreferrer noopener" class="note-link-span fa-solid fa-circle-question"></a>
667 </div>667 </div>
668 <div class="wide100p">668 <div class="wide100p">
669 <select id="openrouter_middleout" class="text_pole">669 <select id="openrouter_middleout" class="text_pole">
@@ -3300,16 +3300,16 @@
3300 <span id="vertexai_service_account_info"></span>3300 <span id="vertexai_service_account_info"></span>
3301 </div>3301 </div>
3302 <textarea id="vertexai_service_account_json" class="text_pole textarea_compact" rows="4" placeholder='Paste your Service Account JSON content here, e.g.:3302 <textarea id="vertexai_service_account_json" class="text_pole textarea_compact" rows="4" placeholder='Paste your Service Account JSON content here, e.g.:
3303{3303 {
3304 "type": "service_account",3304 "type": "service_account",
3305 "project_id": "your-project-id",3305 "project_id": "your-project-id",
3306 "private_key_id": "...",3306 "private_key_id": "...",
3307 "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",3307 "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
3308 "client_email": "...",3308 "client_email": "...",
3309 "client_id": "...",3309 "client_id": "...",
3310 "auth_uri": "https://accounts.google.com/o/oauth2/auth",3310 "auth_uri": "https://accounts.google.com/o/oauth2/auth",
3311 "token_uri": "https://oauth2.googleapis.com/token"3311 "token_uri": "https://oauth2.googleapis.com/token"
3312}'></textarea>3312 }'></textarea>
3313 <div data-for="vertexai_service_account_json" class="neutral_warning" data-i18n="For privacy reasons, your Service Account JSON content will be hidden after you reload the page.">3313 <div data-for="vertexai_service_account_json" class="neutral_warning" data-i18n="For privacy reasons, your Service Account JSON content will be hidden after you reload the page.">
3314 For privacy reasons, your Service Account JSON content will be hidden after you reload the page.3314 For privacy reasons, your Service Account JSON content will be hidden after you reload the page.
3315 </div>3315 </div>
@@ -3825,7 +3825,7 @@
3825 <input id="instruct_bind_to_context" type="checkbox" style="display:none;" />3825 <input id="instruct_bind_to_context" type="checkbox" style="display:none;" />
3826 <small><i class="fa-solid fa-link menu_button margin0"></i></small>3826 <small><i class="fa-solid fa-link menu_button margin0"></i></small>
3827 </label>3827 </label>
3828 <label id="instruct_enabled_label"for="instruct_enabled" class="checkbox_label flex1" title="Enable Instruct Mode" data-i18n="[title]instruct_enabled">3828 <label id="instruct_enabled_label" for="instruct_enabled" class="checkbox_label flex1" title="Enable Instruct Mode" data-i18n="[title]instruct_enabled">
3829 <input id="instruct_enabled" type="checkbox" style="display:none;" />3829 <input id="instruct_enabled" type="checkbox" style="display:none;" />
3830 <small><i class="fa-solid fa-power-off menu_button togglable margin0"></i></small>3830 <small><i class="fa-solid fa-power-off menu_button togglable margin0"></i></small>
3831 </label>3831 </label>
@@ -5284,7 +5284,7 @@
5284 <div class="flex-container wide100p alignitemscenter spaceBetween flexNoGap">5284 <div class="flex-container wide100p alignitemscenter spaceBetween flexNoGap">
5285 <div class="flex-container alignItemsBaseline wide100p">5285 <div class="flex-container alignItemsBaseline wide100p">
5286 <div class="flex1 flex-container alignItemsBaseline">5286 <div class="flex1 flex-container alignItemsBaseline">
5287 <h3 class="margin0" >5287 <h3 class="margin0">
5288 <span data-i18n="Persona Management">Persona Management</span>5288 <span data-i18n="Persona Management">Persona Management</span>
5289 <a href="https://docs.sillytavern.app/usage/core-concepts/personas/" target="_blank">5289 <a href="https://docs.sillytavern.app/usage/core-concepts/personas/" target="_blank">
5290 <span class="fa-solid fa-circle-question note-link-span"></span>5290 <span class="fa-solid fa-circle-question note-link-span"></span>
@@ -5455,10 +5455,12 @@
5455 <div class="right_menu_button fa-solid fa-list-ul" id="rm_button_characters" title="Select/Create Characters" data-i18n="[title]Select/Create Characters"></div>5455 <div class="right_menu_button fa-solid fa-list-ul" id="rm_button_characters" title="Select/Create Characters" data-i18n="[title]Select/Create Characters"></div>
5456 </div>5456 </div>
5457 <div id="HotSwapWrapper" class="alignitemscenter flex-container margin0auto wide100p">5457 <div id="HotSwapWrapper" class="alignitemscenter flex-container margin0auto wide100p">
5458 <div class="hotswap avatars_inline scroll-reset-container expander" data-i18n="[no_favs]Favorite characters to add them to HotSwaps" no_favs="Favorite characters to add them to HotSwaps"></div>5458 <div class="hotswap avatars_inline scroll-reset-container expander" data-i18n="[no_favs]Favorite characters to add them to HotSwaps" no_favs="Favorite characters to add them to HotSwaps">
5459 </div>
5460 <hr class="wide100p">
5459 </div>5461 </div>
5460 </div>5462 </div>
5461 <hr>5463
5462 <!-- this div structure must be preserved until group peeking can adjust -->5464 <!-- this div structure must be preserved until group peeking can adjust -->
5463 <div id="rm_PinAndTabs">5465 <div id="rm_PinAndTabs">
5464 <div id="right-nav-panel-tabs" class="">5466 <div id="right-nav-panel-tabs" class="">
@@ -7488,4 +7490,4 @@
7488 </script>7490 </script>
7489</body>7491</body>
74907492
7491</html>7493</html>
\ No newline at end of file7493 \ No newline at end of file
public/script.js+22 -0
@@ -10339,9 +10339,25 @@ export async function doNavbarIconClick() {
10339 icon.toggleClass('openIcon closedIcon');10339 icon.toggleClass('openIcon closedIcon');
10340 drawer.toggleClass('openDrawer closedDrawer');10340 drawer.toggleClass('openDrawer closedDrawer');
1034110341
10342 //commented code is to prevent scrollbars showing during transition, if we want to do that
10343 //'scrollableInner' only exists on samplers panel though, so will need different logic for each drawer
10344 //this does create an undesireable leftward width retraction of about 15px if a natural scrollbar pops after transition
10345 //however, if we don't prevent the transition scrollbar, we get a 15px expansion right when it is no longer needed
10346 //we get to pick our poison. (or...we go with just opacity transitions and stop caring about height and layout shifts.)
10347 //only true fix for this is to make scrollbars always show (overflow-y:scroll), and style them so they are transparent until div hover
10348 //this creates a 15px perma-padding on the right of the div tho, even when not needed
10349 //example of this can be seen on STMP's pastChat list
10350
10351 //drawer.find('.scrollableInner').addClass('overflowHidden'); //prevents scrollbars
10352 //await delay(250); //this duration is presumed
10353 //drawer.find('.scrollableInner').removeClass('overflowHidden'); //restore after transition
10354
10342 if (targetDrawerID === 'right-nav-panel') {10355 if (targetDrawerID === 'right-nav-panel') {
10343 favsToHotswap();10356 favsToHotswap();
10344 $('#rm_print_characters_block').trigger('scroll');10357 $('#rm_print_characters_block').trigger('scroll');
10358 const hotSwapBlockHeight = $('#CharListButtonAndHotSwaps').css('height');
10359 const heightMinusHotSwapBlockHeight = 'calc(100% - ' + hotSwapBlockHeight + ')';
10360 $('#rm_ch_create_block, #rm_characters_block').css('height', heightMinusHotSwapBlockHeight);
10345 }10361 }
1034610362
10347 // Set the height of "autoSetHeight" textareas within the drawer to their scroll height10363 // Set the height of "autoSetHeight" textareas within the drawer to their scroll height
@@ -10353,8 +10369,14 @@ export async function doNavbarIconClick() {
10353 }10369 }
10354 }10370 }
10355 } else if (drawerWasOpenAlready) {10371 } else if (drawerWasOpenAlready) {
10372
10373 //drawer.find('.scrollableInner').toggleClass('overflowHidden'); //prevents scrollbars
10374
10356 icon.toggleClass('closedIcon openIcon');10375 icon.toggleClass('closedIcon openIcon');
10357 drawer.toggleClass('closedDrawer openDrawer');10376 drawer.toggleClass('closedDrawer openDrawer');
10377
10378 //await delay(250); //this duration is presumed
10379 //drawer.find('.scrollableInner').toggleClass('overflowHidden'); //restore to default
10358 }10380 }
10359}10381}
1036010382
public/scripts/power-user.js+3 -0
@@ -453,6 +453,9 @@ function fixMarkdown(text, forDisplay) {
453function switchHotswap() {453function switchHotswap() {
454 $('body').toggleClass('no-hotswap', !power_user.hotswap_enabled);454 $('body').toggleClass('no-hotswap', !power_user.hotswap_enabled);
455 $('#hotswapEnabled').prop('checked', power_user.hotswap_enabled);455 $('#hotswapEnabled').prop('checked', power_user.hotswap_enabled);
456 const hotSwapBlockHeight = $('#CharListButtonAndHotSwaps').css('height');
457 const heightMinusHotSwapBlockHeight = 'calc(100% - ' + hotSwapBlockHeight + ')';
458 $('#rm_ch_create_block, #rm_characters_block').css('height', heightMinusHotSwapBlockHeight);
456}459}
457460
458function switchTimer() {461function switchTimer() {
public/style.css+2 -2
@@ -3369,7 +3369,7 @@ input[type=search]:focus::-webkit-search-cancel-button {
3369#form_create {3369#form_create {
3370 display: flex;3370 display: flex;
3371 flex-direction: column;3371 flex-direction: column;
3372 height: 100%;3372 height: calc(100% - var(--topBarBlockSize));
3373 overflow-y: auto;3373 overflow-y: auto;
3374 padding: 1px;3374 padding: 1px;
3375}3375}
@@ -6209,4 +6209,4 @@ body:not(.movingUI) .drawer-content.maximized {
6209.info-block.error {6209.info-block.error {
6210 border-color: var(--error-color, #e87f7f);6210 border-color: var(--error-color, #e87f7f);
6211 background-color: rgba(241, 163, 163, 0.2);6211 background-color: rgba(241, 163, 163, 0.2);
6212}6212}
\ No newline at end of file6212 \ No newline at end of file