fix(accordion): place children inside content div and add group wrapper

Children were appended to the outer <details> element instead of inside
the .accordion-content div, causing text to render outside the accordion
box. Also adds .accordion-group wrapper to eliminate parent gap between
stacked items, and styles content with smaller font and muted color.
This commit is contained in:
Florian Schroedl
2026-03-03 17:12:29 +01:00
parent 0dd8a9c8bf
commit 1b4929224b
7 changed files with 38 additions and 27 deletions

View File

@@ -76,9 +76,10 @@
;; ── Accordion ─────────────────────────────────────────────────────── ;; ── Accordion ───────────────────────────────────────────────────────
(defn accordion-demo [] (defn accordion-demo []
(section "Accordion" (section "Accordion"
[:div {:class "accordion-group"}
(accordion/accordion {:title "What is this framework?"} "A cross-target component library.") (accordion/accordion {:title "What is this framework?"} "A cross-target component library.")
(accordion/accordion {:title "How do I use it?" :open true} "Just require the namespace and call functions.") (accordion/accordion {:title "How do I use it?" :open true} "Just require the namespace and call functions.")
(accordion/accordion {:title "Is it accessible?"} "Yes, follows ARIA best practices."))) (accordion/accordion {:title "Is it accessible?"} "Yes, follows ARIA best practices.")]))
;; ── Table ─────────────────────────────────────────────────────────── ;; ── Table ───────────────────────────────────────────────────────────
(defn table-demo [] (defn table-demo []

View File

@@ -77,9 +77,10 @@
;; ── Accordion ─────────────────────────────────────────────────────── ;; ── Accordion ───────────────────────────────────────────────────────
(defn accordion-demo [] (defn accordion-demo []
(section "Accordion" (section "Accordion"
[:div {:class ["accordion-group"]}
(accordion/accordion {:title "What is this framework?"} "A cross-target component library.") (accordion/accordion {:title "What is this framework?"} "A cross-target component library.")
(accordion/accordion {:title "How do I use it?" :open true} "Just require the namespace and call functions.") (accordion/accordion {:title "How do I use it?" :open true} "Just require the namespace and call functions.")
(accordion/accordion {:title "Is it accessible?"} "Yes, follows ARIA best practices."))) (accordion/accordion {:title "Is it accessible?"} "Yes, follows ARIA best practices.")]))
;; ── Table ─────────────────────────────────────────────────────────── ;; ── Table ───────────────────────────────────────────────────────────
(defn table-demo [] (defn table-demo []

View File

@@ -85,9 +85,10 @@
;; ── Accordion ─────────────────────────────────────────────────────── ;; ── Accordion ───────────────────────────────────────────────────────
(defn accordion-demo [] (defn accordion-demo []
(section "Accordion" (section "Accordion"
[:div {:class "accordion-group"}
(accordion/accordion {:title "What is this framework?"} "A cross-target component library.") (accordion/accordion {:title "What is this framework?"} "A cross-target component library.")
(accordion/accordion {:title "How do I use it?" :open true} "Just require the namespace and call functions.") (accordion/accordion {:title "How do I use it?" :open true} "Just require the namespace and call functions.")
(accordion/accordion {:title "Is it accessible?"} "Yes, follows ARIA best practices."))) (accordion/accordion {:title "Is it accessible?"} "Yes, follows ARIA best practices.")]))
;; ── Table ─────────────────────────────────────────────────────────── ;; ── Table ───────────────────────────────────────────────────────────
(defn table-demo [] (defn table-demo []

View File

@@ -25,27 +25,24 @@
class (str " " class)) class (str " " class))
base-attrs (cond-> (merge {:class classes} attrs) base-attrs (cond-> (merge {:class classes} attrs)
open (assoc :open true))] open (assoc :open true))]
(into [:details base-attrs [:details base-attrs
[:summary {:class "accordion-trigger"} title] [:summary {:class "accordion-trigger"} title]
[:div {:class "accordion-content"}]] (into [:div {:class "accordion-content"}] children)])
children))
:cljs :cljs
(let [cls (accordion-class-list {}) (let [cls (accordion-class-list {})
classes (cond-> cls class (conj class)) classes (cond-> cls class (conj class))
base-attrs (cond-> (merge {:class classes} attrs) base-attrs (cond-> (merge {:class classes} attrs)
open (assoc :open true))] open (assoc :open true))]
(into [:details base-attrs [:details base-attrs
[:summary {:class ["accordion-trigger"]} title] [:summary {:class ["accordion-trigger"]} title]
[:div {:class ["accordion-content"]}]] (into [:div {:class ["accordion-content"]}] children)])
children))
:clj :clj
(let [classes (cond-> (accordion-classes {}) (let [classes (cond-> (accordion-classes {})
class (str " " class)) class (str " " class))
base-attrs (cond-> (merge {:class classes} attrs) base-attrs (cond-> (merge {:class classes} attrs)
open (assoc :open true))] open (assoc :open true))]
(into [:details base-attrs [:details base-attrs
[:summary {:class "accordion-trigger"} title] [:summary {:class "accordion-trigger"} title]
[:div {:class "accordion-content"}]] (into [:div {:class "accordion-content"}] children)])))
children))))

View File

@@ -1,3 +1,8 @@
.accordion-group {
display: flex;
flex-direction: column;
}
.accordion { .accordion {
border: var(--border-0); border: var(--border-0);
border-radius: var(--radius-md); border-radius: var(--radius-md);
@@ -67,4 +72,6 @@
.accordion-content { .accordion-content {
padding: var(--size-4); padding: var(--size-4);
font-size: var(--font-sm);
color: var(--fg-1);
} }

View File

@@ -35,13 +35,17 @@
.card-body { .card-body {
} }
.card-body > *:first-child { margin-top: 0; }
.card-body > *:last-child { margin-bottom: 0; }
.card-footer { .card-footer {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: var(--size-2); gap: var(--size-2);
} }
.card-footer .btn { .card-footer .btn,
.dialog-footer .btn {
padding: var(--size-2) var(--size-4); padding: var(--size-2) var(--size-4);
font-size: var(--font-base); font-size: var(--font-base);
line-height: var(--size-5); line-height: var(--size-5);

View File

@@ -17,6 +17,8 @@
.dialog[open] { .dialog[open] {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: var(--size-3);
padding: var(--size-6);
} }
.dialog::backdrop { .dialog::backdrop {
@@ -28,8 +30,6 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: var(--size-1); gap: var(--size-1);
padding: var(--size-6);
padding-bottom: 0;
} }
.dialog-header h1, .dialog-header h1,
@@ -48,14 +48,14 @@
} }
.dialog-body { .dialog-body {
padding: var(--size-6);
overflow-y: auto; overflow-y: auto;
} }
.dialog-body > *:first-child { margin-top: 0; }
.dialog-body > *:last-child { margin-bottom: 0; }
.dialog-footer { .dialog-footer {
display: flex; display: flex;
justify-content: flex-end; justify-content: flex-end;
gap: var(--size-2); gap: var(--size-2);
padding: var(--size-6);
padding-top: 0;
} }