rizzo-css 0.0.12 → 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 +93 -43
- 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-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 +11 -4
- 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 +16 -6
- package/scaffold/vanilla/js/main.js +4 -3
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import ThemeSwitcher from '$lib/rizzo/ThemeSwitcher.svelte';
|
|
3
|
+
import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
|
|
4
|
+
</script>
|
|
5
|
+
|
|
6
|
+
<section>
|
|
7
|
+
<h2>Theme Switcher component</h2>
|
|
8
|
+
<p>Accessible theme dropdown with <strong>Preference</strong> (System), <strong>Dark</strong>, and <strong>Light</strong> groups, a unique icon per theme, and a preview panel. Same behavior as the <a href="/docs/components/theme-switcher">Astro ThemeSwitcher</a>: persists in <code>localStorage</code> (key <code>theme</code>), sets <code>data-theme</code> on <code><html></code>.</p>
|
|
9
|
+
|
|
10
|
+
<h3>Live example</h3>
|
|
11
|
+
<div class="example">
|
|
12
|
+
<div class="example-title">Live Example</div>
|
|
13
|
+
<p>Try switching themes using the theme switcher below (Svelte component):</p>
|
|
14
|
+
<ThemeSwitcher />
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<h3>Features</h3>
|
|
18
|
+
<ul>
|
|
19
|
+
<li><strong>Preference (System)</strong> — Option to follow OS light/dark; resolves to a concrete theme when applied. When System is selected, both System and the resolved theme show the active state in the UI.</li>
|
|
20
|
+
<li><strong>Preview panel</strong> — When the menu is open (viewports >480px), a preview panel is always visible. It shows a fixed “Preview” label; the theme name, swatch, and accent bar show the <strong>current</strong> theme by default and the <strong>hovered</strong> theme on hover/focus. Full-height divider between list and preview. Hidden on small viewports.</li>
|
|
21
|
+
<li>Groups: Preference, Dark themes, Light themes; each theme has a unique icon (from <code>themes.ts</code>).</li>
|
|
22
|
+
<li>Trigger shows the active theme name and icon.</li>
|
|
23
|
+
<li>Persists selection in <code>localStorage</code> (<code>theme</code>: theme id or <code>system</code>).</li>
|
|
24
|
+
<li>Full keyboard navigation (Enter/Space to open/close, Arrow keys, Home/End, Escape, Tab).</li>
|
|
25
|
+
</ul>
|
|
26
|
+
|
|
27
|
+
<h3>Key BEM classes and data attributes</h3>
|
|
28
|
+
<ul>
|
|
29
|
+
<li><code>theme-switcher</code> — root; <code>data-theme-switcher</code> (for script or shared behavior).</li>
|
|
30
|
+
<li><code>theme-switcher__trigger</code> — button; <code>aria-expanded</code>, <code>aria-haspopup</code>, <code>aria-controls</code> = menu id.</li>
|
|
31
|
+
<li><code>theme-switcher__label-wrapper</code> — wraps label + optional icon; <code>data-theme-label-wrapper</code>.</li>
|
|
32
|
+
<li><code>theme-switcher__label</code> — current theme name; <code>data-theme-label</code>.</li>
|
|
33
|
+
<li><code>theme-switcher__icon</code> — chevron (open/close).</li>
|
|
34
|
+
<li><code>theme-switcher__menu</code> — dropdown; <code>role="menu"</code>, <code>aria-labelledby</code>, <code>aria-label</code>, <code>tabindex="-1"</code>. Add <code>theme-switcher__menu--open</code> when open.</li>
|
|
35
|
+
<li><code>theme-switcher__menu-options</code> — scrollable list of options; has a full-height border on the right (divider) on larger screens.</li>
|
|
36
|
+
<li><code>theme-switcher__group</code> — section; <code>role="group"</code>, <code>aria-label</code> (e.g. “Preference”, “Dark themes”, “Light themes”).</li>
|
|
37
|
+
<li><code>theme-switcher__group-label</code> — section heading; <code>role="presentation"</code>.</li>
|
|
38
|
+
<li><code>theme-switcher__option</code> — one theme option; <code>role="menuitemradio"</code>, <code>aria-checked</code>, <code>tabindex="-1"</code>. Add <code>theme-switcher__option--active</code> when selected. <code>data-theme-value</code> (theme id or <code>system</code>), <code>data-theme-type</code> (<code>system</code> / <code>dark</code> / <code>light</code>), <code>data-theme-bg</code>, <code>data-theme-accent</code>, <code>data-theme-label</code> for preview and styling.</li>
|
|
39
|
+
<li><code>theme-switcher__option-icon</code> — icon inside option.</li>
|
|
40
|
+
<li><code>theme-switcher__preview</code> — preview panel; <code>data-theme-preview</code>. On open, set <code>aria-hidden="false"</code> when viewport >480px.</li>
|
|
41
|
+
<li><code>theme-switcher__preview-title</code> — fixed “Preview” label.</li>
|
|
42
|
+
<li><code>theme-switcher__preview-header</code> — theme name; <code>data-theme-preview-label</code>.</li>
|
|
43
|
+
<li><code>theme-switcher__preview-swatch-wrap</code>, <code>theme-switcher__preview-swatch</code> — swatch; <code>data-theme-preview-swatch</code>. Set background (e.g. from <code>data-theme-bg</code>) for the hovered/current theme.</li>
|
|
44
|
+
<li><code>theme-switcher__preview-accent</code> — accent bar; <code>data-theme-preview-accent</code>. Set background from <code>data-theme-accent</code>.</li>
|
|
45
|
+
</ul>
|
|
46
|
+
|
|
47
|
+
<h3>Theme utilities</h3>
|
|
48
|
+
<p>Use these (from <code>src/utils/theme.ts</code> or your port) to apply and display themes:</p>
|
|
49
|
+
<ul>
|
|
50
|
+
<li><code>applyTheme(value)</code> — Sets <code>data-theme</code> on <code>html</code> and saves to <code>localStorage</code> (<code>theme</code>). Use a theme id (e.g. <code>github-dark-classic</code>) or <code>system</code>. Dispatches <code>rizzo-theme-change</code>.</li>
|
|
51
|
+
<li><code>getThemeLabel(value)</code> / <code>getThemeInfo(value)</code> — Display name for a theme id or <code>system</code>.</li>
|
|
52
|
+
<li><code>getStoredTheme()</code> — Returns current value in <code>localStorage</code> (<code>theme</code> id or <code>system</code>).</li>
|
|
53
|
+
<li><code>resolveSystemTheme()</code> — Resolves OS preference to a concrete theme id (dark → default dark, light → default light).</li>
|
|
54
|
+
<li>Constants: <code>THEME_SYSTEM</code>, <code>DEFAULT_THEME_DARK</code>, <code>DEFAULT_THEME_LIGHT</code>.</li>
|
|
55
|
+
</ul>
|
|
56
|
+
<p>Theme IDs: run <code>npx rizzo-css theme</code> or see <a href="/docs/theming#available-themes">Theming – Available themes</a>. Listen for <code>rizzo-theme-change</code> to sync other UI when the theme changes.</p>
|
|
57
|
+
|
|
58
|
+
<h3>Structure example (simplified)</h3>
|
|
59
|
+
<CodeBlock
|
|
60
|
+
code={`<div class="theme-switcher" data-theme-switcher>
|
|
61
|
+
<button
|
|
62
|
+
type="button"
|
|
63
|
+
class="theme-switcher__trigger"
|
|
64
|
+
aria-expanded={open}
|
|
65
|
+
aria-haspopup="true"
|
|
66
|
+
aria-controls="theme-menu"
|
|
67
|
+
aria-label="Select theme"
|
|
68
|
+
onclick={() => (open = !open)}
|
|
69
|
+
>
|
|
70
|
+
<span class="theme-switcher__label-wrapper" data-theme-label-wrapper>
|
|
71
|
+
<span class="theme-switcher__label" data-theme-label>{currentLabel}</span>
|
|
72
|
+
</span>
|
|
73
|
+
<ChevronDown class="theme-switcher__icon" width={16} height={16} />
|
|
74
|
+
</button>
|
|
75
|
+
<div
|
|
76
|
+
class="theme-switcher__menu"
|
|
77
|
+
class:theme-switcher__menu--open={open}
|
|
78
|
+
id="theme-menu"
|
|
79
|
+
role="menu"
|
|
80
|
+
aria-label="Theme selection"
|
|
81
|
+
aria-hidden={!open}
|
|
82
|
+
tabindex="-1"
|
|
83
|
+
>
|
|
84
|
+
<div class="theme-switcher__menu-options">
|
|
85
|
+
<div class="theme-switcher__group" role="group" aria-label="Preference">
|
|
86
|
+
<div class="theme-switcher__group-label" role="presentation">Preference</div>
|
|
87
|
+
<div
|
|
88
|
+
class="theme-switcher__option"
|
|
89
|
+
class:theme-switcher__option--active={storedTheme === 'system'}
|
|
90
|
+
role="menuitemradio"
|
|
91
|
+
aria-checked={storedTheme === 'system'}
|
|
92
|
+
data-theme-value="system"
|
|
93
|
+
data-theme-type="system"
|
|
94
|
+
onclick={() => selectTheme('system')}
|
|
95
|
+
>System</div>
|
|
96
|
+
</div>
|
|
97
|
+
<div class="theme-switcher__group" role="group" aria-label="Dark themes">
|
|
98
|
+
<div class="theme-switcher__group-label" role="presentation">Dark</div>
|
|
99
|
+
{#each darkThemes as theme}
|
|
100
|
+
<div
|
|
101
|
+
class="theme-switcher__option"
|
|
102
|
+
class:theme-switcher__option--active={storedTheme === theme.value}
|
|
103
|
+
role="menuitemradio"
|
|
104
|
+
aria-checked={storedTheme === theme.value}
|
|
105
|
+
data-theme-value={theme.value}
|
|
106
|
+
data-theme-bg={theme.bg}
|
|
107
|
+
data-theme-accent={theme.accent}
|
|
108
|
+
data-theme-label={theme.label}
|
|
109
|
+
onclick={() => selectTheme(theme.value)}
|
|
110
|
+
onmouseenter={() => (previewTheme = theme.value)}
|
|
111
|
+
>{theme.label}</div>
|
|
112
|
+
{/each}
|
|
113
|
+
</div>
|
|
114
|
+
<!-- Light group similar -->
|
|
115
|
+
</div>
|
|
116
|
+
<div class="theme-switcher__preview" data-theme-preview aria-hidden={!open}>
|
|
117
|
+
<div class="theme-switcher__preview-title">Preview</div>
|
|
118
|
+
<div class="theme-switcher__preview-header" data-theme-preview-label>{previewLabel}</div>
|
|
119
|
+
<div class="theme-switcher__preview-swatch-wrap">
|
|
120
|
+
<div class="theme-switcher__preview-swatch" data-theme-preview-swatch style="background: {previewBg}"></div>
|
|
121
|
+
</div>
|
|
122
|
+
<div class="theme-switcher__preview-accent" data-theme-preview-accent style="background: {previewAccent}"></div>
|
|
123
|
+
</div>
|
|
124
|
+
</div>
|
|
125
|
+
</div>`}
|
|
126
|
+
language="svelte"
|
|
127
|
+
/>
|
|
128
|
+
|
|
129
|
+
<h3>Keyboard navigation</h3>
|
|
130
|
+
<ul>
|
|
131
|
+
<li><kbd>Enter</kbd> or <kbd>Space</kbd> — Open or close menu</li>
|
|
132
|
+
<li><kbd>ArrowDown</kbd> — Open menu and focus first option</li>
|
|
133
|
+
<li><kbd>ArrowUp</kbd> — Open menu and focus last option</li>
|
|
134
|
+
<li><kbd>ArrowDown</kbd> / <kbd>ArrowUp</kbd> — Move between options</li>
|
|
135
|
+
<li><kbd>Home</kbd> / <kbd>End</kbd> — First or last option</li>
|
|
136
|
+
<li><kbd>Enter</kbd> or <kbd>Space</kbd> — Select focused theme</li>
|
|
137
|
+
<li><kbd>Escape</kbd> — Close menu</li>
|
|
138
|
+
<li><kbd>Tab</kbd> — Close menu and tab to next element</li>
|
|
139
|
+
</ul>
|
|
140
|
+
|
|
141
|
+
<h3>Implementing in Svelte</h3>
|
|
142
|
+
<ul>
|
|
143
|
+
<li><strong>Open state:</strong> e.g. <code>let open = $state(false)</code>. Toggle <code>theme-switcher__menu--open</code> on the menu and set <code>aria-expanded</code> and <code>aria-hidden</code> accordingly.</li>
|
|
144
|
+
<li><strong>Current theme:</strong> Read from <code>getStoredTheme()</code> or your store; set <code>currentLabel</code> via <code>getThemeLabel(storedTheme)</code> (use resolved theme when stored value is <code>system</code>). Mark the matching option with <code>theme-switcher__option--active</code>.</li>
|
|
145
|
+
<li><strong>Select theme:</strong> On option click/keyboard select, call <code>applyTheme(value)</code> (or set <code>data-theme</code> on <code>document.documentElement</code> and <code>localStorage.setItem('theme', value)</code>). Close menu and restore focus to trigger.</li>
|
|
146
|
+
<li><strong>Preview on hover:</strong> Track <code>previewTheme</code> (theme id or null). On option <code>mouseenter</code>/focus, set it to that option’s <code>data-theme-value</code>; on <code>mouseleave</code>/blur from the list, set to <code>null</code> (show current). Update preview label, swatch background, and accent from the hovered option’s <code>data-theme-*</code> or from theme config. When <code>previewTheme</code> is null, show the current (resolved) theme in the preview.</li>
|
|
147
|
+
<li><strong>System preference:</strong> Listen for <code>prefers-color-scheme</code> and, when stored value is <code>system</code>, call <code>applyTheme('system')</code> again to re-resolve and update the document.</li>
|
|
148
|
+
<li><strong>Focus trap:</strong> When open, focus first option (or keep focus on trigger); trap Tab inside menu; on close, focus trigger.</li>
|
|
149
|
+
</ul>
|
|
150
|
+
|
|
151
|
+
<p><a href="/docs/components/theme-switcher">Full Astro Theme Switcher documentation</a> — implementation details and keyboard behavior.</p>
|
|
152
|
+
<p><a href="/docs/svelte/components">← Back to Svelte components</a></p>
|
|
153
|
+
</section>
|
|
154
|
+
|
|
155
|
+
<style>
|
|
156
|
+
.example {
|
|
157
|
+
margin: var(--spacing-6) 0;
|
|
158
|
+
padding: var(--spacing-4);
|
|
159
|
+
background: var(--background-alt);
|
|
160
|
+
border: 1px solid var(--border);
|
|
161
|
+
border-radius: var(--radius-lg);
|
|
162
|
+
}
|
|
163
|
+
.example-title {
|
|
164
|
+
font-size: var(--font-size-sm);
|
|
165
|
+
font-weight: var(--font-weight-medium);
|
|
166
|
+
color: var(--text-dim);
|
|
167
|
+
margin-bottom: var(--spacing-3);
|
|
168
|
+
text-transform: uppercase;
|
|
169
|
+
letter-spacing: var(--letter-spacing-wider);
|
|
170
|
+
}
|
|
171
|
+
kbd {
|
|
172
|
+
display: inline-block;
|
|
173
|
+
padding: var(--spacing-0-125) var(--spacing-0-375);
|
|
174
|
+
background-color: var(--background-alt);
|
|
175
|
+
border: var(--outline-width) solid var(--border);
|
|
176
|
+
border-radius: var(--radius);
|
|
177
|
+
font-family: var(--font-family-mono);
|
|
178
|
+
font-size: var(--font-size-xs);
|
|
179
|
+
line-height: 1;
|
|
180
|
+
}
|
|
181
|
+
</style>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<section>
|
|
2
|
+
<h2>Theming</h2>
|
|
3
|
+
<p>The theme system is framework-agnostic: the same CSS variables and <code>data-theme</code> attribute apply. Use the built-in themes or create custom ones as described in the main docs.</p>
|
|
4
|
+
<p><a href="/docs/theming">Full theming documentation</a> — same CSS variables and <code>data-theme</code> in Svelte.</p>
|
|
5
|
+
<p><a href="/docs/svelte">← Back to Svelte docs</a></p>
|
|
6
|
+
</section>
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
|
|
3
|
+
|
|
4
|
+
function showToastGlobal(message: string, options?: { variant?: string; position?: string; autoDismiss?: number }) {
|
|
5
|
+
if (typeof window !== 'undefined' && (window as any).showToast) {
|
|
6
|
+
(window as any).showToast(message, options);
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function removeAllToastsGlobal() {
|
|
11
|
+
if (typeof window !== 'undefined' && (window as any).removeAllToasts) {
|
|
12
|
+
(window as any).removeAllToasts();
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<section>
|
|
18
|
+
<h2>Toast component</h2>
|
|
19
|
+
<p>Fixed-position notifications (success, error, warning, info). Use the <strong>Toast</strong> component for a single static toast, or the <strong>programmatic API</strong> (<code>showToast</code>, <code>removeToast</code>, <code>removeAllToasts</code>) for dynamic toasts. Same BEM and behavior as the Astro/docs site.</p>
|
|
20
|
+
|
|
21
|
+
<h3>Features</h3>
|
|
22
|
+
<ul>
|
|
23
|
+
<li>Six positions: top-right, top-left, top-center, bottom-right, bottom-left, bottom-center</li>
|
|
24
|
+
<li>Variants: success, error, warning, info (same as Alert)</li>
|
|
25
|
+
<li>Auto-dismiss with configurable duration (default 5s); set to <code>0</code> to disable</li>
|
|
26
|
+
<li>Dismissible with close button (default: true)</li>
|
|
27
|
+
<li>Multiple toasts stack vertically in the same position</li>
|
|
28
|
+
<li>Smooth slide-in/out (respects <code>prefers-reduced-motion</code>)</li>
|
|
29
|
+
<li>ARIA (<code>role="alert"</code>, <code>aria-live="polite"</code>)</li>
|
|
30
|
+
<li>Theme-aware; full width on mobile</li>
|
|
31
|
+
</ul>
|
|
32
|
+
|
|
33
|
+
<h3>Programmatic API</h3>
|
|
34
|
+
<p>Import the toast utility and call it from Svelte (e.g. in an event handler or after a mutation):</p>
|
|
35
|
+
<CodeBlock
|
|
36
|
+
code={`import { showToast, removeToast, removeAllToasts } from '../utils/toast';
|
|
37
|
+
|
|
38
|
+
// Show a toast (returns toast id)
|
|
39
|
+
const id = showToast('Saved!', { variant: 'success' });
|
|
40
|
+
|
|
41
|
+
// With options
|
|
42
|
+
showToast('Error occurred', {
|
|
43
|
+
variant: 'error',
|
|
44
|
+
position: 'top-right',
|
|
45
|
+
autoDismiss: 5000,
|
|
46
|
+
dismissible: true
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
// Remove by id
|
|
50
|
+
removeToast(id);
|
|
51
|
+
|
|
52
|
+
// Remove all toasts
|
|
53
|
+
removeAllToasts();`}
|
|
54
|
+
language="javascript"
|
|
55
|
+
/>
|
|
56
|
+
<p>On the docs site, <code>window.showToast</code>, <code>window.removeToast</code>, and <code>window.removeAllToasts</code> are also available (injected by the layout).</p>
|
|
57
|
+
|
|
58
|
+
<h3>Live examples (programmatic)</h3>
|
|
59
|
+
<div class="example">
|
|
60
|
+
<div class="example-title">Show toasts</div>
|
|
61
|
+
<div class="example-buttons">
|
|
62
|
+
<button type="button" class="btn btn-success" onclick={() => showToastGlobal('Success! Your changes have been saved.', { variant: 'success' })}>Success</button>
|
|
63
|
+
<button type="button" class="btn btn-error" onclick={() => showToastGlobal('Something went wrong.', { variant: 'error' })}>Error</button>
|
|
64
|
+
<button type="button" class="btn btn-warning" onclick={() => showToastGlobal('Please review.', { variant: 'warning' })}>Warning</button>
|
|
65
|
+
<button type="button" class="btn btn-info" onclick={() => showToastGlobal('New features available.', { variant: 'info' })}>Info</button>
|
|
66
|
+
<button type="button" class="btn" onclick={() => removeAllToastsGlobal()}>Clear all</button>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
|
|
70
|
+
<h3>Positions</h3>
|
|
71
|
+
<div class="example">
|
|
72
|
+
<div class="example-title">Position examples</div>
|
|
73
|
+
<div class="example-buttons">
|
|
74
|
+
<button type="button" class="btn btn-primary" onclick={() => showToastGlobal('Top right', { position: 'top-right' })}>Top right</button>
|
|
75
|
+
<button type="button" class="btn btn-primary" onclick={() => showToastGlobal('Top left', { position: 'top-left' })}>Top left</button>
|
|
76
|
+
<button type="button" class="btn btn-primary" onclick={() => showToastGlobal('Bottom right', { position: 'bottom-right' })}>Bottom right</button>
|
|
77
|
+
<button type="button" class="btn btn-primary" onclick={() => showToastGlobal('Bottom left', { position: 'bottom-left' })}>Bottom left</button>
|
|
78
|
+
</div>
|
|
79
|
+
</div>
|
|
80
|
+
|
|
81
|
+
<h3>Static Toast component</h3>
|
|
82
|
+
<p>For a single toast rendered in the template (e.g. a fixed “Saved” message in a form section), use the Toast component. It wraps Alert with toast positioning. Use it when the toast is part of your layout; for one-off messages use the programmatic API above.</p>
|
|
83
|
+
<div class="example">
|
|
84
|
+
<div class="example-title">Static Toast (top-right, dismissible, 5s auto-dismiss)</div>
|
|
85
|
+
<p>Click to show the same toast via the static component pattern (no toast on page load):</p>
|
|
86
|
+
<button type="button" class="btn btn-success" onclick={() => showToastGlobal('Changes saved.', { variant: 'success', autoDismiss: 5000 })}>Show “Changes saved” toast</button>
|
|
87
|
+
</div>
|
|
88
|
+
|
|
89
|
+
<h3>Toast options</h3>
|
|
90
|
+
<ul>
|
|
91
|
+
<li><code>variant</code> — <code>success</code>, <code>error</code>, <code>warning</code>, <code>info</code> (default: <code>info</code>)</li>
|
|
92
|
+
<li><code>dismissible</code> — Show close button (default: <code>true</code>)</li>
|
|
93
|
+
<li><code>autoDismiss</code> — Duration in ms; <code>0</code> to disable (default: <code>5000</code>)</li>
|
|
94
|
+
<li><code>position</code> — <code>top-right</code>, <code>top-left</code>, <code>top-center</code>, <code>bottom-right</code>, <code>bottom-left</code>, <code>bottom-center</code> (default: <code>top-right</code>)</li>
|
|
95
|
+
<li><code>id</code> — Optional id for the toast (for <code>removeToast(id)</code>)</li>
|
|
96
|
+
</ul>
|
|
97
|
+
|
|
98
|
+
<h3>Key BEM classes</h3>
|
|
99
|
+
<ul>
|
|
100
|
+
<li><strong>Static wrapper:</strong> <code>toast</code>, <code>toast--top-right</code> (etc.); <code>data-toast-container</code>. Contains an Alert.</li>
|
|
101
|
+
<li><strong>Programmatic container:</strong> <code>toast-container</code>, <code>toast-container--top-right</code> (etc.). Created by <code>showToast()</code>; holds elements with class <code>alert alert--{'{variant}'}</code> (same as Alert component).</li>
|
|
102
|
+
</ul>
|
|
103
|
+
|
|
104
|
+
<h3>Usage (Svelte)</h3>
|
|
105
|
+
<CodeBlock
|
|
106
|
+
code={`<script>
|
|
107
|
+
import Toast from './components/svelte/Toast.svelte';
|
|
108
|
+
import { showToast, removeToast, removeAllToasts } from './utils/toast';
|
|
109
|
+
|
|
110
|
+
function onSave() {
|
|
111
|
+
saveData();
|
|
112
|
+
showToast('Saved!', { variant: 'success' });
|
|
113
|
+
}
|
|
114
|
+
</script>
|
|
115
|
+
|
|
116
|
+
<!-- Static toast -->
|
|
117
|
+
<Toast variant="success" dismissible autoDismiss={5000} position="top-right">
|
|
118
|
+
Changes saved.
|
|
119
|
+
</Toast>
|
|
120
|
+
|
|
121
|
+
<!-- Or programmatic only -->
|
|
122
|
+
<button onclick={onSave}>Save</button>`}
|
|
123
|
+
language="svelte"
|
|
124
|
+
/>
|
|
125
|
+
|
|
126
|
+
<p><a href="/docs/components/toast">Full Astro Toast documentation</a> — options and programmatic API.</p>
|
|
127
|
+
<p><a href="/docs/svelte/components">← Back to Svelte components</a></p>
|
|
128
|
+
</section>
|
|
129
|
+
|
|
130
|
+
<style>
|
|
131
|
+
.example-buttons {
|
|
132
|
+
display: flex;
|
|
133
|
+
flex-wrap: wrap;
|
|
134
|
+
gap: var(--spacing-3);
|
|
135
|
+
}
|
|
136
|
+
</style>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Tooltip from '$lib/rizzo/Tooltip.svelte';
|
|
3
|
+
import Button from '$lib/rizzo/Button.svelte';
|
|
4
|
+
import CodeBlock from '$lib/rizzo-docs/CodeBlock.svelte';
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<section>
|
|
8
|
+
<h2>Tooltip component</h2>
|
|
9
|
+
<p>Wrap the trigger in <code>tooltip-wrapper</code> and set <code>aria-describedby</code> to the tooltip <code>id</code>. Positions: top, bottom, left, right.</p>
|
|
10
|
+
|
|
11
|
+
<h3>Basic and positions</h3>
|
|
12
|
+
<div class="example">
|
|
13
|
+
<div class="example-title">Live examples</div>
|
|
14
|
+
<div class="example-tooltips">
|
|
15
|
+
<div class="tooltip-wrapper" aria-describedby="tooltip-svelte-top">
|
|
16
|
+
<Button variant="primary">Hover me (top)</Button>
|
|
17
|
+
<Tooltip id="tooltip-svelte-top" text="Tooltip on top" position="top" />
|
|
18
|
+
</div>
|
|
19
|
+
<div class="tooltip-wrapper" aria-describedby="tooltip-svelte-bottom">
|
|
20
|
+
<Button variant="primary">Bottom</Button>
|
|
21
|
+
<Tooltip id="tooltip-svelte-bottom" text="Tooltip on bottom" position="bottom" />
|
|
22
|
+
</div>
|
|
23
|
+
<div class="tooltip-wrapper" aria-describedby="tooltip-svelte-left">
|
|
24
|
+
<Button variant="outline">Left</Button>
|
|
25
|
+
<Tooltip id="tooltip-svelte-left" text="Left" position="left" />
|
|
26
|
+
</div>
|
|
27
|
+
<div class="tooltip-wrapper" aria-describedby="tooltip-svelte-right">
|
|
28
|
+
<Button variant="outline">Right</Button>
|
|
29
|
+
<Tooltip id="tooltip-svelte-right" text="Right" position="right" />
|
|
30
|
+
</div>
|
|
31
|
+
</div>
|
|
32
|
+
</div>
|
|
33
|
+
|
|
34
|
+
<h3>Usage</h3>
|
|
35
|
+
<CodeBlock
|
|
36
|
+
code={`<script>
|
|
37
|
+
import Button from './components/svelte/Button.svelte';
|
|
38
|
+
import Tooltip from './components/svelte/Tooltip.svelte';
|
|
39
|
+
</script>
|
|
40
|
+
|
|
41
|
+
<div class="tooltip-wrapper" aria-describedby="my-tooltip">
|
|
42
|
+
<Button variant="primary">Hover me</Button>
|
|
43
|
+
<Tooltip id="my-tooltip" text="Help text" position="top" />
|
|
44
|
+
</div>`}
|
|
45
|
+
language="svelte"
|
|
46
|
+
/>
|
|
47
|
+
</section>
|
|
48
|
+
|
|
49
|
+
<style>
|
|
50
|
+
.example-tooltips {
|
|
51
|
+
display: flex;
|
|
52
|
+
flex-wrap: wrap;
|
|
53
|
+
gap: var(--spacing-4);
|
|
54
|
+
align-items: center;
|
|
55
|
+
padding: var(--spacing-8);
|
|
56
|
+
}
|
|
57
|
+
</style>
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
<h1 style="font-size: clamp(2.5rem, 8vw, 4rem); font-weight: 800; line-height: 1.1; margin: 0 0 var(--spacing-4) 0; color: var(--text);">Build something great</h1>
|
|
17
17
|
<p style="font-size: var(--font-size-xl); color: var(--text-dim); max-width: 42ch; margin: 0 0 var(--spacing-8) 0; line-height: var(--line-height-relaxed);">Same design system as Vanilla JS and Astro — 14 themes, 24 components, full keyboard and screen reader support.</p>
|
|
18
18
|
<div class="flex flex-wrap justify-center gap-4 mb-12">
|
|
19
|
-
<a href="
|
|
20
|
-
<a href="https://rizzo-css.vercel.app/docs/
|
|
19
|
+
<a href="/components" class="btn btn-primary">Component showcase</a>
|
|
20
|
+
<a href="https://rizzo-css.vercel.app/docs/getting-started" class="btn btn-outline" target="_blank" rel="noopener noreferrer">Get started (docs)</a>
|
|
21
21
|
<button type="button" class="btn btn-outline" on:click={showDemoToast}>Show toast</button>
|
|
22
22
|
</div>
|
|
23
23
|
<div class="flex flex-wrap justify-center gap-3 mb-16">
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Vanilla JS + Rizzo CSS
|
|
2
2
|
|
|
3
|
-
This project was scaffolded with `npx rizzo-css init`
|
|
3
|
+
This project was scaffolded with `npx rizzo-css init` when you chose **Create new project** and Vanilla JS. This full clone (home, component showcase) is only generated for new projects; **Add to existing project** only adds the CSS and optional files.
|
|
4
4
|
|
|
5
5
|
## First-time setup
|
|
6
6
|
|
|
@@ -13,10 +13,17 @@ If you prefer to load CSS from a CDN instead of the local file, replace the `<li
|
|
|
13
13
|
- `<link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />`
|
|
14
14
|
- Or jsDelivr: `https://cdn.jsdelivr.net/npm/rizzo-css@latest/dist/rizzo.min.css`
|
|
15
15
|
|
|
16
|
-
(Replace `@latest` with a specific version, e.g. `@0.0.
|
|
16
|
+
(Replace `@latest` with a specific version, e.g. `@0.0.13`, in production.)
|
|
17
17
|
|
|
18
18
|
The CLI replaces placeholders in `index.html` (e.g. `{{DATA_THEME}}`, `{{TITLE}}`) when you run `rizzo-css init`. The theme selected during init is used on first load when you have no saved preference in the browser.
|
|
19
19
|
|
|
20
|
+
## Editing the cloned site
|
|
21
|
+
|
|
22
|
+
- **Home** — `index.html` (hero, links to component showcase and docs). Edit the main content or add your own.
|
|
23
|
+
- **Component showcase** — `components/index.html` lists all components; `components/<name>.html` (e.g. `button.html`) each has a "Read the full docs" link to the main site. Edit or add HTML files; keep the same header/footer if you want the theme switcher and settings on every page.
|
|
24
|
+
- **CSS** — The CLI copies `css/rizzo.min.css`; the link uses `{{LINK_HREF}}` (replaced at init). To use a CDN, replace that with the CDN URL.
|
|
25
|
+
- **Scripts** — `js/main.js` provides theme sync, settings panel, toast, tabs, modal, dropdown, accordion. Customize or extend as needed.
|
|
26
|
+
|
|
20
27
|
## What’s included
|
|
21
28
|
|
|
22
29
|
- **Theme flash prevention** — Small inline script in `<head>` applies saved theme and settings before first paint.
|
|
@@ -41,7 +48,7 @@ pnpm dlx serve .
|
|
|
41
48
|
|
|
42
49
|
## Other scaffolds
|
|
43
50
|
|
|
44
|
-
- **Astro:** `scaffold/astro-app/` —
|
|
45
|
-
- **Svelte:** `scaffold/svelte-app/` — SvelteKit
|
|
51
|
+
- **Astro:** `scaffold/astro-app/` — navbar, home, component showcase (see its README).
|
|
52
|
+
- **Svelte:** `scaffold/svelte-app/` — SvelteKit with /components and /components/[slug] (see its README).
|
|
46
53
|
|
|
47
54
|
Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
|