rizzo-css 0.0.63 → 0.0.64

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.
Files changed (80) hide show
  1. package/README.md +1 -1
  2. package/bin/rizzo-css.js +103 -4
  3. package/package.json +1 -1
  4. package/scaffold/astro/Footer.astro +1 -1
  5. package/scaffold/react/base/README-RIZZO.md +50 -0
  6. package/scaffold/react/base/gitignore +8 -0
  7. package/scaffold/react/base/index.html +16 -0
  8. package/scaffold/react/base/package.json +22 -0
  9. package/scaffold/react/base/public/.gitkeep +0 -0
  10. package/scaffold/react/base/src/App.tsx +11 -0
  11. package/scaffold/react/base/src/index.css +1 -0
  12. package/scaffold/react/base/src/main.tsx +10 -0
  13. package/scaffold/react/base/src/vite-env.d.ts +1 -0
  14. package/scaffold/react/base/tsconfig.json +21 -0
  15. package/scaffold/react/base/tsconfig.node.json +9 -0
  16. package/scaffold/react/base/vite.config.ts +6 -0
  17. package/scaffold/vanilla/README-RIZZO.md +1 -1
  18. package/scaffold/vanilla/components/accordion.html +6 -0
  19. package/scaffold/vanilla/components/alert-dialog.html +6 -0
  20. package/scaffold/vanilla/components/alert.html +6 -0
  21. package/scaffold/vanilla/components/aspect-ratio.html +6 -0
  22. package/scaffold/vanilla/components/avatar.html +6 -0
  23. package/scaffold/vanilla/components/back-to-top.html +6 -0
  24. package/scaffold/vanilla/components/badge.html +6 -0
  25. package/scaffold/vanilla/components/breadcrumb.html +6 -0
  26. package/scaffold/vanilla/components/button-group.html +6 -0
  27. package/scaffold/vanilla/components/button.html +6 -0
  28. package/scaffold/vanilla/components/cards.html +6 -0
  29. package/scaffold/vanilla/components/collapsible.html +6 -0
  30. package/scaffold/vanilla/components/context-menu.html +6 -0
  31. package/scaffold/vanilla/components/copy-to-clipboard.html +6 -0
  32. package/scaffold/vanilla/components/dashboard.html +6 -0
  33. package/scaffold/vanilla/components/divider.html +6 -0
  34. package/scaffold/vanilla/components/docs-sidebar.html +6 -0
  35. package/scaffold/vanilla/components/dropdown.html +6 -0
  36. package/scaffold/vanilla/components/empty.html +6 -0
  37. package/scaffold/vanilla/components/font-switcher.html +6 -0
  38. package/scaffold/vanilla/components/footer.html +6 -0
  39. package/scaffold/vanilla/components/forms.html +6 -0
  40. package/scaffold/vanilla/components/hover-card.html +6 -0
  41. package/scaffold/vanilla/components/icons.html +6 -0
  42. package/scaffold/vanilla/components/index.html +6 -0
  43. package/scaffold/vanilla/components/kbd.html +6 -0
  44. package/scaffold/vanilla/components/label.html +6 -0
  45. package/scaffold/vanilla/components/modal.html +6 -0
  46. package/scaffold/vanilla/components/navbar.html +6 -0
  47. package/scaffold/vanilla/components/pagination.html +6 -0
  48. package/scaffold/vanilla/components/popover.html +6 -0
  49. package/scaffold/vanilla/components/progress-bar.html +6 -0
  50. package/scaffold/vanilla/components/resizable.html +6 -0
  51. package/scaffold/vanilla/components/scroll-area.html +6 -0
  52. package/scaffold/vanilla/components/search.html +6 -0
  53. package/scaffold/vanilla/components/separator.html +6 -0
  54. package/scaffold/vanilla/components/settings.html +6 -0
  55. package/scaffold/vanilla/components/sheet.html +6 -0
  56. package/scaffold/vanilla/components/skeleton.html +6 -0
  57. package/scaffold/vanilla/components/slider.html +6 -0
  58. package/scaffold/vanilla/components/sound-effects.html +6 -0
  59. package/scaffold/vanilla/components/spinner.html +6 -0
  60. package/scaffold/vanilla/components/switch.html +6 -0
  61. package/scaffold/vanilla/components/table.html +6 -0
  62. package/scaffold/vanilla/components/tabs.html +6 -0
  63. package/scaffold/vanilla/components/theme-switcher.html +6 -0
  64. package/scaffold/vanilla/components/toast.html +6 -0
  65. package/scaffold/vanilla/components/toggle-group.html +6 -0
  66. package/scaffold/vanilla/components/toggle.html +6 -0
  67. package/scaffold/vanilla/components/tooltip.html +6 -0
  68. package/scaffold/vanilla/index.html +6 -0
  69. package/scaffold/vue/base/README-RIZZO.md +50 -0
  70. package/scaffold/vue/base/gitignore +8 -0
  71. package/scaffold/vue/base/index.html +16 -0
  72. package/scaffold/vue/base/package.json +20 -0
  73. package/scaffold/vue/base/public/.gitkeep +0 -0
  74. package/scaffold/vue/base/src/App.vue +13 -0
  75. package/scaffold/vue/base/src/index.css +1 -0
  76. package/scaffold/vue/base/src/main.ts +5 -0
  77. package/scaffold/vue/base/src/vite-env.d.ts +7 -0
  78. package/scaffold/vue/base/tsconfig.json +22 -0
  79. package/scaffold/vue/base/tsconfig.node.json +10 -0
  80. package/scaffold/vue/base/vite.config.ts +6 -0
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.63 or any version) -->
75
+ <!-- unpkg (pin version: replace @latest with @0.0.64 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
@@ -564,6 +564,26 @@ function copySvelteGitignore(projectDir) {
564
564
  }
565
565
  }
