Merge pull request #2637 from ZhenShuo2021/feat/tabs

 Feat: add tabs shortcode
This commit is contained in:
Nuno C.
2025-12-22 17:09:40 +00:00
committed by GitHub
11 changed files with 400 additions and 0 deletions
+34
View File
@@ -1373,6 +1373,9 @@
.justify-center {
justify-content: center;
}
.gap-1 {
gap: calc(var(--spacing) * 1);
}
.gap-4 {
gap: calc(var(--spacing) * 4);
}
@@ -1497,6 +1500,10 @@
border-top-left-radius: var(--radius-lg);
border-top-right-radius: var(--radius-lg);
}
.rounded-t-md {
border-top-left-radius: var(--radius-md);
border-top-right-radius: var(--radius-md);
}
.rounded-b-lg {
border-bottom-right-radius: var(--radius-lg);
border-bottom-left-radius: var(--radius-lg);
@@ -2427,6 +2434,13 @@
}
}
}
.hover\:bg-neutral-200 {
&:hover {
@media (hover: hover) {
background-color: rgba(var(--color-neutral-200), 1);
}
}
}
.hover\:bg-primary-100 {
&:hover {
@media (hover: hover) {
@@ -3252,6 +3266,15 @@
}
}
}
.dark\:hover\:bg-neutral-700 {
&:is(.dark *) {
&:hover {
@media (hover: hover) {
background-color: rgba(var(--color-neutral-700), 1);
}
}
}
}
.dark\:hover\:bg-primary-400 {
&:is(.dark *) {
&:hover {
@@ -3860,6 +3883,17 @@
}
}
}
@layer utilities {
.tab__button.tab--active {
border-bottom: 2px solid rgb(var(--color-primary-500));
}
.tab__panel {
display: none;
}
.tab__panel.tab--active {
display: block;
}
}
#zen-mode-button {
cursor: pointer;
}
+9
View File
@@ -0,0 +1,9 @@
.tab__button.tab--active {
border-bottom: 2px solid rgb(var(--color-primary-500));
}
.tab__panel {
display: none;
}
.tab__panel.tab--active {
display: block;
}
+1
View File
@@ -4,6 +4,7 @@
@import "tailwindcss";
@import "./components/chroma.css" layer(utilities);
@import "./components/tabs.css" layer(utilities);
@import "./components/zen-mode.css";
@import "./components/a11y.css";
+41
View File
@@ -0,0 +1,41 @@
function initTabs() {
tabClickHandler = (event) => {
const button = event.target.closest(".tab__button");
if (!button) return;
const container = button.closest(".tab__container");
const tabIndex = parseInt(button.dataset.tabIndex);
activateTab(container, tabIndex);
};
document.addEventListener("click", tabClickHandler);
}
function activateTab(container, activeIndex) {
const buttons = container.querySelectorAll(".tab__button");
const panels = container.querySelectorAll(".tab__panel");
buttons.forEach((btn, index) => {
if (index === activeIndex) {
btn.classList.add("tab--active");
btn.setAttribute("aria-selected", "true");
} else {
btn.classList.remove("tab--active");
btn.setAttribute("aria-selected", "false");
}
});
panels.forEach((panel, index) => {
if (index === activeIndex) {
panel.classList.add("tab--active");
} else {
panel.classList.remove("tab--active");
}
});
}
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", initTabs);
} else {
initTabs();
}