mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-26 14:19:24 +00:00

# Description of Changes - Added the all tools sidebar - Added a TextFit component that shrinks text to fit containers - Added a TopToolIcon on the nav, that animates down to give users feedback on what tool is selected - Added the baseToolRegistry, to replace the old pattern of listing tools, allowing us to clean up the ToolRegistry code - Fixed Mantine light/dark theme race condition - General styling tweaks --- ## Checklist ### General - [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) - [ ] I have read the [Stirling-PDF Developer Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md) (if applicable) - [ ] I have read the [How to add new languages to Stirling-PDF](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md) (if applicable) - [ ] I have performed a self-review of my own code - [ ] My changes generate no new warnings ### Documentation - [ ] I have updated relevant docs on [Stirling-PDF's doc repo](https://github.com/Stirling-Tools/Stirling-Tools.github.io/blob/main/docs/) (if functionality has heavily changed) - [ ] I have read the section [Add New Translation Tags](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/HowToAddNewLanguage.md#add-new-translation-tags) (for new translation tags only) ### UI Changes (if applicable) - [ ] Screenshots or videos demonstrating the UI changes are attached (e.g., as comments or direct attachments in the PR) ### Testing (if applicable) - [ ] I have tested my changes locally. Refer to the [Testing Guide](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/devGuide/DeveloperGuide.md#6-testing) for more details.
264 lines
5.3 KiB
CSS
264 lines
5.3 KiB
CSS
.activeIconScale {
|
|
transform: scale(1.3);
|
|
transition: transform 0.2s;
|
|
z-index: 1;
|
|
}
|
|
|
|
.iconContainer {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
width: 2rem;
|
|
height: 2rem;
|
|
}
|
|
|
|
/* Action icon styles */
|
|
.action-icon-style {
|
|
background-color: var(--icon-user-bg);
|
|
color: var(--icon-user-color);
|
|
border-radius: 50%;
|
|
width: 1.5rem;
|
|
height: 1.5rem;
|
|
}
|
|
|
|
/* Main container styles */
|
|
.quick-access-bar-main {
|
|
background-color: var(--bg-muted);
|
|
width: 5rem;
|
|
min-width: 5rem;
|
|
max-width: 5rem;
|
|
position: relative;
|
|
z-index: 10;
|
|
}
|
|
|
|
/* Rainbow mode container */
|
|
.quick-access-bar-main.rainbow-mode {
|
|
background-color: var(--bg-muted);
|
|
width: 5rem;
|
|
min-width: 5rem;
|
|
max-width: 5rem;
|
|
position: relative;
|
|
z-index: 10;
|
|
}
|
|
|
|
/* Header padding */
|
|
.quick-access-header {
|
|
padding: 1rem 0.5rem 0.5rem 0.5rem;
|
|
}
|
|
|
|
.nav-header {
|
|
display: flex;
|
|
flex-direction: row;
|
|
align-items: center;
|
|
justify-content: center;
|
|
margin-bottom: 0;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
/* Nav header divider */
|
|
.nav-header-divider {
|
|
width: 3.75rem;
|
|
border-color: var(--color-gray-300);
|
|
margin-top: 0.5rem;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
/* All tools text styles */
|
|
.all-tools-text {
|
|
margin-top: 0.75rem;
|
|
font-size: 0.75rem;
|
|
text-rendering: optimizeLegibility;
|
|
font-synthesis: none;
|
|
text-align: center;
|
|
display: block;
|
|
}
|
|
|
|
.all-tools-text.active {
|
|
color: var(--text-primary);
|
|
font-weight: bold;
|
|
}
|
|
|
|
.all-tools-text.inactive {
|
|
color: var(--color-gray-700);
|
|
font-weight: normal;
|
|
}
|
|
|
|
/* Overflow divider */
|
|
.overflow-divider {
|
|
width: 3.75rem;
|
|
border-color: var(--color-gray-300);
|
|
margin: 0 0.5rem;
|
|
}
|
|
|
|
/* Scrollable content area */
|
|
.quick-access-bar {
|
|
overflow-x: auto;
|
|
overflow-y: auto;
|
|
scrollbar-gutter: stable both-edges;
|
|
-webkit-overflow-scrolling: touch;
|
|
padding: 0 0.5rem 1rem 0.5rem;
|
|
}
|
|
|
|
/* Scrollable content container */
|
|
.scrollable-content {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
min-height: 100%;
|
|
}
|
|
|
|
/* Button text styles */
|
|
.button-text {
|
|
margin-top: 0.75rem;
|
|
font-size: 0.75rem;
|
|
text-rendering: optimizeLegibility;
|
|
font-synthesis: none;
|
|
text-align: center;
|
|
display: block;
|
|
}
|
|
|
|
/* Allow wrapping under the active top indicator; constrain to two lines */
|
|
.current-tool-label {
|
|
white-space: normal;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
display: -webkit-box;
|
|
-webkit-line-clamp: 2; /* show up to two lines */
|
|
line-clamp: 2;
|
|
-webkit-box-orient: vertical;
|
|
word-break: keep-all;
|
|
overflow-wrap: normal;
|
|
hyphens: manual;
|
|
}
|
|
|
|
.button-text.active {
|
|
color: var(--text-primary);
|
|
font-weight: bold;
|
|
}
|
|
|
|
.button-text.inactive {
|
|
color: var(--color-gray-700);
|
|
font-weight: normal;
|
|
}
|
|
|
|
/* Content divider */
|
|
.content-divider {
|
|
width: 3.75rem;
|
|
border-color: var(--color-gray-300);
|
|
}
|
|
|
|
/* Spacer */
|
|
.spacer {
|
|
flex: 1;
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
/* Config button text */
|
|
.config-button-text {
|
|
margin-top: 0.75rem;
|
|
font-size: 0.75rem;
|
|
color: var(--color-gray-700);
|
|
font-weight: normal;
|
|
text-rendering: optimizeLegibility;
|
|
font-synthesis: none;
|
|
}
|
|
|
|
/* Font size utility */
|
|
.font-size-20 {
|
|
font-size: 20px;
|
|
}
|
|
|
|
/* Hide scrollbar by default, show on scroll (Webkit browsers - Chrome, Safari, Edge) */
|
|
.quick-access-bar::-webkit-scrollbar {
|
|
width: 0.5rem;
|
|
height: 0.5rem;
|
|
background: transparent;
|
|
}
|
|
|
|
.quick-access-bar:hover::-webkit-scrollbar,
|
|
.quick-access-bar:active::-webkit-scrollbar,
|
|
.quick-access-bar:focus::-webkit-scrollbar {
|
|
background: rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
.quick-access-bar::-webkit-scrollbar-thumb {
|
|
background: rgba(0, 0, 0, 0.2);
|
|
border-radius: 0.25rem;
|
|
}
|
|
|
|
.quick-access-bar::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
|
|
/* Firefox scrollbar styling */
|
|
.quick-access-bar {
|
|
scrollbar-width: auto;
|
|
scrollbar-color: rgba(0, 0, 0, 0.2) transparent;
|
|
}
|
|
|
|
/* Animated current tool indicator that slides in from the top and pushes content down */
|
|
/* Container grows down so it pushes items below during animation */
|
|
.current-tool-slot {
|
|
overflow: hidden;
|
|
max-height: 0;
|
|
opacity: 0;
|
|
transition: max-height 450ms ease-out, opacity 300ms ease-out;
|
|
}
|
|
|
|
.current-tool-enter {
|
|
animation: currentToolGrowDown 450ms ease-out;
|
|
}
|
|
|
|
.current-tool-slot.visible {
|
|
max-height: 8.25rem; /* icon + up to 3-line label + divider (132px) */
|
|
opacity: 1;
|
|
border-bottom: 1px solid var(--color-gray-300);
|
|
padding-bottom: 0.75rem; /* push border down for spacing */
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
/* Replay the grow-down animation when switching tools while visible */
|
|
.current-tool-slot.replay .current-tool-content {
|
|
animation: currentToolGrowDown 450ms ease-out;
|
|
}
|
|
|
|
/* Also animate the container itself when replaying so it "pushes down" again */
|
|
.current-tool-slot.replay {
|
|
animation: currentToolGrowDown 450ms ease-out;
|
|
}
|
|
|
|
@keyframes currentToolGrowDown {
|
|
0% {
|
|
max-height: 0;
|
|
opacity: 0;
|
|
}
|
|
100% {
|
|
max-height: 7.875rem; /* enough space for icon + up to 3-line label (126px) */
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
/* Divider that animates growing from top */
|
|
.current-tool-divider {
|
|
width: 3.75rem;
|
|
border-color: var(--color-gray-300);
|
|
margin: 0.5rem auto 0.5rem auto;
|
|
transform-origin: top;
|
|
animation: dividerGrowDown 350ms ease-out;
|
|
animation-fill-mode: both;
|
|
}
|
|
|
|
@keyframes dividerGrowDown {
|
|
0% {
|
|
transform: scaleY(0);
|
|
opacity: 0;
|
|
margin-top: 0;
|
|
margin-bottom: 0;
|
|
}
|
|
100% {
|
|
transform: scaleY(1);
|
|
opacity: 1;
|
|
margin-top: 0.5rem;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
} |