@cloudflare/kumo 1.0.0 → 1.2.0

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 (150) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/LICENSE +18 -18
  3. package/README.md +20 -24
  4. package/ai/component-registry.json +21 -2
  5. package/ai/component-registry.md +15 -2
  6. package/ai/schemas.ts +10 -3
  7. package/bin/kumo.js +32 -0
  8. package/dist/.build-complete +1 -0
  9. package/dist/{breadcrumbs-B5SY2CWj.js → breadcrumbs-DyKi7BcP.js} +2 -2
  10. package/dist/{breadcrumbs-B5SY2CWj.js.map → breadcrumbs-DyKi7BcP.js.map} +1 -1
  11. package/dist/{button-E2-hZMZE.js → button-Bh96oxRL.js} +3 -3
  12. package/dist/{button-E2-hZMZE.js.map → button-Bh96oxRL.js.map} +1 -1
  13. package/dist/catalog.js +1 -1
  14. package/dist/{checkbox-BexIU_lZ.js → checkbox-C1LPq8eL.js} +3 -3
  15. package/dist/{checkbox-BexIU_lZ.js.map → checkbox-C1LPq8eL.js.map} +1 -1
  16. package/dist/{clipboard-text-BFHWMjmr.js → clipboard-text-CJSI9X2m.js} +3 -3
  17. package/dist/{clipboard-text-BFHWMjmr.js.map → clipboard-text-CJSI9X2m.js.map} +1 -1
  18. package/dist/{combobox-Dld0kS0U.js → combobox-CWxn5aHA.js} +4 -4
  19. package/dist/{combobox-Dld0kS0U.js.map → combobox-CWxn5aHA.js.map} +1 -1
  20. package/dist/command-line/cli.js +0 -0
  21. package/dist/command-line/commands/add.js +0 -0
  22. package/dist/command-line/commands/blocks.js +0 -0
  23. package/dist/command-line/commands/doc.js +0 -0
  24. package/dist/command-line/commands/init.js +0 -0
  25. package/dist/command-line/commands/ls.js +0 -0
  26. package/dist/{command-palette-BgQ680BG.js → command-palette-BxmGYxBv.js} +2 -2
  27. package/dist/{command-palette-BgQ680BG.js.map → command-palette-BxmGYxBv.js.map} +1 -1
  28. package/dist/components/breadcrumbs.js +1 -1
  29. package/dist/components/button.js +1 -1
  30. package/dist/components/checkbox.js +1 -1
  31. package/dist/components/clipboard-text.js +1 -1
  32. package/dist/components/combobox.js +1 -1
  33. package/dist/components/command-palette.js +1 -1
  34. package/dist/components/dialog.js +1 -1
  35. package/dist/components/dropdown.js +1 -1
  36. package/dist/components/empty.js +1 -1
  37. package/dist/components/field.js +1 -1
  38. package/dist/components/input.js +3 -3
  39. package/dist/components/label.js +1 -1
  40. package/dist/components/link.js +1 -1
  41. package/dist/components/menubar.js +1 -1
  42. package/dist/components/meter.js +1 -1
  43. package/dist/components/pagination.js +1 -1
  44. package/dist/components/popover.js +1 -1
  45. package/dist/components/radio.js +1 -1
  46. package/dist/components/select.js +1 -1
  47. package/dist/components/sensitive-input.js +1 -1
  48. package/dist/components/switch.js +1 -1
  49. package/dist/components/table.js +1 -1
  50. package/dist/components/tabs.js +1 -1
  51. package/dist/components/toast.js +6 -4
  52. package/dist/components/tooltip.js +1 -1
  53. package/dist/{dialog-B1TaN0oR.js → dialog-BxXPA2vI.js} +2 -2
  54. package/dist/{dialog-B1TaN0oR.js.map → dialog-BxXPA2vI.js.map} +1 -1
  55. package/dist/{dropdown-D0rhYKeG.js → dropdown-BAyk1knz.js} +7 -7
  56. package/dist/{dropdown-D0rhYKeG.js.map → dropdown-BAyk1knz.js.map} +1 -1
  57. package/dist/{empty-DzCqjea-.js → empty-D03cbzRS.js} +2 -2
  58. package/dist/{empty-DzCqjea-.js.map → empty-D03cbzRS.js.map} +1 -1
  59. package/dist/{field-V3J0Ql_V.js → field-B7ORz5ej.js} +3 -3
  60. package/dist/{field-V3J0Ql_V.js.map → field-B7ORz5ej.js.map} +1 -1
  61. package/dist/index.js +66 -65
  62. package/dist/{input-Dqvc2AB_.js → input-D6YgDfDG.js} +3 -3
  63. package/dist/{input-Dqvc2AB_.js.map → input-D6YgDfDG.js.map} +1 -1
  64. package/dist/{input-area-B9qajxvZ.js → input-area-DN_Ncliw.js} +10 -10
  65. package/dist/{input-area-B9qajxvZ.js.map → input-area-DN_Ncliw.js.map} +1 -1
  66. package/dist/{input-group-Bl6tgD5-.js → input-group-BXzBwH4p.js} +29 -29
  67. package/dist/{input-group-Bl6tgD5-.js.map → input-group-BXzBwH4p.js.map} +1 -1
  68. package/dist/{label-87HQArUG.js → label-B4FY8MX_.js} +2 -2
  69. package/dist/{label-87HQArUG.js.map → label-B4FY8MX_.js.map} +1 -1
  70. package/dist/{link-6TIZ4JIw.js → link-CcuZKqob.js} +8 -8
  71. package/dist/{link-6TIZ4JIw.js.map → link-CcuZKqob.js.map} +1 -1
  72. package/dist/{menubar-DLwLRFB1.js → menubar-CzimiryS.js} +2 -2
  73. package/dist/{menubar-DLwLRFB1.js.map → menubar-CzimiryS.js.map} +1 -1
  74. package/dist/{meter-DKUuvXxS.js → meter-BrJnHJ3Q.js} +2 -2
  75. package/dist/{meter-DKUuvXxS.js.map → meter-BrJnHJ3Q.js.map} +1 -1
  76. package/dist/{pagination-C4HQqodz.js → pagination-D0x9KQSk.js} +2 -2
  77. package/dist/{pagination-C4HQqodz.js.map → pagination-D0x9KQSk.js.map} +1 -1
  78. package/dist/{popover-DhdIqrP7.js → popover-BfGLC2s6.js} +4 -4
  79. package/dist/{popover-DhdIqrP7.js.map → popover-BfGLC2s6.js.map} +1 -1
  80. package/dist/primitives/accordion.js +1 -1
  81. package/dist/primitives/alert-dialog.js +1 -1
  82. package/dist/primitives/autocomplete.js +1 -1
  83. package/dist/primitives/avatar.js +1 -1
  84. package/dist/primitives/button.js +1 -1
  85. package/dist/primitives/checkbox-group.js +1 -1
  86. package/dist/primitives/checkbox.js +1 -1
  87. package/dist/primitives/collapsible.js +1 -1
  88. package/dist/primitives/combobox.js +1 -1
  89. package/dist/primitives/context-menu.js +1 -1
  90. package/dist/primitives/dialog.js +1 -1
  91. package/dist/primitives/direction-provider.js +1 -1
  92. package/dist/primitives/field.js +1 -1
  93. package/dist/primitives/fieldset.js +1 -1
  94. package/dist/primitives/form.js +1 -1
  95. package/dist/primitives/input.js +1 -1
  96. package/dist/primitives/menu.js +1 -1
  97. package/dist/primitives/menubar.js +1 -1
  98. package/dist/primitives/meter.js +1 -1
  99. package/dist/primitives/navigation-menu.js +1 -1
  100. package/dist/primitives/number-field.js +1 -1
  101. package/dist/primitives/popover.js +1 -1
  102. package/dist/primitives/preview-card.js +1 -1
  103. package/dist/primitives/progress.js +1 -1
  104. package/dist/primitives/radio-group.js +1 -1
  105. package/dist/primitives/radio.js +1 -1
  106. package/dist/primitives/scroll-area.js +1 -1
  107. package/dist/primitives/select.js +1 -1
  108. package/dist/primitives/separator.js +1 -1
  109. package/dist/primitives/slider.js +1 -1
  110. package/dist/primitives/switch.js +1 -1
  111. package/dist/primitives/tabs.js +1 -1
  112. package/dist/primitives/toast.js +1 -1
  113. package/dist/primitives/toggle-group.js +1 -1
  114. package/dist/primitives/toggle.js +1 -1
  115. package/dist/primitives/toolbar.js +1 -1
  116. package/dist/primitives/tooltip.js +1 -1
  117. package/dist/primitives.js +1 -1
  118. package/dist/{radio-BVAG7hNp.js → radio-CYejLANA.js} +6 -6
  119. package/dist/{radio-BVAG7hNp.js.map → radio-CYejLANA.js.map} +1 -1
  120. package/dist/schemas-C2YJKpDC.js +3543 -0
  121. package/dist/schemas-C2YJKpDC.js.map +1 -0
  122. package/dist/{select-B5Vb3zou.js → select-D4rKQAax.js} +4 -4
  123. package/dist/{select-B5Vb3zou.js.map → select-D4rKQAax.js.map} +1 -1
  124. package/dist/{sensitive-input-D5HCV04N.js → sensitive-input-DYvAmxkN.js} +19 -19
  125. package/dist/{sensitive-input-D5HCV04N.js.map → sensitive-input-DYvAmxkN.js.map} +1 -1
  126. package/dist/src/components/toast/index.d.ts +2 -0
  127. package/dist/src/components/toast/index.d.ts.map +1 -1
  128. package/dist/src/components/toast/toast.d.ts +53 -3
  129. package/dist/src/components/toast/toast.d.ts.map +1 -1
  130. package/dist/src/index.d.ts +1 -1
  131. package/dist/src/index.d.ts.map +1 -1
  132. package/dist/styles/kumo-standalone.css +1 -1
  133. package/dist/{switch-D4duMhJ0.js → switch-z7FE1nQE.js} +3 -3
  134. package/dist/{switch-D4duMhJ0.js.map → switch-z7FE1nQE.js.map} +1 -1
  135. package/dist/{table-KuvHGpL8.js → table-Sd2Etb1N.js} +2 -2
  136. package/dist/{table-KuvHGpL8.js.map → table-Sd2Etb1N.js.map} +1 -1
  137. package/dist/{tabs-lQup-IbT.js → tabs-DAEeuQLd.js} +2 -2
  138. package/dist/{tabs-lQup-IbT.js.map → tabs-DAEeuQLd.js.map} +1 -1
  139. package/dist/toast-B8ebpHaU.js +248 -0
  140. package/dist/toast-B8ebpHaU.js.map +1 -0
  141. package/dist/{tooltip-DJWsDTWJ.js → tooltip-C4DRhJi1.js} +6 -6
  142. package/dist/{tooltip-DJWsDTWJ.js.map → tooltip-C4DRhJi1.js.map} +1 -1
  143. package/dist/{vendor-base-ui-DWIDNgE1.js → vendor-base-ui-kX0wjdav.js} +32 -31
  144. package/dist/{vendor-base-ui-DWIDNgE1.js.map → vendor-base-ui-kX0wjdav.js.map} +1 -1
  145. package/package.json +50 -53
  146. package/scripts/component-registry/schema-generator.ts +7 -2
  147. package/dist/schemas-BSdA0fz-.js +0 -3210
  148. package/dist/schemas-BSdA0fz-.js.map +0 -1
  149. package/dist/toast-8YyyQuqZ.js +0 -69
  150. package/dist/toast-8YyyQuqZ.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cloudflare/kumo",
