rizzo-css 0.0.40 → 0.0.41

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 (79) hide show
  1. package/README.md +5 -3
  2. package/bin/rizzo-css.js +89 -111
  3. package/dist/fonts/IBMPlexMono/IBMPlexMono-Italic.ttf +0 -0
  4. package/dist/fonts/IBMPlexMono/IBMPlexMono-Regular.ttf +0 -0
  5. package/dist/fonts/IBMPlexMono/OFL.txt +93 -0
  6. package/dist/fonts/IBMPlexSans/IBMPlexSans-Italic-VariableFont_wdth,wght.ttf +0 -0
  7. package/dist/fonts/IBMPlexSans/IBMPlexSans-VariableFont_wdth,wght.ttf +0 -0
  8. package/dist/fonts/IBMPlexSans/OFL.txt +93 -0
  9. package/dist/fonts/IBMPlexSans/README.txt +106 -0
  10. package/dist/fonts/Inter/Inter-Italic-VariableFont_opsz,wght.ttf +0 -0
  11. package/dist/fonts/Inter/Inter-VariableFont_opsz,wght.ttf +0 -0
  12. package/dist/fonts/Inter/OFL.txt +93 -0
  13. package/dist/fonts/JetBrainsMono/AUTHORS.txt +10 -0
  14. package/dist/fonts/JetBrainsMono/JetBrainsMono-Italic[wght].ttf +0 -0
  15. package/dist/fonts/JetBrainsMono/JetBrainsMono[wght].ttf +0 -0
  16. package/dist/fonts/JetBrainsMono/OFL.txt +93 -0
  17. package/dist/fonts/SourceCodePro/OFL.txt +93 -0
  18. package/dist/fonts/SourceCodePro/README.txt +79 -0
  19. package/dist/fonts/SourceCodePro/SourceCodePro-Italic-VariableFont_wght.ttf +0 -0
  20. package/dist/fonts/SourceCodePro/SourceCodePro-VariableFont_wght.ttf +0 -0
  21. package/dist/fonts/SourceSans3/OFL.txt +93 -0
  22. package/dist/fonts/SourceSans3/README.txt +79 -0
  23. package/dist/fonts/SourceSans3/SourceSans3-Italic-VariableFont_wght.ttf +0 -0
  24. package/dist/fonts/SourceSans3/SourceSans3-VariableFont_wght.ttf +0 -0
  25. package/dist/rizzo.min.css +1 -1
  26. package/package.json +10 -9
  27. package/scaffold/astro/Settings.astro +56 -0
  28. package/scaffold/{astro-minimal → astro-core}/README-RIZZO.md +1 -1
  29. package/scaffold/astro-core/src/layouts/Layout.astro +33 -0
  30. package/scaffold/config/fonts.ts +51 -0
  31. package/scaffold/svelte/Settings.svelte +155 -1
  32. package/scaffold/{svelte-minimal → svelte-core}/README-RIZZO.md +1 -1
  33. package/scaffold/vanilla/README-RIZZO.md +2 -2
  34. package/scaffold/vanilla/components/accordion.html +41 -0
  35. package/scaffold/vanilla/components/alert.html +41 -0
  36. package/scaffold/vanilla/components/avatar.html +41 -0
  37. package/scaffold/vanilla/components/badge.html +41 -0
  38. package/scaffold/vanilla/components/breadcrumb.html +41 -0
  39. package/scaffold/vanilla/components/button.html +41 -0
  40. package/scaffold/vanilla/components/cards.html +41 -0
  41. package/scaffold/vanilla/components/copy-to-clipboard.html +41 -0
  42. package/scaffold/vanilla/components/divider.html +41 -0
  43. package/scaffold/vanilla/components/dropdown.html +41 -0
  44. package/scaffold/vanilla/components/forms.html +41 -0
  45. package/scaffold/vanilla/components/icons.html +41 -0
  46. package/scaffold/vanilla/components/index.html +41 -0
  47. package/scaffold/vanilla/components/modal.html +41 -0
  48. package/scaffold/vanilla/components/navbar.html +41 -0
  49. package/scaffold/vanilla/components/pagination.html +41 -0
  50. package/scaffold/vanilla/components/progress-bar.html +41 -0
  51. package/scaffold/vanilla/components/search.html +41 -0
  52. package/scaffold/vanilla/components/settings.html +41 -0
  53. package/scaffold/vanilla/components/spinner.html +41 -0
  54. package/scaffold/vanilla/components/table.html +41 -0
  55. package/scaffold/vanilla/components/tabs.html +41 -0
  56. package/scaffold/vanilla/components/theme-switcher.html +41 -0
  57. package/scaffold/vanilla/components/toast.html +41 -0
  58. package/scaffold/vanilla/components/tooltip.html +41 -0
  59. package/scaffold/vanilla/index.html +41 -0
  60. package/scaffold/vanilla/js/main.js +20 -0
  61. package/scaffold/astro-minimal/src/layouts/Layout.astro +0 -29
  62. /package/scaffold/{astro-minimal → astro-core}/.env.example +0 -0
  63. /package/scaffold/{astro-minimal → astro-core}/astro.config.mjs +0 -0
  64. /package/scaffold/{astro-minimal → astro-core}/gitignore +0 -0
  65. /package/scaffold/{astro-minimal → astro-core}/package.json +0 -0
  66. /package/scaffold/{astro-minimal → astro-core}/public/.gitkeep +0 -0
  67. /package/scaffold/{astro-minimal → astro-core}/public/favicon.svg +0 -0
  68. /package/scaffold/{astro-minimal → astro-core}/src/pages/index.astro +0 -0
  69. /package/scaffold/{astro-minimal → astro-core}/tsconfig.json +0 -0
  70. /package/scaffold/{svelte-minimal → svelte-core}/.env.example +0 -0
  71. /package/scaffold/{svelte-minimal → svelte-core}/gitignore +0 -0
  72. /package/scaffold/{svelte-minimal → svelte-core}/package.json +0 -0
  73. /package/scaffold/{svelte-minimal → svelte-core}/src/app.d.ts +0 -0
  74. /package/scaffold/{svelte-minimal → svelte-core}/src/app.html +0 -0
  75. /package/scaffold/{svelte-minimal → svelte-core}/src/routes/+layout.svelte +0 -0
  76. /package/scaffold/{svelte-minimal → svelte-core}/src/routes/+page.svelte +0 -0
  77. /package/scaffold/{svelte-minimal → svelte-core}/static/.gitkeep +0 -0
  78. /package/scaffold/{svelte-minimal → svelte-core}/svelte.config.js +0 -0
  79. /package/scaffold/{svelte-minimal → svelte-core}/tsconfig.json +0 -0
