rizzo-css 0.0.17 → 0.0.19
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 +4 -4
- package/bin/rizzo-css.js +329 -118
- package/dist/rizzo.min.css +3 -3
- package/package.json +7 -3
- package/scaffold/astro-minimal/.env.example +3 -0
- package/scaffold/astro-minimal/README.md +36 -0
- package/scaffold/astro-minimal/package.json +13 -0
- package/scaffold/astro-minimal/src/layouts/Layout.astro +28 -0
- package/scaffold/astro-minimal/src/pages/index.astro +10 -0
- package/scaffold/svelte-minimal/.env.example +3 -0
- package/scaffold/svelte-minimal/README.md +37 -0
- package/scaffold/svelte-minimal/package.json +20 -0
- package/scaffold/svelte-minimal/src/app.d.ts +11 -0
- package/scaffold/svelte-minimal/src/app.html +15 -0
- package/scaffold/svelte-minimal/src/routes/+layout.svelte +1 -0
- package/scaffold/svelte-minimal/src/routes/+page.svelte +5 -0
- package/scaffold/svelte-minimal/svelte.config.js +10 -0
- package/scaffold/svelte-minimal/tsconfig.json +11 -0
- package/scaffold/vanilla/README.md +4 -4
- package/scaffold/vanilla/components/accordion.html +18 -0
- package/scaffold/vanilla/components/alert.html +18 -0
- package/scaffold/vanilla/components/avatar.html +18 -0
- package/scaffold/vanilla/components/badge.html +18 -0
- package/scaffold/vanilla/components/breadcrumb.html +18 -0
- package/scaffold/vanilla/components/button.html +18 -0
- package/scaffold/vanilla/components/cards.html +18 -0
- package/scaffold/vanilla/components/copy-to-clipboard.html +18 -0
- package/scaffold/vanilla/components/divider.html +18 -0
- package/scaffold/vanilla/components/dropdown.html +18 -0
- package/scaffold/vanilla/components/forms.html +18 -0
- package/scaffold/vanilla/components/icons.html +18 -0
- package/scaffold/vanilla/components/index.html +18 -0
- package/scaffold/vanilla/components/modal.html +18 -0
- package/scaffold/vanilla/components/navbar.html +18 -0
- package/scaffold/vanilla/components/pagination.html +18 -0
- package/scaffold/vanilla/components/progress-bar.html +18 -0
- package/scaffold/vanilla/components/search.html +18 -0
- package/scaffold/vanilla/components/settings.html +18 -0
- package/scaffold/vanilla/components/spinner.html +18 -0
- package/scaffold/vanilla/components/table.html +18 -0
- package/scaffold/vanilla/components/tabs.html +18 -0
- package/scaffold/vanilla/components/theme-switcher.html +18 -0
- package/scaffold/vanilla/components/toast.html +18 -0
- package/scaffold/vanilla/components/tooltip.html +18 -0
- package/scaffold/vanilla/index.html +18 -0
- package/scaffold/astro-app/README.md +0 -43
- package/scaffold/astro-app/package.json +0 -1
- package/scaffold/astro-app/src/components/Accordion.astro +0 -178
- package/scaffold/astro-app/src/components/Alert.astro +0 -131
- package/scaffold/astro-app/src/components/Avatar.astro +0 -59
- package/scaffold/astro-app/src/components/Badge.astro +0 -24
- package/scaffold/astro-app/src/components/Breadcrumb.astro +0 -61
- package/scaffold/astro-app/src/components/Button.astro +0 -3
- package/scaffold/astro-app/src/components/Card.astro +0 -18
- package/scaffold/astro-app/src/components/Checkbox.astro +0 -38
- package/scaffold/astro-app/src/components/CliCommandTabs.astro +0 -90
- package/scaffold/astro-app/src/components/CodeBlock.astro +0 -393
- package/scaffold/astro-app/src/components/CopyToClipboard.astro +0 -219
- package/scaffold/astro-app/src/components/Divider.astro +0 -37
- package/scaffold/astro-app/src/components/DocsSidebar.astro +0 -51
- package/scaffold/astro-app/src/components/Dropdown.astro +0 -807
- package/scaffold/astro-app/src/components/FormGroup.astro +0 -59
- package/scaffold/astro-app/src/components/FrameworkSwitcher.astro +0 -72
- package/scaffold/astro-app/src/components/Input.astro +0 -59
- package/scaffold/astro-app/src/components/Modal.astro +0 -212
- package/scaffold/astro-app/src/components/Navbar.astro +0 -623
- package/scaffold/astro-app/src/components/PackageInstallTabs.astro +0 -87
- package/scaffold/astro-app/src/components/Pagination.astro +0 -240
- package/scaffold/astro-app/src/components/ProgressBar.astro +0 -65
- package/scaffold/astro-app/src/components/Radio.astro +0 -38
- package/scaffold/astro-app/src/components/Search.astro +0 -1259
- package/scaffold/astro-app/src/components/Select.astro +0 -49
- package/scaffold/astro-app/src/components/Settings.astro +0 -382
- package/scaffold/astro-app/src/components/Spinner.astro +0 -30
- package/scaffold/astro-app/src/components/Table.astro +0 -181
- package/scaffold/astro-app/src/components/Tabs.astro +0 -223
- package/scaffold/astro-app/src/components/Textarea.astro +0 -58
- package/scaffold/astro-app/src/components/ThemeIcon.astro +0 -50
- package/scaffold/astro-app/src/components/ThemeSwitcher.astro +0 -504
- package/scaffold/astro-app/src/components/Toast.astro +0 -30
- package/scaffold/astro-app/src/components/Tooltip.astro +0 -32
- package/scaffold/astro-app/src/components/icons/Brush.astro +0 -10
- package/scaffold/astro-app/src/components/icons/Cake.astro +0 -11
- package/scaffold/astro-app/src/components/icons/Check.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Cherry.astro +0 -11
- package/scaffold/astro-app/src/components/icons/ChevronDown.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Circle.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Close.astro +0 -30
- package/scaffold/astro-app/src/components/icons/Cmd.astro +0 -26
- package/scaffold/astro-app/src/components/icons/Copy.astro +0 -30
- package/scaffold/astro-app/src/components/icons/Eye.astro +0 -30
- package/scaffold/astro-app/src/components/icons/Filter.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Flame.astro +0 -28
- package/scaffold/astro-app/src/components/icons/Flower.astro +0 -11
- package/scaffold/astro-app/src/components/icons/Gear.astro +0 -30
- package/scaffold/astro-app/src/components/icons/Heart.astro +0 -28
- package/scaffold/astro-app/src/components/icons/IceCream.astro +0 -31
- package/scaffold/astro-app/src/components/icons/Leaf.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Lemon.astro +0 -11
- package/scaffold/astro-app/src/components/icons/Moon.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Owl.astro +0 -34
- package/scaffold/astro-app/src/components/icons/Palette.astro +0 -33
- package/scaffold/astro-app/src/components/icons/Rainbow.astro +0 -31
- package/scaffold/astro-app/src/components/icons/Search.astro +0 -30
- package/scaffold/astro-app/src/components/icons/Shield.astro +0 -28
- package/scaffold/astro-app/src/components/icons/Snowflake.astro +0 -34
- package/scaffold/astro-app/src/components/icons/Sort.astro +0 -30
- package/scaffold/astro-app/src/components/icons/Sun.astro +0 -29
- package/scaffold/astro-app/src/components/icons/Sunset.astro +0 -10
- package/scaffold/astro-app/src/components/icons/Zap.astro +0 -9
- package/scaffold/astro-app/src/components/icons/devicons/Astro.astro +0 -53
- package/scaffold/astro-app/src/components/icons/devicons/Bash.astro +0 -34
- package/scaffold/astro-app/src/components/icons/devicons/Css3.astro +0 -29
- package/scaffold/astro-app/src/components/icons/devicons/Git.astro +0 -24
- package/scaffold/astro-app/src/components/icons/devicons/Html5.astro +0 -27
- package/scaffold/astro-app/src/components/icons/devicons/Javascript.astro +0 -25
- package/scaffold/astro-app/src/components/icons/devicons/Nodejs.astro +0 -47
- package/scaffold/astro-app/src/components/icons/devicons/Plaintext.astro +0 -33
- package/scaffold/astro-app/src/components/icons/devicons/React.astro +0 -27
- package/scaffold/astro-app/src/components/icons/devicons/Svelte.astro +0 -25
- package/scaffold/astro-app/src/components/icons/devicons/Vue.astro +0 -26
- package/scaffold/astro-app/src/config/frameworks.ts +0 -26
- package/scaffold/astro-app/src/config/themes.ts +0 -54
- package/scaffold/astro-app/src/layouts/DocsLayout.astro +0 -263
- package/scaffold/astro-app/src/layouts/Layout.astro +0 -41
- package/scaffold/astro-app/src/pages/components/accordion.astro +0 -172
- package/scaffold/astro-app/src/pages/components/alert.astro +0 -250
- package/scaffold/astro-app/src/pages/components/avatar.astro +0 -102
- package/scaffold/astro-app/src/pages/components/badge.astro +0 -119
- package/scaffold/astro-app/src/pages/components/breadcrumb.astro +0 -124
- package/scaffold/astro-app/src/pages/components/button.astro +0 -74
- package/scaffold/astro-app/src/pages/components/cards.astro +0 -247
- package/scaffold/astro-app/src/pages/components/copy-to-clipboard.astro +0 -49
- package/scaffold/astro-app/src/pages/components/divider.astro +0 -74
- package/scaffold/astro-app/src/pages/components/dropdown.astro +0 -394
- package/scaffold/astro-app/src/pages/components/forms.astro +0 -367
- package/scaffold/astro-app/src/pages/components/icons.astro +0 -246
- package/scaffold/astro-app/src/pages/components/modal.astro +0 -152
- package/scaffold/astro-app/src/pages/components/navbar.astro +0 -80
- package/scaffold/astro-app/src/pages/components/pagination.astro +0 -126
- package/scaffold/astro-app/src/pages/components/progress-bar.astro +0 -94
- package/scaffold/astro-app/src/pages/components/search.astro +0 -155
- package/scaffold/astro-app/src/pages/components/settings.astro +0 -78
- package/scaffold/astro-app/src/pages/components/spinner.astro +0 -81
- package/scaffold/astro-app/src/pages/components/table.astro +0 -144
- package/scaffold/astro-app/src/pages/components/tabs.astro +0 -220
- package/scaffold/astro-app/src/pages/components/theme-switcher.astro +0 -69
- package/scaffold/astro-app/src/pages/components/toast.astro +0 -157
- package/scaffold/astro-app/src/pages/components/tooltip.astro +0 -209
- package/scaffold/astro-app/src/pages/components.astro +0 -290
- package/scaffold/astro-app/src/pages/docs/accessibility.astro +0 -9
- package/scaffold/astro-app/src/pages/docs/colors.astro +0 -9
- package/scaffold/astro-app/src/pages/docs/design-system.astro +0 -9
- package/scaffold/astro-app/src/pages/docs/getting-started.astro +0 -9
- package/scaffold/astro-app/src/pages/docs/index.astro +0 -15
- package/scaffold/astro-app/src/pages/docs/themes/[theme].astro +0 -14
- package/scaffold/astro-app/src/pages/docs/theming.astro +0 -10
- package/scaffold/astro-app/src/pages/index.astro +0 -24
- package/scaffold/svelte-app/README.md +0 -39
- package/scaffold/svelte-app/package.json +0 -22
- package/scaffold/svelte-app/src/app.d.ts +0 -28
- package/scaffold/svelte-app/src/app.html +0 -21
- package/scaffold/svelte-app/src/lib/assets/favicon.svg +0 -1
- package/scaffold/svelte-app/src/lib/rizzo/Accordion.svelte +0 -128
- package/scaffold/svelte-app/src/lib/rizzo/Alert.svelte +0 -85
- package/scaffold/svelte-app/src/lib/rizzo/Avatar.svelte +0 -39
- package/scaffold/svelte-app/src/lib/rizzo/Badge.svelte +0 -31
- package/scaffold/svelte-app/src/lib/rizzo/Breadcrumb.svelte +0 -49
- package/scaffold/svelte-app/src/lib/rizzo/Button.svelte +0 -27
- package/scaffold/svelte-app/src/lib/rizzo/Card.svelte +0 -17
- package/scaffold/svelte-app/src/lib/rizzo/Checkbox.svelte +0 -37
- package/scaffold/svelte-app/src/lib/rizzo/CopyToClipboard.svelte +0 -79
- package/scaffold/svelte-app/src/lib/rizzo/Divider.svelte +0 -28
- package/scaffold/svelte-app/src/lib/rizzo/Dropdown.svelte +0 -254
- package/scaffold/svelte-app/src/lib/rizzo/FormGroup.svelte +0 -51
- package/scaffold/svelte-app/src/lib/rizzo/Input.svelte +0 -59
- package/scaffold/svelte-app/src/lib/rizzo/Modal.svelte +0 -157
- package/scaffold/svelte-app/src/lib/rizzo/Pagination.svelte +0 -93
- package/scaffold/svelte-app/src/lib/rizzo/ProgressBar.svelte +0 -58
- package/scaffold/svelte-app/src/lib/rizzo/Radio.svelte +0 -38
- package/scaffold/svelte-app/src/lib/rizzo/Select.svelte +0 -51
- package/scaffold/svelte-app/src/lib/rizzo/Spinner.svelte +0 -14
- package/scaffold/svelte-app/src/lib/rizzo/Table.svelte +0 -158
- package/scaffold/svelte-app/src/lib/rizzo/Tabs.svelte +0 -117
- package/scaffold/svelte-app/src/lib/rizzo/Textarea.svelte +0 -59
- package/scaffold/svelte-app/src/lib/rizzo/ThemeIcon.svelte +0 -54
- package/scaffold/svelte-app/src/lib/rizzo/ThemeSwitcher.svelte +0 -315
- package/scaffold/svelte-app/src/lib/rizzo/Toast.svelte +0 -33
- package/scaffold/svelte-app/src/lib/rizzo/Tooltip.svelte +0 -19
- package/scaffold/svelte-app/src/lib/rizzo/icons/Check.svelte +0 -29
- package/scaffold/svelte-app/src/lib/rizzo/icons/ChevronDown.svelte +0 -29
- package/scaffold/svelte-app/src/lib/rizzo/icons/Circle.svelte +0 -29
- package/scaffold/svelte-app/src/lib/rizzo/icons/Close.svelte +0 -30
- package/scaffold/svelte-app/src/lib/rizzo/icons/Cmd.svelte +0 -27
- package/scaffold/svelte-app/src/lib/rizzo/icons/Copy.svelte +0 -30
- package/scaffold/svelte-app/src/lib/rizzo/icons/Eye.svelte +0 -30
- package/scaffold/svelte-app/src/lib/rizzo/icons/Filter.svelte +0 -29
- package/scaffold/svelte-app/src/lib/rizzo/icons/Gear.svelte +0 -30
- package/scaffold/svelte-app/src/lib/rizzo/icons/IceCream.svelte +0 -31
- package/scaffold/svelte-app/src/lib/rizzo/icons/Moon.svelte +0 -29
- package/scaffold/svelte-app/src/lib/rizzo/icons/Owl.svelte +0 -34
- package/scaffold/svelte-app/src/lib/rizzo/icons/Palette.svelte +0 -33
- package/scaffold/svelte-app/src/lib/rizzo/icons/Rainbow.svelte +0 -31
- package/scaffold/svelte-app/src/lib/rizzo/icons/Search.svelte +0 -30
- package/scaffold/svelte-app/src/lib/rizzo/icons/Snowflake.svelte +0 -34
- package/scaffold/svelte-app/src/lib/rizzo/icons/Sort.svelte +0 -30
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Astro.svelte +0 -45
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Bash.svelte +0 -28
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Css3.svelte +0 -23
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Git.svelte +0 -18
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Html5.svelte +0 -21
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Javascript.svelte +0 -19
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Nodejs.svelte +0 -44
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Plaintext.svelte +0 -24
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/React.svelte +0 -21
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/SvelteIcon.svelte +0 -19
- package/scaffold/svelte-app/src/lib/rizzo/icons/devicons/Vue.svelte +0 -20
- package/scaffold/svelte-app/src/lib/rizzo/index.ts +0 -35
- package/scaffold/svelte-app/src/lib/rizzo-docs/CodeBlock.svelte +0 -239
- package/scaffold/svelte-app/src/lib/rizzo-docs/SvelteDocPage.svelte +0 -99
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AccordionDoc.svelte +0 -53
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AlertDoc.svelte +0 -114
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/AvatarDoc.svelte +0 -92
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BadgeDoc.svelte +0 -60
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/BreadcrumbDoc.svelte +0 -55
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ButtonDoc.svelte +0 -55
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CardsDoc.svelte +0 -173
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComingSoon.svelte +0 -12
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ComponentsOverview.svelte +0 -92
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/CopyToClipboardDoc.svelte +0 -26
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DividerDoc.svelte +0 -105
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/DropdownDoc.svelte +0 -161
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/FormsDoc.svelte +0 -375
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/IconsDoc.svelte +0 -246
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Index.svelte +0 -8
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ModalDoc.svelte +0 -50
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/NavbarDoc.svelte +0 -79
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/PaginationDoc.svelte +0 -44
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ProgressBarDoc.svelte +0 -95
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SearchDoc.svelte +0 -147
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SettingsDoc.svelte +0 -158
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/SpinnerDoc.svelte +0 -41
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TableDoc.svelte +0 -116
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TabsDoc.svelte +0 -152
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ThemeSwitcherDoc.svelte +0 -189
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/Theming.svelte +0 -6
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/ToastDoc.svelte +0 -136
- package/scaffold/svelte-app/src/lib/rizzo-docs/pages/TooltipDoc.svelte +0 -57
- package/scaffold/svelte-app/src/routes/+layout.svelte +0 -10
- package/scaffold/svelte-app/src/routes/+page.svelte +0 -31
- package/scaffold/svelte-app/src/routes/components/+page.svelte +0 -4
- package/scaffold/svelte-app/src/routes/components/[slug]/+page.svelte +0 -7
- package/scaffold/svelte-app/static/robots.txt +0 -3
- package/scaffold/svelte-app/svelte.config.js +0 -13
- package/scaffold/svelte-app/tsconfig.json +0 -21
- package/scaffold/svelte-app/vite.config.ts +0 -6
- /package/scaffold/{astro-app → astro-minimal}/astro.config.mjs +0 -0
- /package/scaffold/{astro-app → astro-minimal}/public/.gitkeep +0 -0
- /package/scaffold/{astro-app → astro-minimal}/public/favicon.svg +0 -0
- /package/scaffold/{astro-app → astro-minimal}/tsconfig.json +0 -0
- /package/scaffold/{svelte-app → svelte-minimal}/static/.gitkeep +0 -0
package/bin/rizzo-css.js
CHANGED
|
@@ -10,21 +10,61 @@ const RIZZO_CONFIG_FILE = 'rizzo-css.json';
|
|
|
10
10
|
const COMMANDS = ['init', 'add', 'theme', 'help'];
|
|
11
11
|
const FRAMEWORKS = ['vanilla', 'astro', 'svelte'];
|
|
12
12
|
|
|
13
|
-
/**
|
|
13
|
+
/** Full = everything we ship. Minimal = recommended starting set. Manual = you choose. */
|
|
14
14
|
const TEMPLATES = {
|
|
15
15
|
vanilla: [
|
|
16
|
-
{ value: 'full', label: 'Full — index.html + theme switcher, js/main.js, icons, README' },
|
|
17
|
-
{ value: 'minimal', label: 'Minimal — index.html + CSS
|
|
16
|
+
{ value: 'full', label: 'Full — index.html + theme switcher, js/main.js, icons, component showcase, README' },
|
|
17
|
+
{ value: 'minimal', label: 'Minimal — index.html + CSS + js/main.js (recommended starter; no showcase)' },
|
|
18
|
+
{ value: 'manual', label: 'Manual — index.html + CSS; pick components to add their pages + js/main.js' },
|
|
18
19
|
],
|
|
19
20
|
astro: [
|
|
20
|
-
{ value: 'full
|
|
21
|
-
{ value: 'minimal', label: 'Minimal —
|
|
21
|
+
{ value: 'full', label: 'Full — Astro app + all 25 components (config, one page, README, LICENSE, .env.example)' },
|
|
22
|
+
{ value: 'minimal', label: 'Minimal — Astro app + recommended components (Button, Badge, Card, Modal, Tabs, ThemeSwitcher, FormGroup, Alert, Toast, Dropdown)' },
|
|
23
|
+
{ value: 'manual', label: 'Manual — minimal base + pick the components you want' },
|
|
22
24
|
],
|
|
23
25
|
svelte: [
|
|
24
|
-
{ value: 'full
|
|
25
|
-
{ value: 'minimal', label: 'Minimal —
|
|
26
|
+
{ value: 'full', label: 'Full — SvelteKit app + all 25 components (config, one page, README, LICENSE, .env.example)' },
|
|
27
|
+
{ value: 'minimal', label: 'Minimal — SvelteKit app + recommended components (Button, Badge, Card, Modal, Tabs, ThemeSwitcher, FormGroup, Alert, Toast, Dropdown)' },
|
|
28
|
+
{ value: 'manual', label: 'Manual — minimal base + pick the components you want' },
|
|
26
29
|
],
|
|
27
30
|
};
|
|
31
|
+
|
|
32
|
+
const VANILLA_MINIMAL_README = `# Vanilla + Rizzo CSS (minimal)
|
|
33
|
+
|
|
34
|
+
Minimal starter: HTML + CSS + js/main.js + recommended component pages. Scaffolded with \`npx rizzo-css init --framework vanilla --template minimal\`.
|
|
35
|
+
|
|
36
|
+
- Open \`index.html\` in a browser or serve the folder. Edit \`index.html\` and add your content. CSS: \`css/rizzo.min.css\`. Script: \`js/main.js\` (already linked).
|
|
37
|
+
- \`components/\` contains HTML pages for the recommended set (Button, Badge, Card, Modal, Tabs, ThemeSwitcher, FormGroup, Alert, Toast, Dropdown). Open \`components/index.html\` to browse them.
|
|
38
|
+
- Set a theme: \`<html data-theme="github-dark-classic">\` (see \`npx rizzo-css theme\` for all themes).
|
|
39
|
+
- For the full component showcase and icons, use template **Full** or copy from a Full scaffold.
|
|
40
|
+
|
|
41
|
+
Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
|
|
42
|
+
`;
|
|
43
|
+
|
|
44
|
+
const VANILLA_MANUAL_README = `# Vanilla + Rizzo CSS (manual)
|
|
45
|
+
|
|
46
|
+
Manual setup: HTML + CSS, plus any component pages you chose. Scaffolded with \`npx rizzo-css init --framework vanilla --template manual\`.
|
|
47
|
+
|
|
48
|
+
- Open \`index.html\` in a browser or serve the folder with any static server.
|
|
49
|
+
- Edit \`index.html\` and add your content. CSS: \`css/rizzo.min.css\`.
|
|
50
|
+
- If you picked components, \`components/\` has their HTML pages and \`js/main.js\` is included (open \`components/index.html\` to browse).
|
|
51
|
+
- Set a theme: \`<html data-theme="github-dark-classic">\` (see \`npx rizzo-css theme\` for all themes).
|
|
52
|
+
|
|
53
|
+
**If you chose no components:** To add component JavaScript (modal, dropdown, tabs, toast, theme switcher, etc.), use the [Vanilla component docs](https://rizzo-css.vercel.app/docs/vanilla/components) or run \`npx rizzo-css init\` with Vanilla → **Full** in a temp folder and copy \`js/main.js\` and \`icons/\` into this project.
|
|
54
|
+
|
|
55
|
+
Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
|
|
56
|
+
`;
|
|
57
|
+
|
|
58
|
+
const FALLBACK_MINIMAL_README = `# Rizzo CSS (minimal)
|
|
59
|
+
|
|
60
|
+
Minimal project with Rizzo CSS. Add a proper framework (e.g. \`npm create astro@latest\` or \`npm create svelte@latest\`), then run \`npx rizzo-css add\` in the project.
|
|
61
|
+
|
|
62
|
+
- This folder has a single HTML file and \`css/rizzo.min.css\`.
|
|
63
|
+
- For a full app with config and tooling, use the framework's create command and \`rizzo-css add\`.
|
|
64
|
+
|
|
65
|
+
Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
|
|
66
|
+
`;
|
|
67
|
+
|
|
28
68
|
// Dark and light themes (order matches scaffold optgroups and config/themes.ts)
|
|
29
69
|
const DARK_THEMES = [
|
|
30
70
|
'github-dark-classic',
|
|
@@ -59,11 +99,20 @@ const ASTRO_COMPONENTS = [
|
|
|
59
99
|
'Modal', 'Toast', 'Table', 'ThemeSwitcher',
|
|
60
100
|
];
|
|
61
101
|
|
|
62
|
-
// Recommended subset for
|
|
102
|
+
// Recommended subset for Full/Minimal (same for Astro, Svelte, Vanilla)
|
|
63
103
|
const RECOMMENDED_COMPONENTS = [
|
|
64
104
|
'Button', 'Badge', 'Card', 'Modal', 'Tabs', 'ThemeSwitcher', 'FormGroup', 'Alert', 'Toast', 'Dropdown',
|
|
65
105
|
];
|
|
66
106
|
|
|
107
|
+
// Vanilla scaffold: component name (same as ASTRO_COMPONENTS) -> components/*.html slug
|
|
108
|
+
const VANILLA_COMPONENT_SLUGS = {
|
|
109
|
+
Button: 'button', Badge: 'badge', Card: 'cards', Divider: 'divider', Spinner: 'spinner', ProgressBar: 'progress-bar',
|
|
110
|
+
Avatar: 'avatar', Alert: 'alert', Breadcrumb: 'breadcrumb', FormGroup: 'forms', Input: 'forms', Checkbox: 'forms',
|
|
111
|
+
Textarea: 'forms', Select: 'forms', Radio: 'forms', CopyToClipboard: 'copy-to-clipboard', Tooltip: 'tooltip',
|
|
112
|
+
Pagination: 'pagination', Tabs: 'tabs', Accordion: 'accordion', Dropdown: 'dropdown', Modal: 'modal',
|
|
113
|
+
Toast: 'toast', Table: 'table', ThemeSwitcher: 'theme-switcher',
|
|
114
|
+
};
|
|
115
|
+
|
|
67
116
|
// ANSI colors for CLI (framework logo colors)
|
|
68
117
|
const C = {
|
|
69
118
|
reset: '\u001b[0m',
|
|
@@ -86,6 +135,14 @@ function getCssPath() {
|
|
|
86
135
|
return join(getPackageRoot(), 'dist', 'rizzo.min.css');
|
|
87
136
|
}
|
|
88
137
|
|
|
138
|
+
/** Copy the package LICENSE into the project dir. Call after every scaffold so every install includes a license. */
|
|
139
|
+
function copyPackageLicense(projectDir) {
|
|
140
|
+
const licensePath = join(getPackageRoot(), 'LICENSE');
|
|
141
|
+
if (existsSync(licensePath)) {
|
|
142
|
+
copyFileSync(licensePath, join(projectDir, 'LICENSE'));
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
89
146
|
/** Read rizzo-css.json from cwd. Returns { targetDir?, framework?, packageManager? } or null. */
|
|
90
147
|
function readRizzoConfig(cwd) {
|
|
91
148
|
if (!cwd || !existsSync(cwd)) return null;
|
|
@@ -127,6 +184,19 @@ function getFlagValue(argv, flag) {
|
|
|
127
184
|
return i !== -1 && argv[i + 1] != null ? argv[i + 1] : null;
|
|
128
185
|
}
|
|
129
186
|
|
|
187
|
+
/** Get positional args for a command (excludes --flag and --flag value). Used for e.g. add Button ThemeSwitcher. */
|
|
188
|
+
function getPositionalArgs(argv) {
|
|
189
|
+
const positionals = [];
|
|
190
|
+
for (let i = 1; i < argv.length; i++) {
|
|
191
|
+
if (argv[i].startsWith('--')) {
|
|
192
|
+
if (!argv[i].includes('=')) i++;
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
positionals.push(argv[i]);
|
|
196
|
+
}
|
|
197
|
+
return positionals;
|
|
198
|
+
}
|
|
199
|
+
|
|
130
200
|
/** Package manager detection (manual: lockfiles + packageManager field). Returns { agent, command } or null if none found. */
|
|
131
201
|
function detectPackageManager(cwd) {
|
|
132
202
|
if (!cwd || !existsSync(cwd)) return null;
|
|
@@ -189,10 +259,10 @@ async function promptPackageManager(projectDir) {
|
|
|
189
259
|
return selectMenu(options, '? Package manager (for install and run commands)');
|
|
190
260
|
}
|
|
191
261
|
|
|
192
|
-
/** Prompt user to select
|
|
262
|
+
/** Prompt user to select Full or Manual for the chosen framework. Returns 'full' or 'manual'. */
|
|
193
263
|
async function promptTemplate(framework) {
|
|
194
264
|
const options = TEMPLATES[framework] || TEMPLATES.vanilla;
|
|
195
|
-
return selectMenu(options, '?
|
|
265
|
+
return selectMenu(options, '? Full or Manual?');
|
|
196
266
|
}
|
|
197
267
|
|
|
198
268
|
function question(prompt) {
|
|
@@ -476,16 +546,16 @@ Usage (use your package manager):
|
|
|
476
546
|
bunx rizzo-css <command> [options]
|
|
477
547
|
|
|
478
548
|
Commands:
|
|
479
|
-
init
|
|
480
|
-
add
|
|
549
|
+
init New project = Full (everything) | Minimal (recommended set) | Manual (pick what you want). Existing = drop in CSS + hand-pick. First: framework, then existing vs new.
|
|
550
|
+
add Same as init → existing: drop in CSS + hand-pick components (framework detected or from rizzo-css.json)
|
|
481
551
|
theme List all available themes (use in init or set data-theme on <html>)
|
|
482
552
|
help Show this help
|
|
483
553
|
|
|
484
554
|
Options (init):
|
|
485
|
-
--yes Non-interactive: scaffold new in cwd with defaults (framework: astro, template: full
|
|
555
|
+
--yes Non-interactive: scaffold new in cwd with defaults (framework: astro, template: full)
|
|
486
556
|
--framework <fw> vanilla | astro | svelte (with --yes; otherwise first prompt)
|
|
487
|
-
--template <t> full
|
|
488
|
-
--install After scaffolding, run package manager install (
|
|
557
|
+
--template <t> full | minimal | manual (all frameworks); with --yes defaults to full
|
|
558
|
+
--install After scaffolding, run package manager install (new project)
|
|
489
559
|
--no-install Do not run install
|
|
490
560
|
--write-config Write rizzo-css.json (targetDir, framework, packageManager) in the project
|
|
491
561
|
|
|
@@ -514,10 +584,11 @@ Examples:
|
|
|
514
584
|
npx rizzo-css init
|
|
515
585
|
npx rizzo-css init --yes --framework astro --install --write-config
|
|
516
586
|
npx rizzo-css init --yes --framework vanilla
|
|
517
|
-
npx rizzo-css init --yes --framework svelte --template
|
|
587
|
+
npx rizzo-css init --yes --framework svelte --template full
|
|
518
588
|
npx rizzo-css add
|
|
589
|
+
npx rizzo-css add Button
|
|
590
|
+
npx rizzo-css add Button ThemeSwitcher --path public/css --framework svelte
|
|
519
591
|
npx rizzo-css add --install-package
|
|
520
|
-
npx rizzo-css add --path public/css --framework svelte
|
|
521
592
|
npx rizzo-css theme
|
|
522
593
|
|
|
523
594
|
Docs: https://rizzo-css.vercel.app
|
|
@@ -618,67 +689,33 @@ function getLinkHrefForTargetDir(framework, targetDir) {
|
|
|
618
689
|
return base ? base + '/' + file : file;
|
|
619
690
|
}
|
|
620
691
|
|
|
621
|
-
function cmdAdd(argv) {
|
|
692
|
+
async function cmdAdd(argv) {
|
|
622
693
|
const customPath = getFlagValue(argv, '--path');
|
|
623
694
|
const explicitFrameworkRaw = getFlagValue(argv, '--framework');
|
|
624
695
|
const explicitFramework = explicitFrameworkRaw && FRAMEWORKS.includes(explicitFrameworkRaw.toLowerCase()) ? explicitFrameworkRaw.toLowerCase() : null;
|
|
625
696
|
const installPackage = hasFlag(argv, '--install-package');
|
|
626
697
|
const noInstall = hasFlag(argv, '--no-install');
|
|
698
|
+
const positionals = getPositionalArgs(argv);
|
|
627
699
|
|
|
628
700
|
const cwd = process.cwd();
|
|
629
701
|
const config = readRizzoConfig(cwd);
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
if (!existsSync(cssSource)) {
|
|
637
|
-
console.error('Error: Rizzo CSS build not found. Run from repo root: pnpm build:css');
|
|
638
|
-
process.exit(1);
|
|
639
|
-
}
|
|
640
|
-
|
|
641
|
-
const pm = (config && config.packageManager)
|
|
642
|
-
? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
|
|
643
|
-
: resolvePackageManager(cwd);
|
|
644
|
-
const addPkg = pm.add('rizzo-css');
|
|
645
|
-
const linkHref = customPath ? getLinkHrefForTargetDir(framework, targetDir) : paths.linkHref;
|
|
646
|
-
const cliExample = pm.dlx('rizzo-css theme');
|
|
647
|
-
const initExample = pm.dlx('rizzo-css init');
|
|
648
|
-
|
|
649
|
-
mkdirSync(join(cwd, targetDir), { recursive: true });
|
|
650
|
-
copyFileSync(cssSource, targetFile);
|
|
651
|
-
console.log('\n✓ Rizzo CSS copied to ' + targetFile);
|
|
652
|
-
|
|
702
|
+
const options = {
|
|
703
|
+
config,
|
|
704
|
+
targetDir: customPath || (config && config.targetDir) || undefined,
|
|
705
|
+
preselectedComponents: positionals.length > 0 ? positionals : undefined,
|
|
706
|
+
};
|
|
707
|
+
await runAddToExisting(explicitFramework, options);
|
|
653
708
|
if (installPackage && !noInstall) {
|
|
709
|
+
const pm = (config && config.packageManager)
|
|
710
|
+
? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
|
|
711
|
+
: resolvePackageManager(cwd);
|
|
712
|
+
const addPkg = pm.add('rizzo-css');
|
|
654
713
|
console.log('\nRunning: ' + addPkg);
|
|
655
714
|
const code = runInDir(cwd, addPkg);
|
|
656
715
|
if (code !== 0) {
|
|
657
716
|
console.error('\nInstall failed (exit ' + code + '). You can run manually: ' + addPkg);
|
|
658
717
|
}
|
|
659
718
|
}
|
|
660
|
-
|
|
661
|
-
if (framework === 'svelte') {
|
|
662
|
-
console.log('\nDetected Svelte/SvelteKit. Add to your root layout (e.g. src/app.html):\n');
|
|
663
|
-
console.log(' <link rel="stylesheet" href="' + linkHref + '" />');
|
|
664
|
-
console.log('\nSet a theme on <html>: data-theme="github-dark-classic" (see: ' + cliExample + ')');
|
|
665
|
-
console.log('\nTo add Rizzo Svelte components later: copy from this package\'s scaffold or run ' + initExample + ' and pick Svelte + components in an empty folder, then copy the generated files.\n');
|
|
666
|
-
} else if (framework === 'astro') {
|
|
667
|
-
console.log('\nDetected Astro. Add to your layout (e.g. src/layouts/Layout.astro):\n');
|
|
668
|
-
console.log(' <link rel="stylesheet" href="' + linkHref + '" />');
|
|
669
|
-
console.log('\nSet a theme on <html>: data-theme="github-dark-classic" (see: ' + cliExample + ')\n');
|
|
670
|
-
} else {
|
|
671
|
-
console.log('\nAdd to your HTML or layout:\n');
|
|
672
|
-
console.log(' <link rel="stylesheet" href="' + linkHref + '" />');
|
|
673
|
-
if (framework === 'vanilla') {
|
|
674
|
-
console.log('\nVanilla JS: same CSS and component classes as Astro/Svelte. Use the same BEM markup from the docs.');
|
|
675
|
-
}
|
|
676
|
-
console.log('\nSet a theme on <html>: data-theme="github-dark-classic" (see: ' + cliExample + ')');
|
|
677
|
-
}
|
|
678
|
-
if (!installPackage || noInstall) {
|
|
679
|
-
console.log('\nTo install the package (CLI + components): ' + addPkg);
|
|
680
|
-
}
|
|
681
|
-
console.log('\nDocs: https://rizzo-css.vercel.app\n');
|
|
682
719
|
}
|
|
683
720
|
|
|
684
721
|
function getScaffoldSvelteDir() {
|
|
@@ -697,6 +734,61 @@ function getScaffoldVanillaIconsDir() {
|
|
|
697
734
|
return join(getPackageRoot(), 'scaffold', 'vanilla', 'icons');
|
|
698
735
|
}
|
|
699
736
|
|
|
737
|
+
function getScaffoldVanillaComponentsDir() {
|
|
738
|
+
return join(getPackageRoot(), 'scaffold', 'vanilla', 'components');
|
|
739
|
+
}
|
|
740
|
+
|
|
741
|
+
/** Copy selected Vanilla component HTML files into projectDir/components/, with replacements. Writes a simple components/index.html. */
|
|
742
|
+
function copyVanillaComponents(projectDir, selectedNames, replacements) {
|
|
743
|
+
const srcDir = getScaffoldVanillaComponentsDir();
|
|
744
|
+
if (!existsSync(srcDir)) return;
|
|
745
|
+
const linkHref = replacements['{{LINK_HREF}}'] || 'css/rizzo.min.css';
|
|
746
|
+
const slugsToCopy = [];
|
|
747
|
+
const seen = new Set();
|
|
748
|
+
for (const name of selectedNames) {
|
|
749
|
+
const slug = VANILLA_COMPONENT_SLUGS[name];
|
|
750
|
+
if (slug && !seen.has(slug)) {
|
|
751
|
+
seen.add(slug);
|
|
752
|
+
slugsToCopy.push(slug);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
if (slugsToCopy.length === 0) return;
|
|
756
|
+
const destDir = join(projectDir, 'components');
|
|
757
|
+
mkdirSync(destDir, { recursive: true });
|
|
758
|
+
for (const slug of slugsToCopy) {
|
|
759
|
+
const src = join(srcDir, slug + '.html');
|
|
760
|
+
if (existsSync(src)) {
|
|
761
|
+
let content = readFileSync(src, 'utf8');
|
|
762
|
+
for (const [key, value] of Object.entries(replacements)) {
|
|
763
|
+
content = content.split(key).join(value);
|
|
764
|
+
}
|
|
765
|
+
writeFileSync(join(destDir, slug + '.html'), content, 'utf8');
|
|
766
|
+
}
|
|
767
|
+
}
|
|
768
|
+
const indexLinks = slugsToCopy.map((s) => ' <li><a href="' + s + '.html">' + s + '</a></li>').join('\n');
|
|
769
|
+
const indexHtml = `<!DOCTYPE html>
|
|
770
|
+
<html lang="en" data-theme="${replacements['{{DATA_THEME}}'] || 'github-dark-classic'}">
|
|
771
|
+
<head>
|
|
772
|
+
<meta charset="UTF-8" />
|
|
773
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
774
|
+
<title>Components</title>
|
|
775
|
+
<link rel="stylesheet" href="../${linkHref}" />
|
|
776
|
+
</head>
|
|
777
|
+
<body>
|
|
778
|
+
<main style="padding: var(--spacing-6); max-width: 60ch;">
|
|
779
|
+
<h1>Components</h1>
|
|
780
|
+
<ul>
|
|
781
|
+
${indexLinks}
|
|
782
|
+
</ul>
|
|
783
|
+
<p><a href="../index.html">Back to index</a></p>
|
|
784
|
+
</main>
|
|
785
|
+
<script src="../js/main.js"></script>
|
|
786
|
+
</body>
|
|
787
|
+
</html>
|
|
788
|
+
`;
|
|
789
|
+
writeFileSync(join(destDir, 'index.html'), indexHtml, 'utf8');
|
|
790
|
+
}
|
|
791
|
+
|
|
700
792
|
/** Copy Rizzo icons into the project for the given framework. */
|
|
701
793
|
function copyRizzoIcons(projectDir, framework) {
|
|
702
794
|
if (framework === 'astro') {
|
|
@@ -720,12 +812,12 @@ function copyRizzoIcons(projectDir, framework) {
|
|
|
720
812
|
}
|
|
721
813
|
}
|
|
722
814
|
|
|
723
|
-
function
|
|
724
|
-
return join(getPackageRoot(), 'scaffold', 'astro-
|
|
815
|
+
function getScaffoldAstroMinimalDir() {
|
|
816
|
+
return join(getPackageRoot(), 'scaffold', 'astro-minimal');
|
|
725
817
|
}
|
|
726
818
|
|
|
727
|
-
function
|
|
728
|
-
return join(getPackageRoot(), 'scaffold', 'svelte-
|
|
819
|
+
function getScaffoldSvelteMinimalDir() {
|
|
820
|
+
return join(getPackageRoot(), 'scaffold', 'svelte-minimal');
|
|
729
821
|
}
|
|
730
822
|
|
|
731
823
|
function copyDirRecursive(src, dest) {
|
|
@@ -847,7 +939,7 @@ function copyAstroComponents(projectDir, selectedNames) {
|
|
|
847
939
|
}
|
|
848
940
|
}
|
|
849
941
|
|
|
850
|
-
/** Add Rizzo CSS
|
|
942
|
+
/** Add Rizzo CSS and hand-picked components to an existing project in cwd. frameworkOverride: when set (from init), skip framework prompt. options: { config?, targetDir? }. */
|
|
851
943
|
async function runAddToExisting(frameworkOverride, options) {
|
|
852
944
|
const cwd = process.cwd();
|
|
853
945
|
const config = (options && options.config) || readRizzoConfig(cwd);
|
|
@@ -866,14 +958,31 @@ async function runAddToExisting(frameworkOverride, options) {
|
|
|
866
958
|
framework = await selectMenu(frameworkOptions, frameworkPrompt);
|
|
867
959
|
}
|
|
868
960
|
|
|
869
|
-
const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : framework === 'astro' ? ASTRO_COMPONENTS : [];
|
|
870
|
-
const
|
|
871
|
-
|
|
872
|
-
|
|
961
|
+
const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : framework === 'astro' ? ASTRO_COMPONENTS : framework === 'vanilla' ? Object.keys(VANILLA_COMPONENT_SLUGS) : [];
|
|
962
|
+
const preselected = options.preselectedComponents && options.preselectedComponents.length > 0 ? options.preselectedComponents : null;
|
|
963
|
+
let selectedComponents;
|
|
964
|
+
if (preselected && componentList.length > 0) {
|
|
965
|
+
const valid = preselected.filter((c) => componentList.includes(c));
|
|
966
|
+
const invalid = preselected.filter((c) => !componentList.includes(c));
|
|
967
|
+
if (invalid.length > 0) {
|
|
968
|
+
console.log('Unknown or unsupported component name(s) (skipped): ' + invalid.join(', '));
|
|
969
|
+
}
|
|
970
|
+
selectedComponents = valid;
|
|
971
|
+
if (selectedComponents.length > 0) {
|
|
972
|
+
const n = selectedComponents.length;
|
|
973
|
+
console.log('Adding ' + n + ' component' + (n === 1 ? '' : 's') + ': ' + selectedComponents.join(', '));
|
|
974
|
+
}
|
|
975
|
+
} else if (preselected && componentList.length === 0) {
|
|
976
|
+
selectedComponents = [];
|
|
977
|
+
} else {
|
|
978
|
+
selectedComponents = componentList.length > 0
|
|
979
|
+
? await promptComponentChoice(componentList, framework)
|
|
980
|
+
: [];
|
|
981
|
+
}
|
|
873
982
|
|
|
874
983
|
let theme, defaultDark, defaultLight;
|
|
875
984
|
const wantsThemeSwitcher = selectedComponents.includes('ThemeSwitcher');
|
|
876
|
-
if (wantsThemeSwitcher) {
|
|
985
|
+
if (wantsThemeSwitcher && !preselected) {
|
|
877
986
|
const setDefaults = await selectMenu(
|
|
878
987
|
[
|
|
879
988
|
{ value: true, label: 'Yes — choose default dark, default light, and initial theme' },
|
|
@@ -904,7 +1013,8 @@ async function runAddToExisting(frameworkOverride, options) {
|
|
|
904
1013
|
}
|
|
905
1014
|
|
|
906
1015
|
const paths = getFrameworkCssPaths(framework);
|
|
907
|
-
const
|
|
1016
|
+
const targetDirRaw = (options && options.targetDir) || (config && config.targetDir) || paths.targetDir;
|
|
1017
|
+
const targetDir = join(cwd, targetDirRaw);
|
|
908
1018
|
const cssTarget = join(targetDir, 'rizzo.min.css');
|
|
909
1019
|
mkdirSync(targetDir, { recursive: true });
|
|
910
1020
|
copyFileSync(cssSource, cssTarget);
|
|
@@ -914,9 +1024,13 @@ async function runAddToExisting(frameworkOverride, options) {
|
|
|
914
1024
|
copySvelteComponents(cwd, selectedComponents);
|
|
915
1025
|
} else if (framework === 'astro' && selectedComponents.length > 0) {
|
|
916
1026
|
copyAstroComponents(cwd, selectedComponents);
|
|
1027
|
+
} else if (framework === 'vanilla' && selectedComponents.length > 0) {
|
|
1028
|
+
const linkHrefForVanilla = (options && options.targetDir) ? getLinkHrefForTargetDir(framework, options.targetDir) : paths.linkHref;
|
|
1029
|
+
const vanillaRepl = { '{{LINK_HREF}}': linkHrefForVanilla, '{{DATA_THEME}}': theme };
|
|
1030
|
+
copyVanillaComponents(cwd, selectedComponents, vanillaRepl);
|
|
917
1031
|
}
|
|
918
1032
|
|
|
919
|
-
const linkHref = paths.linkHref;
|
|
1033
|
+
const linkHref = (options && options.targetDir) ? getLinkHrefForTargetDir(framework, options.targetDir) : paths.linkHref;
|
|
920
1034
|
const pm = (config && config.packageManager)
|
|
921
1035
|
? getPackageManagerCommands({ agent: config.packageManager, command: config.packageManager })
|
|
922
1036
|
: resolvePackageManager(cwd);
|
|
@@ -945,6 +1059,9 @@ async function runAddToExisting(frameworkOverride, options) {
|
|
|
945
1059
|
console.log(' <link rel="stylesheet" href="' + linkHref + '" />');
|
|
946
1060
|
console.log('\nSet a theme on <html>: data-theme="' + theme + '" (see: ' + cliExample + ')');
|
|
947
1061
|
console.log(' For theme "system": default dark ' + defaultDark + ', default light ' + defaultLight);
|
|
1062
|
+
if (selectedComponents.length > 0) {
|
|
1063
|
+
console.log(' Component HTML files are in components/.');
|
|
1064
|
+
}
|
|
948
1065
|
}
|
|
949
1066
|
console.log('\nTo install the package (CLI + components): ' + pm.add('rizzo-css'));
|
|
950
1067
|
console.log('\nDocs: https://rizzo-css.vercel.app\n');
|
|
@@ -963,17 +1080,22 @@ async function cmdInit(argv) {
|
|
|
963
1080
|
let initMode;
|
|
964
1081
|
let name = '';
|
|
965
1082
|
let theme, defaultDark, defaultLight;
|
|
966
|
-
let selectedComponents = [];
|
|
967
1083
|
let selectedPm;
|
|
968
1084
|
let selectedTemplate;
|
|
1085
|
+
let selectedComponents = [];
|
|
969
1086
|
|
|
970
1087
|
if (yes) {
|
|
971
1088
|
const frameworkArg = getFlagValue(argv, '--framework');
|
|
972
1089
|
framework = (frameworkArg && FRAMEWORKS.includes(frameworkArg.toLowerCase())) ? frameworkArg.toLowerCase() : (config && config.framework) || 'astro';
|
|
973
1090
|
initMode = 'new';
|
|
974
1091
|
const templateArg = getFlagValue(argv, '--template');
|
|
975
|
-
selectedTemplate = (templateArg && (templateArg === 'full
|
|
976
|
-
if (
|
|
1092
|
+
selectedTemplate = (templateArg && (templateArg === 'full' || templateArg === 'minimal' || templateArg === 'manual')) ? templateArg : 'full';
|
|
1093
|
+
if (selectedTemplate === 'full' && (framework === 'astro' || framework === 'svelte')) {
|
|
1094
|
+
selectedComponents = framework === 'svelte' ? [...SVELTE_COMPONENTS] : [...ASTRO_COMPONENTS];
|
|
1095
|
+
} else if (selectedTemplate === 'minimal' && (framework === 'astro' || framework === 'svelte')) {
|
|
1096
|
+
const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : ASTRO_COMPONENTS;
|
|
1097
|
+
selectedComponents = RECOMMENDED_COMPONENTS.filter((c) => componentList.includes(c));
|
|
1098
|
+
}
|
|
977
1099
|
const projectDir = cwd;
|
|
978
1100
|
const resolved = resolvePackageManager(projectDir, cwd);
|
|
979
1101
|
selectedPm = (config && config.packageManager) || resolved.agent || 'npm';
|
|
@@ -1012,17 +1134,29 @@ async function cmdInit(argv) {
|
|
|
1012
1134
|
);
|
|
1013
1135
|
name = projectChoice === 'name' ? await question('Project name (folder name): ') : '';
|
|
1014
1136
|
|
|
1015
|
-
selectedTemplate = await
|
|
1137
|
+
selectedTemplate = await selectMenu(TEMPLATES[framework] || TEMPLATES.vanilla, '? Full, Minimal, or Manual?');
|
|
1016
1138
|
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1139
|
+
if (selectedTemplate === 'full' && (framework === 'astro' || framework === 'svelte')) {
|
|
1140
|
+
selectedComponents = framework === 'svelte' ? [...SVELTE_COMPONENTS] : [...ASTRO_COMPONENTS];
|
|
1141
|
+
} else if (selectedTemplate === 'minimal' && (framework === 'astro' || framework === 'svelte')) {
|
|
1142
|
+
const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : ASTRO_COMPONENTS;
|
|
1143
|
+
selectedComponents = RECOMMENDED_COMPONENTS.filter((c) => componentList.includes(c));
|
|
1144
|
+
} else if (selectedTemplate === 'manual') {
|
|
1145
|
+
const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : ASTRO_COMPONENTS;
|
|
1146
|
+
selectedComponents = await promptComponentChoice(componentList, framework);
|
|
1147
|
+
}
|
|
1021
1148
|
|
|
1022
|
-
const
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1149
|
+
const wantsThemeSwitcher = (framework === 'vanilla' && (selectedTemplate === 'full' || selectedTemplate === 'minimal')) || selectedComponents.includes('ThemeSwitcher');
|
|
1150
|
+
if (wantsThemeSwitcher) {
|
|
1151
|
+
const themeOut = await promptThemes();
|
|
1152
|
+
theme = themeOut.theme;
|
|
1153
|
+
defaultDark = themeOut.defaultDark;
|
|
1154
|
+
defaultLight = themeOut.defaultLight;
|
|
1155
|
+
} else {
|
|
1156
|
+
theme = 'system';
|
|
1157
|
+
defaultDark = DARK_THEMES[0];
|
|
1158
|
+
defaultLight = LIGHT_THEMES[0];
|
|
1159
|
+
}
|
|
1026
1160
|
|
|
1027
1161
|
const projectDirForPm = name ? join(cwd, name) : cwd;
|
|
1028
1162
|
selectedPm = await promptPackageManager(projectDirForPm);
|
|
@@ -1049,12 +1183,15 @@ async function cmdInit(argv) {
|
|
|
1049
1183
|
'{{PROJECT_NAME}}': projectNamePkg,
|
|
1050
1184
|
};
|
|
1051
1185
|
|
|
1052
|
-
const
|
|
1053
|
-
const
|
|
1186
|
+
const astroMinimalDir = getScaffoldAstroMinimalDir();
|
|
1187
|
+
const svelteMinimalDir = getScaffoldSvelteMinimalDir();
|
|
1054
1188
|
const pathsForScaffold = getFrameworkCssPaths(framework);
|
|
1055
|
-
const
|
|
1056
|
-
const
|
|
1057
|
-
const
|
|
1189
|
+
const useHandpickAstro = selectedTemplate === 'manual' && framework === 'astro' && existsSync(astroMinimalDir);
|
|
1190
|
+
const useHandpickSvelte = selectedTemplate === 'manual' && framework === 'svelte' && existsSync(svelteMinimalDir);
|
|
1191
|
+
const useAstroBase = (selectedTemplate === 'full' || selectedTemplate === 'minimal') && framework === 'astro' && existsSync(astroMinimalDir);
|
|
1192
|
+
const useSvelteBase = (selectedTemplate === 'full' || selectedTemplate === 'minimal') && framework === 'svelte' && existsSync(svelteMinimalDir);
|
|
1193
|
+
const useVanillaFull = selectedTemplate === 'full' && framework === 'vanilla' && existsSync(getScaffoldVanillaIndex());
|
|
1194
|
+
const useVanillaMinimal = selectedTemplate === 'minimal' && framework === 'vanilla';
|
|
1058
1195
|
|
|
1059
1196
|
let cssTarget;
|
|
1060
1197
|
let indexPath;
|
|
@@ -1074,30 +1211,60 @@ async function cmdInit(argv) {
|
|
|
1074
1211
|
</html>
|
|
1075
1212
|
`;
|
|
1076
1213
|
|
|
1077
|
-
if (
|
|
1214
|
+
if (useHandpickAstro) {
|
|
1215
|
+
mkdirSync(projectDir, { recursive: true });
|
|
1216
|
+
copyDirRecursiveWithReplacements(astroMinimalDir, projectDir, replacements);
|
|
1217
|
+
mkdirSync(join(projectDir, 'public', 'css'), { recursive: true });
|
|
1218
|
+
cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
|
|
1219
|
+
copyFileSync(cssSource, cssTarget);
|
|
1220
|
+
if (statSync(cssTarget).size < 5000) {
|
|
1221
|
+
console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
|
|
1222
|
+
}
|
|
1223
|
+
copyPackageLicense(projectDir);
|
|
1224
|
+
if (selectedComponents.length > 0) {
|
|
1225
|
+
copyRizzoIcons(projectDir, 'astro');
|
|
1226
|
+
copyAstroComponents(projectDir, selectedComponents);
|
|
1227
|
+
}
|
|
1228
|
+
} else if (useAstroBase) {
|
|
1078
1229
|
mkdirSync(projectDir, { recursive: true });
|
|
1079
|
-
copyDirRecursiveWithReplacements(
|
|
1230
|
+
copyDirRecursiveWithReplacements(astroMinimalDir, projectDir, replacements);
|
|
1080
1231
|
mkdirSync(join(projectDir, 'public', 'css'), { recursive: true });
|
|
1081
1232
|
cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
|
|
1082
1233
|
copyFileSync(cssSource, cssTarget);
|
|
1083
1234
|
if (statSync(cssTarget).size < 5000) {
|
|
1084
1235
|
console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
|
|
1085
1236
|
}
|
|
1086
|
-
|
|
1237
|
+
copyPackageLicense(projectDir);
|
|
1087
1238
|
if (selectedComponents.length > 0) {
|
|
1239
|
+
copyRizzoIcons(projectDir, 'astro');
|
|
1088
1240
|
copyAstroComponents(projectDir, selectedComponents);
|
|
1089
1241
|
}
|
|
1090
|
-
} else if (
|
|
1242
|
+
} else if (useHandpickSvelte) {
|
|
1091
1243
|
mkdirSync(projectDir, { recursive: true });
|
|
1092
|
-
copyDirRecursiveWithReplacements(
|
|
1244
|
+
copyDirRecursiveWithReplacements(svelteMinimalDir, projectDir, replacements);
|
|
1093
1245
|
mkdirSync(join(projectDir, 'static', 'css'), { recursive: true });
|
|
1094
1246
|
cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
|
|
1095
1247
|
copyFileSync(cssSource, cssTarget);
|
|
1096
1248
|
if (statSync(cssTarget).size < 5000) {
|
|
1097
1249
|
console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
|
|
1098
1250
|
}
|
|
1099
|
-
|
|
1251
|
+
copyPackageLicense(projectDir);
|
|
1100
1252
|
if (selectedComponents.length > 0) {
|
|
1253
|
+
copyRizzoIcons(projectDir, 'svelte');
|
|
1254
|
+
copySvelteComponents(projectDir, selectedComponents);
|
|
1255
|
+
}
|
|
1256
|
+
} else if (useSvelteBase) {
|
|
1257
|
+
mkdirSync(projectDir, { recursive: true });
|
|
1258
|
+
copyDirRecursiveWithReplacements(svelteMinimalDir, projectDir, replacements);
|
|
1259
|
+
mkdirSync(join(projectDir, 'static', 'css'), { recursive: true });
|
|
1260
|
+
cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
|
|
1261
|
+
copyFileSync(cssSource, cssTarget);
|
|
1262
|
+
if (statSync(cssTarget).size < 5000) {
|
|
1263
|
+
console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
|
|
1264
|
+
}
|
|
1265
|
+
copyPackageLicense(projectDir);
|
|
1266
|
+
if (selectedComponents.length > 0) {
|
|
1267
|
+
copyRizzoIcons(projectDir, 'svelte');
|
|
1101
1268
|
copySvelteComponents(projectDir, selectedComponents);
|
|
1102
1269
|
}
|
|
1103
1270
|
} else if (useVanillaFull) {
|
|
@@ -1132,6 +1299,30 @@ async function cmdInit(argv) {
|
|
|
1132
1299
|
mainJs = mainJs.replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark).replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight);
|
|
1133
1300
|
writeFileSync(join(projectDir, 'js', 'main.js'), mainJs, 'utf8');
|
|
1134
1301
|
}
|
|
1302
|
+
copyPackageLicense(projectDir);
|
|
1303
|
+
} else if (useVanillaMinimal) {
|
|
1304
|
+
const cssDir = join(projectDir, pathsForScaffold.targetDir);
|
|
1305
|
+
cssTarget = join(cssDir, 'rizzo.min.css');
|
|
1306
|
+
mkdirSync(cssDir, { recursive: true });
|
|
1307
|
+
copyFileSync(cssSource, cssTarget);
|
|
1308
|
+
if (statSync(cssTarget).size < 5000) {
|
|
1309
|
+
console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
|
|
1310
|
+
}
|
|
1311
|
+
mkdirSync(join(projectDir, 'js'), { recursive: true });
|
|
1312
|
+
const vanillaJs = join(getPackageRoot(), 'scaffold', 'vanilla', 'js', 'main.js');
|
|
1313
|
+
if (existsSync(vanillaJs)) {
|
|
1314
|
+
let mainJs = readFileSync(vanillaJs, 'utf8');
|
|
1315
|
+
mainJs = mainJs.replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark).replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight);
|
|
1316
|
+
writeFileSync(join(projectDir, 'js', 'main.js'), mainJs, 'utf8');
|
|
1317
|
+
}
|
|
1318
|
+
const vanillaRepl = { ...replacements, '{{LINK_HREF}}': 'css/rizzo.min.css' };
|
|
1319
|
+
copyVanillaComponents(projectDir, RECOMMENDED_COMPONENTS, vanillaRepl);
|
|
1320
|
+
copyRizzoIcons(projectDir, 'vanilla');
|
|
1321
|
+
const minimalIndexWithScript = minimalHtml.replace('</body>', ' <script src="js/main.js"></script>\n</body>');
|
|
1322
|
+
indexPath = join(projectDir, 'index.html');
|
|
1323
|
+
writeFileSync(indexPath, minimalIndexWithScript, 'utf8');
|
|
1324
|
+
writeFileSync(join(projectDir, 'README.md'), VANILLA_MINIMAL_README, 'utf8');
|
|
1325
|
+
copyPackageLicense(projectDir);
|
|
1135
1326
|
} else {
|
|
1136
1327
|
const cssDir = join(projectDir, pathsForScaffold.targetDir);
|
|
1137
1328
|
cssTarget = join(cssDir, 'rizzo.min.css');
|
|
@@ -1140,25 +1331,36 @@ async function cmdInit(argv) {
|
|
|
1140
1331
|
if (statSync(cssTarget).size < 5000) {
|
|
1141
1332
|
console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
|
|
1142
1333
|
}
|
|
1143
|
-
if (framework === 'vanilla') {
|
|
1334
|
+
if (framework === 'vanilla' && selectedTemplate === 'manual') {
|
|
1144
1335
|
indexPath = join(projectDir, 'index.html');
|
|
1145
|
-
|
|
1336
|
+
let indexContent = minimalHtml;
|
|
1337
|
+
if (selectedComponents.length > 0) {
|
|
1338
|
+
mkdirSync(join(projectDir, 'js'), { recursive: true });
|
|
1339
|
+
const vanillaJs = join(getPackageRoot(), 'scaffold', 'vanilla', 'js', 'main.js');
|
|
1340
|
+
if (existsSync(vanillaJs)) {
|
|
1341
|
+
let mainJs = readFileSync(vanillaJs, 'utf8');
|
|
1342
|
+
mainJs = mainJs.replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark).replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight);
|
|
1343
|
+
writeFileSync(join(projectDir, 'js', 'main.js'), mainJs, 'utf8');
|
|
1344
|
+
}
|
|
1345
|
+
const vanillaRepl = { ...replacements, '{{LINK_HREF}}': 'css/rizzo.min.css' };
|
|
1346
|
+
copyVanillaComponents(projectDir, selectedComponents, vanillaRepl);
|
|
1347
|
+
copyRizzoIcons(projectDir, 'vanilla');
|
|
1348
|
+
indexContent = minimalHtml.replace('</body>', ' <script src="js/main.js"></script>\n</body>');
|
|
1349
|
+
}
|
|
1350
|
+
writeFileSync(indexPath, indexContent, 'utf8');
|
|
1351
|
+
writeFileSync(join(projectDir, 'README.md'), VANILLA_MANUAL_README, 'utf8');
|
|
1146
1352
|
} else if (framework === 'astro') {
|
|
1147
1353
|
indexPath = join(projectDir, 'public', 'index.html');
|
|
1148
1354
|
mkdirSync(join(projectDir, 'public'), { recursive: true });
|
|
1149
1355
|
writeFileSync(indexPath, minimalHtml, 'utf8');
|
|
1356
|
+
writeFileSync(join(projectDir, 'README.md'), FALLBACK_MINIMAL_README, 'utf8');
|
|
1150
1357
|
} else {
|
|
1151
1358
|
indexPath = join(projectDir, 'static', 'index.html');
|
|
1152
1359
|
mkdirSync(join(projectDir, 'static'), { recursive: true });
|
|
1153
1360
|
writeFileSync(indexPath, minimalHtml, 'utf8');
|
|
1361
|
+
writeFileSync(join(projectDir, 'README.md'), FALLBACK_MINIMAL_README, 'utf8');
|
|
1154
1362
|
}
|
|
1155
|
-
|
|
1156
|
-
copyRizzoIcons(projectDir, 'svelte');
|
|
1157
|
-
copySvelteComponents(projectDir, selectedComponents);
|
|
1158
|
-
} else if (framework === 'astro' && selectedComponents.length > 0) {
|
|
1159
|
-
copyRizzoIcons(projectDir, 'astro');
|
|
1160
|
-
copyAstroComponents(projectDir, selectedComponents);
|
|
1161
|
-
}
|
|
1363
|
+
copyPackageLicense(projectDir);
|
|
1162
1364
|
}
|
|
1163
1365
|
|
|
1164
1366
|
console.log('\n✓ Project ready at ' + projectDir);
|
|
@@ -1166,16 +1368,18 @@ async function cmdInit(argv) {
|
|
|
1166
1368
|
if (indexPath) console.log(' - ' + indexPath);
|
|
1167
1369
|
if (framework === 'vanilla') {
|
|
1168
1370
|
if (useVanillaFull) {
|
|
1169
|
-
console.log(' - Vanilla JS (full): theme switcher, js/main.js, icons, README.');
|
|
1371
|
+
console.log(' - Vanilla JS (full): theme switcher, js/main.js, icons, component showcase, README.');
|
|
1372
|
+
} else if (useVanillaMinimal) {
|
|
1373
|
+
console.log(' - Vanilla JS (minimal): index.html + CSS + js/main.js. Add components from docs or use Full for showcase.');
|
|
1170
1374
|
} else {
|
|
1171
|
-
console.log(' - Vanilla JS (
|
|
1375
|
+
console.log(' - Vanilla JS (manual): index.html + CSS only. Add JS from docs or copy from Full.');
|
|
1172
1376
|
}
|
|
1173
1377
|
}
|
|
1174
1378
|
const pm = getPackageManagerCommands({ agent: selectedPm, command: selectedPm });
|
|
1175
1379
|
const nextStep = pm.install + ' && ' + pm.run('dev');
|
|
1176
1380
|
const runPrefix = name ? 'cd ' + name + ' && ' : '';
|
|
1177
1381
|
|
|
1178
|
-
if (runInstallAfterScaffold && !noInstall && (
|
|
1382
|
+
if (runInstallAfterScaffold && !noInstall && (useHandpickAstro || useHandpickSvelte || useAstroBase || useSvelteBase)) {
|
|
1179
1383
|
console.log('\nRunning: ' + pm.install);
|
|
1180
1384
|
const code = runInDir(projectDir, pm.install);
|
|
1181
1385
|
if (code !== 0) {
|
|
@@ -1189,15 +1393,19 @@ async function cmdInit(argv) {
|
|
|
1189
1393
|
console.log('\n - Wrote ' + RIZZO_CONFIG_FILE);
|
|
1190
1394
|
}
|
|
1191
1395
|
|
|
1192
|
-
if (
|
|
1193
|
-
|
|
1194
|
-
console.log(' -
|
|
1396
|
+
if (useHandpickAstro || useHandpickSvelte) {
|
|
1397
|
+
const fw = useHandpickAstro ? 'Astro' : 'SvelteKit';
|
|
1398
|
+
console.log(' - ' + fw + ' (manual): base + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
|
|
1195
1399
|
}
|
|
1196
|
-
if (
|
|
1197
|
-
|
|
1198
|
-
console.log(' -
|
|
1400
|
+
if (useAstroBase) {
|
|
1401
|
+
const label = selectedTemplate === 'full' ? 'Full' : 'Minimal';
|
|
1402
|
+
console.log(' - Astro (' + label.toLowerCase() + '): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
|
|
1199
1403
|
}
|
|
1200
|
-
if (
|
|
1404
|
+
if (useSvelteBase) {
|
|
1405
|
+
const label = selectedTemplate === 'full' ? 'Full' : 'Minimal';
|
|
1406
|
+
console.log(' - SvelteKit (' + label.toLowerCase() + '): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
|
|
1407
|
+
}
|
|
1408
|
+
if ((framework === 'astro' || framework === 'svelte') && !useAstroBase && !useSvelteBase && !useHandpickAstro && !useHandpickSvelte) {
|
|
1201
1409
|
const fw = framework === 'svelte' ? 'Svelte' : 'Astro';
|
|
1202
1410
|
const createExample = getCreateProjectExample(pm, framework);
|
|
1203
1411
|
console.log('\n - Minimal template (CSS + index). To get a full app: ' + createExample + ', then cd into the project and run ' + pm.dlx('rizzo-css add') + '.');
|
|
@@ -1223,7 +1431,10 @@ function main() {
|
|
|
1223
1431
|
}
|
|
1224
1432
|
|
|
1225
1433
|
if (command === 'add') {
|
|
1226
|
-
cmdAdd(argv)
|
|
1434
|
+
cmdAdd(argv).catch((err) => {
|
|
1435
|
+
console.error(err);
|
|
1436
|
+
process.exit(1);
|
|
1437
|
+
});
|
|
1227
1438
|
return;
|
|
1228
1439
|
}
|
|
1229
1440
|
|