rizzo-css 0.0.76 → 0.0.78
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/bin/rizzo-css.js +13 -9
- package/package.json +1 -1
- package/scaffold/react/base/package.json +1 -1
- package/scaffold/svelte/Button.svelte +5 -1
- package/scaffold/svelte/FontSwitcher.svelte +1 -1
- package/scaffold/svelte/Navbar.svelte +10 -2
- package/scaffold/svelte/Settings.svelte +1 -1
- package/scaffold/svelte/base/src/routes/+layout.svelte +18 -0
- package/scaffold/svelte/base/src/routes/+page.svelte +158 -87
- package/scaffold/svelte/config/fonts.ts +59 -0
- package/scaffold/svelte/index.ts +1 -0
- package/scaffold/svelte/variants/full/src/routes/+layout.svelte +2 -0
- package/scaffold/vanilla/README-RIZZO.md +1 -1
- package/scaffold/vanilla/components/accordion.html +6 -0
- package/scaffold/vanilla/components/alert-dialog.html +6 -0
- package/scaffold/vanilla/components/alert.html +6 -0
- package/scaffold/vanilla/components/aspect-ratio.html +6 -0
- package/scaffold/vanilla/components/avatar.html +6 -0
- package/scaffold/vanilla/components/back-to-top.html +6 -0
- package/scaffold/vanilla/components/badge.html +6 -0
- package/scaffold/vanilla/components/breadcrumb.html +6 -0
- package/scaffold/vanilla/components/button-group.html +6 -0
- package/scaffold/vanilla/components/button.html +6 -0
- package/scaffold/vanilla/components/calendar.html +6 -0
- package/scaffold/vanilla/components/cards.html +6 -0
- package/scaffold/vanilla/components/carousel.html +6 -0
- package/scaffold/vanilla/components/chart.html +6 -0
- package/scaffold/vanilla/components/collapsible.html +6 -0
- package/scaffold/vanilla/components/command.html +6 -0
- package/scaffold/vanilla/components/context-menu.html +6 -0
- package/scaffold/vanilla/components/copy-to-clipboard.html +6 -0
- package/scaffold/vanilla/components/dashboard.html +6 -0
- package/scaffold/vanilla/components/direction.html +6 -0
- package/scaffold/vanilla/components/divider.html +6 -0
- package/scaffold/vanilla/components/docs-sidebar.html +6 -0
- package/scaffold/vanilla/components/dropdown.html +6 -0
- package/scaffold/vanilla/components/empty.html +6 -0
- package/scaffold/vanilla/components/font-switcher.html +6 -0
- package/scaffold/vanilla/components/footer.html +6 -0
- package/scaffold/vanilla/components/forms.html +6 -0
- package/scaffold/vanilla/components/hover-card.html +6 -0
- package/scaffold/vanilla/components/icons.html +6 -0
- package/scaffold/vanilla/components/index.html +6 -0
- package/scaffold/vanilla/components/input-group.html +6 -0
- package/scaffold/vanilla/components/input-otp.html +6 -0
- package/scaffold/vanilla/components/kbd.html +6 -0
- package/scaffold/vanilla/components/label.html +6 -0
- package/scaffold/vanilla/components/menubar.html +6 -0
- package/scaffold/vanilla/components/modal.html +6 -0
- package/scaffold/vanilla/components/navbar.html +6 -0
- package/scaffold/vanilla/components/pagination.html +6 -0
- package/scaffold/vanilla/components/popover.html +6 -0
- package/scaffold/vanilla/components/progress-bar.html +6 -0
- package/scaffold/vanilla/components/range-calendar.html +6 -0
- package/scaffold/vanilla/components/resizable.html +6 -0
- package/scaffold/vanilla/components/scroll-area.html +6 -0
- package/scaffold/vanilla/components/search.html +6 -0
- package/scaffold/vanilla/components/separator.html +6 -0
- package/scaffold/vanilla/components/settings.html +6 -0
- package/scaffold/vanilla/components/sheet.html +6 -0
- package/scaffold/vanilla/components/skeleton.html +6 -0
- package/scaffold/vanilla/components/slider.html +6 -0
- package/scaffold/vanilla/components/sound-effects.html +6 -0
- package/scaffold/vanilla/components/spinner.html +6 -0
- package/scaffold/vanilla/components/switch.html +6 -0
- package/scaffold/vanilla/components/table.html +6 -0
- package/scaffold/vanilla/components/tabs.html +6 -0
- package/scaffold/vanilla/components/theme-switcher.html +6 -0
- package/scaffold/vanilla/components/toast.html +6 -0
- package/scaffold/vanilla/components/toggle-group.html +6 -0
- package/scaffold/vanilla/components/toggle.html +6 -0
- package/scaffold/vanilla/components/tooltip.html +6 -0
- package/scaffold/vanilla/index.html +6 -0
- package/scaffold/vue/base/package.json +1 -1
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.78 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/bin/rizzo-css.js
CHANGED
|
@@ -1855,8 +1855,8 @@ function copySvelteComponents(projectDir, selectedNames, opts) {
|
|
|
1855
1855
|
if (existsSync(join(scaffoldDir, 'themes.ts'))) plan.wouldWrite.push(pathRelative(projectDir, join(targetDir, 'themes.ts')));
|
|
1856
1856
|
if (existsSync(join(scaffoldDir, 'theme.ts'))) plan.wouldWrite.push(pathRelative(projectDir, join(targetDir, 'theme.ts')));
|
|
1857
1857
|
}
|
|
1858
|
-
if (toCopy.includes('Settings') && existsSync(join(
|
|
1859
|
-
plan.wouldWrite.push(pathRelative(projectDir, join(
|
|
1858
|
+
if ((toCopy.includes('Settings') || toCopy.includes('FontSwitcher')) && existsSync(join(scaffoldDir, 'config', 'fonts.ts')))
|
|
1859
|
+
plan.wouldWrite.push(pathRelative(projectDir, join(targetDir, 'config', 'fonts.ts')));
|
|
1860
1860
|
if (toCopy.length > 0) plan.wouldWrite.push(pathRelative(projectDir, join(targetDir, 'index.ts')));
|
|
1861
1861
|
return;
|
|
1862
1862
|
}
|
|
@@ -1879,13 +1879,17 @@ function copySvelteComponents(projectDir, selectedNames, opts) {
|
|
|
1879
1879
|
if (existsSync(themesSrc)) copyFileSync(themesSrc, join(targetDir, 'themes.ts'));
|
|
1880
1880
|
if (existsSync(themeSrc)) copyFileSync(themeSrc, join(targetDir, 'theme.ts'));
|
|
1881
1881
|
}
|
|
1882
|
-
if (toCopy.includes('Settings')) {
|
|
1883
|
-
const
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1882
|
+
if (toCopy.includes('Settings') || toCopy.includes('FontSwitcher')) {
|
|
1883
|
+
const svelteConfigSrc = join(scaffoldDir, 'config');
|
|
1884
|
+
if (existsSync(svelteConfigSrc)) {
|
|
1885
|
+
const projectRizzoConfigDir = join(targetDir, 'config');
|
|
1886
|
+
mkdirSync(projectRizzoConfigDir, { recursive: true });
|
|
1887
|
+
const configEntries = readdirSync(svelteConfigSrc, { withFileTypes: true });
|
|
1888
|
+
for (const entry of configEntries) {
|
|
1889
|
+
if (entry.isFile()) {
|
|
1890
|
+
copyFileSync(join(svelteConfigSrc, entry.name), join(projectRizzoConfigDir, entry.name));
|
|
1891
|
+
}
|
|
1892
|
+
}
|
|
1889
1893
|
}
|
|
1890
1894
|
}
|
|
1891
1895
|
if (exports.length > 0 || copyIconsOnly) {
|
package/package.json
CHANGED
|
@@ -2,8 +2,10 @@
|
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
|
|
4
4
|
type Variant = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info' | 'outline' | 'ghost';
|
|
5
|
+
type Size = 'sm' | 'md' | 'lg';
|
|
5
6
|
interface Props {
|
|
6
7
|
variant?: Variant;
|
|
8
|
+
size?: Size;
|
|
7
9
|
disabled?: boolean;
|
|
8
10
|
type?: 'button' | 'submit' | 'reset';
|
|
9
11
|
class?: string;
|
|
@@ -11,6 +13,7 @@
|
|
|
11
13
|
}
|
|
12
14
|
let {
|
|
13
15
|
variant = 'default',
|
|
16
|
+
size = 'md',
|
|
14
17
|
disabled = false,
|
|
15
18
|
type = 'button',
|
|
16
19
|
class: className = '',
|
|
@@ -19,7 +22,8 @@
|
|
|
19
22
|
}: Props = $props();
|
|
20
23
|
|
|
21
24
|
const variantClass = $derived(variant === 'default' ? '' : `btn-${variant}`);
|
|
22
|
-
const
|
|
25
|
+
const sizeClass = $derived(size !== 'md' ? `btn--${size}` : '');
|
|
26
|
+
const classes = $derived(['btn', variantClass, sizeClass, className].filter(Boolean).join(' '));
|
|
23
27
|
</script>
|
|
24
28
|
|
|
25
29
|
<button {type} {disabled} class={classes} {...rest}>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onMount } from 'svelte';
|
|
3
3
|
import ChevronDown from './icons/ChevronDown.svelte';
|
|
4
|
-
import { FONT_PAIRS, FONT_PAIR_DEFAULT } from '
|
|
4
|
+
import { FONT_PAIRS, FONT_PAIR_DEFAULT } from './config/fonts';
|
|
5
5
|
|
|
6
6
|
interface Props {
|
|
7
7
|
/** Optional prefix for trigger/menu IDs when multiple FontSwitchers exist. */
|
|
@@ -3,19 +3,27 @@
|
|
|
3
3
|
import Gear from './icons/Gear.svelte';
|
|
4
4
|
import Search from './Search.svelte';
|
|
5
5
|
|
|
6
|
+
export interface NavbarLink {
|
|
7
|
+
href: string;
|
|
8
|
+
label: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
6
11
|
interface Props {
|
|
7
12
|
siteName?: string;
|
|
8
13
|
logo?: string;
|
|
14
|
+
/** Override default nav links (e.g. for portfolio: About, Skills, Projects, Contact) */
|
|
15
|
+
menuLinks?: NavbarLink[];
|
|
9
16
|
}
|
|
10
|
-
let { siteName = 'Site', logo }: Props = $props();
|
|
17
|
+
let { siteName = 'Site', logo, menuLinks: menuLinksProp }: Props = $props();
|
|
11
18
|
let menuOpen = $state(false);
|
|
12
19
|
|
|
13
|
-
const
|
|
20
|
+
const defaultMenuLinks: NavbarLink[] = [
|
|
14
21
|
{ href: '/docs', label: 'Docs' },
|
|
15
22
|
{ href: '/docs/components', label: 'Components' },
|
|
16
23
|
{ href: '/blocks', label: 'Blocks' },
|
|
17
24
|
{ href: '/themes', label: 'Themes' },
|
|
18
25
|
];
|
|
26
|
+
const menuLinks = $derived(menuLinksProp ?? defaultMenuLinks);
|
|
19
27
|
|
|
20
28
|
// Click outside and Escape to close mobile menu
|
|
21
29
|
$effect(() => {
|
|
@@ -1 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Navbar from '$lib/rizzo/Navbar.svelte';
|
|
3
|
+
import Footer from '$lib/rizzo/Footer.svelte';
|
|
4
|
+
import Settings from '$lib/rizzo/Settings.svelte';
|
|
5
|
+
import BackToTop from '$lib/rizzo/BackToTop.svelte';
|
|
6
|
+
|
|
7
|
+
const menuLinks = [
|
|
8
|
+
{ href: '/#about', label: 'About' },
|
|
9
|
+
{ href: '/#skills', label: 'Skills' },
|
|
10
|
+
{ href: '/#projects', label: 'Projects' },
|
|
11
|
+
{ href: '/#contact', label: 'Contact' },
|
|
12
|
+
];
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<Navbar siteName="Site" {menuLinks} />
|
|
1
16
|
<slot />
|
|
17
|
+
<Footer siteName="Site" links={[{ href: 'https://github.com', label: 'GitHub' }, { href: 'https://linkedin.com', label: 'LinkedIn' }]} />
|
|
18
|
+
<BackToTop />
|
|
19
|
+
<Settings />
|
|
@@ -1,105 +1,176 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
2
|
+
import Card from '$lib/rizzo/Card.svelte';
|
|
3
|
+
import Badge from '$lib/rizzo/Badge.svelte';
|
|
4
|
+
import Button from '$lib/rizzo/Button.svelte';
|
|
5
|
+
|
|
6
|
+
const skills = [
|
|
7
|
+
{ name: 'Skill one' },
|
|
8
|
+
{ name: 'Skill two' },
|
|
9
|
+
{ name: 'Skill three' },
|
|
10
|
+
{ name: 'Skill four' },
|
|
11
|
+
{ name: 'Skill five' },
|
|
12
|
+
];
|
|
13
|
+
|
|
14
|
+
const projects = [
|
|
15
|
+
{
|
|
16
|
+
title: 'Project one',
|
|
17
|
+
description: 'Short description placeholder. Replace with your project summary and tech stack.',
|
|
18
|
+
tags: ['Tag A', 'Tag B', 'Tag C'],
|
|
19
|
+
href: '#',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
title: 'Project two',
|
|
23
|
+
description: 'Short description placeholder. Replace with your project summary and tech stack.',
|
|
24
|
+
tags: ['Tag A', 'Tag B'],
|
|
25
|
+
href: '#',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
title: 'Project three',
|
|
29
|
+
description: 'Short description placeholder. Replace with your project summary and tech stack.',
|
|
30
|
+
tags: ['Tag A', 'Tag B', 'Tag C'],
|
|
31
|
+
href: '#',
|
|
32
|
+
},
|
|
33
|
+
];
|
|
5
34
|
</script>
|
|
6
35
|
|
|
7
36
|
<a href="#main-content" class="skip-link">Skip to main content</a>
|
|
8
|
-
<main id="main-content" class="home">
|
|
37
|
+
<main id="main-content" class="home portfolio">
|
|
9
38
|
<div class="home__container">
|
|
10
|
-
<header class="home__hero">
|
|
11
|
-
<h1 class="home__title">
|
|
12
|
-
<p class="home__subtitle">
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
39
|
+
<header class="home__hero portfolio__hero" id="top">
|
|
40
|
+
<h1 class="home__title portfolio__title">Your name</h1>
|
|
41
|
+
<p class="home__subtitle portfolio__subtitle">
|
|
42
|
+
Short tagline here. Replace with your role or focus (e.g. full stack developer, designer).
|
|
43
|
+
</p>
|
|
44
|
+
<div class="home__hero-ctas portfolio__ctas">
|
|
45
|
+
<a href="#projects" class="btn btn-primary home__hero-cta">View projects</a>
|
|
46
|
+
<a href="#contact" class="btn btn-outline home__hero-cta">Get in touch</a>
|
|
16
47
|
</div>
|
|
17
48
|
</header>
|
|
18
49
|
|
|
19
|
-
<section class="
|
|
20
|
-
<h2
|
|
21
|
-
<p class="
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
<
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
<h3>All components</h3>
|
|
36
|
-
<p>Navbar, Settings, Theme Switcher, Font Switcher, Modal, Dropdown, Tabs, Forms, and more — all accessible and themeable.</p>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
<h3 class="home__features-supporting-label">And more</h3>
|
|
40
|
-
<div class="home__grid home__grid--supporting">
|
|
41
|
-
<div class="home__card home__card--supporting">
|
|
42
|
-
<h3>Semantic variables</h3>
|
|
43
|
-
<p>CSS variables that adapt to themes. No hardcoded colors; override once, update everywhere.</p>
|
|
44
|
-
</div>
|
|
45
|
-
<div class="home__card home__card--supporting">
|
|
46
|
-
<h3>PostCSS powered</h3>
|
|
47
|
-
<p>Imports, autoprefixing, and production minification. Fits into any build pipeline.</p>
|
|
48
|
-
</div>
|
|
49
|
-
<div class="home__card home__card--supporting">
|
|
50
|
-
<h3>Typography & spacing</h3>
|
|
51
|
-
<p>Scaling font sizes, weights, line heights, and a consistent spacing scale (0–24).</p>
|
|
52
|
-
</div>
|
|
53
|
-
<div class="home__card home__card--supporting">
|
|
54
|
-
<h3>Responsive & utilities</h3>
|
|
55
|
-
<p>Mobile-first breakpoints and utility classes for layout, display, and flexbox.</p>
|
|
56
|
-
</div>
|
|
50
|
+
<section class="portfolio__section" id="about">
|
|
51
|
+
<h2 class="home__section-title">About</h2>
|
|
52
|
+
<p class="portfolio__about-text">
|
|
53
|
+
Replace with a short bio: what you do, your focus areas, and what you enjoy. Keep it to one or two
|
|
54
|
+
paragraphs so visitors can quickly understand your background.
|
|
55
|
+
</p>
|
|
56
|
+
</section>
|
|
57
|
+
|
|
58
|
+
<section class="portfolio__section" id="skills">
|
|
59
|
+
<h2 class="home__section-title">Skills & tools</h2>
|
|
60
|
+
<div class="portfolio__skills">
|
|
61
|
+
{#each skills as skill}
|
|
62
|
+
<div class="portfolio__skill">
|
|
63
|
+
<span class="portfolio__skill-name">{skill.name}</span>
|
|
64
|
+
</div>
|
|
65
|
+
{/each}
|
|
57
66
|
</div>
|
|
67
|
+
<p class="portfolio__skills-note">Plus: add more tools or categories as needed.</p>
|
|
58
68
|
</section>
|
|
59
69
|
|
|
60
|
-
<section class="
|
|
61
|
-
<h2
|
|
62
|
-
<
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
70
|
+
<section class="portfolio__section" id="projects">
|
|
71
|
+
<h2 class="home__section-title">Selected projects</h2>
|
|
72
|
+
<div class="home__docs-grid portfolio__projects-grid">
|
|
73
|
+
{#each projects as project}
|
|
74
|
+
<Card variant="elevated" class="portfolio__project-card">
|
|
75
|
+
<div class="card__header">
|
|
76
|
+
<h3 class="card__title">{project.title}</h3>
|
|
77
|
+
</div>
|
|
78
|
+
<div class="card__body">
|
|
79
|
+
<p>{project.description}</p>
|
|
80
|
+
<div class="portfolio__tags">
|
|
81
|
+
{#each project.tags as tag}
|
|
82
|
+
<Badge variant="primary" size="sm">{tag}</Badge>
|
|
83
|
+
{/each}
|
|
84
|
+
</div>
|
|
85
|
+
</div>
|
|
86
|
+
<div class="card__footer">
|
|
87
|
+
<a href={project.href} class="btn btn-outline btn--sm" target="_blank" rel="noopener noreferrer">
|
|
88
|
+
View project
|
|
89
|
+
</a>
|
|
90
|
+
</div>
|
|
91
|
+
</Card>
|
|
92
|
+
{/each}
|
|
66
93
|
</div>
|
|
67
94
|
</section>
|
|
68
95
|
|
|
69
|
-
<section class="
|
|
70
|
-
<h2 class="home__section-title">
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
</a>
|
|
77
|
-
<a href=
|
|
78
|
-
<h3>Components</h3>
|
|
79
|
-
<p>Component library with usage examples and live demos</p>
|
|
80
|
-
<span class="sr-only"> (opens in new tab)</span>
|
|
81
|
-
</a>
|
|
82
|
-
<a href={DOCS_BASE + '/docs/theming'} class="home__doc-card" target="_blank" rel="noopener noreferrer">
|
|
83
|
-
<h3>Theming</h3>
|
|
84
|
-
<p>Theme system, custom themes, and color format guide</p>
|
|
85
|
-
<span class="sr-only"> (opens in new tab)</span>
|
|
86
|
-
</a>
|
|
87
|
-
<a href={DOCS_BASE + '/docs/design-system'} class="home__doc-card" target="_blank" rel="noopener noreferrer">
|
|
88
|
-
<h3>Design System</h3>
|
|
89
|
-
<p>Semantic variables, typography, and design principles</p>
|
|
90
|
-
<span class="sr-only"> (opens in new tab)</span>
|
|
91
|
-
</a>
|
|
92
|
-
<a href={DOCS_BASE + '/docs/accessibility'} class="home__doc-card" target="_blank" rel="noopener noreferrer">
|
|
93
|
-
<h3>Accessibility</h3>
|
|
94
|
-
<p>Accessibility guidelines, utilities, and best practices</p>
|
|
95
|
-
<span class="sr-only"> (opens in new tab)</span>
|
|
96
|
-
</a>
|
|
97
|
-
<a href={DOCS_BASE + '/docs/colors'} class="home__doc-card" target="_blank" rel="noopener noreferrer">
|
|
98
|
-
<h3>Colors</h3>
|
|
99
|
-
<p>Interactive color reference with multiple format options</p>
|
|
100
|
-
<span class="sr-only"> (opens in new tab)</span>
|
|
101
|
-
</a>
|
|
96
|
+
<section class="portfolio__section portfolio__contact" id="contact">
|
|
97
|
+
<h2 class="home__section-title">Contact</h2>
|
|
98
|
+
<p class="portfolio__contact-text">
|
|
99
|
+
Interested in working together? Replace with your own message and add your email and social links below.
|
|
100
|
+
</p>
|
|
101
|
+
<div class="portfolio__contact-ctas">
|
|
102
|
+
<a href="mailto:you@example.com" class="btn btn-primary">Email me</a>
|
|
103
|
+
<a href="https://linkedin.com" class="btn btn-outline" target="_blank" rel="noopener noreferrer">LinkedIn</a>
|
|
104
|
+
<a href="https://github.com" class="btn btn-outline" target="_blank" rel="noopener noreferrer">GitHub</a>
|
|
102
105
|
</div>
|
|
103
106
|
</section>
|
|
104
107
|
</div>
|
|
105
108
|
</main>
|
|
109
|
+
|
|
110
|
+
<style>
|
|
111
|
+
.portfolio__hero {
|
|
112
|
+
margin-bottom: var(--spacing-8);
|
|
113
|
+
}
|
|
114
|
+
.portfolio__title {
|
|
115
|
+
margin-bottom: var(--spacing-2);
|
|
116
|
+
}
|
|
117
|
+
.portfolio__subtitle {
|
|
118
|
+
margin-bottom: var(--spacing-6);
|
|
119
|
+
}
|
|
120
|
+
.portfolio__ctas {
|
|
121
|
+
display: flex;
|
|
122
|
+
flex-wrap: wrap;
|
|
123
|
+
gap: var(--spacing-3);
|
|
124
|
+
}
|
|
125
|
+
.portfolio__section {
|
|
126
|
+
margin-bottom: var(--spacing-10);
|
|
127
|
+
}
|
|
128
|
+
.portfolio__about-text {
|
|
129
|
+
max-width: 65ch;
|
|
130
|
+
margin: 0;
|
|
131
|
+
color: var(--text);
|
|
132
|
+
}
|
|
133
|
+
.portfolio__skills {
|
|
134
|
+
display: flex;
|
|
135
|
+
flex-wrap: wrap;
|
|
136
|
+
gap: var(--spacing-3);
|
|
137
|
+
margin-bottom: var(--spacing-2);
|
|
138
|
+
}
|
|
139
|
+
.portfolio__skill {
|
|
140
|
+
display: inline-flex;
|
|
141
|
+
align-items: center;
|
|
142
|
+
padding: var(--spacing-2) var(--spacing-3);
|
|
143
|
+
background: var(--surface);
|
|
144
|
+
border-radius: var(--radius-md);
|
|
145
|
+
font-size: var(--text-sm);
|
|
146
|
+
}
|
|
147
|
+
.portfolio__skills-note {
|
|
148
|
+
margin: 0;
|
|
149
|
+
font-size: var(--text-sm);
|
|
150
|
+
color: var(--text-dim);
|
|
151
|
+
}
|
|
152
|
+
.portfolio__projects-grid {
|
|
153
|
+
display: grid;
|
|
154
|
+
grid-template-columns: repeat(auto-fill, minmax(18rem, 1fr));
|
|
155
|
+
gap: var(--spacing-6);
|
|
156
|
+
}
|
|
157
|
+
.portfolio__project-card :global(.card__body) {
|
|
158
|
+
display: flex;
|
|
159
|
+
flex-direction: column;
|
|
160
|
+
gap: var(--spacing-3);
|
|
161
|
+
}
|
|
162
|
+
.portfolio__tags {
|
|
163
|
+
display: flex;
|
|
164
|
+
flex-wrap: wrap;
|
|
165
|
+
gap: var(--spacing-2);
|
|
166
|
+
}
|
|
167
|
+
.portfolio__contact-text {
|
|
168
|
+
margin: 0 0 var(--spacing-4);
|
|
169
|
+
color: var(--text);
|
|
170
|
+
}
|
|
171
|
+
.portfolio__contact-ctas {
|
|
172
|
+
display: flex;
|
|
173
|
+
flex-wrap: wrap;
|
|
174
|
+
gap: var(--spacing-3);
|
|
175
|
+
}
|
|
176
|
+
</style>
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Font pairs (sans + mono) for the Settings font changer.
|
|
3
|
+
* Each option sets both --font-family (body/UI) and --font-family-mono (code blocks, pre, kbd).
|
|
4
|
+
* Used by Settings components and layout flash scripts to apply and persist the chosen pair.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export interface FontPairEntry {
|
|
8
|
+
value: string;
|
|
9
|
+
label: string;
|
|
10
|
+
/** CSS value for --font-family (sans stack) */
|
|
11
|
+
sans: string;
|
|
12
|
+
/** CSS value for --font-family-mono */
|
|
13
|
+
mono: string;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export const FONT_PAIR_DEFAULT = 'geist' as const;
|
|
17
|
+
|
|
18
|
+
export const FONT_PAIRS: FontPairEntry[] = [
|
|
19
|
+
{
|
|
20
|
+
value: 'geist',
|
|
21
|
+
label: 'Geist (Sans + Mono)',
|
|
22
|
+
sans: 'var(--font-family-geist-sans)',
|
|
23
|
+
mono: 'var(--font-family-geist-mono)',
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
value: 'inter-jetbrains',
|
|
27
|
+
label: 'Inter + JetBrains Mono',
|
|
28
|
+
sans: 'var(--font-family-inter)',
|
|
29
|
+
mono: 'var(--font-family-jetbrains-mono)',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: 'ibm-plex',
|
|
33
|
+
label: 'IBM Plex Sans + Mono',
|
|
34
|
+
sans: 'var(--font-family-ibm-plex-sans)',
|
|
35
|
+
mono: 'var(--font-family-ibm-plex-mono)',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
value: 'source',
|
|
39
|
+
label: 'Source Sans 3 + Source Code Pro',
|
|
40
|
+
sans: 'var(--font-family-source-sans-3)',
|
|
41
|
+
mono: 'var(--font-family-source-code-pro)',
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
value: 'dm',
|
|
45
|
+
label: 'DM Sans + DM Mono',
|
|
46
|
+
sans: 'var(--font-family-dm-sans)',
|
|
47
|
+
mono: 'var(--font-family-dm-mono)',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
value: 'outfit-jetbrains',
|
|
51
|
+
label: 'Outfit + JetBrains Mono',
|
|
52
|
+
sans: 'var(--font-family-outfit)',
|
|
53
|
+
mono: 'var(--font-family-jetbrains-mono)',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
|
|
57
|
+
export function getFontPairById(id: string): FontPairEntry | undefined {
|
|
58
|
+
return FONT_PAIRS.find((p) => p.value === id);
|
|
59
|
+
}
|
package/scaffold/svelte/index.ts
CHANGED
|
@@ -43,6 +43,7 @@ export { default as FontSwitcher } from './FontSwitcher.svelte';
|
|
|
43
43
|
export { default as SoundEffects } from './SoundEffects.svelte';
|
|
44
44
|
export { default as DocsSidebar } from './DocsSidebar.svelte';
|
|
45
45
|
export { default as Navbar } from './Navbar.svelte';
|
|
46
|
+
export type { NavbarLink } from './Navbar.svelte';
|
|
46
47
|
export { default as Settings } from './Settings.svelte';
|
|
47
48
|
export { default as Search } from './Search.svelte';
|
|
48
49
|
export { default as Skeleton } from './Skeleton.svelte';
|
|
@@ -2,9 +2,11 @@
|
|
|
2
2
|
import Navbar from '$lib/rizzo/Navbar.svelte';
|
|
3
3
|
import Footer from '$lib/rizzo/Footer.svelte';
|
|
4
4
|
import Settings from '$lib/rizzo/Settings.svelte';
|
|
5
|
+
import BackToTop from '$lib/rizzo/BackToTop.svelte';
|
|
5
6
|
</script>
|
|
6
7
|
|
|
7
8
|
<Navbar siteName="Rizzo CSS" />
|
|
8
9
|
<slot />
|
|
9
10
|
<Footer />
|
|
11
|
+
<BackToTop />
|
|
10
12
|
<Settings />
|
|
@@ -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.78`, 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
|
|