566
566
 
567
+ /** Copy React scaffold gitignore into project as .gitignore. */
568
+ function copyReactGitignore(projectDir) {
569
+ const gitignorePath = join(getScaffoldReactCoreDir(), SCAFFOLD_GITIGNORE_FILE);
570
+ if (existsSync(gitignorePath)) {
571
+ copyFileSync(gitignorePath, join(projectDir, '.gitignore'));
572
+ const copiedAsFile = join(projectDir, SCAFFOLD_GITIGNORE_FILE);
573
+ if (existsSync(copiedAsFile)) unlinkSync(copiedAsFile);
574
+ }
575
+ }
576
+
577
+ /** Copy Vue scaffold gitignore into project as .gitignore. */
578
+ function copyVueGitignore(projectDir) {
579
+ const gitignorePath = join(getScaffoldVueCoreDir(), SCAFFOLD_GITIGNORE_FILE);
580
+ if (existsSync(gitignorePath)) {
581
+ copyFileSync(gitignorePath, join(projectDir, '.gitignore'));
582
+ const copiedAsFile = join(projectDir, SCAFFOLD_GITIGNORE_FILE);
583
+ if (existsSync(copiedAsFile)) unlinkSync(copiedAsFile);
584
+ }
585
+ }
586
+
567
587
  /** Read rizzo-css.json from cwd. Returns { targetDir?, framework?, packageManager?, theme? } or null. Preserves unknown keys. */