package/README.md CHANGED
@@ -12,13 +12,15 @@ pnpm add rizzo-css
12
12
  yarn add rizzo-css
13
13
  ```
14
14
 
15
- **Quick start (no install):** `npx rizzo-css init` — choose **framework** (Vanilla, Astro, or Svelte), then **add to existing** or **create new**. **Existing** (or `npx rizzo-css add`) → drop in CSS + hand-pick components; you must add the `<link>` yourself (CLI prints the exact tag). **New** → choose **Full** | **Minimal** (recommended; all interactive components) | **Manual** (same base; pick which to include; all pre-selected), then package manager. Full and Minimal include all 29 components and required dependencies so every component works. Run `npx rizzo-css help components` for the dependency list. Non-interactive: `npx rizzo-css init --yes --framework vanilla|astro|svelte`. Optional **rizzo-css.json** and `add --install-package`. All get the **same CSS and component styles**. To use the **official Svelte or Astro create command** plus Rizzo, create the app first, then run `npx rizzo-css add`:
15
+ **Quick start (no install):** `npx rizzo-css init` — choose **framework** (Vanilla, Astro, or Svelte), then **add to existing** or **create new**. **Existing** (or `npx rizzo-css add`) → drop in CSS + hand-pick components; you must add the `<link>` yourself (CLI prints the exact tag). **New** → choose **Core** (all 29 components) or **Manual** (pick which to include; all pre-selected), then package manager. Core includes all 29 components and required dependencies so every component works. Run `npx rizzo-css help components` for the dependency list. Non-interactive: `npx rizzo-css init --yes --framework vanilla|astro|svelte`. Optional **rizzo-css.json** and `add --install-package`. All get the **same CSS and component styles**. To use the **official Svelte or Astro create command** plus Rizzo, create the app first, then run `npx rizzo-css add`:
16
16
 
17
17
  ```bash
18
18
  npm create svelte@latest my-app && cd my-app && npx rizzo-css add
19
19
  npm create astro@latest my-app && cd my-app && npx rizzo-css add
20
20
  ```
21
21
 
22
+ **Running the CLI:** npm → `npx`; pnpm → `pnpm dlx`; yarn → `npx` (Yarn 1 has no `dlx`; works with Yarn 2+ too); bun → `bunx`. The [docs site](https://rizzo-css.vercel.app/docs/getting-started) tabs show the correct command for each manager.
23
+
22
24
  `add` writes **RIZZO-SNIPPET.txt** (link + theme) by default; use `--no-snippet` to skip. `npx rizzo-css doctor` checks config and CSS path. `npx rizzo-css theme` lists themes.
23
25
 
24
26
  | | **Create new** (`init` → new) | **Add to existing** (`add` or `init` → existing) |
@@ -46,7 +48,7 @@ You install **the same package** for every framework: `npm install rizzo-css`. N
46
48
 
47
49
  With `npx rizzo-css add --path <dir>`, the CLI still suggests the correct href for your framework (e.g. Astro/Svelte get a leading `/` path).
48
50
 
49
- Scaffolds in the package: `scaffold/vanilla/` (Full or Manual), `scaffold/astro-minimal/`, `scaffold/svelte-minimal/`, plus `scaffold/astro/` and `scaffold/svelte/` (component templates for hand-pick). Use `npx rizzo-css init` and choose **Create new project**; **Minimal** and **Manual** both use the full set of interactive components as the base (so everything works together), **Full** includes everything. The stylesheet link is in the layout. **Add to existing** (or `add` command) drops in CSS + hand-pick components; **you must add the stylesheet `<link>` yourself** — the CLI prints the exact tag. Every scaffold includes LICENSE-RIZZO, README-RIZZO.md, and .gitignore (does not overwrite your project files); Astro/Svelte minimal include package.json and .env.example.
51
+ Scaffolds in the package: `scaffold/vanilla/` (Core or Manual), `scaffold/astro-core/`, `scaffold/svelte-core/`, plus `scaffold/astro/` and `scaffold/svelte/` (component templates for hand-pick), and `scaffold/config/` (font pairs for the Settings component). When you add **Settings** via the CLI (Astro or Svelte), the CLI also copies `scaffold/config/fonts.ts` into your project so the font-pair dropdown works (Astro: `src/components/config/fonts.ts`; Svelte: `src/lib/config/fonts.ts`). Use `npx rizzo-css init` and choose **Create new project**; **Core** includes all 29 components, **Manual** lets you pick (all interactive pre-selected). The stylesheet link is in the layout. **Add to existing** (or `add` command) drops in CSS + hand-pick components; **you must add the stylesheet `<link>` yourself** — the CLI prints the exact tag. Every scaffold includes LICENSE-RIZZO, README-RIZZO.md, and .gitignore (does not overwrite your project files); Astro/Svelte include package.json and .env.example.
50
52
 
51
53
  ## Use
52
54
 
@@ -70,7 +72,7 @@ import 'rizzo-css';
70
72
 
71
73
  Short URLs also work: `https://unpkg.com/rizzo-css@latest` and `https://cdn.jsdelivr.net/npm/rizzo-css@latest` (CDNs serve the default file from package.json). To verify after publish: open the URL in a browser or run `curl -I https://unpkg.com/rizzo-css@latest/dist/rizzo.min.css` and expect `200 OK`.
72
74
 
