rizzo-css 0.0.82 → 0.0.84
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/README.md +1 -1
- package/dist/rizzo.min.css +1 -1
- package/package.json +1 -1
- package/scaffold/astro/Settings.astro +3 -2
- package/scaffold/react/DocsSidebar.tsx +10 -3
- package/scaffold/react/base/package.json +1 -1
- package/scaffold/react/variants/full/package.json +1 -1
- package/scaffold/react/variants/full/src/config/docsNav.ts +50 -33
- package/scaffold/svelte/Settings.svelte +30 -5
- package/scaffold/svelte/variants/full/src/config/docsNav.ts +194 -14
- package/scaffold/vanilla/README-RIZZO.md +1 -1
- package/scaffold/vanilla/components/accordion.html +10 -0
- package/scaffold/vanilla/components/alert-dialog.html +10 -0
- package/scaffold/vanilla/components/alert.html +10 -0
- package/scaffold/vanilla/components/aspect-ratio.html +10 -0
- package/scaffold/vanilla/components/avatar.html +10 -0
- package/scaffold/vanilla/components/back-to-top.html +10 -0
- package/scaffold/vanilla/components/badge.html +10 -0
- package/scaffold/vanilla/components/breadcrumb.html +10 -0
- package/scaffold/vanilla/components/button-group.html +10 -0
- package/scaffold/vanilla/components/button.html +10 -0
- package/scaffold/vanilla/components/calendar.html +10 -0
- package/scaffold/vanilla/components/cards.html +10 -0
- package/scaffold/vanilla/components/carousel.html +10 -0
- package/scaffold/vanilla/components/chart.html +10 -0
- package/scaffold/vanilla/components/collapsible.html +10 -0
- package/scaffold/vanilla/components/command.html +10 -0
- package/scaffold/vanilla/components/context-menu.html +10 -0
- package/scaffold/vanilla/components/copy-to-clipboard.html +10 -0
- package/scaffold/vanilla/components/dashboard.html +10 -0
- package/scaffold/vanilla/components/direction.html +10 -0
- package/scaffold/vanilla/components/divider.html +10 -0
- package/scaffold/vanilla/components/docs-sidebar.html +10 -0
- package/scaffold/vanilla/components/dropdown.html +10 -0
- package/scaffold/vanilla/components/empty.html +10 -0
- package/scaffold/vanilla/components/font-switcher.html +10 -0
- package/scaffold/vanilla/components/footer.html +10 -0
- package/scaffold/vanilla/components/forms.html +10 -0
- package/scaffold/vanilla/components/hover-card.html +10 -0
- package/scaffold/vanilla/components/icons.html +10 -0
- package/scaffold/vanilla/components/index.html +10 -0
- package/scaffold/vanilla/components/input-group.html +10 -0
- package/scaffold/vanilla/components/input-otp.html +10 -0
- package/scaffold/vanilla/components/kbd.html +10 -0
- package/scaffold/vanilla/components/label.html +10 -0
- package/scaffold/vanilla/components/menubar.html +10 -0
- package/scaffold/vanilla/components/modal.html +10 -0
- package/scaffold/vanilla/components/navbar.html +10 -0
- package/scaffold/vanilla/components/pagination.html +10 -0
- package/scaffold/vanilla/components/popover.html +10 -0
- package/scaffold/vanilla/components/progress-bar.html +10 -0
- package/scaffold/vanilla/components/range-calendar.html +10 -0
- package/scaffold/vanilla/components/resizable.html +10 -0
- package/scaffold/vanilla/components/scroll-area.html +10 -0
- package/scaffold/vanilla/components/search.html +10 -0
- package/scaffold/vanilla/components/separator.html +10 -0
- package/scaffold/vanilla/components/settings.html +10 -0
- package/scaffold/vanilla/components/sheet.html +10 -0
- package/scaffold/vanilla/components/skeleton.html +10 -0
- package/scaffold/vanilla/components/slider.html +10 -0
- package/scaffold/vanilla/components/sound-effects.html +10 -0
- package/scaffold/vanilla/components/spinner.html +10 -0
- package/scaffold/vanilla/components/switch.html +10 -0
- package/scaffold/vanilla/components/table.html +10 -0
- package/scaffold/vanilla/components/tabs.html +10 -0
- package/scaffold/vanilla/components/theme-switcher.html +10 -0
- package/scaffold/vanilla/components/toast.html +10 -0
- package/scaffold/vanilla/components/toggle-group.html +10 -0
- package/scaffold/vanilla/components/toggle.html +10 -0
- package/scaffold/vanilla/components/tooltip.html +10 -0
- package/scaffold/vanilla/index.html +10 -0
- package/scaffold/vue/DocsSidebar.vue +9 -3
- package/scaffold/vue/base/package.json +1 -1
- package/scaffold/vue/variants/full/package.json +1 -1
- package/scaffold/vue/variants/full/src/config/docsNav.ts +50 -33
package/README.md
CHANGED
|
@@ -72,7 +72,7 @@ import 'rizzo-css';
|
|
|
72
72
|
**Without a bundler (plain HTML):** Use a CDN. Both unpkg and jsDelivr resolve the package root to the built CSS (via the `unpkg` / `jsdelivr` fields in this package). For reliability or to pin a version, use the explicit path:
|
|
73
73
|
|
|
74
74
|
```html
|
|
75
|
-
<!-- unpkg (pin version: replace @latest with @0.0.
|
|
75
|
+
<!-- unpkg (pin version: replace @latest with @0.0.84 or any version) -->
|
|
76
76
|
<link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />
|
|
77
77
|
|
|
78
78
|
<!-- or jsDelivr -->
|
package/dist/rizzo.min.css
CHANGED
|
@@ -126,7 +126,7 @@ div.navbar__link{background:none;border:none;color:inherit;cursor:pointer;font:i
|
|
|
126
126
|
.theme-switcher__option--active:hover{background-color:var(--theme-bg,var(--background));border-left:var(--border-width-accent) solid var(--accent);border-radius:var(--radius);color:var(--text);font-weight:var(--font-weight-medium);padding-left:calc(var(--spacing-4) - var(--border-width-accent))}.theme-switcher__option--active:focus-visible{box-shadow:inset 0 0 0 var(--outline-width) var(--accent)}@media (width <= 768px){.theme-switcher,.theme-switcher__menu{max-width:100%;width:100%}.theme-switcher__menu{box-sizing:border-box;left:0;min-width:0;right:auto}}@media (width <= 640px){.theme-switcher__menu{left:0;right:auto}}.font-switcher{display:inline-block;position:relative;width:var(--theme-switcher-width)}.font-switcher__trigger{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;font-family:var(--font-family);font-size:var(--font-size-base);gap:var(--spacing-3);justify-content:space-between;min-width:0;padding:var(--spacing-3) var(--spacing-4);transition:background-color var(--transition-base),border-color var(--transition-base);width:100%}.font-switcher__label{flex:1;min-width:0;overflow:hidden;text-align:left;text-overflow:ellipsis;white-space:nowrap}.font-switcher__trigger:hover{background-color:var(--background);border-color:var(--accent);color:var(--text)}.font-switcher__trigger:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.font-switcher__trigger[aria-expanded="true"] .font-switcher__icon{transform:rotate(180deg)}.font-switcher__icon{color:var(--icon);flex-shrink:0;transition:transform var(--transition-base),color var(--transition-base)}.font-switcher__menu{background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-md);display:flex;flex-direction:row;gap:0;left:0;max-height:var(--spacing-100);min-width:var(--theme-switcher-width);opacity:0;overflow-y:auto;position:absolute;top:calc(100% + var(--spacing-2));transform:translateY(calc(var(--spacing-2)*-1));transition:opacity var(--transition-base),visibility var(--transition-base),transform var(--transition-base);visibility:hidden;width:var(--theme-switcher-width);z-index:var(--z-dropdown)}.font-switcher__menu--open{opacity:1;transform:translateY(0);visibility:visible}.font-switcher__menu-options{flex:1 1 auto;min-width:0;overflow-y:auto}.font-switcher__preview{background-color:var(--background);display:flex;flex:0 0 auto;flex-direction:column;gap:var(--spacing-2);justify-content:flex-start;min-width:var(--spacing-32);padding:var(--spacing-4);pointer-events:none;width:var(--spacing-32)}.font-switcher__preview-title{color:var(--text);font-size:var(--font-size-sm);font-weight:var(--font-weight-bold);line-height:1.2;margin:0 0 var(--spacing-1) 0;padding:0}.font-switcher__preview-sample{color:var(--text);font-size:var(--font-size-lg);line-height:1.3;margin:0}.font-switcher__preview-mono{color:var(--text-dim);font-family:var(--font-family-mono);font-size:var(--font-size-sm);margin:0}@media (width <= 480px){.font-switcher__preview{display:none}}@media (width >= 481px){.font-switcher__menu-options{border-right:var(--border-width) solid var(--border)}}.font-switcher__option{align-items:center;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--text);cursor:pointer;display:flex;font:inherit;font-family:var(--font-family);font-size:var(--font-size-base);padding:var(--spacing-2) var(--spacing-4);position:relative;text-align:left;transition:background-color var(--transition-fast),color var(--transition-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}
|
|
127
127
|
.font-switcher__option:focus-visible,.font-switcher__option:hover{background-color:var(--background);color:var(--text);outline:none}.font-switcher__option:focus-visible{box-shadow:inset 0 0 0 var(--outline-width) var(--accent)}.font-switcher__option--active,
|
|
128
128
|
.font-switcher__option--active:focus-visible,
|
|
129
|
-
.font-switcher__option--active:hover{background-color:var(--background);border-left:var(--border-width-accent) solid var(--accent);border-radius:var(--radius);color:var(--text);font-weight:var(--font-weight-medium);padding-left:calc(var(--spacing-4) - var(--border-width-accent))}.font-switcher__option--active:focus-visible{box-shadow:inset 0 0 0 var(--outline-width) var(--accent)}@media (width <= 768px){.font-switcher,.font-switcher__menu{max-width:100%;width:100%}.font-switcher__menu{box-sizing:border-box;left:0;min-width:0;right:auto}}.settings__control .font-switcher{max-width:100%;width:100%}.settings__control .font-switcher__menu{box-sizing:border-box;max-width:100%;min-width:0;width:100%}.settings{inset:0;pointer-events:none;position:fixed;z-index:var(--z-settings)}.settings[aria-hidden="true"]{display:none}.settings__overlay{backdrop-filter:blur(var(--blur-sm));background-color:var(--overlay);inset:0;opacity:0;pointer-events:all;position:absolute;transition:opacity var(--transition-ease-out);z-index:1}.settings[aria-hidden="false"] .settings__overlay[aria-hidden="false"],.settings__overlay[aria-hidden="false"]{opacity:1}.settings__panel{background-color:var(--background-alt);border-left:var(--border-width) solid var(--border);box-shadow:calc(var(--spacing-1)*-1) 0 var(--spacing-3) calc(var(--spacing-0-125)*-1) oklch(from var(--shadow-color) l c h/15%);display:flex;flex-direction:column;height:100%;max-height:100vh;max-height:100dvh;max-width:var(--spacing-105);overflow:hidden;pointer-events:all;position:absolute;right:0;top:0;transform:translateX(100%);transition:transform var(--transition-ease-out);width:100%;z-index:2}.settings__panel[data-open="true"]{transform:translateX(0)}.settings[aria-hidden="false"] .settings__panel:not([data-open]){transform:translateX(100%)}@media (prefers-reduced-motion:reduce){.settings__overlay,.settings__panel{transition:none}}.settings__header{align-items:center;background-color:var(--background-alt);border-bottom:var(--border-width) solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-6);position:sticky;top:0;z-index:var(--z-dropdown)}.settings__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin:0}.settings__close{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;height:var(--spacing-8);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0;transition:background-color var(--transition-base),color var(--transition-base),border-color var(--transition-base);width:var(--spacing-8)}.settings__close:hover{background-color:var(--background-alt);border-color:var(--accent);color:var(--accent)}.settings__close:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.settings__content{background-color:var(--background);display:flex;flex:1 1 0;flex-direction:column;gap:var(--spacing-8);min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;padding:var(--spacing-6);-webkit-overflow-scrolling:touch;scrollbar-gutter:stable}@media (width >= 641px){.settings__content{max-height:calc(100dvh - 4.5rem);max-height:calc(100vh - 4.5rem)}}.settings__section{display:flex;flex-direction:column;gap:var(--spacing-4)}.settings__section-title{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4)}.settings__control{display:flex;flex-direction:column;gap:var(--spacing-3)}.settings__control .theme-switcher{max-width:100%;width:100%}.settings__control .theme-switcher__menu{box-sizing:border-box;max-width:100%;min-width:0;width:100%}.settings__label{align-items:center;color:var(--text);display:flex;font-weight:var(--font-weight-medium);justify-content:space-between;margin-bottom:var(--spacing-3)}.settings__label-text{font-size:var(--font-size-base)}.settings__label-value{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.settings__slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);cursor:pointer;height:var(--spacing-2);outline:none;width:100%}.settings__slider::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);height:var(--spacing-2);width:100%}.settings__slider::-moz-range-track{background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);height:var(--spacing-2);width:100%}.settings__slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--accent);border:var(--outline-width) solid var(--background);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--border);cursor:pointer;height:var(--spacing-5);margin-top:calc(var(--spacing-2)*-1);-webkit-transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);width:var(--spacing-5)}.settings__slider::-webkit-slider-thumb:hover{background-color:var(--accent-hover);transform:scale(1.1)}.settings__slider::-moz-range-thumb{background-color:var(--accent);border:var(--outline-width) solid var(--background);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--border);cursor:pointer;height:var(--spacing-5);-moz-transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);width:var(--spacing-5)}.settings__slider::-moz-range-thumb:hover{background-color:var(--accent-hover);transform:scale(1.1)}.settings__slider:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.settings__slider-labels{color:var(--text-dim);display:flex;font-size:var(--font-size-xs);justify-content:space-between;margin-top:var(--spacing-1)}.settings__checkbox-label{align-items:center;color:var(--text);cursor:pointer;display:flex;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-3);-webkit-user-select:none;-moz-user-select:none;user-select:none}.settings__checkbox-label:hover{color:var(--accent)}.settings__checkbox{accent-color:var(--accent);cursor:pointer;height:var(--spacing-5);margin:0;width:var(--spacing-5)}.settings__radio-group{display:flex;flex-direction:column;gap:var(--spacing-2)}.settings__radio-label{align-items:center;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;font-size:var(--font-size-base);font-weight:var(--font-weight-normal);gap:var(--spacing-2);padding:var(--spacing-2);transition:background-color var(--transition-base),color var(--transition-base);-webkit-user-select:none;-moz-user-select:none;user-select:none}.settings__radio-label:hover{background-color:var(--background-alt);color:var(--accent)}.settings__radio{accent-color:var(--accent);cursor:pointer;height:var(--spacing-5);margin:0;width:var(--spacing-5)}.settings__help-text{color:var(--text-dim);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);margin:0}.back-to-top{bottom:var(--spacing-6);opacity:0;position:fixed;right:var(--spacing-6);transform:translateY(var(--spacing-2));transition:opacity var(--transition-base),visibility var(--transition-base),transform var(--transition-base);visibility:hidden;z-index:var(--z-fixed)}.back-to-top[data-visible="true"]{opacity:1;transform:translateY(0);visibility:visible}.back-to-top__btn{align-items:center;background-color:var(--accent);border:none;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--accent-text);cursor:pointer;display:flex;height:var(--spacing-10);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0;transition:background-color var(--transition-base),transform var(--transition-base);width:var(--spacing-10)}.back-to-top__btn:hover{background-color:var(--accent-hover)}.back-to-top__btn:focus-visible{outline:var(--outline-width) solid var(--accent-text);outline-offset:var(--outline-offset)}.back-to-top__icon{flex-shrink:0}@media (prefers-reduced-motion:reduce){.back-to-top,
|
|
129
|
+
.font-switcher__option--active:hover{background-color:var(--background);border-left:var(--border-width-accent) solid var(--accent);border-radius:var(--radius);color:var(--text);font-weight:var(--font-weight-medium);padding-left:calc(var(--spacing-4) - var(--border-width-accent))}.font-switcher__option--active:focus-visible{box-shadow:inset 0 0 0 var(--outline-width) var(--accent)}@media (width <= 768px){.font-switcher,.font-switcher__menu{max-width:100%;width:100%}.font-switcher__menu{box-sizing:border-box;left:0;min-width:0;right:auto}}.settings__control .font-switcher{max-width:100%;width:100%}.settings__control .font-switcher__menu{box-sizing:border-box;max-width:100%;min-width:0;width:100%}.settings{inset:0;pointer-events:none;position:fixed;z-index:var(--z-settings)}.settings[aria-hidden="true"]{display:none}.settings__overlay{backdrop-filter:blur(var(--blur-sm));background-color:var(--overlay);inset:0;opacity:0;pointer-events:all;position:absolute;transition:opacity var(--transition-ease-out);z-index:1}.settings[aria-hidden="false"] .settings__overlay[aria-hidden="false"],.settings__overlay[aria-hidden="false"]{opacity:1}.settings__panel{background-color:var(--background-alt);border-left:var(--border-width) solid var(--border);box-shadow:calc(var(--spacing-1)*-1) 0 var(--spacing-3) calc(var(--spacing-0-125)*-1) oklch(from var(--shadow-color) l c h/15%);display:flex;flex-direction:column;height:100%;max-height:100vh;max-height:100dvh;max-width:var(--spacing-105);overflow:hidden;pointer-events:all;position:absolute;right:0;top:0;transform:translateX(100%);transition:transform var(--transition-ease-out);width:100%;z-index:2}.settings__panel[data-open="true"]{transform:translateX(0)}.settings[aria-hidden="false"] .settings__panel:not([data-open]){transform:translateX(100%)}@media (prefers-reduced-motion:reduce){.settings__overlay,.settings__panel{transition:none}}.reduced-motion .settings__overlay,.reduced-motion .settings__panel{transition:none}.settings__header{align-items:center;background-color:var(--background-alt);border-bottom:var(--border-width) solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-6);position:sticky;top:0;z-index:var(--z-dropdown)}.settings__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-bold);margin:0}.settings__close{align-items:center;background-color:var(--background-alt);border:var(--border-width) solid var(--border);border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;height:var(--spacing-8);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0;transition:background-color var(--transition-base),color var(--transition-base),border-color var(--transition-base);width:var(--spacing-8)}.settings__close:hover{background-color:var(--background-alt);border-color:var(--accent);color:var(--accent)}.settings__close:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.settings__content{background-color:var(--background);display:flex;flex:1 1 0;flex-direction:column;gap:var(--spacing-8);min-height:0;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;padding:var(--spacing-6);-webkit-overflow-scrolling:touch;scrollbar-gutter:stable}@media (width >= 641px){.settings__content{max-height:calc(100dvh - 4.5rem);max-height:calc(100vh - 4.5rem)}}.settings__section{display:flex;flex-direction:column;gap:var(--spacing-4)}.settings__section-title{color:var(--text);font-size:var(--font-size-lg);font-weight:var(--font-weight-semibold);margin:0 0 var(--spacing-4)}.settings__control{display:flex;flex-direction:column;gap:var(--spacing-3)}.settings__control .theme-switcher{max-width:100%;width:100%}.settings__control .theme-switcher__menu{box-sizing:border-box;max-width:100%;min-width:0;width:100%}.settings__label{align-items:center;color:var(--text);display:flex;font-weight:var(--font-weight-medium);justify-content:space-between;margin-bottom:var(--spacing-3)}.settings__label-text{font-size:var(--font-size-base)}.settings__label-value{color:var(--text-dim);font-size:var(--font-size-sm);font-weight:var(--font-weight-semibold)}.settings__slider{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);cursor:pointer;height:var(--spacing-2);outline:none;width:100%}.settings__slider::-webkit-slider-runnable-track{background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);height:var(--spacing-2);width:100%}.settings__slider::-moz-range-track{background:linear-gradient(to right,var(--accent) 0,var(--accent) var(--slider-progress,50%),var(--background-alt) var(--slider-progress,50%),var(--background-alt) 100%);border:var(--border-width) solid var(--border);border-radius:var(--radius);box-shadow:inset 0 var(--spacing-0-125) var(--spacing-0-125) oklch(from var(--shadow-color) l c h/10%);height:var(--spacing-2);width:100%}.settings__slider::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;background-color:var(--accent);border:var(--outline-width) solid var(--background);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--border);cursor:pointer;height:var(--spacing-5);margin-top:calc(var(--spacing-2)*-1);-webkit-transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);width:var(--spacing-5)}.settings__slider::-webkit-slider-thumb:hover{background-color:var(--accent-hover);transform:scale(1.1)}.settings__slider::-moz-range-thumb{background-color:var(--accent);border:var(--outline-width) solid var(--background);border-radius:var(--radius-circle);box-shadow:0 0 0 var(--spacing-0-125) var(--border);cursor:pointer;height:var(--spacing-5);-moz-transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);transition:background-color var(--transition-base),transform var(--transition-base),border-color var(--transition-base);width:var(--spacing-5)}.settings__slider::-moz-range-thumb:hover{background-color:var(--accent-hover);transform:scale(1.1)}.settings__slider:focus-visible{outline:var(--outline-width) solid var(--accent);outline-offset:var(--outline-offset)}.settings__slider-labels{color:var(--text-dim);display:flex;font-size:var(--font-size-xs);justify-content:space-between;margin-top:var(--spacing-1)}.settings__checkbox-label{align-items:center;color:var(--text);cursor:pointer;display:flex;font-size:var(--font-size-base);font-weight:var(--font-weight-medium);gap:var(--spacing-3);-webkit-user-select:none;-moz-user-select:none;user-select:none}.settings__checkbox-label:hover{color:var(--accent)}.settings__checkbox{accent-color:var(--accent);cursor:pointer;height:var(--spacing-5);margin:0;width:var(--spacing-5)}.settings__radio-group{display:flex;flex-direction:column;gap:var(--spacing-2)}.settings__radio-label{align-items:center;border-radius:var(--radius-md);color:var(--text);cursor:pointer;display:flex;font-size:var(--font-size-base);font-weight:var(--font-weight-normal);gap:var(--spacing-2);padding:var(--spacing-2);transition:background-color var(--transition-base),color var(--transition-base);-webkit-user-select:none;-moz-user-select:none;user-select:none}.settings__radio-label:hover{background-color:var(--background-alt);color:var(--accent)}.settings__radio{accent-color:var(--accent);cursor:pointer;height:var(--spacing-5);margin:0;width:var(--spacing-5)}.settings__help-text{color:var(--text-dim);font-size:var(--font-size-sm);line-height:var(--line-height-relaxed);margin:0}.back-to-top{bottom:var(--spacing-6);opacity:0;position:fixed;right:var(--spacing-6);transform:translateY(var(--spacing-2));transition:opacity var(--transition-base),visibility var(--transition-base),transform var(--transition-base);visibility:hidden;z-index:var(--z-fixed)}.back-to-top[data-visible="true"]{opacity:1;transform:translateY(0);visibility:visible}.back-to-top__btn{align-items:center;background-color:var(--accent);border:none;border-radius:var(--radius-md);box-shadow:var(--shadow-lg);color:var(--accent-text);cursor:pointer;display:flex;height:var(--spacing-10);justify-content:center;min-height:var(--touch-target-min);min-width:var(--touch-target-min);padding:0;transition:background-color var(--transition-base),transform var(--transition-base);width:var(--spacing-10)}.back-to-top__btn:hover{background-color:var(--accent-hover)}.back-to-top__btn:focus-visible{outline:var(--outline-width) solid var(--accent-text);outline-offset:var(--outline-offset)}.back-to-top__icon{flex-shrink:0}@media (prefers-reduced-motion:reduce){.back-to-top,
|
|
130
130
|
.back-to-top[data-visible="true"]{transition:none}}@media (width <= 640px){.settings__panel{max-width:100%;width:100%}}.modal-root{inset:0;pointer-events:none;position:fixed;z-index:var(--z-modal)}.modal-root > .modal__overlay{backdrop-filter:blur(var(--blur-sm));background-color:oklch(from var(--shadow-color) l c h/60%);bottom:0;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:opacity var(--transition-slow) ease;z-index:0}.modal-root > .modal__overlay[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal-root > .modal{pointer-events:none;z-index:1}.modal-root > .modal[aria-hidden="false"]{pointer-events:auto}.modal__overlay{backdrop-filter:blur(var(--blur-sm));background-color:oklch(from var(--shadow-color) l c h/60%);bottom:0;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:opacity var(--transition-slow) ease;z-index:var(--z-modal-backdrop)}.modal__overlay[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal{background-color:var(--background);border:var(--border-width) solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);display:flex;flex-direction:column;left:50%;max-height:var(--vh-90);max-width:var(--max-height-modal);opacity:0;pointer-events:none;position:fixed;top:50%;transform:translate(-50%,-50%);transition:opacity var(--transition-slow) ease,transform var(--transition-slow) ease;width:100%;z-index:var(--z-modal)}.modal[aria-hidden="false"]{opacity:1;pointer-events:auto}.modal__header{align-items:center;border-bottom:var(--border-width) solid var(--border);display:flex;flex-shrink:0;justify-content:space-between;padding:var(--spacing-6)}.modal__title{color:var(--text);font-size:var(--font-size-xl);font-weight:var(--font-weight-semibold);margin:0}.modal__close{align-items:center;background:none;border:none;border-radius:var(--radius);color:var(--text-dim);cursor:pointer;display:flex;flex-shrink:0;justify-content:center;padding:var(--spacing-2);transition:background-color var(--transition-base),color var(--transition-base)}.modal__close:hover{background-color:var(--background-alt);color:var(--text)}.modal__close:focus{box-shadow:0 0 0 3px oklch(from var(--accent) l c h/10%);outline:none}.modal__body{flex:1;min-height:0;overflow-y:auto;padding:var(--spacing-6)}.modal__footer{border-top:var(--border-width) solid var(--border);display:flex;flex-shrink:0;gap:var(--spacing-3);justify-content:flex-end;padding:var(--spacing-6)}.modal__footer:empty{display:none}.modal--sm{max-width:var(--spacing-96)}.modal--md{max-width:var(--max-height-modal)}.modal--lg{max-width:var(--max-width-modal-lg)}
|
|
131
131
|
.reduced-motion .modal,.reduced-motion .modal__overlay{transition:none}@media (width <= 640px){.modal{bottom:auto;left:auto;margin:var(--spacing-4);max-height:95vh;max-width:95vw;right:auto;top:auto}.modal,.modal[aria-hidden="false"]{transform:none}
|
|
132
132
|
.modal__body,
|
package/package.json
CHANGED
|
@@ -277,9 +277,10 @@ const { open = false } = Astro.props;
|
|
|
277
277
|
// Remove data-open first to trigger close animation
|
|
278
278
|
panel.removeAttribute('data-open');
|
|
279
279
|
|
|
280
|
-
// Wait for animation to complete before hiding
|
|
280
|
+
// Wait for animation to complete before hiding (respect system preference and user toggle)
|
|
281
281
|
const prefersReducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
282
|
-
const
|
|
282
|
+
const reducedMotionClass = html.classList.contains('reduced-motion');
|
|
283
|
+
const animationDuration = (prefersReducedMotion || reducedMotionClass) ? 0 : 300;
|
|
283
284
|
|
|
284
285
|
setTimeout(() => {
|
|
285
286
|
settings.setAttribute('aria-hidden', 'true');
|
|
@@ -12,6 +12,8 @@ export interface DocsNavLink {
|
|
|
12
12
|
frameworkOnly?: boolean;
|
|
13
13
|
absolute?: boolean;
|
|
14
14
|
sections?: DocsNavSection[];
|
|
15
|
+
/** When true, open in new tab (external to main site). */
|
|
16
|
+
external?: boolean;
|
|
15
17
|
}
|
|
16
18
|
|
|
17
19
|
export interface DocsNavGroup {
|
|
@@ -32,7 +34,7 @@ export interface DocsSidebarProps extends HTMLAttributes<HTMLElement> {
|
|
|
32
34
|
}
|
|
33
35
|
|
|
34
36
|
function fullHref(link: { href: string; frameworkOnly?: boolean; absolute?: boolean }, pathPrefix: string): string {
|
|
35
|
-
if (link.absolute && link.href
|
|
37
|
+
if (link.absolute && link.href) return link.href;
|
|
36
38
|
const base = link.frameworkOnly ? pathPrefix : '/docs';
|
|
37
39
|
return `${base}/${link.href}`;
|
|
38
40
|
}
|
|
@@ -110,19 +112,24 @@ export function DocsSidebar({
|
|
|
110
112
|
href={href}
|
|
111
113
|
className={`docs-sidebar__link ${active && (sections.length === 0 || activeSectionId == null) ? 'docs-sidebar__link--active' : ''}`.trim()}
|
|
112
114
|
aria-current={active && (sections.length === 0 || activeSectionId == null) ? 'page' : undefined}
|
|
115
|
+
target={link.external ? '_blank' : undefined}
|
|
116
|
+
rel={link.external ? 'noopener noreferrer' : undefined}
|
|
113
117
|
>
|
|
114
118
|
{link.label}
|
|
115
119
|
</a>
|
|
116
120
|
{sections.length > 0 && (
|
|
117
121
|
<ul className="docs-sidebar__sublist" aria-label={`Sections in ${link.label}`}>
|
|
118
122
|
{sections.map((section) => {
|
|
119
|
-
const
|
|
123
|
+
const sublinkHref = `${href}#${section.id}`;
|
|
124
|
+
const sublinkActive = !link.external && activeSectionId === section.id && currentPath.replace(/\/$/, '') === href.split('#')[0];
|
|
120
125
|
return (
|
|
121
126
|
<li key={section.id} className="docs-sidebar__subitem">
|
|
122
127
|
<a
|
|
123
|
-
href={
|
|
128
|
+
href={sublinkHref}
|
|
124
129
|
className={`docs-sidebar__sublink ${sublinkActive ? 'docs-sidebar__sublink--active' : ''}`.trim()}
|
|
125
130
|
aria-current={sublinkActive ? 'location' : undefined}
|
|
131
|
+
target={link.external ? '_blank' : undefined}
|
|
132
|
+
rel={link.external ? 'noopener noreferrer' : undefined}
|
|
126
133
|
>
|
|
127
134
|
{section.label}
|
|
128
135
|
</a>
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Docs nav for
|
|
2
|
+
* Docs sidebar nav for full template. Matches https://rizzo-css.vercel.app exactly.
|
|
3
|
+
* Local routes: /docs/overview, /docs/getting-started, /docs/components. All other links point to the main site.
|
|
3
4
|
*/
|
|
5
|
+
import { COMPONENT_CATEGORIES } from './componentCategories';
|
|
6
|
+
|
|
7
|
+
const SITE_BASE = 'https://rizzo-css.vercel.app';
|
|
8
|
+
const FRAMEWORK_PREFIX = '/docs/react';
|
|
9
|
+
|
|
10
|
+
function slugToTitle(slug: string): string {
|
|
11
|
+
return slug.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
12
|
+
}
|
|
13
|
+
|
|
4
14
|
export interface DocsNavSection {
|
|
5
15
|
id: string;
|
|
6
16
|
label: string;
|
|
@@ -12,6 +22,7 @@ export interface DocsNavLink {
|
|
|
12
22
|
frameworkOnly?: boolean;
|
|
13
23
|
absolute?: boolean;
|
|
14
24
|
sections?: DocsNavSection[];
|
|
25
|
+
external?: boolean;
|
|
15
26
|
}
|
|
16
27
|
|
|
17
28
|
export interface DocsNavGroup {
|
|
@@ -23,48 +34,54 @@ export const DOCS_NAV: DocsNavGroup[] = [
|
|
|
23
34
|
{
|
|
24
35
|
label: 'Introduction',
|
|
25
36
|
links: [
|
|
26
|
-
{
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{ id: 'installation', label: 'Installation' },
|
|
42
|
-
{ id: 'project-structure', label: 'Project Structure' },
|
|
43
|
-
{ id: 'development', label: 'Development' },
|
|
44
|
-
{ id: 'using-components', label: 'Using Components' },
|
|
45
|
-
{ id: 'using-themes', label: 'Using Themes' },
|
|
46
|
-
],
|
|
47
|
-
},
|
|
37
|
+
{ href: '/docs/overview', label: 'Overview', absolute: true, sections: [{ id: 'overview', label: 'Overview' }, { id: 'installation', label: 'Installation' }, { id: 'components', label: 'Components' }, { id: 'blocks', label: 'Blocks' }] },
|
|
38
|
+
{ href: `${SITE_BASE}/docs/showcase`, label: 'Showcase', absolute: true, external: true, sections: [{ id: 'components', label: 'Components' }, { id: 'themes', label: 'Themes' }, { id: 'blocks', label: 'Blocks' }, { id: 'examples', label: 'Examples' }] },
|
|
39
|
+
{ href: '/docs/getting-started', label: 'Getting Started', absolute: true, sections: [{ id: 'installation', label: 'Installation' }, { id: 'installation-by-framework', label: 'By framework' }, { id: 'vanilla', label: 'Vanilla' }, { id: 'astro', label: 'Astro' }, { id: 'svelte', label: 'Svelte' }, { id: 'react', label: 'React' }, { id: 'vue', label: 'Vue' }, { id: 'project-structure', label: 'Project Structure' }, { id: 'development', label: 'Development' }, { id: 'building', label: 'Building' }, { id: 'using-components', label: 'Using Components' }, { id: 'using-themes', label: 'Using Themes' }, { id: 'css-architecture', label: 'CSS Architecture' }] },
|
|
40
|
+
],
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
label: 'Foundations',
|
|
44
|
+
links: [
|
|
45
|
+
{ href: `${SITE_BASE}/docs/design-system`, label: 'Design System', absolute: true, external: true },
|
|
46
|
+
{ href: `${SITE_BASE}/docs/theming`, label: 'Theming', absolute: true, external: true },
|
|
47
|
+
{ href: `${SITE_BASE}/docs/accessibility`, label: 'Accessibility', absolute: true, external: true },
|
|
48
|
+
{ href: `${SITE_BASE}/docs/accessibility/manual-testing`, label: 'Manual testing checklist', absolute: true, external: true },
|
|
49
|
+
{ href: `${SITE_BASE}/docs/colors`, label: 'Colors', absolute: true, external: true },
|
|
50
|
+
{ href: `${SITE_BASE}/docs/tokens`, label: 'Tokens reference', absolute: true, external: true },
|
|
51
|
+
{ href: `${SITE_BASE}/docs/best-practices`, label: 'Best Practices', absolute: true, external: true },
|
|
48
52
|
],
|
|
49
53
|
},
|
|
50
54
|
{
|
|
51
55
|
label: 'Components',
|
|
52
|
-
links: [
|
|
56
|
+
links: [
|
|
57
|
+
{ href: '/docs/components', label: 'Overview', absolute: true },
|
|
58
|
+
...COMPONENT_CATEGORIES.flatMap((cat) =>
|
|
59
|
+
cat.slugs.map((slug) => ({
|
|
60
|
+
href: `${SITE_BASE}${FRAMEWORK_PREFIX}/components/${slug}`,
|
|
61
|
+
label: slugToTitle(slug),
|
|
62
|
+
absolute: true as const,
|
|
63
|
+
external: true as const,
|
|
64
|
+
}))
|
|
65
|
+
),
|
|
66
|
+
],
|
|
53
67
|
},
|
|
54
68
|
{
|
|
55
69
|
label: 'Blocks',
|
|
56
70
|
links: [
|
|
57
|
-
{ href:
|
|
58
|
-
{ href:
|
|
59
|
-
{ href:
|
|
60
|
-
{ href:
|
|
61
|
-
{ href:
|
|
62
|
-
{ href:
|
|
63
|
-
{ href:
|
|
71
|
+
{ href: `${SITE_BASE}/blocks`, label: 'Blocks overview', absolute: true, external: true },
|
|
72
|
+
{ href: `${SITE_BASE}/blocks/landing-hero`, label: 'Landing hero', absolute: true, external: true },
|
|
73
|
+
{ href: `${SITE_BASE}/blocks/pricing`, label: 'Pricing cards', absolute: true, external: true },
|
|
74
|
+
{ href: `${SITE_BASE}/blocks/dashboard-01`, label: 'Dashboard', absolute: true, external: true },
|
|
75
|
+
{ href: `${SITE_BASE}/blocks/docs-layout`, label: 'Docs layout', absolute: true, external: true },
|
|
76
|
+
{ href: `${SITE_BASE}/blocks/login`, label: 'Login', absolute: true, external: true },
|
|
77
|
+
{ href: `${SITE_BASE}/blocks/signup`, label: 'Sign up', absolute: true, external: true },
|
|
64
78
|
],
|
|
65
79
|
},
|
|
66
80
|
{
|
|
67
|
-
label: '
|
|
68
|
-
links: [
|
|
81
|
+
label: 'Examples',
|
|
82
|
+
links: [
|
|
83
|
+
{ href: `${SITE_BASE}/docs/examples`, label: 'Examples overview', absolute: true, external: true },
|
|
84
|
+
{ href: `${SITE_BASE}/docs/examples/form-layouts`, label: 'Form & layout examples', absolute: true, external: true, sections: [{ id: 'login-form', label: 'Login form' }, { id: 'contact-form', label: 'Contact form' }, { id: 'dashboard-stats', label: 'Dashboard stats cards' }, { id: 'card-grid', label: 'Card grid' }, { id: 'settings-panel', label: 'Settings panel' }] },
|
|
85
|
+
],
|
|
69
86
|
},
|
|
70
87
|
];
|
|
@@ -2,12 +2,14 @@
|
|
|
2
2
|
import ThemeSwitcher from './ThemeSwitcher.svelte';
|
|
3
3
|
import FontSwitcher from './FontSwitcher.svelte';
|
|
4
4
|
import SoundEffects from './SoundEffects.svelte';
|
|
5
|
+
import Close from './icons/Close.svelte';
|
|
5
6
|
|
|
6
7
|
interface Props {
|
|
7
8
|
open?: boolean;
|
|
8
9
|
}
|
|
9
10
|
let { open: openProp }: Props = $props();
|
|
10
11
|
let openInternal = $state(false);
|
|
12
|
+
let closing = $state(false);
|
|
11
13
|
const open = $derived(openProp !== undefined ? openProp : openInternal);
|
|
12
14
|
|
|
13
15
|
const isBrowser = typeof window !== 'undefined' && typeof localStorage?.getItem === 'function';
|
|
@@ -24,10 +26,20 @@
|
|
|
24
26
|
fontSizeLabel = `${Math.round(scale * 100)}%`;
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
let opening = $state(false);
|
|
30
|
+
/** Panel shows open state only after first frame when opening (so slide-in animation runs). */
|
|
31
|
+
const panelDataOpen = $derived(open && !closing && !opening);
|
|
32
|
+
|
|
27
33
|
$effect(() => {
|
|
28
34
|
if (typeof window === 'undefined') return;
|
|
29
35
|
(window as unknown as { openSettings?: () => void }).openSettings = () => {
|
|
30
36
|
openInternal = true;
|
|
37
|
+
opening = true;
|
|
38
|
+
requestAnimationFrame(() => {
|
|
39
|
+
requestAnimationFrame(() => {
|
|
40
|
+
opening = false;
|
|
41
|
+
});
|
|
42
|
+
});
|
|
31
43
|
};
|
|
32
44
|
return () => {
|
|
33
45
|
if ((window as unknown as { openSettings?: () => void }).openSettings) {
|
|
@@ -39,7 +51,7 @@
|
|
|
39
51
|
$effect(() => {
|
|
40
52
|
if (typeof document === 'undefined' || !open) return;
|
|
41
53
|
const onEscape = (e: KeyboardEvent) => {
|
|
42
|
-
if (e.key === 'Escape')
|
|
54
|
+
if (e.key === 'Escape') close();
|
|
43
55
|
};
|
|
44
56
|
document.addEventListener('keydown', onEscape);
|
|
45
57
|
return () => document.removeEventListener('keydown', onEscape);
|
|
@@ -58,7 +70,18 @@
|
|
|
58
70
|
});
|
|
59
71
|
|
|
60
72
|
function close() {
|
|
61
|
-
|
|
73
|
+
const prefersReducedMotion = typeof window !== 'undefined' && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
74
|
+
const reducedMotionClass = typeof document !== 'undefined' && document.documentElement.classList.contains('reduced-motion');
|
|
75
|
+
const duration = (prefersReducedMotion || reducedMotionClass) ? 0 : 300;
|
|
76
|
+
if (duration === 0) {
|
|
77
|
+
openInternal = false;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
closing = true;
|
|
81
|
+
setTimeout(() => {
|
|
82
|
+
openInternal = false;
|
|
83
|
+
closing = false;
|
|
84
|
+
}, duration);
|
|
62
85
|
}
|
|
63
86
|
|
|
64
87
|
function onFontSizeInput(e: Event) {
|
|
@@ -100,11 +123,13 @@
|
|
|
100
123
|
aria-modal="true"
|
|
101
124
|
aria-labelledby="settings-title"
|
|
102
125
|
aria-hidden={!open}
|
|
103
|
-
data-open={
|
|
126
|
+
data-open={panelDataOpen ? 'true' : undefined}
|
|
104
127
|
>
|
|
105
128
|
<div class="settings__header">
|
|
106
129
|
<h2 id="settings-title" class="settings__title">Settings</h2>
|
|
107
|
-
<button type="button" class="settings__close" data-settings-close aria-label="Close settings" onclick={close}
|
|
130
|
+
<button type="button" class="settings__close" data-settings-close aria-label="Close settings" title="Close settings" onclick={close}>
|
|
131
|
+
<Close width={20} height={20} />
|
|
132
|
+
</button>
|
|
108
133
|
</div>
|
|
109
134
|
<div class="settings__content" tabindex="-1" aria-label="Settings options">
|
|
110
135
|
<section class="settings__section">
|
|
@@ -153,7 +178,7 @@
|
|
|
153
178
|
<h3 class="settings__section-title">Accessibility</h3>
|
|
154
179
|
<div class="settings__control">
|
|
155
180
|
<label class="settings__checkbox-label">
|
|
156
|
-
<input type="checkbox" class="settings__checkbox" aria-label="Reduce motion" checked={reducedMotion} onchange={onReducedMotionChange} />
|
|
181
|
+
<input type="checkbox" class="settings__checkbox" data-reduced-motion aria-label="Reduce motion" checked={reducedMotion} onchange={onReducedMotionChange} />
|
|
157
182
|
<span>Reduce motion</span>
|
|
158
183
|
</label>
|
|
159
184
|
<p class="settings__help-text">Minimize animations and transitions</p>
|
|
@@ -1,6 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Docs nav for
|
|
2
|
+
* Docs sidebar nav for full template. Matches https://rizzo-css.vercel.app exactly.
|
|
3
|
+
* Local routes: /docs/overview, /docs/getting-started, /docs/components. All other links point to the main site.
|
|
3
4
|
*/
|
|
5
|
+
import { COMPONENT_CATEGORIES } from './componentCategories';
|
|
6
|
+
|
|
7
|
+
const SITE_BASE = 'https://rizzo-css.vercel.app';
|
|
8
|
+
const FRAMEWORK_PREFIX = '/docs/svelte';
|
|
9
|
+
|
|
10
|
+
function slugToTitle(slug: string): string {
|
|
11
|
+
return slug.split('-').map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(' ');
|
|
12
|
+
}
|
|
13
|
+
|
|
4
14
|
export interface DocsNavSection {
|
|
5
15
|
id: string;
|
|
6
16
|
label: string;
|
|
@@ -12,6 +22,8 @@ export interface DocsNavLink {
|
|
|
12
22
|
frameworkOnly?: boolean;
|
|
13
23
|
absolute?: boolean;
|
|
14
24
|
sections?: DocsNavSection[];
|
|
25
|
+
/** When true, open in new tab (external to main site). */
|
|
26
|
+
external?: boolean;
|
|
15
27
|
}
|
|
16
28
|
|
|
17
29
|
export interface DocsNavGroup {
|
|
@@ -24,9 +36,9 @@ export const DOCS_NAV: DocsNavGroup[] = [
|
|
|
24
36
|
label: 'Introduction',
|
|
25
37
|
links: [
|
|
26
38
|
{
|
|
27
|
-
href: 'overview',
|
|
39
|
+
href: '/docs/overview',
|
|
28
40
|
label: 'Overview',
|
|
29
|
-
|
|
41
|
+
absolute: true,
|
|
30
42
|
sections: [
|
|
31
43
|
{ id: 'overview', label: 'Overview' },
|
|
32
44
|
{ id: 'installation', label: 'Installation' },
|
|
@@ -35,36 +47,204 @@ export const DOCS_NAV: DocsNavGroup[] = [
|
|
|
35
47
|
],
|
|
36
48
|
},
|
|
37
49
|
{
|
|
38
|
-
href:
|
|
50
|
+
href: `${SITE_BASE}/docs/showcase`,
|
|
51
|
+
label: 'Showcase',
|
|
52
|
+
absolute: true,
|
|
53
|
+
external: true,
|
|
54
|
+
sections: [
|
|
55
|
+
{ id: 'components', label: 'Components' },
|
|
56
|
+
{ id: 'themes', label: 'Themes' },
|
|
57
|
+
{ id: 'blocks', label: 'Blocks' },
|
|
58
|
+
{ id: 'examples', label: 'Examples' },
|
|
59
|
+
],
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
href: '/docs/getting-started',
|
|
39
63
|
label: 'Getting Started',
|
|
64
|
+
absolute: true,
|
|
40
65
|
sections: [
|
|
41
66
|
{ id: 'installation', label: 'Installation' },
|
|
67
|
+
{ id: 'installation-by-framework', label: 'By framework' },
|
|
68
|
+
{ id: 'vanilla', label: 'Vanilla' },
|
|
69
|
+
{ id: 'astro', label: 'Astro' },
|
|
70
|
+
{ id: 'svelte', label: 'Svelte' },
|
|
71
|
+
{ id: 'react', label: 'React' },
|
|
72
|
+
{ id: 'vue', label: 'Vue' },
|
|
42
73
|
{ id: 'project-structure', label: 'Project Structure' },
|
|
43
74
|
{ id: 'development', label: 'Development' },
|
|
75
|
+
{ id: 'building', label: 'Building' },
|
|
44
76
|
{ id: 'using-components', label: 'Using Components' },
|
|
45
77
|
{ id: 'using-themes', label: 'Using Themes' },
|
|
78
|
+
{ id: 'css-architecture', label: 'CSS Architecture' },
|
|
79
|
+
],
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
label: 'Foundations',
|
|
85
|
+
links: [
|
|
86
|
+
{
|
|
87
|
+
href: `${SITE_BASE}/docs/design-system`,
|
|
88
|
+
label: 'Design System',
|
|
89
|
+
absolute: true,
|
|
90
|
+
external: true,
|
|
91
|
+
sections: [
|
|
92
|
+
{ id: 'semantic-variables', label: 'Semantic Variables' },
|
|
93
|
+
{ id: 'typography-system', label: 'Typography System' },
|
|
94
|
+
{ id: 'shadow-and-overlay-variables', label: 'Shadow and Overlay Variables' },
|
|
95
|
+
{ id: 'selection-color', label: 'Selection Color' },
|
|
96
|
+
{ id: 'color-format', label: 'Color Format' },
|
|
97
|
+
{ id: 'using-variables', label: 'Using Variables' },
|
|
98
|
+
{ id: 'naming-convention', label: 'Naming Convention' },
|
|
99
|
+
{ id: 'spacing-utilities', label: 'Spacing Utilities' },
|
|
100
|
+
{ id: 'container-utilities', label: 'Container Utilities' },
|
|
101
|
+
{ id: 'max-width-utilities', label: 'Max-Width Utilities' },
|
|
102
|
+
{ id: 'sizing-utilities', label: 'Sizing Utilities' },
|
|
103
|
+
{ id: 'media-queries', label: 'Media Queries' },
|
|
104
|
+
{ id: 'display-utilities', label: 'Display Utilities' },
|
|
105
|
+
{ id: 'position-utilities', label: 'Position Utilities' },
|
|
106
|
+
{ id: 'border-utilities', label: 'Border Utilities' },
|
|
107
|
+
{ id: 'flexbox-utilities', label: 'Flexbox Utilities' },
|
|
108
|
+
{ id: 'grid-utilities', label: 'Grid Utilities' },
|
|
109
|
+
{ id: 'gap-utilities', label: 'Gap Utilities' },
|
|
110
|
+
{ id: 'animation-transition-utilities', label: 'Animation & Transition Utilities' },
|
|
111
|
+
{ id: 'best-practices', label: 'Best Practices' },
|
|
112
|
+
],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
href: `${SITE_BASE}/docs/theming`,
|
|
116
|
+
label: 'Theming',
|
|
117
|
+
absolute: true,
|
|
118
|
+
external: true,
|
|
119
|
+
sections: [
|
|
120
|
+
{ id: 'available-themes', label: 'Available Themes' },
|
|
121
|
+
{ id: 'dark-themes', label: 'Dark Themes' },
|
|
122
|
+
{ id: 'light-themes', label: 'Light Themes' },
|
|
123
|
+
{ id: 'using-themes', label: 'Using Themes' },
|
|
124
|
+
{ id: 'theme-file-structure', label: 'Theme File Structure' },
|
|
125
|
+
{ id: 'creating-custom-themes', label: 'Creating Custom Themes' },
|
|
126
|
+
{ id: 'color-format', label: 'Color Format' },
|
|
127
|
+
{ id: 'theme-persistence', label: 'Theme Persistence' },
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
href: `${SITE_BASE}/docs/accessibility`,
|
|
132
|
+
label: 'Accessibility',
|
|
133
|
+
absolute: true,
|
|
134
|
+
external: true,
|
|
135
|
+
sections: [
|
|
136
|
+
{ id: 'accessibility-features', label: 'Accessibility Features' },
|
|
137
|
+
{ id: 'utility-classes', label: 'Utility Classes' },
|
|
138
|
+
{ id: 'focus-styles', label: 'Focus Styles' },
|
|
139
|
+
{ id: 'form-accessibility', label: 'Form Accessibility' },
|
|
140
|
+
{ id: 'responsive-design', label: 'Responsive Design' },
|
|
141
|
+
{ id: 'color-contrast', label: 'Color Contrast' },
|
|
142
|
+
{ id: 'reduced-motion', label: 'Reduced Motion' },
|
|
143
|
+
{ id: 'high-contrast-mode', label: 'High Contrast Mode' },
|
|
144
|
+
{ id: 'best-practices', label: 'Best Practices' },
|
|
145
|
+
{ id: 'testing', label: 'Testing' },
|
|
146
|
+
{ id: 'resources', label: 'Resources' },
|
|
147
|
+
],
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
href: `${SITE_BASE}/docs/accessibility/manual-testing`,
|
|
151
|
+
label: 'Manual testing checklist',
|
|
152
|
+
absolute: true,
|
|
153
|
+
external: true,
|
|
154
|
+
sections: [
|
|
155
|
+
{ id: 'overview', label: 'Overview' },
|
|
156
|
+
{ id: 'before-you-start', label: 'Before you start' },
|
|
157
|
+
{ id: 'priority-1', label: 'Priority 1 — High interaction' },
|
|
158
|
+
{ id: 'priority-2', label: 'Priority 2 — Forms and feedback' },
|
|
159
|
+
{ id: 'priority-3', label: 'Priority 3 — Navigation and layout' },
|
|
160
|
+
{ id: 'tools', label: 'Tools' },
|
|
161
|
+
{ id: 'step-by-step-example', label: 'Step-by-step example (Modal)' },
|
|
162
|
+
{ id: 'results-log', label: 'Results log' },
|
|
163
|
+
{ id: 'screen-reader-keys', label: 'Screen reader quick reference' },
|
|
164
|
+
{ id: 'suggested-order', label: 'Suggested order' },
|
|
165
|
+
],
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
href: `${SITE_BASE}/docs/colors`,
|
|
169
|
+
label: 'Colors',
|
|
170
|
+
absolute: true,
|
|
171
|
+
external: true,
|
|
172
|
+
sections: [
|
|
173
|
+
{ id: 'color-reference', label: 'Color Reference' },
|
|
174
|
+
{ id: 'core-colors', label: 'Core Colors' },
|
|
175
|
+
{ id: 'accent-colors', label: 'Accent Colors' },
|
|
176
|
+
{ id: 'semantic-colors', label: 'Semantic Colors' },
|
|
177
|
+
{ id: 'text-on-solid', label: 'Text on solid' },
|
|
178
|
+
{ id: 'color-scales', label: 'Color scales' },
|
|
179
|
+
],
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
href: `${SITE_BASE}/docs/tokens`,
|
|
183
|
+
label: 'Tokens reference',
|
|
184
|
+
absolute: true,
|
|
185
|
+
external: true,
|
|
186
|
+
sections: [
|
|
187
|
+
{ id: 'spacing', label: 'Spacing' },
|
|
188
|
+
{ id: 'typography', label: 'Typography' },
|
|
189
|
+
{ id: 'semantic-colors', label: 'Semantic colors' },
|
|
190
|
+
{ id: 'radius-transition', label: 'Radius & transition' },
|
|
191
|
+
],
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
href: `${SITE_BASE}/docs/best-practices`,
|
|
195
|
+
label: 'Best Practices',
|
|
196
|
+
absolute: true,
|
|
197
|
+
external: true,
|
|
198
|
+
sections: [
|
|
199
|
+
{ id: 'component-composition-patterns', label: 'Component Composition Patterns' },
|
|
200
|
+
{ id: 'performance-optimization-tips', label: 'Performance Optimization Tips' },
|
|
46
201
|
],
|
|
47
202
|
},
|
|
48
203
|
],
|
|
49
204
|
},
|
|
50
205
|
{
|
|
51
206
|
label: 'Components',
|
|
52
|
-
links: [
|
|
207
|
+
links: [
|
|
208
|
+
{ href: '/docs/components', label: 'Overview', absolute: true },
|
|
209
|
+
...COMPONENT_CATEGORIES.flatMap((cat) =>
|
|
210
|
+
cat.slugs.map((slug) => ({
|
|
211
|
+
href: `${SITE_BASE}${FRAMEWORK_PREFIX}/components/${slug}`,
|
|
212
|
+
label: slugToTitle(slug),
|
|
213
|
+
absolute: true as const,
|
|
214
|
+
external: true as const,
|
|
215
|
+
}))
|
|
216
|
+
),
|
|
217
|
+
],
|
|
53
218
|
},
|
|
54
219
|
{
|
|
55
220
|
label: 'Blocks',
|
|
56
221
|
links: [
|
|
57
|
-
{ href:
|
|
58
|
-
{ href:
|
|
59
|
-
{ href:
|
|
60
|
-
{ href:
|
|
61
|
-
{ href:
|
|
62
|
-
{ href:
|
|
63
|
-
{ href:
|
|
222
|
+
{ href: `${SITE_BASE}/blocks`, label: 'Blocks overview', absolute: true, external: true },
|
|
223
|
+
{ href: `${SITE_BASE}/blocks/landing-hero`, label: 'Landing hero', absolute: true, external: true },
|
|
224
|
+
{ href: `${SITE_BASE}/blocks/pricing`, label: 'Pricing cards', absolute: true, external: true },
|
|
225
|
+
{ href: `${SITE_BASE}/blocks/dashboard-01`, label: 'Dashboard', absolute: true, external: true },
|
|
226
|
+
{ href: `${SITE_BASE}/blocks/docs-layout`, label: 'Docs layout', absolute: true, external: true },
|
|
227
|
+
{ href: `${SITE_BASE}/blocks/login`, label: 'Login', absolute: true, external: true },
|
|
228
|
+
{ href: `${SITE_BASE}/blocks/signup`, label: 'Sign up', absolute: true, external: true },
|
|
64
229
|
],
|
|
65
230
|
},
|
|
66
231
|
{
|
|
67
|
-
label: '
|
|
68
|
-
links: [
|
|
232
|
+
label: 'Examples',
|
|
233
|
+
links: [
|
|
234
|
+
{ href: `${SITE_BASE}/docs/examples`, label: 'Examples overview', absolute: true, external: true },
|
|
235
|
+
{
|
|
236
|
+
href: `${SITE_BASE}/docs/examples/form-layouts`,
|
|
237
|
+
label: 'Form & layout examples',
|
|
238
|
+
absolute: true,
|
|
239
|
+
external: true,
|
|
240
|
+
sections: [
|
|
241
|
+
{ id: 'login-form', label: 'Login form' },
|
|
242
|
+
{ id: 'contact-form', label: 'Contact form' },
|
|
243
|
+
{ id: 'dashboard-stats', label: 'Dashboard stats cards' },
|
|
244
|
+
{ id: 'card-grid', label: 'Card grid' },
|
|
245
|
+
{ id: 'settings-panel', label: 'Settings panel' },
|
|
246
|
+
],
|
|
247
|
+
},
|
|
248
|
+
],
|
|
69
249
|
},
|
|
70
250
|
];
|
|
@@ -28,7 +28,7 @@ If you prefer to load CSS from a CDN instead of the local file, replace the `<li
|
|
|
28
28
|
- `<link rel="stylesheet" href="https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css" />`
|
|
29
29
|
- Or jsDelivr: `https://cdn.jsdelivr.net/npm/rizzo-css@latest/dist/rizzo.min.css`
|
|
30
30
|
|
|
31
|
-
(Replace `@latest` with a specific version, e.g. `@0.0.
|
|
31
|
+
(Replace `@latest` with a specific version, e.g. `@0.0.84`, in production.)
|
|
32
32
|
|
|
33
33
|
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.
|
|
34
34
|
|