568
588
  function readRizzoConfig(cwd) {
569
589
  if (!cwd || !existsSync(cwd)) return null;
@@ -1702,6 +1722,14 @@ function getScaffoldSvelteCoreDir() {
1702
1722
  return join(getPackageRoot(), 'scaffold', 'svelte', 'base');
1703
1723
  }
1704
1724
 
1725
+ function getScaffoldReactCoreDir() {
1726
+ return join(getPackageRoot(), 'scaffold', 'react', 'base');
1727
+ }
1728
+
1729
+ function getScaffoldVueCoreDir() {
1730
+ return join(getPackageRoot(), 'scaffold', 'vue', 'base');
1731
+ }
1732
+
1705
1733
  function copyDirRecursive(src, dest) {
1706
1734
  mkdirSync(dest, { recursive: true });
1707
1735
  const entries = readdirSync(src, { withFileTypes: true });
@@ -2202,13 +2230,15 @@ async function runAddToExisting(frameworkOverride, options) {
2202
2230
  let addSkippedFiles = [];
2203
2231
  const astroCoreDir = getScaffoldAstroCoreDir();
2204
2232
  const svelteCoreDir = getScaffoldSvelteCoreDir();
2233
+ const reactCoreDir = getScaffoldReactCoreDir();
2234
+ const vueCoreDir = getScaffoldVueCoreDir();
2205
2235
  const themeCommentAdd = ' <!-- Initial: ' + theme + '; dark: ' + defaultDark + '; light: ' + defaultLight + ' (all 14 themes in CSS) -->';
2206
2236
  const copyOpts = options.dryRun && options.plan ? options : undefined;
2207
2237
  if (framework === 'vanilla' && getVariantDir('vanilla', selectedVariation)) {
2208
2238
  const vanillaRepl = { '{{LINK_HREF}}': 'css/rizzo.min.css', '{{TITLE}}': 'App', '{{DATA_THEME}}': theme, '{{THEME_LIST_COMMENT}}': themeCommentAdd };
2209
2239
  const variantResult = copyVariantOverlayNoOverwrite(cwd, 'vanilla', selectedVariation, vanillaRepl, copyOpts);
2210
2240
  if (variantResult && variantResult.skipped) addSkippedFiles = variantResult.skipped;
2211
- } else if (selectedVariation !== 'css-only' && ((framework === 'astro' && existsSync(astroCoreDir)) || (framework === 'svelte' && existsSync(svelteCoreDir)))) {
2241
+ } else if (selectedVariation !== 'css-only' && ((framework === 'astro' && existsSync(astroCoreDir)) || (framework === 'svelte' && existsSync(svelteCoreDir)) || (framework === 'react' && existsSync(reactCoreDir)) || (framework === 'vue' && existsSync(vueCoreDir)))) {
2212
2242
  const themeComment = themeCommentAdd;
2213
2243
  const replacements = {
2214
2244
  '{{DATA_THEME}}': theme,
@@ -2255,6 +2285,14 @@ async function runAddToExisting(frameworkOverride, options) {
2255
2285
  const baseResult = copyDirRecursiveWithReplacementsNoOverwrite(svelteCoreDir, cwd, replacements, cwd, copyOpts);
2256
2286
  const variantResult = copyVariantOverlayNoOverwrite(cwd, 'svelte', selectedVariation, replacements, copyOpts);
2257
2287
  addSkippedFiles = baseResult.skipped.concat(variantResult.skipped || []);
2288
+ } else if (framework === 'react') {
2289
+ const baseResult = copyDirRecursiveWithReplacementsNoOverwrite(reactCoreDir, cwd, replacements, cwd, copyOpts);
2290
+ const variantResult = copyVariantOverlayNoOverwrite(cwd, 'react', selectedVariation, replacements, copyOpts);
2291
+ addSkippedFiles = baseResult.skipped.concat(variantResult.skipped || []);
2292
+ } else if (framework === 'vue') {
2293
+ const baseResult = copyDirRecursiveWithReplacementsNoOverwrite(vueCoreDir, cwd, replacements, cwd, copyOpts);
2294
+ const variantResult = copyVariantOverlayNoOverwrite(cwd, 'vue', selectedVariation, replacements, copyOpts);
2295
+ addSkippedFiles = baseResult.skipped.concat(variantResult.skipped || []);
2258
2296
  }
2259
2297
  }
2260
2298
 
@@ -2607,12 +2645,16 @@ async function cmdInit(argv) {
2607
2645
 
2608
2646
  const astroCoreDir = getScaffoldAstroCoreDir();
2609
2647
  const svelteCoreDir = getScaffoldSvelteCoreDir();
2648
+ const reactCoreDir = getScaffoldReactCoreDir();
2649
+ const vueCoreDir = getScaffoldVueCoreDir();
2610
2650
  const pathsForScaffold = getFrameworkCssPaths(framework);
2611
2651
  const useFullVariant = selectedVariation === 'full' && hasFullVariant(framework);
2612
2652
  const useHandpickAstro = selectedTemplate === 'full' && !fullAllComponents && framework === 'astro' && existsSync(astroCoreDir) && !useFullVariant;
2613
2653
  const useHandpickSvelte = selectedTemplate === 'full' && !fullAllComponents && framework === 'svelte' && existsSync(svelteCoreDir) && !useFullVariant;
2614
2654
  const useAstroBase = selectedTemplate === 'full' && fullAllComponents && framework === 'astro' && existsSync(astroCoreDir) && !useFullVariant;
2615
2655
  const useSvelteBase = selectedTemplate === 'full' && fullAllComponents && framework === 'svelte' && existsSync(svelteCoreDir) && !useFullVariant;
2656
+ const useReactBase = selectedVariation !== 'css-only' && framework === 'react' && existsSync(reactCoreDir);
2657
+ const useVueBase = selectedVariation !== 'css-only' && framework === 'vue' && existsSync(vueCoreDir);
2616
2658
  const useVanillaCore = selectedTemplate === 'full' && fullAllComponents && framework === 'vanilla' && existsSync(getScaffoldVanillaIndex()) && !useFullVariant && selectedVariation === 'landing';
2617
2659
  const useVanillaWithOverlay = selectedTemplate === 'full' && framework === 'vanilla' && (selectedVariation === 'docs' || selectedVariation === 'dashboard') && getVariantDir('vanilla', selectedVariation);
2618
2660
 
@@ -2798,6 +2840,38 @@ async function cmdInit(argv) {
2798
2840
  copyRizzoIcons(projectDir, 'svelte');
2799
2841
  copySvelteComponents(projectDir, componentsToCopy);
2800
2842
  }
2843
+ } else if (useReactBase) {
2844
+ mkdirSync(projectDir, { recursive: true });
2845
+ const { skipped } = copyDirRecursiveWithReplacementsNoOverwrite(reactCoreDir, projectDir, replacements, projectDir);
2846
+ copyVariantOverlay(projectDir, 'react', selectedVariation, replacements);
2847
+ copyRizzoCssAndFontsForAstro(projectDir, cssSource);
2848
+ if (skipped.length > 0) {
2849
+ writeFileSync(join(projectDir, RIZZO_SETUP_FILE), buildRizzoSetupMd('react', { linkHref: '/css/rizzo.min.css', theme, defaultDark, defaultLight, skippedFiles: skipped }), 'utf8');
2850
+ }
2851
+ cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
2852
+ if (existsSync(cssTarget) && statSync(cssTarget).size < 5000) {
2853
+ console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
2854
+ }
2855
+ copyPackageLicense(projectDir);
2856
+ copyReactGitignore(projectDir);
2857
+ copyRizzoIcons(projectDir, 'react');
2858
+ if (componentsToCopy.length > 0) copyReactComponents(projectDir, componentsToCopy);
2859
+ } else if (useVueBase) {
2860
+ mkdirSync(projectDir, { recursive: true });
2861
+ const { skipped } = copyDirRecursiveWithReplacementsNoOverwrite(vueCoreDir, projectDir, replacements, projectDir);
2862
+ copyVariantOverlay(projectDir, 'vue', selectedVariation, replacements);
2863
+ copyRizzoCssAndFontsForAstro(projectDir, cssSource);
2864
+ if (skipped.length > 0) {
2865
+ writeFileSync(join(projectDir, RIZZO_SETUP_FILE), buildRizzoSetupMd('vue', { linkHref: '/css/rizzo.min.css', theme, defaultDark, defaultLight, skippedFiles: skipped }), 'utf8');
2866
+ }
2867
+ cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
2868
+ if (existsSync(cssTarget) && statSync(cssTarget).size < 5000) {
2869
+ console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
2870
+ }
2871
+ copyPackageLicense(projectDir);
2872
+ copyVueGitignore(projectDir);
2873
+ copyRizzoIcons(projectDir, 'vue');
2874
+ if (componentsToCopy.length > 0) copyVueComponents(projectDir, componentsToCopy);
2801
2875
  } else if (selectedVariation === 'css-only') {
2802
2876
  // CSS only: no components, no web pages — just CSS, fonts, license, README, .gitignore (and framework base for Astro/Svelte)
2803
2877
  mkdirSync(projectDir, { recursive: true });
@@ -2828,6 +2902,24 @@ async function cmdInit(argv) {
2828
2902
  cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
2829
2903
  copyPackageLicense(projectDir);
2830
2904
  copySvelteGitignore(projectDir);
2905
+ } else if (framework === 'react' && existsSync(reactCoreDir)) {
2906
+ const { skipped } = copyDirRecursiveWithReplacementsNoOverwrite(reactCoreDir, projectDir, replacements, projectDir);
2907
+ copyRizzoCssAndFontsForAstro(projectDir, cssSource);
2908
+ if (skipped.length > 0) {
2909
+ writeFileSync(join(projectDir, RIZZO_SETUP_FILE), buildRizzoSetupMd('react', { linkHref: '/css/rizzo.min.css', theme, defaultDark, defaultLight, skippedFiles: skipped }), 'utf8');
2910
+ }
2911
+ cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
2912
+ copyPackageLicense(projectDir);
2913
+ copyReactGitignore(projectDir);
2914
+ } else if (framework === 'vue' && existsSync(vueCoreDir)) {
2915
+ const { skipped } = copyDirRecursiveWithReplacementsNoOverwrite(vueCoreDir, projectDir, replacements, projectDir);
2916
+ copyRizzoCssAndFontsForAstro(projectDir, cssSource);
2917
+ if (skipped.length > 0) {
2918
+ writeFileSync(join(projectDir, RIZZO_SETUP_FILE), buildRizzoSetupMd('vue', { linkHref: '/css/rizzo.min.css', theme, defaultDark, defaultLight, skippedFiles: skipped }), 'utf8');
2919
+ }
2920
+ cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
2921
+ copyPackageLicense(projectDir);
2922
+ copyVueGitignore(projectDir);
2831
2923
  } else {
2832
2924
  // fallback: same as vanilla (no index.html)
2833
2925
  const cssDir = join(projectDir, pathsForScaffold.targetDir);
@@ -3033,7 +3125,7 @@ async function cmdInit(argv) {
3033
3125
  const pm = getPackageManagerCommands({ agent: selectedPm, command: selectedPm });
3034
3126
  const nextStep = pm.install + ' && ' + pm.run('dev');
3035
3127
  const runPrefix = projectDir !== cwd ? 'cd ' + pathRelative(cwd, projectDir) + ' && ' : '';
3036
- const hasPackageJson = useHandpickAstro || useHandpickSvelte || useAstroBase || useSvelteBase || (selectedVariation === 'css-only' && (framework === 'astro' || framework === 'svelte'));
3128
+ const hasPackageJson = useHandpickAstro || useHandpickSvelte || useAstroBase || useSvelteBase || useReactBase || useVueBase || (selectedVariation === 'css-only' && (framework === 'astro' || framework === 'svelte' || framework === 'react' || framework === 'vue'));
3037
3129
 
3038
3130
  console.log('\n Scaffold complete. Summary above.');
3039
3131
 
@@ -3092,8 +3184,15 @@ async function cmdInit(argv) {
3092
3184
  if (useSvelteBase) {
3093
3185
  console.log(' - SvelteKit (core): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
3094
3186
  }
3095
- if ((framework === 'astro' || framework === 'svelte') && !useAstroBase && !useSvelteBase && !useHandpickAstro && !useHandpickSvelte) {
3096
- const fw = framework === 'svelte' ? 'Svelte' : 'Astro';
3187
+ if (useReactBase) {
3188
+ console.log(' - React (Vite): app + ' + (componentsToCopy.length > 0 ? componentsToCopy.length + ' component(s).' : 'base.') + ' Run: ' + runPrefix + nextStep);
3189
+ }
3190
+ if (useVueBase) {
3191
+ console.log(' - Vue (Vite): app + ' + (componentsToCopy.length > 0 ? componentsToCopy.length + ' component(s).' : 'base.') + ' Run: ' + runPrefix + nextStep);
3192
+ }
3193
+ const hasBaseScaffold = useAstroBase || useSvelteBase || useHandpickAstro || useHandpickSvelte || useReactBase || useVueBase || (selectedVariation === 'css-only' && (framework === 'astro' || framework === 'svelte' || framework === 'react' || framework === 'vue'));
3194
+ if ((framework === 'astro' || framework === 'svelte' || framework === 'react' || framework === 'vue') && !hasBaseScaffold) {
3195
+ const fw = framework === 'svelte' ? 'Svelte' : framework === 'react' ? 'React' : framework === 'vue' ? 'Vue' : 'Astro';
3097
3196
  const createExample = getCreateProjectExample(pm, framework);
3098
3197
  console.log('\n - Basic template (CSS + index). To get a full app: ' + createExample + ', then cd into the project and run ' + pm.dlx('rizzo-css add') + '.');
3099
3198
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rizzo-css",
3
- "version": "0.0.63",
3
+ "version": "0.0.64",
4
4
  "engines": {
5
5
  "node": ">=18"
6
6
  },
@@ -13,7 +13,7 @@ interface Props {
13
13
  links?: FooterLink[];
14
14
  /** Optional class for the root element */
15
15
  class?: string;
16
- /** Optional version string (e.g. from package.json); shown as "v0.0.63" with link to CHANGELOG */
16
+ /** Optional version string (e.g. from package.json); shown as "v0.0.64" with link to CHANGELOG */
17
17
  version?: string;
18
18
  }
19
19
 
@@ -0,0 +1,50 @@
1
+ # React + Rizzo CSS
2
+
3
+ <pre style="font-family: ui-monospace, monospace; font-size: 0.85em; line-height: 1.2;">
4
+ /\___/\
5
+ __( o o )__
6
+ ( =^= )
7
+ _/ ~ \_
8
+ / \_____/ \
9
+ <span style="color:#c44536"> ____ </span><span style="color:#e07c3e"> ___ _</span><span style="color:#d4a800">______</span><span style="color:#2d9d78">______</span><span style="color:#0052bd"> _</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">__ ____</span>
10
+ <span style="color:#c44536">| _ \</span><span style="color:#e07c3e">|_ _|_</span><span style="color:#d4a800">_ /__</span><span style="color:#2d9d78"> / _ </span><span style="color:#0052bd">\ / </span><span style="color:#7c3aed">___/ _</span><span style="color:#d946ef">__/ ___|</span>
11
+ <span style="color:#c44536">| |_) </span><span style="color:#e07c3e">|| | </span><span style="color:#d4a800">/ / /</span><span style="color:#2d9d78"> / | |</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed"> \__</span><span style="color:#d946ef">_ \___ \</span>
12
+ <span style="color:#c44536">| _ &lt;</span><span style="color:#e07c3e"> | | /</span><span style="color:#d4a800"> /_ / </span><span style="color:#2d9d78">/| |_|</span><span style="color:#0052bd"> | | |</span><span style="color:#7c3aed">___ __</span><span style="color:#d946ef">_) |__) |</span>
13
+ <span style="color:#c44536">|_| \_</span><span style="color:#e07c3e">\___/_</span><span style="color:#d4a800">___/__</span><span style="color:#2d9d78">__\___</span><span style="color:#0052bd">/ \_</span><span style="color:#7c3aed">___|__</span><span style="color:#d946ef">__/____/</span>
14
+
15
+ Design system · Vanilla · Astro · Svelte · React · Vue
16
+ </pre>
17
+
18
+ Vite + React project with Rizzo CSS. Scaffolded with `npx rizzo-css init` when you chose **Create new** and React, then **Landing**, **Docs**, **Dashboard**, or **Full**. Same template choice for **Add to existing** (`npx rizzo-css add`).
19
+
20
+ ## Setup
21
+
22
+ 1. Install dependencies:
23
+ ```bash
24
+ pnpm install
25
+ # or: npm install
26
+ ```
27
+
28
+ 2. Start the dev server:
29
+ ```bash
30
+ pnpm dev
31
+ ```
32
+
33
+ ## Project structure
34
+
35
+ - `vite.config.ts` — Vite configuration
36
+ - `index.html` — HTML shell with Rizzo CSS and theme (edit `data-theme` for default)
37
+ - `src/main.tsx` — Entry point
38
+ - `src/App.tsx` — Root component
39
+ - `public/css/rizzo.min.css` — Rizzo CSS bundle (added by CLI; font URLs point to `/assets/fonts/`)
40
+ - `public/assets/fonts/` — Rizzo font files (added by CLI)
41
+ - `README-RIZZO.md` — This file (scaffold docs; does not replace your project README)
42
+ - `LICENSE-RIZZO` — Rizzo CSS license (does not replace your project LICENSE)
43
+
44
+ ## Commands
45
+
46
+ - `pnpm dev` — Start dev server
47
+ - `pnpm build` — Build for production
48
+ - `pnpm preview` — Preview production build
49
+
50
+ Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
@@ -0,0 +1,8 @@
1
+ node_modules
2
+ dist
3
+ dist-ssr
4
+ .DS_Store
5
+ .env
6
+ .env.*
7
+ !.env.example
8
+ *.local
@@ -0,0 +1,16 @@
1
+ <!doctype html>
2
+ <html lang="en" data-theme="{{DATA_THEME}}"><!-- {{THEME_LIST_COMMENT}} -->
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
6
+ <script>
7
+ (function(){try{var s=localStorage.getItem('theme');var d='{{DEFAULT_DARK}}';var l='{{DEFAULT_LIGHT}}';var initial=document.documentElement.getAttribute('data-theme');var r=!s?((initial&&initial!=='system')?initial:(matchMedia('(prefers-color-scheme: dark)').matches?d:l)):s==='system'?(matchMedia('(prefers-color-scheme: dark)').matches?d:l):s;document.documentElement.setAttribute('data-theme',r);}catch(e){}})();
8
+ </script>
9
+ <link rel="stylesheet" href="/css/rizzo.min.css" />
10
+ <title>{{TITLE}}</title>
11
+ </head>
12
+ <body>
13
+ <div id="root"></div>
14
+ <script type="module" src="/src/main.tsx"></script>
15
+ </body>
16
+ </html>
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "{{PROJECT_NAME}}",
3
+ "private": true,
4
+ "version": "0.0.1",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "tsc -b && vite build",
9
+ "preview": "vite preview"
10
+ },
11
+ "dependencies": {
12
+ "react": "^18.3.1",
13
+ "react-dom": "^18.3.1"
14
+ },
15
+ "devDependencies": {
16
+ "@types/react": "^18.3.12",
17
+ "@types/react-dom": "^18.3.1",
18
+ "@vitejs/plugin-react": "^4.3.3",
19
+ "typescript": "~5.6.2",
20
+ "vite": "^6.0.1"
21
+ }
22
+ }
File without changes
@@ -0,0 +1,11 @@
1
+ export default function App() {
2
+ return (
3
+ <>
4
+ <a href="#main-content" className="skip-link">Skip to main content</a>
5
+ <main id="main-content" className="container">
6
+ <h1>Hello, Rizzo CSS</h1>
7
+ <p>Edit <code>src/App.tsx</code> and add components. Docs: <a href="https://rizzo-css.vercel.app">rizzo-css.vercel.app</a></p>
8
+ </main>
9
+ </>
10
+ );
11
+ }
@@ -0,0 +1 @@
1
+ /* App styles; Rizzo is loaded from /css/rizzo.min.css in index.html */
@@ -0,0 +1,10 @@
1
+ import { StrictMode } from 'react';
2
+ import { createRoot } from 'react-dom/client';
3
+ import App from './App';
4
+ import './index.css';
5
+
6
+ createRoot(document.getElementById('root')!).render(
7
+ <StrictMode>
8
+ <App />
9
+ </StrictMode>
10
+ );
@@ -0,0 +1 @@
1
+ /// <reference types="vite/client" />
@@ -0,0 +1,21 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2020",
4
+ "useDefineForClassFields": true,
5
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
6
+ "module": "ESNext",
7
+ "skipLibCheck": true,
8
+ "moduleResolution": "bundler",
9
+ "allowImportingTsExtensions": true,
10
+ "isolatedModules": true,
11
+ "moduleDetection": "force",
12
+ "noEmit": true,
13
+ "jsx": "react-jsx",
14
+ "strict": true,
15
+ "noUnusedLocals": true,
16
+ "noUnusedParameters": true,
17
+ "noFallthroughCasesInSwitch": true,
18
+ "noUncheckedSideEffectImports": true
19
+ },
20
+ "include": ["src"]
21
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["ES2023"],
5
+ "module": "ESNext",
6
+ "skipLibCheck": true
7
+ },
8
+ "include": ["vite.config.ts"]
9
+ }
@@ -0,0 +1,6 @@
1
+ import { defineConfig } from 'vite';
2
+ import react from '@vitejs/plugin-react';
3
+
4
+ export default defineConfig({
5
+ plugins: [react()],
6
+ });
@@ -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.63`, in production.)
31
+ (Replace `@latest` with a specific version, e.g. `@0.0.64`, 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