3
- "version": "1.0.0",
3
+ "version": "1.2.0",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Kumo - Cloudflare's component library for building modern web applications",
@@ -9,10 +9,6 @@
9
9
  "url": "https://github.com/cloudflare/kumo.git",
10
10
  "directory": "packages/kumo"
11
11
  },
12
- "homepage": "https://kumo-ui.com",
13
- "bugs": {
14
- "url": "https://github.com/cloudflare/kumo/issues"
15
- },
16
12
  "license": "MIT",
17
13
  "keywords": [
18
14
  "react",
@@ -25,7 +21,7 @@
25
21
  "module": "./dist/index.js",
26
22
  "types": "./dist/src/index.d.ts",
27
23
  "bin": {
28
- "kumo": "./dist/command-line/cli.js"
24
+ "kumo": "./bin/kumo.js"
29
25
  },
30
26
  "exports": {
31
27
  ".": {
@@ -354,6 +350,7 @@
354
350
  },
355
351
  "files": [
356
352
  "dist",
353
+ "bin",
357
354
  "ai",
358
355
  "templates",
359
356
  "scripts",
@@ -369,35 +366,11 @@
369
366
  "access": "public",
370
367
  "registry": "https://registry.npmjs.org"
371
368
  },
372
- "scripts": {
373
- "prepublish": "pnpm run clean && pnpm run build && pnpm run test:unit",
374
- "build": "vite build --mode production && tsx scripts/css-build.ts && tsx src/command-line/build-cli.ts",
375
- "dev": "vite build --watch --mode development",
376
- "new:component": "plop component",
377
- "clean": "rm -rf dist",
378
- "codegen": "pnpm run codegen:primitives && pnpm run codegen:themes && pnpm run codegen:registry",
379
- "codegen:themes": "tsx scripts/theme-generator/index.ts",
380
- "migrate:tokens": "tsx scripts/theme-generator/migrate.ts",
381
- "codegen:primitives": "tsx scripts/generate-primitives.ts",
382
- "codegen:registry": "pnpm --filter @cloudflare/kumo-docs-astro codegen:demos && tsx scripts/component-registry/index.ts",
383
- "lint": "pnpm run lint:oxlint && pnpm run lint:eslint",
384
- "lint:oxlint": "oxlint src/** --type-aware",
385
- "lint:eslint": "eslint src/",
386
- "test": "CI=true vitest run --project=unit",
387
- "test:ui": "vitest --ui",
388
- "test:run": "vitest run",
389
- "test:unit": "vitest run --project=unit",
390
- "test:coverage": "vitest run --coverage",
391
- "test:exports": "vitest run --project=unit tests/imports/export-path-validation.test.ts",
392
- "typecheck": "tsc --noEmit",
393
- "validate:build": "vitest run --project=unit tests/imports/export-path-validation.test.ts",
394
- "validate:changeset": "tsx ../../ci/scripts/validate-kumo-changeset.ts"
395
- },
396
369
  "peerDependencies": {
397
370
  "@phosphor-icons/react": "^2.1.10",
398
371
  "react": "^18.0.0 || ^19.0.0",
399
372
  "react-dom": "^18.0.0 || ^19.0.0",
400
- "zod": "^3.24.0"
373
+ "zod": "^4.0.0"
401
374
  },
402
375
  "peerDependenciesMeta": {
403
376
  "zod": {
@@ -410,35 +383,59 @@
410
383
  "tailwind-merge": "^3.4.0"
411
384
  },
412
385
  "devDependencies": {
413
- "@tailwindcss/cli": "catalog:",
414
- "@tailwindcss/vite": "catalog:",
386
+ "@tailwindcss/cli": "^4.1.17",
387
+ "@tailwindcss/vite": "^4.1.17",
415
388
  "@testing-library/react": "16.3.1",
416
389
  "@testing-library/user-event": "14.6.1",
417
390
  "@types/glob": "9.0.0",
418
- "@types/node": "catalog:",
419
- "@types/react": "catalog:",
420
- "@types/react-dom": "catalog:",
421
- "@vitest/browser": "catalog:",
422
- "@vitest/ui": "catalog:",
391
+ "@types/node": "^22.10.2",
392
+ "@types/react": "19.2.4",
393
+ "@types/react-dom": "19.2.3",
394
+ "@vitest/browser": "^3.2.4",
395
+ "@vitest/ui": "^3.2.4",
423
396
  "esbuild": "0.27.2",
424
- "eslint": "catalog:",
425
- "eslint-plugin-jsx-a11y": "catalog:",
397
+ "eslint": "^9.17.0",
398
+ "eslint-plugin-jsx-a11y": "^6.10.2",
426
399
  "glob": "13.0.0",
427
- "happy-dom": "catalog:",
428
- "oxlint": "1.28.0",
429
- "oxlint-tsgolint": "0.6.0",
430
- "playwright": "catalog:",
400
+ "happy-dom": "^15.11.7",
401
+ "oxlint": "1.42.0",
402
+ "oxlint-tsgolint": "0.11.3",
403
+ "playwright": "^1.57.0",
431
404
  "plop": "4.0.4",
432
405
  "rollup-plugin-preserve-directives": "0.4.0",
433
- "tailwindcss": "catalog:",
406
+ "tailwindcss": "^4.1.17",
434
407
  "ts-json-schema-generator": "2.4.0",
435
- "tsx": "catalog:",
436
- "typescript": "catalog:",
408
+ "tsx": "^4.19.2",
409
+ "typescript": "^5.9.2",
437
410
  "typescript-eslint": "^8.18.1",
438
- "vite": "catalog:",
439
- "vite-plugin-dts": "catalog:",
440
- "vitest": "catalog:",
441
- "wrangler": "catalog:",
442
- "zod": "^3.24.0"
411
+ "vite": "^7.1.7",
412
+ "vite-plugin-dts": "^4.3.0",
413
+ "vitest": "^3.2.4",
414
+ "wrangler": "^4.59.1",
415
+ "zod": "^4.0.0"
416
+ },
417
+ "scripts": {
418
+ "prepublish": "pnpm run clean && pnpm run build && pnpm run test:unit",
419
+ "build": "vite build --mode production && tsx scripts/css-build.ts && tsx src/command-line/build-cli.ts",
420
+ "dev": "vite build --watch --mode development",
421
+ "new:component": "plop component",
422
+ "clean": "rm -rf dist",
423
+ "codegen": "pnpm run codegen:primitives && pnpm run codegen:themes && pnpm run codegen:registry",
424
+ "codegen:themes": "tsx scripts/theme-generator/index.ts",
425
+ "migrate:tokens": "tsx scripts/theme-generator/migrate.ts",
426
+ "codegen:primitives": "tsx scripts/generate-primitives.ts",
427
+ "codegen:registry": "pnpm --filter @cloudflare/kumo-docs-astro codegen:demos && tsx scripts/component-registry/index.ts",
428
+ "lint": "pnpm run lint:oxlint && pnpm run lint:eslint",
429
+ "lint:oxlint": "oxlint --config .oxlintrc.json src/** --type-aware",
430
+ "lint:eslint": "eslint src/",
431
+ "test": "CI=true vitest run --project=unit",
432
+ "test:ui": "vitest --ui",
433
+ "test:run": "vitest run",
434
+ "test:unit": "vitest run --project=unit",
435
+ "test:coverage": "vitest run --coverage",
436
+ "test:exports": "vitest run --project=unit tests/imports/export-path-validation.test.ts",
437
+ "typecheck": "tsc --noEmit",
438
+ "validate:build": "vitest run --project=unit tests/imports/export-path-validation.test.ts",
439
+ "validate:changeset": "tsx ../../ci/scripts/validate-kumo-changeset.ts"
443
440
  }
444
- }
441
+ }
@@ -102,6 +102,11 @@ export function generateSchemasFile(registry: ComponentRegistry): string {
102
102
  "",
103
103
  'import { z } from "zod";',
104
104
  "",
105
+ "// SafeParseReturnType was removed in Zod v4, but we still want stable typing.",
106
+ "export type SafeParseResult<T> =",
107
+ " | { success: true; data: T; error?: never }",
108
+ " | { success: false; error: z.ZodError<any>; data?: never };",
109
+ "",
105
110
  "// =============================================================================",
106
111
  "// Dynamic Value Schema (for data binding)",
107
112
  "// =============================================================================",
@@ -290,7 +295,7 @@ export function generateSchemasFile(registry: ComponentRegistry): string {
290
295
  lines.push(" * Validate an element's props against its component schema");
291
296
  lines.push(" */");
292
297
  lines.push(
293
- "export function validateElementProps(element: UIElement): z.SafeParseReturnType<unknown, unknown> {",
298
+ "export function validateElementProps(element: UIElement): SafeParseResult<unknown> {",
294
299
  );
295
300
  lines.push(
296
301
  " const schema = ComponentPropsSchemas[element.type as keyof typeof ComponentPropsSchemas];",
@@ -307,7 +312,7 @@ export function generateSchemasFile(registry: ComponentRegistry): string {
307
312
  lines.push(" * Validate a complete UI tree");
308
313
  lines.push(" */");
309
314
  lines.push(
310
- "export function validateUITree(tree: unknown): z.SafeParseReturnType<unknown, UITree> {",
315
+ "export function validateUITree(tree: unknown): SafeParseResult<UITree> {",
311
316
  );
312
317
  lines.push(" return UITreeSchema.safeParse(tree);");
313
318
  lines.push("}");