73
- Use the same class names and HTML structure as in the [component docs](https://rizzo-css.vercel.app/docs/components). **Vanilla JS**, Astro, and Svelte all use the same CSS and BEM markup; Astro/Svelte add framework component files when you hand-pick. Each scaffold has README-RIZZO.md; every install includes LICENSE-RIZZO. The **Navbar** component in the scaffold includes the default Cat logo in the brand link (optional `logo` prop for a custom image). The **Vanilla** Full includes a Settings panel and toast; **Astro** and **Svelte** Full scaffolds include theme persistence and toast (`showToast`, `removeToast`, `removeAllToasts`).
75
+ Use the same class names and HTML structure as in the [component docs](https://rizzo-css.vercel.app/docs/components). **Vanilla JS**, Astro, and Svelte all use the same CSS and BEM markup; Astro/Svelte add framework component files when you hand-pick. Each scaffold has README-RIZZO.md; every install includes LICENSE-RIZZO. The **Navbar** component in the scaffold includes the default Cat logo in the brand link (optional `logo` prop for a custom image). The **Vanilla** Core includes a Settings panel and toast; **Astro** and **Svelte** Core scaffolds include theme persistence and toast (`showToast`, `removeToast`, `removeAllToasts`).
74
76
 
75
77
  ## Themes
76
78
 
package/bin/rizzo-css.js CHANGED
@@ -31,37 +31,22 @@ const FRAMEWORKS = ['vanilla', 'astro', 'svelte'];
31
31
  /** Supported package managers: detection, install/add commands, and --package-manager override. */
32
32
  const VALID_PACKAGE_MANAGERS = ['npm', 'pnpm', 'yarn', 'bun'];
33
33
 
34
- /** Full = everything we ship. Minimal = same full interactive base (all components). Manual = same base, pick which to include. */
34
+ /** Core = everything we ship. Manual = same base, pick which components to include. */
35
35
  const TEMPLATES = {
36
36
  vanilla: [
37
- { value: 'full', label: 'Full — index.html + theme switcher, js/main.js, icons, component showcase, ' + SCAFFOLD_README_FILENAME },
38
- { value: 'minimal', label: 'Minimal — index.html + CSS + js/main.js + all interactive components (recommended starter)' },
37
+ { value: 'core', label: 'Core — index.html + theme switcher, js/main.js, icons, component showcase, ' + SCAFFOLD_README_FILENAME },
39
38
  { value: 'manual', label: 'Manual — index.html + CSS; pick which components to add (base = all interactive)' },
40
39
  ],
41
40
  astro: [
42
- { value: 'full', label: 'Full — Astro app + all components (with dependencies so everything works)' },
43
- { value: 'minimal', label: 'Minimal — Astro app + all interactive components (full base; everything works together)' },
41
+ { value: 'core', label: 'Core — Astro app + all components (with dependencies so everything works)' },
44
42
  { value: 'manual', label: 'Manual — same base; pick which components to include (all interactive pre-selected)' },
45
43
  ],
46
44
  svelte: [
47
- { value: 'full', label: 'Full — SvelteKit app + all components (with dependencies so everything works)' },
48
- { value: 'minimal', label: 'Minimal — SvelteKit app + all interactive components (full base; everything works together)' },
45
+ { value: 'core', label: 'Core — SvelteKit app + all components (with dependencies so everything works)' },
49
46
  { value: 'manual', label: 'Manual — same base; pick which components to include (all interactive pre-selected)' },
50
47
  ],
51
48
  };
52
49
 
53
- const VANILLA_MINIMAL_README = `# Vanilla + Rizzo CSS (minimal)
54
-
55
- Minimal starter: HTML + CSS + js/main.js + all interactive component pages. Scaffolded with \`npx rizzo-css init --framework vanilla --template minimal\`.
56
-
57
- - 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).
58
- - \`components/\` contains HTML pages for every interactive component (Button, Badge, Card, Modal, Tabs, Navbar, Search, Settings, ThemeSwitcher, Dropdown, Accordion, Toast, CopyToClipboard, forms, table, etc.). Open \`components/index.html\` to browse them.
59
- - Set a theme: \`<html data-theme="github-dark-classic">\` (see \`npx rizzo-css theme\` for all themes).
60
- - Template **Full** adds the same components in a full showcase layout with theme switcher on every page.
61
-
62
- Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
63
- `;
64
-
65
50
  const VANILLA_MANUAL_README = `# Vanilla + Rizzo CSS (manual)
66
51
 
67
52
  Manual setup: HTML + CSS, plus the component pages you chose (base = all interactive components). Scaffolded with \`npx rizzo-css init --framework vanilla --template manual\`.
@@ -71,7 +56,7 @@ Manual setup: HTML + CSS, plus the component pages you chose (base = all interac
71
56
  - If you picked components, \`components/\` has their HTML pages and \`js/main.js\` is included (open \`components/index.html\` to browse).
72
57
  - Set a theme: \`<html data-theme="github-dark-classic">\` (see \`npx rizzo-css theme\` for all themes).
73
58
 
74
- **If you chose no components:** To add component JavaScript (modal, dropdown, tabs, toast, search, navbar, copy-to-clipboard, theme switcher, etc.), use the [Vanilla component docs](https://rizzo-css.vercel.app/docs/vanilla/components) or run \`npx rizzo-css init\` with Vanilla → **Minimal** or **Full** in a temp folder and copy \`js/main.js\` and \`components/\` into this project.
59
+ **If you chose no components:** To add component JavaScript (modal, dropdown, tabs, toast, search, navbar, copy-to-clipboard, theme switcher, etc.), use the [Vanilla component docs](https://rizzo-css.vercel.app/docs/vanilla/components) or run \`npx rizzo-css init\` with Vanilla → **Core** in a temp folder and copy \`js/main.js\` and \`components/\` into this project.
75
60
 
76
61
  Docs: [rizzo-css.vercel.app](https://rizzo-css.vercel.app)
77
62
  `;
@@ -122,7 +107,7 @@ const ASTRO_COMPONENTS = [
122
107
  'Navbar', 'Settings', 'Search', 'Icons',
123
108
  ];
124
109
 
125
- // Base set for Minimal and Manual: all interactive components we ship (so minimal/manual have a full working set). Full still includes everything (same list + any extras).
110
+ // Base set for Manual: all interactive components we ship (so manual has a full working set). Full includes everything (same list).
126
111
  const RECOMMENDED_COMPONENTS = [
127
112
  'Button', 'Badge', 'Card', 'Divider', 'Spinner', 'ProgressBar', 'Avatar', 'Alert',
128
113
  'Breadcrumb', 'FormGroup', 'Input', 'Checkbox', 'Textarea', 'Select', 'Radio',
@@ -153,7 +138,7 @@ function getComponentDependencyLabel(framework, componentName) {
153
138
  return ' (adds ' + deps.join(', ') + ')';
154
139
  }
155
140
 
156
- /** Expand a list of component names with all required dependencies. Used for full, minimal, and add so everything works. */
141
+ /** Expand a list of component names with all required dependencies. Used for full, manual, and add so everything works. */
157
142
  function expandWithDeps(framework, names) {
158
143
  const depsMap = COMPONENT_DEPS[framework];
159
144
  if (!depsMap) return [...names];
@@ -304,9 +289,9 @@ function copyVanillaGitignore(projectDir) {
304
289
  }
305
290
  }
306
291
 
307
- /** Copy Astro minimal scaffold gitignore into project as .gitignore (full and minimal templates). */
292
+ /** Copy Astro scaffold gitignore into project as .gitignore (full template). */
308
293
  function copyAstroGitignore(projectDir) {
309
- const gitignorePath = join(getScaffoldAstroMinimalDir(), SCAFFOLD_GITIGNORE_FILE);
294
+ const gitignorePath = join(getScaffoldAstroCoreDir(), SCAFFOLD_GITIGNORE_FILE);
310
295
  if (existsSync(gitignorePath)) {
311
296
  copyFileSync(gitignorePath, join(projectDir, '.gitignore'));
312
297
  const copiedAsFile = join(projectDir, SCAFFOLD_GITIGNORE_FILE);
@@ -314,9 +299,9 @@ function copyAstroGitignore(projectDir) {
314
299
  }
315
300
  }
316
301
 
317
- /** Copy Svelte minimal scaffold gitignore into project as .gitignore (full and minimal templates). */
302
+ /** Copy Svelte scaffold gitignore into project as .gitignore (full template). */
318
303
  function copySvelteGitignore(projectDir) {
319
- const gitignorePath = join(getScaffoldSvelteMinimalDir(), SCAFFOLD_GITIGNORE_FILE);
304
+ const gitignorePath = join(getScaffoldSvelteCoreDir(), SCAFFOLD_GITIGNORE_FILE);
320
305
  if (existsSync(gitignorePath)) {
321
306
  copyFileSync(gitignorePath, join(projectDir, '.gitignore'));
322
307
  const copiedAsFile = join(projectDir, SCAFFOLD_GITIGNORE_FILE);
@@ -424,7 +409,7 @@ function getPackageManagerCommands(pm) {
424
409
  run: (script) => (pm.agent === 'npm' ? c + ' run ' + script : c + ' run ' + script),
425
410
  add: (pkg) => (pm.agent === 'npm' ? c + ' install ' + pkg : c + ' add ' + pkg),
426
411
  addDev: (pkg) => (pm.agent === 'npm' ? c + ' install -D ' + pkg : pm.agent === 'bun' ? c + ' add -d ' + pkg : c + ' add -D ' + pkg),
427
- dlx: (pkgAndArgs) => (pm.agent === 'npm' ? 'npx ' + pkgAndArgs : pm.agent === 'pnpm' ? 'pnpm dlx ' + pkgAndArgs : pm.agent === 'yarn' ? 'yarn dlx ' + pkgAndArgs : 'bunx ' + pkgAndArgs),
412
+ dlx: (pkgAndArgs) => (pm.agent === 'npm' ? 'npx ' + pkgAndArgs : pm.agent === 'pnpm' ? 'pnpm dlx ' + pkgAndArgs : pm.agent === 'yarn' ? 'npx ' + pkgAndArgs : 'bunx ' + pkgAndArgs),
428
413
  };
429
414
  }
430
415
 
@@ -458,7 +443,7 @@ async function promptPackageManager(projectDir) {
458
443
  return selectMenu(options, '? Package manager (for install and run commands)');
459
444
  }
460
445
 
461
- /** Prompt user to select Full or Manual for the chosen framework. Returns 'full' or 'manual'. */
446
+ /** Prompt user to select Core or Manual for the chosen framework. Returns 'core' or 'manual'. */
462
447
  async function promptTemplate(framework) {
463
448
  const options = TEMPLATES[framework] || TEMPLATES.vanilla;
464
449
  return selectMenu(options, '? Full or Manual?');
@@ -802,20 +787,20 @@ Flags summary:
802
787
  Usage (use your package manager):
803
788
  npx rizzo-css <command> [options]
804
789
  pnpm dlx rizzo-css <command> [options]
805
- yarn dlx rizzo-css <command> [options]
790
+ yarn: npx rizzo-css <command> [options] (Yarn 1 has no dlx; Yarn 2+ can use yarn dlx)
806
791
  bunx rizzo-css <command> [options]
807
792
 
808
793
  Commands:
809
- init New project = Full (everything) | Minimal (all 29 interactive) | Manual (all pre-selected; pick what to include). Existing = drop in CSS + hand-pick. First: framework, then existing vs new.
794
+ init New project = Core (everything) | Manual (pick which components; all pre-selected). Existing = drop in CSS + hand-pick. First: framework, then existing vs new.
810
795
  add Same as init → existing: drop in CSS + hand-pick components (framework detected or from rizzo-css.json)
811
796
  theme List all available themes (use in init or set data-theme on <html>)
812
797
  help Show this help
813
798
 
814
799
  Options (init):
815
- --yes Non-interactive: scaffold new in cwd with defaults (framework: astro, template: full)
800
+ --yes Non-interactive: scaffold new in cwd with defaults (framework: astro, template: core)
816
801
  --path <dir> Project directory (relative to cwd or absolute). Scaffold and run install there. With --yes; interactive: "Enter path" option.
817
802
  --framework <fw> vanilla | astro | svelte (with --yes; otherwise first prompt)
818
- --template <t> full | minimal | manual (all frameworks); with --yes defaults to full
803
+ --template <t> core | manual (all frameworks); with --yes defaults to core
819
804
  --package-manager <pm> npm | pnpm | yarn | bun (with --yes, or skip PM prompt when interactive)
820
805
  --install After scaffolding, run package manager install in project directory (no prompt)
821
806
  --no-install Do not run install and do not prompt
@@ -833,7 +818,7 @@ Options (add):
833
818
  --vanilla-js (Vanilla) Copy js/main.js for interactive components (modal, dropdown, tabs, toast, search, navbar, copy-to-clipboard, theme switcher)
834
819
 
835
820
  Package managers:
836
- Supported: npm, pnpm, yarn, bun. Detection: lockfiles (pnpm-lock.yaml, yarn.lock, bun.lockb, package-lock.json) or package.json "packageManager"/"devEngines.packageManager". Use --package-manager to override.
821
+ Supported: npm, pnpm, yarn, bun. Detection: lockfiles (pnpm-lock.yaml, yarn.lock, bun.lockb, package-lock.json) or package.json "packageManager"/"devEngines.packageManager". Use --package-manager to override. Yarn 1 (classic) has no dlx; we show npx for yarn so it works everywhere. Yarn 2+ can use yarn dlx instead.
837
822
 
838
823
  Interactive prompts (when no --yes/flag provided):
839
824
  Single-choice (framework, template, etc.): ↑/↓ move, Enter select.
@@ -848,11 +833,11 @@ Use framework CLI first, then add Rizzo CSS (match your package manager):
848
833
  For Vanilla: npx rizzo-css init --yes --framework vanilla
849
834
  npm create svelte@latest my-app && cd my-app && npx rizzo-css add
850
835
  pnpm dlx create-svelte@latest my-app && cd my-app && pnpm dlx rizzo-css add
851
- yarn create svelte my-app && cd my-app && yarn dlx rizzo-css add
836
+ yarn create svelte my-app && cd my-app && npx rizzo-css add
852
837
  bun create svelte my-app && cd my-app && bunx rizzo-css add
853
838
  npm create astro@latest my-app && cd my-app && npx rizzo-css add
854
839
  pnpm dlx create-astro@latest my-app && cd my-app && pnpm dlx rizzo-css add
855
- yarn create astro my-app && cd my-app && yarn dlx rizzo-css add
840
+ yarn create astro my-app && cd my-app && npx rizzo-css add
856
841
  bun create astro my-app && cd my-app && bunx rizzo-css add
857
842
 
858
843
  Examples:
@@ -861,7 +846,7 @@ Examples:
861
846
  npx rizzo-css init --yes --path my-app --framework astro --install
862
847
  npx rizzo-css init --yes --framework astro --package-manager pnpm --install
863
848
  npx rizzo-css init --yes --framework vanilla
864
- npx rizzo-css init --yes --framework svelte --template full
849
+ npx rizzo-css init --yes --framework svelte --template core
865
850
  npx rizzo-css add --package-manager yarn --install-package
866
851
  npx rizzo-css add
867
852
  npx rizzo-css add Button
@@ -904,9 +889,8 @@ Where components are copied:
904
889
  Svelte → src/lib/rizzo/ (import from '$lib/rizzo')
905
890
  Vanilla → components/ (HTML) (for interactivity add js/main.js; use --vanilla-js on add)
906
891
 
907
- Full = all components above; dependencies are included so everything works.
908
- Minimal = all 29 interactive components; any component that requires others gets them.
909
- Manual = you pick; the picker shows e.g. "Settings (adds ThemeSwitcher)". Required deps are added when you confirm.
892
+ Core = all components above; dependencies are included so everything works.
893
+ Manual = you pick; the picker shows e.g. "Settings (adds ThemeSwitcher)". Required deps are added when you confirm.
910
894
 
911
895
  To see this again: npx rizzo-css help components
912
896
  `);
@@ -1124,6 +1108,10 @@ function getScaffoldUtilsDir() {
1124
1108
  return join(getPackageRoot(), 'scaffold', 'utils');
1125
1109
  }
1126
1110
 
1111
+ function getScaffoldConfigDir() {
1112
+ return join(getPackageRoot(), 'scaffold', 'config');
1113
+ }
1114
+
1127
1115
  function getScaffoldVanillaIndex() {
1128
1116
  return join(getPackageRoot(), 'scaffold', 'vanilla', 'index.html');
1129
1117
  }
@@ -1210,12 +1198,12 @@ function copyRizzoIcons(projectDir, framework) {
1210
1198
  }
1211
1199
  }
1212
1200
 
1213
- function getScaffoldAstroMinimalDir() {
1214
- return join(getPackageRoot(), 'scaffold', 'astro-minimal');
1201
+ function getScaffoldAstroCoreDir() {
1202
+ return join(getPackageRoot(), 'scaffold', 'astro-core');
1215
1203
  }
1216
1204
 
1217
- function getScaffoldSvelteMinimalDir() {
1218
- return join(getPackageRoot(), 'scaffold', 'svelte-minimal');
1205
+ function getScaffoldSvelteCoreDir() {
1206
+ return join(getPackageRoot(), 'scaffold', 'svelte-core');
1219
1207
  }
1220
1208
 
1221
1209
  function copyDirRecursive(src, dest) {
@@ -1291,6 +1279,15 @@ function copySvelteComponents(projectDir, selectedNames) {
1291
1279
  if (existsSync(themesSrc)) copyFileSync(themesSrc, join(targetDir, 'themes.ts'));
1292
1280
  if (existsSync(themeSrc)) copyFileSync(themeSrc, join(targetDir, 'theme.ts'));
1293
1281
  }
1282
+ if (toCopy.includes('Settings')) {
1283
+ const configDir = getScaffoldConfigDir();
1284
+ const fontsSrc = join(configDir, 'fonts.ts');
1285
+ if (existsSync(fontsSrc)) {
1286
+ const projectConfigDir = join(projectDir, 'src', 'lib', 'config');
1287
+ mkdirSync(projectConfigDir, { recursive: true });
1288
+ copyFileSync(fontsSrc, join(projectConfigDir, 'fonts.ts'));
1289
+ }
1290
+ }
1294
1291
  if (exports.length > 0 || copyIconsOnly) {
1295
1292
  if (exports.length > 0) {
1296
1293
  const indexContent = `/** Rizzo CSS Svelte components — selected via npx rizzo-css init */\n${exports.join('\n')}\n`;
@@ -1347,6 +1344,15 @@ function copyAstroComponents(projectDir, selectedNames) {
1347
1344
  writeFileSync(join(projectUtilsDir, 'theme.ts'), themeContent);
1348
1345
  }
1349
1346
  }
1347
+ if (toCopy.includes('Settings')) {
1348
+ const configDir = getScaffoldConfigDir();
1349
+ const fontsSrc = join(configDir, 'fonts.ts');
1350
+ if (existsSync(fontsSrc)) {
1351
+ const projectConfigDir = join(projectDir, 'src', 'components', 'config');
1352
+ mkdirSync(projectConfigDir, { recursive: true });
1353
+ copyFileSync(fontsSrc, join(projectConfigDir, 'fonts.ts'));
1354
+ }
1355
+ }
1350
1356
  if (count > 0 || copyIconsOnly) {
1351
1357
  const msg = copyIconsOnly ? 'Icons' : count + ' Astro components + icons';
1352
1358
  console.log('\n ✓ ' + msg + ' copied to ' + targetDir);
@@ -1576,13 +1582,10 @@ async function cmdInit(argv) {
1576
1582
  framework = (frameworkArg && FRAMEWORKS.includes(frameworkArg.toLowerCase())) ? frameworkArg.toLowerCase() : (config && config.framework) || 'astro';
1577
1583
  initMode = 'new';
1578
1584
  const templateArg = getFlagValue(argv, '--template');
1579
- const defaultTemplate = framework === 'vanilla' ? 'minimal' : 'full';
1580
- selectedTemplate = (templateArg && (templateArg === 'full' || templateArg === 'minimal' || templateArg === 'manual')) ? templateArg : defaultTemplate;
1581
- if (selectedTemplate === 'full' && (framework === 'astro' || framework === 'svelte')) {
1585
+ const defaultTemplate = 'core';
1586
+ selectedTemplate = (templateArg && (templateArg === 'core' || templateArg === 'manual')) ? templateArg : defaultTemplate;
1587
+ if (selectedTemplate === 'core' && (framework === 'astro' || framework === 'svelte')) {
1582
1588
  selectedComponents = framework === 'svelte' ? [...SVELTE_COMPONENTS] : [...ASTRO_COMPONENTS];
1583
- } else if (selectedTemplate === 'minimal' && (framework === 'astro' || framework === 'svelte')) {
1584
- const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : ASTRO_COMPONENTS;
1585
- selectedComponents = RECOMMENDED_COMPONENTS.filter((c) => componentList.includes(c));
1586
1589
  }
1587
1590
  const projectDir = customProjectPath ? pathResolve(cwd, customProjectPath) : cwd;
1588
1591
  const resolved = resolvePackageManager(projectDir, cwd);
@@ -1631,20 +1634,17 @@ async function cmdInit(argv) {
1631
1634
  }
1632
1635
  }
1633
1636
 
1634
- selectedTemplate = await selectMenu(TEMPLATES[framework] || TEMPLATES.vanilla, '? Full, Minimal, or Manual?');
1637
+ selectedTemplate = await selectMenu(TEMPLATES[framework] || TEMPLATES.vanilla, '? Core or Manual?');
1635
1638
 
1636
- if (selectedTemplate === 'full' && (framework === 'astro' || framework === 'svelte')) {
1639
+ if (selectedTemplate === 'core' && (framework === 'astro' || framework === 'svelte')) {
1637
1640
  selectedComponents = framework === 'svelte' ? [...SVELTE_COMPONENTS] : [...ASTRO_COMPONENTS];
1638
- } else if (selectedTemplate === 'minimal' && (framework === 'astro' || framework === 'svelte')) {
1639
- const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : ASTRO_COMPONENTS;
1640
- selectedComponents = RECOMMENDED_COMPONENTS.filter((c) => componentList.includes(c));
1641
1641
  } else if (selectedTemplate === 'manual') {
1642
1642
  const componentList = framework === 'svelte' ? SVELTE_COMPONENTS : ASTRO_COMPONENTS;
1643
1643
  const recommended = RECOMMENDED_COMPONENTS.filter((c) => componentList.includes(c));
1644
1644
  selectedComponents = await promptComponentChoice(componentList, framework, recommended);
1645
1645
  }
1646
1646
 
1647
- const wantsThemeSwitcher = (framework === 'vanilla' && (selectedTemplate === 'full' || selectedTemplate === 'minimal')) || selectedComponents.includes('ThemeSwitcher');
1647
+ const wantsThemeSwitcher = (framework === 'vanilla' && selectedTemplate === 'core') || selectedComponents.includes('ThemeSwitcher');
1648
1648
  if (wantsThemeSwitcher) {
1649
1649
  const themeOut = await promptThemes();
1650
1650
  theme = themeOut.theme;
@@ -1689,17 +1689,16 @@ async function cmdInit(argv) {
1689
1689
  '{{PROJECT_NAME}}': projectNamePkg,
1690
1690
  };
1691
1691
 
1692
- const astroMinimalDir = getScaffoldAstroMinimalDir();
1693
- const svelteMinimalDir = getScaffoldSvelteMinimalDir();
1692
+ const astroCoreDir = getScaffoldAstroCoreDir();
1693
+ const svelteCoreDir = getScaffoldSvelteCoreDir();
1694
1694
  const pathsForScaffold = getFrameworkCssPaths(framework);
1695
- const useHandpickAstro = selectedTemplate === 'manual' && framework === 'astro' && existsSync(astroMinimalDir);
1696
- const useHandpickSvelte = selectedTemplate === 'manual' && framework === 'svelte' && existsSync(svelteMinimalDir);
1697
- const useAstroBase = (selectedTemplate === 'full' || selectedTemplate === 'minimal') && framework === 'astro' && existsSync(astroMinimalDir);
1698
- const useSvelteBase = (selectedTemplate === 'full' || selectedTemplate === 'minimal') && framework === 'svelte' && existsSync(svelteMinimalDir);
1699
- const useVanillaFull = selectedTemplate === 'full' && framework === 'vanilla' && existsSync(getScaffoldVanillaIndex());
1700
- const useVanillaMinimal = selectedTemplate === 'minimal' && framework === 'vanilla';
1701
-
1702
- // Full and minimal get all required dependencies so everything works; manual gets deps when user picks (see prompt labels).
1695
+ const useHandpickAstro = selectedTemplate === 'manual' && framework === 'astro' && existsSync(astroCoreDir);
1696
+ const useHandpickSvelte = selectedTemplate === 'manual' && framework === 'svelte' && existsSync(svelteCoreDir);
1697
+ const useAstroBase = selectedTemplate === 'core' && framework === 'astro' && existsSync(astroCoreDir);
1698
+ const useSvelteBase = selectedTemplate === 'core' && framework === 'svelte' && existsSync(svelteCoreDir);
1699
+ const useVanillaCore = selectedTemplate === 'core' && framework === 'vanilla' && existsSync(getScaffoldVanillaIndex());
1700
+
1701
+ // Full gets all required dependencies so everything works; manual gets deps when user picks (see prompt labels).
1703
1702
  let componentsToCopy = selectedComponents;
1704
1703
  if ((framework === 'astro' || framework === 'svelte') && selectedComponents.length > 0) {
1705
1704
  componentsToCopy = expandWithDeps(framework, selectedComponents);
@@ -1742,7 +1741,7 @@ async function cmdInit(argv) {
1742
1741
 
1743
1742
  if (useHandpickAstro) {
1744
1743
  mkdirSync(projectDir, { recursive: true });
1745
- copyDirRecursiveWithReplacements(astroMinimalDir, projectDir, replacements);
1744
+ copyDirRecursiveWithReplacements(astroCoreDir, projectDir, replacements);
1746
1745
  copyRizzoCssAndFontsForAstro(projectDir, cssSource);
1747
1746
  cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
1748
1747
  if (statSync(cssTarget).size < 5000) {
@@ -1756,7 +1755,7 @@ async function cmdInit(argv) {
1756
1755
  }
1757
1756
  } else if (useAstroBase) {
1758
1757
  mkdirSync(projectDir, { recursive: true });
1759
- copyDirRecursiveWithReplacements(astroMinimalDir, projectDir, replacements);
1758
+ copyDirRecursiveWithReplacements(astroCoreDir, projectDir, replacements);
1760
1759
  copyRizzoCssAndFontsForAstro(projectDir, cssSource);
1761
1760
  cssTarget = join(projectDir, 'public', 'css', 'rizzo.min.css');
1762
1761
  if (statSync(cssTarget).size < 5000) {
@@ -1770,7 +1769,7 @@ async function cmdInit(argv) {
1770
1769
  }
1771
1770
  } else if (useHandpickSvelte) {
1772
1771
  mkdirSync(projectDir, { recursive: true });
1773
- copyDirRecursiveWithReplacements(svelteMinimalDir, projectDir, replacements);
1772
+ copyDirRecursiveWithReplacements(svelteCoreDir, projectDir, replacements);
1774
1773
  copyRizzoCssAndFontsForSvelte(projectDir, cssSource);
1775
1774
  cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
1776
1775
  if (statSync(cssTarget).size < 5000) {
@@ -1784,7 +1783,7 @@ async function cmdInit(argv) {
1784
1783
  }
1785
1784
  } else if (useSvelteBase) {
1786
1785
  mkdirSync(projectDir, { recursive: true });
1787
- copyDirRecursiveWithReplacements(svelteMinimalDir, projectDir, replacements);
1786
+ copyDirRecursiveWithReplacements(svelteCoreDir, projectDir, replacements);
1788
1787
  copyRizzoCssAndFontsForSvelte(projectDir, cssSource);
1789
1788
  cssTarget = join(projectDir, 'static', 'css', 'rizzo.min.css');
1790
1789
  if (statSync(cssTarget).size < 5000) {
@@ -1796,7 +1795,7 @@ async function cmdInit(argv) {
1796
1795
  copyRizzoIcons(projectDir, 'svelte');
1797
1796
  copySvelteComponents(projectDir, componentsToCopy);
1798
1797
  }
1799
- } else if (useVanillaFull) {
1798
+ } else if (useVanillaCore) {
1800
1799
  const cssDir = join(projectDir, pathsForScaffold.targetDir);
1801
1800
  cssTarget = join(cssDir, 'rizzo.min.css');
1802
1801
  const linkHref = 'css/rizzo.min.css';
@@ -1829,33 +1828,8 @@ async function cmdInit(argv) {
1829
1828
  mainJs = mainJs.replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark).replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight);
1830
1829
  writeFileSync(join(projectDir, 'js', 'main.js'), mainJs, 'utf8');
1831
1830
  }
1832
- const vanillaFullRepl = { ...replacements, '{{LINK_HREF}}': linkHref };
1833
- copyVanillaComponents(projectDir, Object.keys(VANILLA_COMPONENT_SLUGS), vanillaFullRepl);
1834
- copyPackageLicense(projectDir);
1835
- copyVanillaGitignore(projectDir);
1836
- } else if (useVanillaMinimal) {
1837
- const cssDir = join(projectDir, pathsForScaffold.targetDir);
1838
- cssTarget = join(cssDir, 'rizzo.min.css');
1839
- mkdirSync(cssDir, { recursive: true });
1840
- copyFileSync(cssSource, cssTarget);
1841
- copyRizzoFonts(dirname(cssTarget));
1842
- if (statSync(cssTarget).size < 5000) {
1843
- console.warn('\nWarning: rizzo.min.css is very small. From repo root run: pnpm build:css');
1844
- }
1845
- mkdirSync(join(projectDir, 'js'), { recursive: true });
1846
- const vanillaJs = join(getPackageRoot(), 'scaffold', 'vanilla', 'js', 'main.js');
1847
- if (existsSync(vanillaJs)) {
1848
- let mainJs = readFileSync(vanillaJs, 'utf8');
1849
- mainJs = mainJs.replace(/\{\{DEFAULT_DARK\}\}/g, defaultDark).replace(/\{\{DEFAULT_LIGHT\}\}/g, defaultLight);
1850
- writeFileSync(join(projectDir, 'js', 'main.js'), mainJs, 'utf8');
1851
- }
1852
- const vanillaRepl = { ...replacements, '{{LINK_HREF}}': 'css/rizzo.min.css' };
1853
- copyVanillaComponents(projectDir, RECOMMENDED_COMPONENTS, vanillaRepl);
1854
- copyRizzoIcons(projectDir, 'vanilla');
1855
- const minimalIndexWithScript = minimalHtml.replace('</body>', ' <script src="js/main.js"></script>\n</body>');
1856
- indexPath = join(projectDir, 'index.html');
1857
- writeFileSync(indexPath, minimalIndexWithScript, 'utf8');
1858
- writeFileSync(join(projectDir, SCAFFOLD_README_FILENAME), VANILLA_MINIMAL_README, 'utf8');
1831
+ const vanillaCoreRepl = { ...replacements, '{{LINK_HREF}}': linkHref };
1832
+ copyVanillaComponents(projectDir, Object.keys(VANILLA_COMPONENT_SLUGS), vanillaCoreRepl);
1859
1833
  copyPackageLicense(projectDir);
1860
1834
  copyVanillaGitignore(projectDir);
1861
1835
  } else {
@@ -1909,12 +1883,10 @@ async function cmdInit(argv) {
1909
1883
  console.log(' - ' + cssTarget);
1910
1884
  if (indexPath) console.log(' - ' + indexPath);
1911
1885
  if (framework === 'vanilla') {
1912
- if (useVanillaFull) {
1913
- console.log(' - Vanilla JS (full): theme switcher, js/main.js, icons, component showcase, ' + SCAFFOLD_README_FILENAME + '.');
1914
- } else if (useVanillaMinimal) {
1915
- console.log(' - Vanilla JS (minimal): index.html + CSS + js/main.js + all interactive components.');
1886
+ if (useVanillaCore) {
1887
+ console.log(' - Vanilla JS (core): theme switcher, js/main.js, icons, component showcase, ' + SCAFFOLD_README_FILENAME + '.');
1916
1888
  } else {
1917
- console.log(' - Vanilla JS (manual): index.html + CSS only. Add JS from docs or copy from Full.');
1889
+ console.log(' - Vanilla JS (manual): index.html + CSS only. Add JS from docs or copy from Core.');
1918
1890
  }
1919
1891
  }
1920
1892
  const pm = getPackageManagerCommands({ agent: selectedPm, command: selectedPm });
@@ -1928,7 +1900,8 @@ async function cmdInit(argv) {
1928
1900
  console.log(' - Wrote ' + RIZZO_CONFIG_FILE);
1929
1901
 
1930
1902
  if (runInstallAfterScaffold && !noInstall && hasPackageJson) {
1931
- console.log('\nRunning: ' + pm.install);
1903
+ const dirLabel = projectDir !== cwd ? ' in ' + pathRelative(cwd, projectDir) : ' (current directory)';
1904
+ console.log('\nRunning install' + dirLabel + ': ' + pm.install);
1932
1905
  const code = runInDir(projectDir, pm.install);
1933
1906
  if (code !== 0) {
1934
1907
  console.error('\nInstall failed (exit ' + code + '). Run manually: ' + runPrefix + pm.install);
@@ -1936,7 +1909,8 @@ async function cmdInit(argv) {
1936
1909
  } else if (!yes && !noInstall && hasPackageJson) {
1937
1910
  const shouldRun = await confirmRunInstall(pm);
1938
1911
  if (shouldRun) {
1939
- console.log('\nRunning: ' + pm.install);
1912
+ const dirLabel = projectDir !== cwd ? ' in ' + pathRelative(cwd, projectDir) : ' here';
1913
+ console.log('\nChanging to project directory and running install' + dirLabel + ': ' + pm.install);
1940
1914
  const code = runInDir(projectDir, pm.install);
1941
1915
  if (code !== 0) {
1942
1916
  console.error('\nInstall failed (exit ' + code + '). Run manually: ' + runPrefix + pm.install);
@@ -1949,20 +1923,24 @@ async function cmdInit(argv) {
1949
1923
  console.log(' - ' + fw + ' (manual): base + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
1950
1924
  }
1951
1925
  if (useAstroBase) {
1952
- const label = selectedTemplate === 'full' ? 'Full' : 'Minimal';
1953
- console.log(' - Astro (' + label.toLowerCase() + '): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
1926
+ console.log(' - Astro (core): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
1954
1927
  }
1955
1928
  if (useSvelteBase) {
1956
- const label = selectedTemplate === 'full' ? 'Full' : 'Minimal';
1957
- console.log(' - SvelteKit (' + label.toLowerCase() + '): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
1929
+ console.log(' - SvelteKit (core): app + ' + selectedComponents.length + ' component(s). Run: ' + runPrefix + nextStep);
1958
1930
  }
1959
1931
  if ((framework === 'astro' || framework === 'svelte') && !useAstroBase && !useSvelteBase && !useHandpickAstro && !useHandpickSvelte) {
1960
1932
  const fw = framework === 'svelte' ? 'Svelte' : 'Astro';
1961
1933
  const createExample = getCreateProjectExample(pm, framework);
1962
- 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') + '.');
1934
+ 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') + '.');
1935
+ }
1936
+ if (hasPackageJson) {
1937
+ console.log('\nNext: ' + runPrefix + nextStep);
1938
+ } else if (framework === 'vanilla') {
1939
+ const vanillaNext = projectDir !== cwd
1940
+ ? 'cd ' + pathRelative(cwd, projectDir) + ' then open index.html or serve the folder (e.g. npx serve .)'
1941
+ : 'open index.html or serve the folder (e.g. npx serve .)';
1942
+ console.log('\nNext: ' + vanillaNext);
1963
1943
  }
1964
- if (hasPackageJson) console.log('\nNext: ' + runPrefix + nextStep);
1965
- else if (framework === 'vanilla') console.log('\nNext: open index.html or serve the folder.');
1966
1944
  console.log('\nDocs: https://rizzo-css.vercel.app\n');
1967
1945
  }
1968
1946
 
@@ -0,0 +1,93 @@
1
+ Copyright © 2017 IBM Corp. with Reserved Font Name "Plex"
2
+
3
+ This Font Software is licensed under the SIL Open Font License, Version 1.1.
4
+ This license is copied below, and is also available with a FAQ at:
5
+ https://openfontlicense.org
6
+
7
+
8
+ -----------------------------------------------------------
9
+ SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10
+ -----------------------------------------------------------
11
+
12
+ PREAMBLE
13
+ The goals of the Open Font License (OFL) are to stimulate worldwide
14
+ development of collaborative font projects, to support the font creation
15
+ efforts of academic and linguistic communities, and to provide a free and
16
+ open framework in which fonts may be shared and improved in partnership
17
+ with others.
18
+
19
+ The OFL allows the licensed fonts to be used, studied, modified and
20
+ redistributed freely as long as they are not sold by themselves. The
21
+ fonts, including any derivative works, can be bundled, embedded,
22
+ redistributed and/or sold with any software provided that any reserved
23
+ names are not used by derivative works. The fonts and derivatives,
24
+ however, cannot be released under any other type of license. The
25
+ requirement for fonts to remain under this license does not apply
26
+ to any document created using the fonts or their derivatives.
27
+
28
+ DEFINITIONS
29
+ "Font Software" refers to the set of files released by the Copyright
30
+ Holder(s) under this license and clearly marked as such. This may
31
+ include source files, build scripts and documentation.
32
+
33
+ "Reserved Font Name" refers to any names specified as such after the
34
+ copyright statement(s).
35
+
36
+ "Original Version" refers to the collection of Font Software components as
37
+ distributed by the Copyright Holder(s).
38
+
39
+ "Modified Version" refers to any derivative made by adding to, deleting,
40
+ or substituting -- in part or in whole -- any of the components of the
41
+ Original Version, by changing formats or by porting the Font Software to a
42
+ new environment.
43
+
44
+ "Author" refers to any designer, engineer, programmer, technical
45
+ writer or other person who contributed to the Font Software.
46
+
47
+ PERMISSION & CONDITIONS
48
+ Permission is hereby granted, free of charge, to any person obtaining
49
+ a copy of the Font Software, to use, study, copy, merge, embed, modify,
50
+ redistribute, and sell modified and unmodified copies of the Font
51
+ Software, subject to the following conditions:
52
+
53
+ 1) Neither the Font Software nor any of its individual components,
54
+ in Original or Modified Versions, may be sold by itself.
55
+
56
+ 2) Original or Modified Versions of the Font Software may be bundled,
57
+ redistributed and/or sold with any software, provided that each copy
58
+ contains the above copyright notice and this license. These can be
59
+ included either as stand-alone text files, human-readable headers or
60
+ in the appropriate machine-readable metadata fields within text or
61
+ binary files as long as those fields can be easily viewed by the user.
62
+
63
+ 3) No Modified Version of the Font Software may use the Reserved Font
64
+ Name(s) unless explicit written permission is granted by the corresponding
65
+ Copyright Holder. This restriction only applies to the primary font name as
66
+ presented to the users.
67
+
68
+ 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69
+ Software shall not be used to promote, endorse or advertise any
70
+ Modified Version, except to acknowledge the contribution(s) of the
71
+ Copyright Holder(s) and the Author(s) or with their explicit written
72
+ permission.
73
+
74
+ 5) The Font Software, modified or unmodified, in part or in whole,
75
+ must be distributed entirely under this license, and must not be
76
+ distributed under any other license. The requirement for fonts to
77
+ remain under this license does not apply to any document created
78
+ using the Font Software.
79
+
80
+ TERMINATION
81
+ This license becomes null and void if any of the above conditions are
82
+ not met.
83
+
84
+ DISCLAIMER
85
+ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88
+ OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89
+ COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90
+ INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91
+ DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92
+ FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93
+ OTHER DEALINGS IN THE FONT SOFTWARE.