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
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
---
|
|
2
|
+
import Navbar from '../components/Navbar.astro';
|
|
3
|
+
import Settings from '../components/Settings.astro';
|
|
2
4
|
interface Props {
|
|
3
5
|
title?: string;
|
|
4
6
|
}
|
|
@@ -16,7 +18,7 @@ const { title = '{{TITLE}}' } = Astro.props;
|
|
|
16
18
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
17
19
|
<!-- Theme flash prevention + accessibility (same as main site) -->
|
|
18
20
|
<script is:inline>
|
|
19
|
-
(function(){try{var s=localStorage.getItem('theme');var d='
|
|
21
|
+
(function(){try{var s=localStorage.getItem('theme');var d='{{DEFAULT_DARK}}';var l='{{DEFAULT_LIGHT}}';var initial=document.documentElement.getAttribute('data-theme');var r=!s?((initial&&initial!=='system')?initial:(matchMedia('(prefers-color-scheme: dark)').matches?d:l)):s==='system'?(matchMedia('(prefers-color-scheme: dark)').matches?d:l):s;document.documentElement.setAttribute('data-theme',r);var f=localStorage.getItem('fontSizeScale');if(f)document.documentElement.style.setProperty('--font-size-scale',f);if(localStorage.getItem('reducedMotion')==='true')document.documentElement.classList.add('reduced-motion');if(localStorage.getItem('highContrast')==='true')document.documentElement.classList.add('high-contrast');var b=localStorage.getItem('scrollbarStyle')||'thin';if(b==='thick')document.documentElement.classList.add('scrollbar-thick');else if(b==='hidden')document.documentElement.classList.add('scrollbar-hidden','hide-scrollbars');}catch(e){}})();
|
|
20
22
|
</script>
|
|
21
23
|
<!-- Toast: showToast, removeToast, removeAllToasts -->
|
|
22
24
|
<script is:inline>
|
|
@@ -27,6 +29,13 @@ const { title = '{{TITLE}}' } = Astro.props;
|
|
|
27
29
|
<title>{title}</title>
|
|
28
30
|
</head>
|
|
29
31
|
<body>
|
|
30
|
-
<
|
|
32
|
+
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
33
|
+
<Navbar />
|
|
34
|
+
<Settings />
|
|
35
|
+
<main id="main-content">
|
|
36
|
+
<div class="layout__container">
|
|
37
|
+
<slot />
|
|
38
|
+
</div>
|
|
39
|
+
</main>
|
|
31
40
|
</body>
|
|
32
41
|
</html>
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsLayout from '../../layouts/DocsLayout.astro';
|
|
3
|
+
import AccordionComponent from '../../components/Accordion.astro';
|
|
4
|
+
import CodeBlock from '../../components/CodeBlock.astro';
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<DocsLayout title="Accordion Component — Astro" description="Accessible accordion with collapsible sections, single or multiple open states, and keyboard navigation">
|
|
8
|
+
|
|
9
|
+
<p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/accordion" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/accordion</a>.</p>
|
|
10
|
+
|
|
11
|
+
<section>
|
|
12
|
+
<h2>Accordion Component</h2>
|
|
13
|
+
<p>An accessible accordion for collapsible sections. Supports single or multiple open panels and full keyboard navigation.</p>
|
|
14
|
+
|
|
15
|
+
<h3>Props</h3>
|
|
16
|
+
<ul>
|
|
17
|
+
<li><code>items</code> (array, required) - Array of objects with <code>id</code>, <code>title</code>, and optional <code>content</code></li>
|
|
18
|
+
<li><code>id</code> (string, optional) - Unique identifier for the accordion</li>
|
|
19
|
+
<li><code>allowMultiple</code> (boolean, optional) - Allow multiple panels open at once (default: <code>false</code>)</li>
|
|
20
|
+
<li><code>defaultExpanded</code> (string | string[], optional) - ID or array of IDs to expand by default (defaults to first item)</li>
|
|
21
|
+
<li><code>class</code> (string, optional) - Additional CSS classes</li>
|
|
22
|
+
</ul>
|
|
23
|
+
|
|
24
|
+
<h3>Item Structure</h3>
|
|
25
|
+
<ul>
|
|
26
|
+
<li><code>id</code> (string, required) - Unique identifier for the item</li>
|
|
27
|
+
<li><code>title</code> (string, required) - Heading text for the trigger</li>
|
|
28
|
+
<li><code>content</code> (string, optional) - HTML content for the panel (alternative to using slots)</li>
|
|
29
|
+
</ul>
|
|
30
|
+
|
|
31
|
+
<h3>Basic Usage (Single Open)</h3>
|
|
32
|
+
<p>By default only one panel is open at a time. Provide panel content as children in the same order as the items array:</p>
|
|
33
|
+
<div class="example">
|
|
34
|
+
<div class="example-title">Live Example</div>
|
|
35
|
+
<AccordionComponent
|
|
36
|
+
items={[
|
|
37
|
+
{ id: 'one', title: 'Section one' },
|
|
38
|
+
{ id: 'two', title: 'Section two' },
|
|
39
|
+
{ id: 'three', title: 'Section three' },
|
|
40
|
+
]}
|
|
41
|
+
>
|
|
42
|
+
<div>
|
|
43
|
+
<p>Content for section one. Only one panel is open at a time.</p>
|
|
44
|
+
</div>
|
|
45
|
+
<div>
|
|
46
|
+
<p>Content for section two.</p>
|
|
47
|
+
</div>
|
|
48
|
+
<div>
|
|
49
|
+
<p>Content for section three.</p>
|
|
50
|
+
</div>
|
|
51
|
+
</AccordionComponent>
|
|
52
|
+
</div>
|
|
53
|
+
|
|
54
|
+
<CodeBlock code={`---
|
|
55
|
+
import Accordion from '../../components/Accordion.astro';
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
<Accordion
|
|
59
|
+
items={[
|
|
60
|
+
{ id: 'one', title: 'Section one' },
|
|
61
|
+
{ id: 'two', title: 'Section two' },
|
|
62
|
+
{ id: 'three', title: 'Section three' },
|
|
63
|
+
]}
|
|
64
|
+
>
|
|
65
|
+
<div><p>Content for section one</p></div>
|
|
66
|
+
<div><p>Content for section two</p></div>
|
|
67
|
+
<div><p>Content for section three</p></div>
|
|
68
|
+
</Accordion>`} language="astro" />
|
|
69
|
+
|
|
70
|
+
<h3>Multiple Panels Open</h3>
|
|
71
|
+
<p>Set <code>allowMultiple</code> to <code>true</code> to allow multiple panels to be open at once:</p>
|
|
72
|
+
<div class="example">
|
|
73
|
+
<div class="example-title">Live Example</div>
|
|
74
|
+
<AccordionComponent
|
|
75
|
+
allowMultiple
|
|
76
|
+
items={[
|
|
77
|
+
{ id: 'a', title: 'First' },
|
|
78
|
+
{ id: 'b', title: 'Second' },
|
|
79
|
+
{ id: 'c', title: 'Third' },
|
|
80
|
+
]}
|
|
81
|
+
>
|
|
82
|
+
<div><p>First panel content. You can open several at once.</p></div>
|
|
83
|
+
<div><p>Second panel content.</p></div>
|
|
84
|
+
<div><p>Third panel content.</p></div>
|
|
85
|
+
</AccordionComponent>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<CodeBlock code={`<Accordion
|
|
89
|
+
allowMultiple
|
|
90
|
+
items={[
|
|
91
|
+
{ id: 'a', title: 'First' },
|
|
92
|
+
{ id: 'b', title: 'Second' },
|
|
93
|
+
{ id: 'c', title: 'Third' },
|
|
94
|
+
]}
|
|
95
|
+
>
|
|
96
|
+
<div><p>First panel content</p></div>
|
|
97
|
+
<div><p>Second panel content</p></div>
|
|
98
|
+
<div><p>Third panel content</p></div>
|
|
99
|
+
</Accordion>`} language="astro" />
|
|
100
|
+
|
|
101
|
+
<h3>With Content Property</h3>
|
|
102
|
+
<p>You can provide panel content directly in the item object:</p>
|
|
103
|
+
<div class="example">
|
|
104
|
+
<div class="example-title">Live Example</div>
|
|
105
|
+
<AccordionComponent
|
|
106
|
+
items={[
|
|
107
|
+
{ id: 'faq1', title: 'What is Rizzo CSS?', content: '<p>A design system and component library built with semantic CSS variables and Astro.</p>' },
|
|
108
|
+
{ id: 'faq2', title: 'Is it accessible?', content: '<p>Yes. Components follow WCAG 2.1 AA and use proper ARIA patterns.</p>' },
|
|
109
|
+
{ id: 'faq3', title: 'Can I use it with other frameworks?', content: '<p>The CSS is framework-agnostic. See the multi-framework documentation.</p>' },
|
|
110
|
+
]}
|
|
111
|
+
/>
|
|
112
|
+
</div>
|
|
113
|
+
|
|
114
|
+
<CodeBlock code={`<Accordion
|
|
115
|
+
items={[
|
|
116
|
+
{ id: 'faq1', title: 'Question one', content: '<p>Answer one</p>' },
|
|
117
|
+
{ id: 'faq2', title: 'Question two', content: '<p>Answer two</p>' },
|
|
118
|
+
]}
|
|
119
|
+
/>`} language="astro" />
|
|
120
|
+
|
|
121
|
+
<h3>Default Expanded</h3>
|
|
122
|
+
<p>Control which panel(s) are open initially with <code>defaultExpanded</code>:</p>
|
|
123
|
+
<div class="example">
|
|
124
|
+
<div class="example-title">Live Example</div>
|
|
125
|
+
<AccordionComponent
|
|
126
|
+
defaultExpanded="second"
|
|
127
|
+
items={[
|
|
128
|
+
{ id: 'first', title: 'First' },
|
|
129
|
+
{ id: 'second', title: 'Second (open by default)' },
|
|
130
|
+
{ id: 'third', title: 'Third' },
|
|
131
|
+
]}
|
|
132
|
+
>
|
|
133
|
+
<div><p>First panel</p></div>
|
|
134
|
+
<div><p>Second panel is expanded by default.</p></div>
|
|
135
|
+
<div><p>Third panel</p></div>
|
|
136
|
+
</AccordionComponent>
|
|
137
|
+
</div>
|
|
138
|
+
|
|
139
|
+
<CodeBlock code={`<Accordion
|
|
140
|
+
defaultExpanded="second"
|
|
141
|
+
items={[
|
|
142
|
+
{ id: 'first', title: 'First' },
|
|
143
|
+
{ id: 'second', title: 'Second' },
|
|
144
|
+
{ id: 'third', title: 'Third' },
|
|
145
|
+
]}
|
|
146
|
+
>
|
|
147
|
+
<div><p>First</p></div>
|
|
148
|
+
<div><p>Second</p></div>
|
|
149
|
+
<div><p>Third</p></div>
|
|
150
|
+
</Accordion>`} language="astro" />
|
|
151
|
+
|
|
152
|
+
<h3>Features</h3>
|
|
153
|
+
<ul>
|
|
154
|
+
<li><strong>Collapsible sections</strong> - Expand and collapse panels with smooth transitions</li>
|
|
155
|
+
<li><strong>Single or multiple open</strong> - <code>allowMultiple</code> controls whether only one or several panels can be open</li>
|
|
156
|
+
<li><strong>Keyboard navigation</strong> - Arrow Up/Down, Home, End, Enter, and Space</li>
|
|
157
|
+
<li><strong>ARIA</strong> - <code>aria-expanded</code>, <code>aria-controls</code>, <code>region</code>, <code>aria-labelledby</code></li>
|
|
158
|
+
<li><strong>Content from props or slots</strong> - Use <code>content</code> (HTML string) or pass children for panel content</li>
|
|
159
|
+
<li><strong>Theme-aware</strong> - Uses design system variables</li>
|
|
160
|
+
</ul>
|
|
161
|
+
|
|
162
|
+
<h3>Keyboard Navigation</h3>
|
|
163
|
+
<ul>
|
|
164
|
+
<li><strong>Arrow Down</strong> - Focus next trigger</li>
|
|
165
|
+
<li><strong>Arrow Up</strong> - Focus previous trigger</li>
|
|
166
|
+
<li><strong>Home</strong> - Focus first trigger</li>
|
|
167
|
+
<li><strong>End</strong> - Focus last trigger</li>
|
|
168
|
+
<li><strong>Enter / Space</strong> - Toggle focused panel</li>
|
|
169
|
+
</ul>
|
|
170
|
+
<p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/accordion">Svelte</a> · Vanilla: same HTML and BEM as in Usage above; add minimal JS for expand/collapse.</p>
|
|
171
|
+
</section>
|
|
172
|
+
</DocsLayout>
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsLayout from '../../layouts/DocsLayout.astro';
|
|
3
|
+
import CodeBlock from '../../components/CodeBlock.astro';
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<DocsLayout title="Alert Component — Astro" description="Accessible alert component with variants and dismissible functionality">
|
|
7
|
+
|
|
8
|
+
<p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/alert" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/alert</a>.</p>
|
|
9
|
+
|
|
10
|
+
<section>
|
|
11
|
+
<h2>Alert Component</h2>
|
|
12
|
+
<p>An accessible alert component for displaying important messages to users. Supports success, error, warning, and info variants with optional dismissible functionality.</p>
|
|
13
|
+
</section>
|
|
14
|
+
|
|
15
|
+
<section>
|
|
16
|
+
<h2>Variants</h2>
|
|
17
|
+
<p>Alerts come in four semantic variants that use theme-aware colors. Click the buttons below to see them in action:</p>
|
|
18
|
+
|
|
19
|
+
<div class="example">
|
|
20
|
+
<div class="example-title">Live Examples</div>
|
|
21
|
+
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-3); margin-bottom: var(--spacing-4);">
|
|
22
|
+
<button class="btn btn-success" onclick="showAlert('success', 'Success! Your changes have been saved successfully.')">Show Success Alert</button>
|
|
23
|
+
<button class="btn btn-error" onclick="showAlert('error', 'Error! Something went wrong. Please try again.')">Show Error Alert</button>
|
|
24
|
+
<button class="btn btn-warning" onclick="showAlert('warning', 'Warning! This action cannot be undone.')">Show Warning Alert</button>
|
|
25
|
+
<button class="btn btn-info" onclick="showAlert('info', 'Info: New features are available in the latest update.')">Show Info Alert</button>
|
|
26
|
+
</div>
|
|
27
|
+
<div id="alert-examples-container" class="alert-examples-container" style="min-height: 1px; margin-top: var(--spacing-4);"></div>
|
|
28
|
+
</div>
|
|
29
|
+
</section>
|
|
30
|
+
|
|
31
|
+
<section>
|
|
32
|
+
<h2>Auto-Dismiss</h2>
|
|
33
|
+
<p>Alerts can automatically dismiss after a set duration:</p>
|
|
34
|
+
|
|
35
|
+
<div class="example">
|
|
36
|
+
<div class="example-title">Auto-Dismiss Examples</div>
|
|
37
|
+
<div style="display: flex; flex-wrap: wrap; gap: var(--spacing-3); margin-bottom: var(--spacing-4);">
|
|
38
|
+
<button class="btn btn-primary" onclick="showAlert('success', 'This alert will auto-dismiss in 3 seconds', true, 3000, 'alert-auto-dismiss-container')">3 Second Auto-Dismiss</button>
|
|
39
|
+
<button class="btn btn-primary" onclick="showAlert('info', 'This alert will auto-dismiss in 5 seconds', true, 5000, 'alert-auto-dismiss-container')">5 Second Auto-Dismiss</button>
|
|
40
|
+
<button class="btn btn-primary" onclick="showAlert('warning', 'This alert will auto-dismiss in 7 seconds', true, 7000, 'alert-auto-dismiss-container')">7 Second Auto-Dismiss</button>
|
|
41
|
+
</div>
|
|
42
|
+
<div id="alert-auto-dismiss-container" class="alert-examples-container" style="min-height: 1px; margin-top: var(--spacing-4);"></div>
|
|
43
|
+
</div>
|
|
44
|
+
</section>
|
|
45
|
+
|
|
46
|
+
<section>
|
|
47
|
+
<h2>Usage</h2>
|
|
48
|
+
<CodeBlock code={`---
|
|
49
|
+
import Alert from '../../components/Alert.astro';
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
<!-- Basic alert -->
|
|
53
|
+
<Alert variant="success">
|
|
54
|
+
Your changes have been saved.
|
|
55
|
+
</Alert>
|
|
56
|
+
|
|
57
|
+
<!-- Dismissible alert -->
|
|
58
|
+
<Alert variant="error" dismissible>
|
|
59
|
+
An error occurred. Please try again.
|
|
60
|
+
</Alert>
|
|
61
|
+
|
|
62
|
+
<!-- Auto-dismiss alert -->
|
|
63
|
+
<Alert variant="success" dismissible autoDismiss={5000}>
|
|
64
|
+
This alert will automatically dismiss in 5 seconds.
|
|
65
|
+
</Alert>`} language="astro" />
|
|
66
|
+
</section>
|
|
67
|
+
|
|
68
|
+
<section>
|
|
69
|
+
<h2>Props</h2>
|
|
70
|
+
<ul>
|
|
71
|
+
<li><code>variant</code> (string, optional) - Alert variant: <code>"success"</code>, <code>"error"</code>, <code>"warning"</code>, or <code>"info"</code> (default: <code>"info"</code>)</li>
|
|
72
|
+
<li><code>dismissible</code> (boolean, optional) - Whether the alert can be dismissed (default: <code>false</code>)</li>
|
|
73
|
+
<li><code>autoDismiss</code> (number, optional) - Auto-dismiss duration in milliseconds. Set to <code>0</code> to disable (default: <code>0</code>). Common values: <code>3000</code> (3s), <code>5000</code> (5s), <code>7000</code> (7s)</li>
|
|
74
|
+
<li><code>id</code> (string, optional) - Unique ID for the alert. If not provided, a random ID will be generated</li>
|
|
75
|
+
<li><code>class</code> (string, optional) - Additional CSS classes</li>
|
|
76
|
+
</ul>
|
|
77
|
+
</section>
|
|
78
|
+
|
|
79
|
+
<section>
|
|
80
|
+
<h2>Features</h2>
|
|
81
|
+
<ul>
|
|
82
|
+
<li>Four semantic variants (success, error, warning, info)</li>
|
|
83
|
+
<li>Theme-aware colors using semantic variables</li>
|
|
84
|
+
<li>Dismissible functionality with smooth animations</li>
|
|
85
|
+
<li><strong>Auto-dismiss functionality</strong> - Automatically dismiss after a set duration</li>
|
|
86
|
+
<li>Full keyboard accessibility (Enter/Space to dismiss)</li>
|
|
87
|
+
<li>ARIA attributes for screen readers (<code>role="alert"</code>, <code>aria-live="polite"</code>)</li>
|
|
88
|
+
<li>Screen reader announcements when dismissed</li>
|
|
89
|
+
<li>Respects <code>prefers-reduced-motion</code></li>
|
|
90
|
+
<li>Focus management for close button</li>
|
|
91
|
+
</ul>
|
|
92
|
+
|
|
93
|
+
<h3>Toast Notifications</h3>
|
|
94
|
+
<p>For toast notifications (fixed position alerts), see the <a href="/docs/components/toast">Toast Component documentation</a>.</p>
|
|
95
|
+
</section>
|
|
96
|
+
|
|
97
|
+
<section>
|
|
98
|
+
<h2>Accessibility</h2>
|
|
99
|
+
<p>The Alert component includes comprehensive accessibility features:</p>
|
|
100
|
+
<ul>
|
|
101
|
+
<li><strong>ARIA Roles:</strong> Uses <code>role="alert"</code> for important messages</li>
|
|
102
|
+
<li><strong>Live Regions:</strong> <code>aria-live="polite"</code> for screen reader announcements</li>
|
|
103
|
+
<li><strong>Labels:</strong> Each variant has an appropriate <code>aria-label</code></li>
|
|
104
|
+
<li><strong>Keyboard Support:</strong> Close button responds to Enter/Space keys</li>
|
|
105
|
+
<li><strong>Focus Management:</strong> Close button has visible focus indicators</li>
|
|
106
|
+
<li><strong>Screen Reader Feedback:</strong> Announces when alerts are dismissed</li>
|
|
107
|
+
</ul>
|
|
108
|
+
<p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/alert">Svelte</a> · Vanilla: same HTML and BEM as in Usage above; add minimal JS for dismiss.</p>
|
|
109
|
+
</section>
|
|
110
|
+
</DocsLayout>
|
|
111
|
+
|
|
112
|
+
<script is:inline>
|
|
113
|
+
// Make function available globally immediately
|
|
114
|
+
function showAlert(variant, message, dismissible, autoDismiss, containerId) {
|
|
115
|
+
if (!message) return;
|
|
116
|
+
|
|
117
|
+
variant = variant || 'info';
|
|
118
|
+
dismissible = dismissible !== undefined ? dismissible : true;
|
|
119
|
+
autoDismiss = autoDismiss !== undefined ? autoDismiss : 0;
|
|
120
|
+
containerId = containerId || 'alert-examples-container';
|
|
121
|
+
|
|
122
|
+
// Find the specific alert container
|
|
123
|
+
var container = document.getElementById(containerId);
|
|
124
|
+
if (!container) {
|
|
125
|
+
// Fallback to first container with class
|
|
126
|
+
container = document.querySelector('.alert-examples-container');
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if (!container) {
|
|
130
|
+
console.error('Alert container not found:', containerId);
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
var alertId = 'alert-' + Math.random().toString(36).substr(2, 9);
|
|
135
|
+
var alertEl = document.createElement('div');
|
|
136
|
+
alertEl.id = alertId;
|
|
137
|
+
alertEl.className = 'alert alert--' + variant;
|
|
138
|
+
alertEl.setAttribute('role', 'alert');
|
|
139
|
+
alertEl.setAttribute('aria-live', 'polite');
|
|
140
|
+
|
|
141
|
+
// Ensure alert is visible and has proper display
|
|
142
|
+
alertEl.style.display = 'flex';
|
|
143
|
+
alertEl.style.visibility = 'visible';
|
|
144
|
+
alertEl.style.opacity = '1';
|
|
145
|
+
|
|
146
|
+
var content = document.createElement('div');
|
|
147
|
+
content.className = 'alert__content';
|
|
148
|
+
// Extract variant label and message - remove duplicate variant label from message
|
|
149
|
+
var variantLabel = variant.charAt(0).toUpperCase() + variant.slice(1);
|
|
150
|
+
var variantPrefix = variantLabel + '!';
|
|
151
|
+
var variantPrefixWithColon = variantLabel + ':';
|
|
152
|
+
|
|
153
|
+
// Remove variant label from the beginning of the message if it exists
|
|
154
|
+
var cleanMessage = message;
|
|
155
|
+
if (message.toLowerCase().startsWith(variantPrefix.toLowerCase())) {
|
|
156
|
+
cleanMessage = message.substring(variantPrefix.length).trim();
|
|
157
|
+
} else if (message.toLowerCase().startsWith(variantPrefixWithColon.toLowerCase())) {
|
|
158
|
+
cleanMessage = message.substring(variantPrefixWithColon.length).trim();
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// Show just the variant label in bold, then the clean message
|
|
162
|
+
content.innerHTML = '<strong>' + variantPrefix + '</strong> ' + cleanMessage;
|
|
163
|
+
// Ensure content is visible
|
|
164
|
+
content.style.color = 'inherit';
|
|
165
|
+
content.style.display = 'block';
|
|
166
|
+
content.style.visibility = 'visible';
|
|
167
|
+
content.style.opacity = '1';
|
|
168
|
+
alertEl.appendChild(content);
|
|
169
|
+
|
|
170
|
+
var closeBtn = null;
|
|
171
|
+
if (dismissible) {
|
|
172
|
+
closeBtn = document.createElement('button');
|
|
173
|
+
closeBtn.type = 'button';
|
|
174
|
+
closeBtn.className = 'alert__close';
|
|
175
|
+
closeBtn.setAttribute('aria-label', 'Dismiss alert');
|
|
176
|
+
closeBtn.innerHTML = '<svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round"><line x1="4" y1="4" x2="12" y2="12"></line><line x1="12" y1="4" x2="4" y2="12"></line></svg>';
|
|
177
|
+
// Ensure close button is visible
|
|
178
|
+
closeBtn.style.color = 'inherit';
|
|
179
|
+
closeBtn.style.opacity = '0.8';
|
|
180
|
+
closeBtn.style.display = 'flex';
|
|
181
|
+
closeBtn.style.visibility = 'visible';
|
|
182
|
+
alertEl.appendChild(closeBtn);
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
container.appendChild(alertEl);
|
|
186
|
+
|
|
187
|
+
// Force CSS to apply after element is in DOM - especially important for warning variant
|
|
188
|
+
requestAnimationFrame(function() {
|
|
189
|
+
// Force reflow to apply CSS classes
|
|
190
|
+
alertEl.offsetHeight;
|
|
191
|
+
|
|
192
|
+
// Get computed styles
|
|
193
|
+
var computedStyle = window.getComputedStyle(alertEl);
|
|
194
|
+
var textColor = computedStyle.color;
|
|
195
|
+
var bgColor = computedStyle.backgroundColor;
|
|
196
|
+
|
|
197
|
+
// For warning alerts, ensure theme variable text color is applied
|
|
198
|
+
if (variant === 'warning') {
|
|
199
|
+
// Use CSS variable for theming support
|
|
200
|
+
alertEl.style.color = 'var(--warning-text)';
|
|
201
|
+
content.style.color = 'var(--warning-text)';
|
|
202
|
+
if (closeBtn) {
|
|
203
|
+
closeBtn.style.color = 'var(--warning-text)';
|
|
204
|
+
closeBtn.style.opacity = '0.9';
|
|
205
|
+
}
|
|
206
|
+
} else {
|
|
207
|
+
// For other variants, just ensure color is inherited
|
|
208
|
+
if (textColor && textColor !== 'transparent' && textColor !== 'rgba(0, 0, 0, 0)') {
|
|
209
|
+
content.style.color = textColor;
|
|
210
|
+
} else {
|
|
211
|
+
content.style.color = 'inherit';
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
// Double-check content is visible
|
|
216
|
+
var contentStyle = window.getComputedStyle(content);
|
|
217
|
+
if (contentStyle.display === 'none' || contentStyle.visibility === 'hidden' || contentStyle.opacity === '0') {
|
|
218
|
+
content.style.display = 'block';
|
|
219
|
+
content.style.visibility = 'visible';
|
|
220
|
+
content.style.opacity = '1';
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
var closeAlert = function() {
|
|
225
|
+
alertEl.style.opacity = '0';
|
|
226
|
+
alertEl.style.transform = 'translateY(-10px)';
|
|
227
|
+
setTimeout(function() {
|
|
228
|
+
if (alertEl && alertEl.parentNode) {
|
|
229
|
+
alertEl.remove();
|
|
230
|
+
}
|
|
231
|
+
}, 200);
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
if (closeBtn) {
|
|
235
|
+
closeBtn.addEventListener('click', closeAlert);
|
|
236
|
+
|
|
237
|
+
if (autoDismiss > 0) {
|
|
238
|
+
var timeoutId = setTimeout(closeAlert, autoDismiss);
|
|
239
|
+
closeBtn.addEventListener('click', function() {
|
|
240
|
+
clearTimeout(timeoutId);
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
} else if (autoDismiss > 0) {
|
|
244
|
+
setTimeout(closeAlert, autoDismiss);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Make available on window for global access
|
|
249
|
+
window.showAlert = showAlert;
|
|
250
|
+
</script>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
---
|
|
2
|
+
import DocsLayout from '../../layouts/DocsLayout.astro';
|
|
3
|
+
import AvatarComponent from '../../components/Avatar.astro';
|
|
4
|
+
import CodeBlock from '../../components/CodeBlock.astro';
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
<DocsLayout title="Avatar Component — Astro" description="User avatar with image or initials fallback, sizes and shapes">
|
|
8
|
+
|
|
9
|
+
<p class="docs__read-docs">Read the full docs for this component at <a href="https://rizzo-css.vercel.app/docs/components/avatar" target="_blank" rel="noopener noreferrer">https://rizzo-css.vercel.app/docs/components/avatar</a>.</p>
|
|
10
|
+
|
|
11
|
+
<section>
|
|
12
|
+
<h2>Avatar Component</h2>
|
|
13
|
+
<p>An accessible avatar for users: show a profile image when available, or initials derived from a name (or custom initials) when no image is provided. Supports multiple sizes and circle or square shape.</p>
|
|
14
|
+
|
|
15
|
+
<h3>Props</h3>
|
|
16
|
+
<ul>
|
|
17
|
+
<li><code>src</code> (string, optional) - Image URL; when provided, the image is shown</li>
|
|
18
|
+
<li><code>alt</code> (string, optional) - Alt text for the image</li>
|
|
19
|
+
<li><code>name</code> (string, optional) - Full name used to derive initials when no image (e.g. "Jane Doe" → "JD")</li>
|
|
20
|
+
<li><code>initials</code> (string, optional) - Override initials when no image (e.g. "JD"); ignored if <code>name</code> is provided</li>
|
|
21
|
+
<li><code>size</code> (string, optional) - <code>sm</code>, <code>md</code>, <code>lg</code> (default: md)</li>
|
|
22
|
+
<li><code>shape</code> (string, optional) - <code>circle</code>, <code>square</code> (default: circle)</li>
|
|
23
|
+
<li><code>class</code> (string, optional) - Additional CSS classes</li>
|
|
24
|
+
</ul>
|
|
25
|
+
|
|
26
|
+
<h3>Basic Usage (initials)</h3>
|
|
27
|
+
<p>When no <code>src</code> is provided, use <code>name</code> to show initials (first letter of first and last word, or first two letters of a single word).</p>
|
|
28
|
+
<div class="example">
|
|
29
|
+
<div class="example-title">Live Example</div>
|
|
30
|
+
<div style="display: flex; align-items: center; gap: var(--spacing-4); flex-wrap: wrap;">
|
|
31
|
+
<AvatarComponent name="Jane Doe" />
|
|
32
|
+
<AvatarComponent name="Alice" />
|
|
33
|
+
<AvatarComponent initials="AB" />
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
<CodeBlock code={`---
|
|
37
|
+
import Avatar from '../../components/Avatar.astro';
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
<Avatar name="Jane Doe" />
|
|
41
|
+
<Avatar name="Alice" />
|
|
42
|
+
<Avatar initials="AB" />`} language="astro" />
|
|
43
|
+
|
|
44
|
+
<h3>Sizes</h3>
|
|
45
|
+
<div class="example">
|
|
46
|
+
<div class="example-title">Live Example</div>
|
|
47
|
+
<div style="display: flex; align-items: center; gap: var(--spacing-4); flex-wrap: wrap;">
|
|
48
|
+
<AvatarComponent name="Jane Doe" size="sm" />
|
|
49
|
+
<AvatarComponent name="Jane Doe" size="md" />
|
|
50
|
+
<AvatarComponent name="Jane Doe" size="lg" />
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<CodeBlock code={`<Avatar name="Jane Doe" size="sm" />
|
|
54
|
+
<Avatar name="Jane Doe" size="md" />
|
|
55
|
+
<Avatar name="Jane Doe" size="lg" />`} language="astro" />
|
|
56
|
+
|
|
57
|
+
<h3>Shape</h3>
|
|
58
|
+
<p>Use <code>shape="square"</code> for a rounded square; default is <code>circle</code>.</p>
|
|
59
|
+
<div class="example">
|
|
60
|
+
<div class="example-title">Live Example</div>
|
|
61
|
+
<div style="display: flex; align-items: center; gap: var(--spacing-4); flex-wrap: wrap;">
|
|
62
|
+
<AvatarComponent name="Jane Doe" shape="circle" />
|
|
63
|
+
<AvatarComponent name="Jane Doe" shape="square" />
|
|
64
|
+
</div>
|
|
65
|
+
</div>
|
|
66
|
+
<CodeBlock code={`<Avatar name="Jane Doe" shape="circle" />
|
|
67
|
+
<Avatar name="Jane Doe" shape="square" />`} language="astro" />
|
|
68
|
+
|
|
69
|
+
<h3>With image</h3>
|
|
70
|
+
<p>Pass <code>src</code> (and <code>alt</code>) to show a profile image. The image is scaled to cover the avatar with <code>object-fit: cover</code>.</p>
|
|
71
|
+
<div class="example">
|
|
72
|
+
<div class="example-title">Live Example (placeholder image)</div>
|
|
73
|
+
<div style="display: flex; align-items: center; gap: var(--spacing-4); flex-wrap: wrap;">
|
|
74
|
+
<AvatarComponent
|
|
75
|
+
src="https://api.dicebear.com/7.x/initials/svg?seed=Jane"
|
|
76
|
+
alt="Jane Doe"
|
|
77
|
+
size="md"
|
|
78
|
+
/>
|
|
79
|
+
<AvatarComponent
|
|
80
|
+
src="https://api.dicebear.com/7.x/initials/svg?seed=Alice"
|
|
81
|
+
alt="Alice"
|
|
82
|
+
size="lg"
|
|
83
|
+
/>
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
<CodeBlock code={`<Avatar
|
|
87
|
+
src="/path/to/photo.jpg"
|
|
88
|
+
alt="Jane Doe"
|
|
89
|
+
size="md"
|
|
90
|
+
/>`} language="astro" />
|
|
91
|
+
|
|
92
|
+
<h3>Features</h3>
|
|
93
|
+
<ul>
|
|
94
|
+
<li><strong>Accessible</strong> - <code>role="img"</code> and <code>aria-label</code> from alt, name, or initials</li>
|
|
95
|
+
<li><strong>Initials</strong> - Derived from <code>name</code> (e.g. "Jane Doe" → "JD") or set via <code>initials</code></li>
|
|
96
|
+
<li><strong>Image</strong> - Optional <code>src</code> with <code>loading="lazy"</code> and <code>object-fit: cover</code></li>
|
|
97
|
+
<li><strong>Sizes</strong> - sm, md, lg</li>
|
|
98
|
+
<li><strong>Shape</strong> - circle (default) or square with rounded corners</li>
|
|
99
|
+
</ul>
|
|
100
|
+
<p><strong>Svelte & Vanilla:</strong> <a href="/docs/svelte/components/avatar">Svelte</a> · Vanilla: same HTML and BEM as in Usage above.</p>
|
|
101
|
+
</section>
|
|
102
|
+
</DocsLayout>
|