rizzo-css 0.0.11 → 0.0.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +12 -0
- package/LICENSE +21 -0
- package/README.md +17 -3
- package/bin/rizzo-css.js +98 -42
- package/dist/rizzo.min.css +3 -2
- package/package.json +5 -3
- package/scaffold/astro-app/README.md +13 -2
- package/scaffold/astro-app/src/components/Accordion.astro +178 -0
- package/scaffold/astro-app/src/components/Alert.astro +131 -0
- package/scaffold/astro-app/src/components/Avatar.astro +59 -0
- package/scaffold/astro-app/src/components/Badge.astro +24 -0
- package/scaffold/astro-app/src/components/Breadcrumb.astro +61 -0
- package/scaffold/astro-app/src/components/Button.astro +3 -0
- package/scaffold/astro-app/src/components/Card.astro +18 -0
- package/scaffold/astro-app/src/components/Checkbox.astro +38 -0
- package/scaffold/astro-app/src/components/CodeBlock.astro +393 -0
- package/scaffold/astro-app/src/components/CopyToClipboard.astro +219 -0
- package/scaffold/astro-app/src/components/Divider.astro +37 -0
- package/scaffold/astro-app/src/components/Dropdown.astro +807 -0
- package/scaffold/astro-app/src/components/FormGroup.astro +59 -0
- package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +72 -0
- package/scaffold/astro-app/src/components/Input.astro +59 -0
- package/scaffold/astro-app/src/components/Modal.astro +212 -0
- package/scaffold/astro-app/src/components/Navbar.astro +701 -0
- package/scaffold/astro-app/src/components/Pagination.astro +240 -0
- package/scaffold/astro-app/src/components/ProgressBar.astro +65 -0
- package/scaffold/astro-app/src/components/Radio.astro +38 -0
- package/scaffold/astro-app/src/components/Search.astro +1259 -0
- package/scaffold/astro-app/src/components/Select.astro +49 -0
- package/scaffold/astro-app/src/components/Settings.astro +382 -0
- package/scaffold/astro-app/src/components/Spinner.astro +30 -0
- package/scaffold/astro-app/src/components/Table.astro +181 -0
- package/scaffold/astro-app/src/components/Tabs.astro +223 -0
- package/scaffold/astro-app/src/components/Textarea.astro +58 -0
- package/scaffold/astro-app/src/components/ThemeSwitcher.astro +504 -0
- package/scaffold/astro-app/src/components/Toast.astro +30 -0
- package/scaffold/astro-app/src/components/Tooltip.astro +32 -0
- package/scaffold/astro-app/src/components/icons/Brush.astro +10 -0
- package/scaffold/astro-app/src/components/icons/Cake.astro +11 -0
- package/scaffold/astro-app/src/components/icons/Check.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Cherry.astro +11 -0
- package/scaffold/astro-app/src/components/icons/ChevronDown.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Circle.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Close.astro +30 -0
- package/scaffold/astro-app/src/components/icons/Cmd.astro +26 -0
- package/scaffold/astro-app/src/components/icons/Copy.astro +30 -0
- package/scaffold/astro-app/src/components/icons/Eye.astro +30 -0
- package/scaffold/astro-app/src/components/icons/Filter.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Flame.astro +28 -0
- package/scaffold/astro-app/src/components/icons/Flower.astro +11 -0
- package/scaffold/astro-app/src/components/icons/Gear.astro +30 -0
- package/scaffold/astro-app/src/components/icons/Heart.astro +28 -0
- package/scaffold/astro-app/src/components/icons/IceCream.astro +31 -0
- package/scaffold/astro-app/src/components/icons/Leaf.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Lemon.astro +11 -0
- package/scaffold/astro-app/src/components/icons/Moon.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Owl.astro +34 -0
- package/scaffold/astro-app/src/components/icons/Palette.astro +33 -0
- package/scaffold/astro-app/src/components/icons/Rainbow.astro +31 -0
- package/scaffold/astro-app/src/components/icons/Search.astro +30 -0
- package/scaffold/astro-app/src/components/icons/Shield.astro +28 -0
- package/scaffold/astro-app/src/components/icons/Snowflake.astro +34 -0
- package/scaffold/astro-app/src/components/icons/Sort.astro +30 -0
- package/scaffold/astro-app/src/components/icons/Sun.astro +29 -0
- package/scaffold/astro-app/src/components/icons/Sunset.astro +10 -0
- package/scaffold/astro-app/src/components/icons/Zap.astro +9 -0
- package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +53 -0
- package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +34 -0
- package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +29 -0
- package/scaffold/astro-app/src/components/icons/devicons/Git.astro +24 -0
- package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +27 -0
- package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +25 -0
- package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +47 -0
- package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +33 -0
- package/scaffold/astro-app/src/components/icons/devicons/React.astro +27 -0
- package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +25 -0
- package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +26 -0
- package/scaffold/astro-app/src/config/frameworks.ts +26 -0
- package/scaffold/astro-app/src/config/themes.ts +54 -0
- package/scaffold/astro-app/src/layouts/DocsLayout.astro +204 -0
- package/scaffold/astro-app/src/layouts/Layout.astro +11 -2
- package/scaffold/astro-app/src/pages/components/accordion.astro +172 -0
- package/scaffold/astro-app/src/pages/components/alert.astro +250 -0
- package/scaffold/astro-app/src/pages/components/avatar.astro +102 -0
- package/scaffold/astro-app/src/pages/components/badge.astro +119 -0
- package/scaffold/astro-app/src/pages/components/breadcrumb.astro +124 -0
- package/scaffold/astro-app/src/pages/components/button.astro +74 -0
- package/scaffold/astro-app/src/pages/components/cards.astro +247 -0
- package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +49 -0
- package/scaffold/astro-app/src/pages/components/divider.astro +74 -0
- package/scaffold/astro-app/src/pages/components/dropdown.astro +394 -0
- package/scaffold/astro-app/src/pages/components/forms.astro +367 -0
- package/scaffold/astro-app/src/pages/components/icons.astro +246 -0
- package/scaffold/astro-app/src/pages/components/modal.astro +152 -0
- package/scaffold/astro-app/src/pages/components/navbar.astro +80 -0
- package/scaffold/astro-app/src/pages/components/pagination.astro +126 -0
- package/scaffold/astro-app/src/pages/components/progress-bar.astro +94 -0
- package/scaffold/astro-app/src/pages/components/search.astro +155 -0
- package/scaffold/astro-app/src/pages/components/settings.astro +78 -0
- package/scaffold/astro-app/src/pages/components/spinner.astro +81 -0
- package/scaffold/astro-app/src/pages/components/table.astro +144 -0
- package/scaffold/astro-app/src/pages/components/tabs.astro +220 -0
- package/scaffold/astro-app/src/pages/components/theme-switcher.astro +67 -0
- package/scaffold/astro-app/src/pages/components/toast.astro +157 -0
- package/scaffold/astro-app/src/pages/components/tooltip.astro +209 -0
- package/scaffold/astro-app/src/pages/components.astro +290 -0
- package/scaffold/astro-app/src/pages/docs/accessibility.astro +9 -0
- package/scaffold/astro-app/src/pages/docs/colors.astro +9 -0
- package/scaffold/astro-app/src/pages/docs/design-system.astro +9 -0
- package/scaffold/astro-app/src/pages/docs/getting-started.astro +9 -0
- package/scaffold/astro-app/src/pages/docs/index.astro +15 -0
- package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +14 -0
- package/scaffold/astro-app/src/pages/docs/theming.astro +10 -0
- package/scaffold/astro-app/src/pages/index.astro +5 -11
- package/scaffold/svelte/Table.svelte +6 -5
- package/scaffold/svelte/Tabs.svelte +3 -1
- package/scaffold/svelte-app/README.md +9 -2
- package/scaffold/svelte-app/src/app.html +1 -1
- package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +128 -0
- package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +85 -0
- package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +39 -0
- package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +31 -0
- package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +49 -0
- package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +27 -0
- package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +17 -0
- package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +37 -0
- package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +79 -0
- package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +28 -0
- package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +254 -0
- package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +51 -0
- package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +59 -0
- package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +157 -0
- package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +93 -0
- package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +58 -0
- package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +38 -0
- package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +51 -0
- package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +14 -0
- package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +158 -0
- package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +117 -0
- package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +59 -0
- package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +315 -0
- package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +33 -0
- package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +19 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +29 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +29 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +29 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +30 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +27 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +30 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +30 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +29 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +30 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +31 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +29 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +34 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +33 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +31 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +30 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +34 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +30 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +45 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +28 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +23 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +18 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +21 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +19 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +44 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +24 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +21 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +19 -0
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +20 -0
- package/scaffold/svelte-app/src/lib/rizzo/index.ts +33 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +239 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +99 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +53 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +114 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +92 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +60 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +55 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +55 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +173 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +12 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +92 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +26 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +105 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +161 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +375 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +246 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +8 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +50 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +79 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +44 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +95 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +147 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +158 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +41 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +116 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +152 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +181 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +6 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +136 -0
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +57 -0
- package/scaffold/svelte-app/src/routes/+page.svelte +2 -2
- package/scaffold/svelte-app/src/routes/components/+page.svelte +4 -0
- package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +7 -0
- package/scaffold/vanilla/README.md +20 -8
- package/scaffold/vanilla/components/accordion.html +187 -0
- package/scaffold/vanilla/components/alert.html +187 -0
- package/scaffold/vanilla/components/avatar.html +187 -0
- package/scaffold/vanilla/components/badge.html +187 -0
- package/scaffold/vanilla/components/breadcrumb.html +187 -0
- package/scaffold/vanilla/components/button.html +187 -0
- package/scaffold/vanilla/components/cards.html +187 -0
- package/scaffold/vanilla/components/copy-to-clipboard.html +187 -0
- package/scaffold/vanilla/components/divider.html +187 -0
- package/scaffold/vanilla/components/dropdown.html +187 -0
- package/scaffold/vanilla/components/forms.html +187 -0
- package/scaffold/vanilla/components/icons.html +187 -0
- package/scaffold/vanilla/components/index.html +212 -0
- package/scaffold/vanilla/components/modal.html +187 -0
- package/scaffold/vanilla/components/navbar.html +187 -0
- package/scaffold/vanilla/components/pagination.html +187 -0
- package/scaffold/vanilla/components/progress-bar.html +187 -0
- package/scaffold/vanilla/components/search.html +187 -0
- package/scaffold/vanilla/components/settings.html +187 -0
- package/scaffold/vanilla/components/spinner.html +187 -0
- package/scaffold/vanilla/components/table.html +187 -0
- package/scaffold/vanilla/components/tabs.html +187 -0
- package/scaffold/vanilla/components/theme-switcher.html +187 -0
- package/scaffold/vanilla/components/toast.html +187 -0
- package/scaffold/vanilla/components/tooltip.html +187 -0
- package/scaffold/vanilla/index.html +17 -283
- package/scaffold/vanilla/js/main.js +748 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsLayout from '../../layouts/DocsLayout.astro';
|
|
3
|
+
import DividerComponent from '../../components/Divider.astro';
|
|
4
|
+
import CodeBlock from '../../components/CodeBlock.astro';
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<DocsLayout title="Divider Component — Astro" description="Horizontal or vertical divider line with optional label">
|
|
8
|
+
|
|
9
|
+
<p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/divider" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/divider</a>.</p>
|
|
10
|
+
|
|
11
|
+
<section>
|
|
12
|
+
<h2>Divider Component</h2>
|
|
13
|
+
<p>A simple divider for visually separating content. Supports horizontal (default) and vertical orientation, and an optional label (e.g. "OR") in the middle for horizontal dividers.</p>
|
|
14
|
+
|
|
15
|
+
<h3>Props</h3>
|
|
16
|
+
<ul>
|
|
17
|
+
<li><code>orientation</code> (string, optional) - <code>horizontal</code>, <code>vertical</code> (default: horizontal)</li>
|
|
18
|
+
<li><code>label</code> (string, optional) - Optional text shown in the middle (horizontal only)</li>
|
|
19
|
+
<li><code>class</code> (string, optional) - Additional CSS classes</li>
|
|
20
|
+
</ul>
|
|
21
|
+
|
|
22
|
+
<h3>Basic Usage (horizontal)</h3>
|
|
23
|
+
<div class="example">
|
|
24
|
+
<div class="example-title">Live Example</div>
|
|
25
|
+
<div>
|
|
26
|
+
<p style="margin: 0 0 var(--spacing-2) 0;">Content above</p>
|
|
27
|
+
<DividerComponent />
|
|
28
|
+
<p style="margin: var(--spacing-2) 0 0 0;">Content below</p>
|
|
29
|
+
</div>
|
|
30
|
+
</div>
|
|
31
|
+
<CodeBlock code={`---
|
|
32
|
+
import Divider from '../../components/Divider.astro';
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
<Divider />`} language="astro" />
|
|
36
|
+
|
|
37
|
+
<h3>With Label</h3>
|
|
38
|
+
<p>Use <code>label</code> to show text in the middle (e.g. "OR" between two options).</p>
|
|
39
|
+
<div class="example">
|
|
40
|
+
<div class="example-title">Live Example</div>
|
|
41
|
+
<DividerComponent label="OR" />
|
|
42
|
+
</div>
|
|
43
|
+
<CodeBlock code={`<Divider label="OR" />`} language="astro" />
|
|
44
|
+
|
|
45
|
+
<h3>Vertical</h3>
|
|
46
|
+
<p>Use <code>orientation="vertical"</code> inside a flex row to separate items. The parent should have a defined height (e.g. <code>min-height</code> or <code>height</code>).</p>
|
|
47
|
+
<div class="example">
|
|
48
|
+
<div class="example-title">Live Example</div>
|
|
49
|
+
<div style="display: flex; align-items: center; gap: var(--spacing-3); min-height: var(--spacing-16);">
|
|
50
|
+
<span>Item 1</span>
|
|
51
|
+
<DividerComponent orientation="vertical" />
|
|
52
|
+
<span>Item 2</span>
|
|
53
|
+
<DividerComponent orientation="vertical" />
|
|
54
|
+
<span>Item 3</span>
|
|
55
|
+
</div>
|
|
56
|
+
</div>
|
|
57
|
+
<CodeBlock code={`<div style="display: flex; align-items: center; gap: var(--spacing-3); min-height: 3rem;">
|
|
58
|
+
<span>Item 1</span>
|
|
59
|
+
<Divider orientation="vertical" />
|
|
60
|
+
<span>Item 2</span>
|
|
61
|
+
<Divider orientation="vertical" />
|
|
62
|
+
<span>Item 3</span>
|
|
63
|
+
</div>`} language="astro" />
|
|
64
|
+
|
|
65
|
+
<h3>Features</h3>
|
|
66
|
+
<ul>
|
|
67
|
+
<li><strong>Accessible</strong> - <code>role="separator"</code> and <code>aria-orientation</code>; optional <code>aria-label</code> when label is set</li>
|
|
68
|
+
<li><strong>Horizontal</strong> - Full-width line; optional label in the center</li>
|
|
69
|
+
<li><strong>Vertical</strong> - Full-height line for use in flex layouts</li>
|
|
70
|
+
<li><strong>Theme-aware</strong> - Uses <code>--border</code> and <code>--text-dim</code></li>
|
|
71
|
+
</ul>
|
|
72
|
+
<p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/divider">Svelte</a> · Vanilla: same HTML and BEM as in Usage above.</p>
|
|
73
|
+
</section>
|
|
74
|
+
</DocsLayout>
|
|
@@ -0,0 +1,394 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsLayout from '../../layouts/DocsLayout.astro';
|
|
3
|
+
import Dropdown from '../../components/Dropdown.astro';
|
|
4
|
+
import CodeBlock from '../../components/CodeBlock.astro';
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<DocsLayout title="Dropdown Component — Astro" description="Accessible dropdown menu component with keyboard navigation and menu items">
|
|
8
|
+
|
|
9
|
+
<p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/dropdown" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/dropdown</a>.</p>
|
|
10
|
+
|
|
11
|
+
<section>
|
|
12
|
+
<h2>Dropdown Component</h2>
|
|
13
|
+
<p>An accessible dropdown menu component for displaying lists of actions or options. Supports menu items, separators, links, and custom click handlers.</p>
|
|
14
|
+
|
|
15
|
+
<h3>Basic Usage</h3>
|
|
16
|
+
<div class="example">
|
|
17
|
+
<div class="example-title">Live Example</div>
|
|
18
|
+
<Dropdown
|
|
19
|
+
trigger="Actions"
|
|
20
|
+
items={[
|
|
21
|
+
{ label: 'Edit', value: 'edit', onClick: 'handleAction' },
|
|
22
|
+
{ label: 'Delete', value: 'delete', onClick: 'handleAction' },
|
|
23
|
+
{ separator: true },
|
|
24
|
+
{ label: 'Settings', href: '/settings' },
|
|
25
|
+
]}
|
|
26
|
+
/>
|
|
27
|
+
</div>
|
|
28
|
+
|
|
29
|
+
<CodeBlock code={`---
|
|
30
|
+
import Dropdown from '../../components/Dropdown.astro';
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
<Dropdown
|
|
34
|
+
trigger="Actions"
|
|
35
|
+
items={[
|
|
36
|
+
{ label: 'Edit', value: 'edit', onClick: 'handleAction' },
|
|
37
|
+
{ label: 'Delete', value: 'delete', onClick: 'handleAction' },
|
|
38
|
+
{ separator: true },
|
|
39
|
+
{ label: 'Settings', href: '/settings' },
|
|
40
|
+
]}
|
|
41
|
+
/>`} language="astro" />
|
|
42
|
+
|
|
43
|
+
<h3>With Links</h3>
|
|
44
|
+
<div class="example">
|
|
45
|
+
<div class="example-title">Live Example</div>
|
|
46
|
+
<Dropdown
|
|
47
|
+
trigger="Navigate"
|
|
48
|
+
items={[
|
|
49
|
+
{ label: 'Home', href: '/' },
|
|
50
|
+
{ label: 'Documentation', href: '/docs' },
|
|
51
|
+
{ label: 'Components', href: '/docs/components' },
|
|
52
|
+
{ separator: true },
|
|
53
|
+
{ label: 'GitHub', href: 'https://github.com' },
|
|
54
|
+
]}
|
|
55
|
+
/>
|
|
56
|
+
</div>
|
|
57
|
+
|
|
58
|
+
<CodeBlock code={`<Dropdown
|
|
59
|
+
trigger="Navigate"
|
|
60
|
+
items={[
|
|
61
|
+
{ label: 'Home', href: '/' },
|
|
62
|
+
{ label: 'Documentation', href: '/docs' },
|
|
63
|
+
{ label: 'Components', href: '/docs/components' },
|
|
64
|
+
{ separator: true },
|
|
65
|
+
{ label: 'GitHub', href: 'https://github.com' },
|
|
66
|
+
]}
|
|
67
|
+
/>`} language="astro" />
|
|
68
|
+
|
|
69
|
+
<h3>With Disabled Items</h3>
|
|
70
|
+
<div class="example">
|
|
71
|
+
<div class="example-title">Live Example</div>
|
|
72
|
+
<Dropdown
|
|
73
|
+
trigger="Options"
|
|
74
|
+
items={[
|
|
75
|
+
{ label: 'Available Option', value: 'available' },
|
|
76
|
+
{ label: 'Disabled Option', value: 'disabled', disabled: true },
|
|
77
|
+
{ separator: true },
|
|
78
|
+
{ label: 'Another Option', value: 'another' },
|
|
79
|
+
]}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
82
|
+
|
|
83
|
+
<CodeBlock code={`<Dropdown
|
|
84
|
+
trigger="Options"
|
|
85
|
+
items={[
|
|
86
|
+
{ label: 'Available Option', value: 'available' },
|
|
87
|
+
{ label: 'Disabled Option', value: 'disabled', disabled: true },
|
|
88
|
+
{ separator: true },
|
|
89
|
+
{ label: 'Another Option', value: 'another' },
|
|
90
|
+
]}
|
|
91
|
+
/>`} language="astro" />
|
|
92
|
+
|
|
93
|
+
<h3>Nested Menus</h3>
|
|
94
|
+
<div class="example">
|
|
95
|
+
<div class="example-title">Live Example</div>
|
|
96
|
+
<Dropdown
|
|
97
|
+
trigger="Actions"
|
|
98
|
+
items={[
|
|
99
|
+
{
|
|
100
|
+
label: 'Edit',
|
|
101
|
+
submenu: [
|
|
102
|
+
{ label: 'Cut', value: 'cut', onClick: 'handleSubmenuAction' },
|
|
103
|
+
{ label: 'Copy', value: 'copy', onClick: 'handleSubmenuAction' },
|
|
104
|
+
{ label: 'Paste', value: 'paste', onClick: 'handleSubmenuAction' },
|
|
105
|
+
{ separator: true },
|
|
106
|
+
{
|
|
107
|
+
label: 'Advanced',
|
|
108
|
+
submenu: [
|
|
109
|
+
{ label: 'Find & Replace', value: 'find-replace', onClick: 'handleSubmenuAction' },
|
|
110
|
+
{ label: 'Go to Line', value: 'go-to-line', onClick: 'handleSubmenuAction' },
|
|
111
|
+
{ label: 'Format Document', value: 'format', onClick: 'handleSubmenuAction' },
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
label: 'View',
|
|
118
|
+
submenu: [
|
|
119
|
+
{ label: 'Zoom In', value: 'zoom-in', onClick: 'handleSubmenuAction' },
|
|
120
|
+
{ label: 'Zoom Out', value: 'zoom-out', onClick: 'handleSubmenuAction' },
|
|
121
|
+
{ label: 'Reset Zoom', value: 'reset-zoom', onClick: 'handleSubmenuAction' },
|
|
122
|
+
{ separator: true },
|
|
123
|
+
{
|
|
124
|
+
label: 'Appearance',
|
|
125
|
+
submenu: [
|
|
126
|
+
{ label: 'Theme', value: 'theme', onClick: 'handleSubmenuAction' },
|
|
127
|
+
{ label: 'Font Size', value: 'font-size', onClick: 'handleSubmenuAction' },
|
|
128
|
+
{ label: 'Word Wrap', value: 'word-wrap', onClick: 'handleSubmenuAction' },
|
|
129
|
+
{ separator: true },
|
|
130
|
+
{ label: 'Show Line Numbers', value: 'line-numbers', onClick: 'handleSubmenuAction' },
|
|
131
|
+
{ label: 'Show Minimap', value: 'minimap', onClick: 'handleSubmenuAction' },
|
|
132
|
+
]
|
|
133
|
+
},
|
|
134
|
+
{ separator: true },
|
|
135
|
+
{ label: 'Full Screen', value: 'fullscreen', onClick: 'handleSubmenuAction' },
|
|
136
|
+
]
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
label: 'Tools',
|
|
140
|
+
submenu: [
|
|
141
|
+
{ label: 'Command Palette', value: 'command-palette', onClick: 'handleSubmenuAction' },
|
|
142
|
+
{ label: 'Terminal', value: 'terminal', onClick: 'handleSubmenuAction' },
|
|
143
|
+
{ separator: true },
|
|
144
|
+
{
|
|
145
|
+
label: 'Extensions',
|
|
146
|
+
submenu: [
|
|
147
|
+
{ label: 'Install Extension', value: 'install-ext', onClick: 'handleSubmenuAction' },
|
|
148
|
+
{
|
|
149
|
+
label: 'Manage Extensions',
|
|
150
|
+
submenu: [
|
|
151
|
+
{ label: 'Installed', value: 'installed', onClick: 'handleSubmenuAction' },
|
|
152
|
+
{ label: 'Recommended', value: 'recommended', onClick: 'handleSubmenuAction' },
|
|
153
|
+
{ label: 'Popular', value: 'popular', onClick: 'handleSubmenuAction' },
|
|
154
|
+
{ separator: true },
|
|
155
|
+
{ label: 'Browse Marketplace', href: '/extensions' },
|
|
156
|
+
]
|
|
157
|
+
},
|
|
158
|
+
{ separator: true },
|
|
159
|
+
{ label: 'Update All', value: 'update-all', onClick: 'handleSubmenuAction' },
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
{ label: 'Settings', value: 'settings', onClick: 'handleSubmenuAction' },
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
{ separator: true },
|
|
166
|
+
{ label: 'Help', href: '/docs' },
|
|
167
|
+
{ label: 'Settings', href: '/docs/components/settings' },
|
|
168
|
+
]}
|
|
169
|
+
/>
|
|
170
|
+
</div>
|
|
171
|
+
|
|
172
|
+
<CodeBlock code={`<Dropdown
|
|
173
|
+
trigger="Actions"
|
|
174
|
+
items={[
|
|
175
|
+
{
|
|
176
|
+
label: 'Edit',
|
|
177
|
+
submenu: [
|
|
178
|
+
{ label: 'Cut', value: 'cut' },
|
|
179
|
+
{ label: 'Copy', value: 'copy' },
|
|
180
|
+
{ label: 'Paste', value: 'paste' },
|
|
181
|
+
{ separator: true },
|
|
182
|
+
{
|
|
183
|
+
label: 'Advanced',
|
|
184
|
+
submenu: [
|
|
185
|
+
{ label: 'Find & Replace', value: 'find-replace' },
|
|
186
|
+
{ label: 'Go to Line', value: 'go-to-line' },
|
|
187
|
+
{ label: 'Format Document', value: 'format' },
|
|
188
|
+
]
|
|
189
|
+
},
|
|
190
|
+
]
|
|
191
|
+
},
|
|
192
|
+
{
|
|
193
|
+
label: 'View',
|
|
194
|
+
submenu: [
|
|
195
|
+
{ label: 'Zoom In', value: 'zoom-in' },
|
|
196
|
+
{ label: 'Zoom Out', value: 'zoom-out' },
|
|
197
|
+
{ label: 'Reset Zoom', value: 'reset-zoom' },
|
|
198
|
+
{ separator: true },
|
|
199
|
+
{
|
|
200
|
+
label: 'Appearance',
|
|
201
|
+
submenu: [
|
|
202
|
+
{ label: 'Theme', value: 'theme' },
|
|
203
|
+
{ label: 'Font Size', value: 'font-size' },
|
|
204
|
+
{ label: 'Word Wrap', value: 'word-wrap' },
|
|
205
|
+
{ separator: true },
|
|
206
|
+
{ label: 'Show Line Numbers', value: 'line-numbers' },
|
|
207
|
+
{ label: 'Show Minimap', value: 'minimap' },
|
|
208
|
+
]
|
|
209
|
+
},
|
|
210
|
+
{ separator: true },
|
|
211
|
+
{ label: 'Full Screen', value: 'fullscreen' },
|
|
212
|
+
]
|
|
213
|
+
},
|
|
214
|
+
{
|
|
215
|
+
label: 'Tools',
|
|
216
|
+
submenu: [
|
|
217
|
+
{ label: 'Command Palette', value: 'command-palette' },
|
|
218
|
+
{ label: 'Terminal', value: 'terminal' },
|
|
219
|
+
{ separator: true },
|
|
220
|
+
{
|
|
221
|
+
label: 'Extensions',
|
|
222
|
+
submenu: [
|
|
223
|
+
{ label: 'Install Extension', value: 'install-ext' },
|
|
224
|
+
{
|
|
225
|
+
label: 'Manage Extensions',
|
|
226
|
+
submenu: [
|
|
227
|
+
{ label: 'Installed', value: 'installed' },
|
|
228
|
+
{ label: 'Recommended', value: 'recommended' },
|
|
229
|
+
{ label: 'Popular', value: 'popular' },
|
|
230
|
+
{ separator: true },
|
|
231
|
+
{ label: 'Browse Marketplace', href: '/extensions' },
|
|
232
|
+
]
|
|
233
|
+
},
|
|
234
|
+
{ separator: true },
|
|
235
|
+
{ label: 'Update All', value: 'update-all' },
|
|
236
|
+
]
|
|
237
|
+
},
|
|
238
|
+
{ label: 'Settings', value: 'settings' },
|
|
239
|
+
]
|
|
240
|
+
},
|
|
241
|
+
{ separator: true },
|
|
242
|
+
{ label: 'Help', href: '/docs' },
|
|
243
|
+
{ label: 'Settings', href: '/settings' },
|
|
244
|
+
]}
|
|
245
|
+
/>`} language="astro" />
|
|
246
|
+
|
|
247
|
+
<h3>Menu Positioning</h3>
|
|
248
|
+
<div class="example">
|
|
249
|
+
<div class="example-title">Live Examples</div>
|
|
250
|
+
<div style="display: flex; justify-content: space-between; align-items: flex-start; gap: var(--spacing-4); padding: var(--spacing-4); border: var(--outline-width) solid var(--border); border-radius: var(--radius-lg); background-color: var(--background-alt);">
|
|
251
|
+
<div>
|
|
252
|
+
<p style="margin: 0 0 var(--spacing-2) 0; font-size: var(--font-size-sm); color: var(--text-dim);">Menu aligns to left edge</p>
|
|
253
|
+
<Dropdown
|
|
254
|
+
trigger="Left Position"
|
|
255
|
+
position="left"
|
|
256
|
+
items={[
|
|
257
|
+
{ label: 'Item 1', value: '1' },
|
|
258
|
+
{ label: 'Item 2', value: '2' },
|
|
259
|
+
{ label: 'Item 3', value: '3' },
|
|
260
|
+
]}
|
|
261
|
+
/>
|
|
262
|
+
</div>
|
|
263
|
+
<div style="margin-left: auto;">
|
|
264
|
+
<p style="margin: 0 0 var(--spacing-2) 0; font-size: var(--font-size-sm); color: var(--text-dim); text-align: right;">Menu aligns to right edge</p>
|
|
265
|
+
<Dropdown
|
|
266
|
+
trigger="Right Position"
|
|
267
|
+
position="right"
|
|
268
|
+
items={[
|
|
269
|
+
{ label: 'Item 1', value: '1' },
|
|
270
|
+
{ label: 'Item 2', value: '2' },
|
|
271
|
+
{ label: 'Item 3', value: '3' },
|
|
272
|
+
]}
|
|
273
|
+
/>
|
|
274
|
+
</div>
|
|
275
|
+
</div>
|
|
276
|
+
</div>
|
|
277
|
+
|
|
278
|
+
<CodeBlock code={`<!-- Menu aligns to left edge of trigger (default) -->
|
|
279
|
+
<Dropdown
|
|
280
|
+
trigger="Left Position"
|
|
281
|
+
position="left"
|
|
282
|
+
items={[...]}
|
|
283
|
+
/>
|
|
284
|
+
|
|
285
|
+
<!-- Menu aligns to right edge of trigger -->
|
|
286
|
+
<Dropdown
|
|
287
|
+
trigger="Right Position"
|
|
288
|
+
position="right"
|
|
289
|
+
items={[...]}
|
|
290
|
+
/>`} language="astro" />
|
|
291
|
+
|
|
292
|
+
<h3>Props</h3>
|
|
293
|
+
<ul>
|
|
294
|
+
<li><code>trigger</code> (string, required) - Text displayed on the trigger button</li>
|
|
295
|
+
<li><code>items</code> (MenuItem[], required) - Array of menu items</li>
|
|
296
|
+
<li><code>id</code> (string, optional) - Unique ID for the dropdown. Auto-generated if not provided</li>
|
|
297
|
+
<li><code>class</code> (string, optional) - Additional CSS classes</li>
|
|
298
|
+
<li><code>position</code> ('left' | 'right', optional) - Menu position relative to trigger (default: 'left')</li>
|
|
299
|
+
<li><code>align</code> ('start' | 'end', optional) - Menu alignment within position (default: 'start')</li>
|
|
300
|
+
</ul>
|
|
301
|
+
|
|
302
|
+
<h3>MenuItem Interface</h3>
|
|
303
|
+
<ul>
|
|
304
|
+
<li><code>label</code> (string, required) - Display text for the menu item</li>
|
|
305
|
+
<li><code>value</code> (string, optional) - Value passed to onClick handler</li>
|
|
306
|
+
<li><code>href</code> (string, optional) - If provided, renders as a link instead of button</li>
|
|
307
|
+
<li><code>onClick</code> (string, optional) - Name of global function to call when clicked (must be available on window)</li>
|
|
308
|
+
<li><code>disabled</code> (boolean, optional) - Whether the item is disabled</li>
|
|
309
|
+
<li><code>separator</code> (boolean, optional) - If true, renders as a separator line</li>
|
|
310
|
+
<li><code>submenu</code> (MenuItem[], optional) - Array of menu items for nested submenu</li>
|
|
311
|
+
</ul>
|
|
312
|
+
|
|
313
|
+
<h3>Features</h3>
|
|
314
|
+
<ul>
|
|
315
|
+
<li>Full keyboard navigation (Arrow keys, Enter, Space, Escape, Home, End, Tab)</li>
|
|
316
|
+
<li>Nested submenus with click-to-open and keyboard support (ArrowRight/ArrowLeft)</li>
|
|
317
|
+
<li>Supports up to 3 levels of nested menus with proper parent menu preservation</li>
|
|
318
|
+
<li>Submenu items properly handle clicks and close parent menu</li>
|
|
319
|
+
<li>Accessible ARIA attributes (role="menu", role="menuitem", aria-expanded, aria-haspopup, aria-label)</li>
|
|
320
|
+
<li>All menu items have accessible names via aria-label attributes for screen readers</li>
|
|
321
|
+
<li>WCAG AA compliant touch targets (minimum 2.5rem/40px height)</li>
|
|
322
|
+
<li>No horizontal scrolling - submenus appear directly under parent items</li>
|
|
323
|
+
<li>Menus expand to show all items without vertical scrollbars</li>
|
|
324
|
+
<li>Smart submenu closing - only closes siblings at the same level, preserves parent menus</li>
|
|
325
|
+
<li>Outside click to close</li>
|
|
326
|
+
<li>Focus management (returns to trigger on close)</li>
|
|
327
|
+
<li>Menu items can be links or buttons</li>
|
|
328
|
+
<li>Separator support for grouping items</li>
|
|
329
|
+
<li>Disabled item support</li>
|
|
330
|
+
<li>Positioning options (left/right alignment)</li>
|
|
331
|
+
<li>Theme-aware styling using semantic variables</li>
|
|
332
|
+
<li>Smooth animations (respects prefers-reduced-motion)</li>
|
|
333
|
+
<li>Mobile responsive</li>
|
|
334
|
+
</ul>
|
|
335
|
+
|
|
336
|
+
<h3>Keyboard Navigation</h3>
|
|
337
|
+
<ul>
|
|
338
|
+
<li><kbd>Enter</kbd> or <kbd>Space</kbd> - Open/close menu or activate item</li>
|
|
339
|
+
<li><kbd>ArrowDown</kbd> - Open menu and focus first item, or navigate down</li>
|
|
340
|
+
<li><kbd>ArrowUp</kbd> - Open menu and focus last item, or navigate up</li>
|
|
341
|
+
<li><kbd>ArrowRight</kbd> - Open submenu (if available) and focus first submenu item</li>
|
|
342
|
+
<li><kbd>ArrowLeft</kbd> - Close submenu and return focus to parent item</li>
|
|
343
|
+
<li><kbd>Home</kbd> - Jump to first item</li>
|
|
344
|
+
<li><kbd>End</kbd> - Jump to last item</li>
|
|
345
|
+
<li><kbd>Escape</kbd> - Close menu</li>
|
|
346
|
+
<li><kbd>Tab</kbd> - Close menu and continue tabbing</li>
|
|
347
|
+
</ul>
|
|
348
|
+
|
|
349
|
+
<h3>Accessibility</h3>
|
|
350
|
+
<ul>
|
|
351
|
+
<li>Uses proper ARIA menu pattern (role="menu", role="menuitem")</li>
|
|
352
|
+
<li>All menu items have accessible names via aria-label attributes</li>
|
|
353
|
+
<li>Keyboard accessible with full navigation support</li>
|
|
354
|
+
<li>Focus trapping within menu when open</li>
|
|
355
|
+
<li>Screen reader compatible with proper ARIA attributes</li>
|
|
356
|
+
<li>Disabled items are properly marked with aria-disabled</li>
|
|
357
|
+
<li>Submenu state properly communicated via aria-expanded and aria-haspopup</li>
|
|
358
|
+
<li>WCAG AA compliant with proper contrast ratios and touch targets</li>
|
|
359
|
+
</ul>
|
|
360
|
+
|
|
361
|
+
<h3>Custom Click Handlers</h3>
|
|
362
|
+
<p>To use custom click handlers, define a global function and reference it by name:</p>
|
|
363
|
+
|
|
364
|
+
<CodeBlock code={`<script is:inline>
|
|
365
|
+
window.handleAction = function(value) {
|
|
366
|
+
// console.log('Selected:', value);
|
|
367
|
+
// Your custom logic here
|
|
368
|
+
};
|
|
369
|
+
</script>
|
|
370
|
+
|
|
371
|
+
<Dropdown
|
|
372
|
+
trigger="Actions"
|
|
373
|
+
items={[
|
|
374
|
+
{ label: 'Edit', value: 'edit', onClick: 'handleAction' },
|
|
375
|
+
{ label: 'Delete', value: 'delete', onClick: 'handleAction' },
|
|
376
|
+
]}
|
|
377
|
+
/>`} language="astro" />
|
|
378
|
+
<p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/dropdown">Svelte</a> · Vanilla: same HTML and BEM as in Usage above; add minimal JS for open/close and keyboard.</p>
|
|
379
|
+
</section>
|
|
380
|
+
</DocsLayout>
|
|
381
|
+
|
|
382
|
+
<script is:inline>
|
|
383
|
+
// Example handler for dropdown actions
|
|
384
|
+
window.handleAction = function(value) {
|
|
385
|
+
// console.log('Dropdown action selected:', value);
|
|
386
|
+
// In a real app, you would handle the action here
|
|
387
|
+
};
|
|
388
|
+
|
|
389
|
+
// Example handler for submenu actions
|
|
390
|
+
window.handleSubmenuAction = function(value) {
|
|
391
|
+
// console.log('Submenu action selected:', value);
|
|
392
|
+
// In a real app, you would handle the action here
|
|
393
|
+
};
|
|
394
|
+
</script>
|