@react-spa-scaffold/mcp 0.4.1 → 1.1.1

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 (53) hide show
  1. package/README.md +41 -19
  2. package/dist/features/registry.d.ts.map +1 -1
  3. package/dist/features/registry.js +59 -25
  4. package/dist/features/registry.js.map +1 -1
  5. package/dist/features/types.d.ts +1 -0
  6. package/dist/features/types.d.ts.map +1 -1
  7. package/dist/features/versions.json +1 -1
  8. package/dist/server.d.ts.map +1 -1
  9. package/dist/server.js +2 -1
  10. package/dist/server.js.map +1 -1
  11. package/dist/tools/get-example.js +1 -1
  12. package/dist/tools/get-scaffold.d.ts +1 -0
  13. package/dist/tools/get-scaffold.d.ts.map +1 -1
  14. package/dist/tools/get-scaffold.js +33 -17
  15. package/dist/tools/get-scaffold.js.map +1 -1
  16. package/dist/utils/examples.d.ts.map +1 -1
  17. package/dist/utils/examples.js +19 -16
  18. package/dist/utils/examples.js.map +1 -1
  19. package/dist/utils/paths.d.ts +2 -1
  20. package/dist/utils/paths.d.ts.map +1 -1
  21. package/dist/utils/paths.js +15 -2
  22. package/dist/utils/paths.js.map +1 -1
  23. package/dist/utils/scaffold.d.ts +6 -1
  24. package/dist/utils/scaffold.d.ts.map +1 -1
  25. package/dist/utils/scaffold.js +86 -13
  26. package/dist/utils/scaffold.js.map +1 -1
  27. package/package.json +1 -1
  28. package/templates/CLAUDE.md +4 -2
  29. package/templates/docs/API_REFERENCE.md +0 -1
  30. package/templates/docs/INTERNATIONALIZATION.md +26 -0
  31. package/templates/gitignore +33 -0
  32. package/templates/package.json +1 -1
  33. package/templates/src/components/shared/RegisterForm/RegisterForm.tsx +91 -0
  34. package/templates/src/components/shared/RegisterForm/index.ts +1 -0
  35. package/templates/src/components/shared/index.ts +1 -0
  36. package/templates/src/components/ui/card.tsx +70 -0
  37. package/templates/src/components/ui/input.tsx +19 -0
  38. package/templates/src/components/ui/label.tsx +19 -0
  39. package/templates/src/hooks/index.ts +1 -1
  40. package/templates/src/hooks/useRegisterForm.ts +36 -0
  41. package/templates/src/lib/index.ts +1 -11
  42. package/templates/src/lib/validations.ts +6 -13
  43. package/templates/src/pages/Home.tsx +29 -10
  44. package/templates/tests/unit/components/RegisterForm.test.tsx +105 -0
  45. package/templates/tests/unit/hooks/useRegisterForm.test.tsx +153 -0
  46. package/templates/tests/unit/lib/validations.test.ts +22 -33
  47. package/templates/tests/unit/stores/preferencesStore.test.ts +81 -0
  48. package/templates/vitest.config.ts +1 -1
  49. package/templates/src/hooks/useContactForm.ts +0 -33
  50. package/templates/src/lib/constants.ts +0 -8
  51. package/templates/src/lib/format.ts +0 -119
  52. package/templates/tests/unit/hooks/useContactForm.test.ts +0 -60
  53. package/templates/tests/unit/lib/format.test.ts +0 -100
@@ -1 +1 @@
1
- {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/utils/examples.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"examples.js","sourceRoot":"","sources":["../../src/utils/examples.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAUjD;;GAEG;AACH,MAAM,WAAW,GAOb;IACF,qBAAqB;IACrB,cAAc,EAAE;QACd,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,sDAAsD;QACnE,SAAS,EAAE;YACT,oCAAoC;YACpC,mDAAmD;YACnD,gCAAgC;YAChC,4BAA4B;YAC5B,wDAAwD;YACxD,2CAA2C;SAC5C;KACF;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,mDAAmD;QACzD,WAAW,EAAE,iDAAiD;QAC9D,SAAS,EAAE;YACT,uBAAuB;YACvB,8CAA8C;YAC9C,mCAAmC;YACnC,4CAA4C;YAC5C,wCAAwC;SACzC;KACF;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,qCAAqC;QAClD,SAAS,EAAE;YACT,uBAAuB;YACvB,iCAAiC;YACjC,4BAA4B;YAC5B,+BAA+B;YAC/B,6BAA6B;SAC9B;KACF;IAED,gBAAgB;IAChB,YAAY,EAAE;QACZ,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,yCAAyC;QACtD,SAAS,EAAE;YACT,sCAAsC;YACtC,uCAAuC;YACvC,iCAAiC;YACjC,gDAAgD;YAChD,uDAAuD;SACxD;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,uCAAuC;QACpD,SAAS,EAAE;YACT,qCAAqC;YACrC,wCAAwC;YACxC,2BAA2B;YAC3B,6BAA6B;SAC9B;KACF;IACD,WAAW,EAAE;QACX,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,uCAAuC;QACpD,SAAS,EAAE;YACT,iCAAiC;YACjC,0CAA0C;YAC1C,wCAAwC;YACxC,qDAAqD;YACrD,sDAAsD;SACvD;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,uCAAuC;QACpD,SAAS,EAAE;YACT,qCAAqC;YACrC,4BAA4B;YAC5B,qCAAqC;YACrC,8BAA8B;SAC/B;KACF;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,qCAAqC;QAClD,SAAS,EAAE;YACT,6BAA6B;YAC7B,yCAAyC;YACzC,0BAA0B;YAC1B,oCAAoC;SACrC;KACF;IAED,kBAAkB;IAClB,gBAAgB,EAAE;QAChB,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,kEAAkE;QAC/E,SAAS,EAAE;YACT,4DAA4D;YAC5D,oEAAoE;YACpE,kDAAkD;YAClD,6CAA6C;YAC7C,uCAAuC;YACvC,yCAAyC;SAC1C;KACF;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,4CAA4C;QACzD,SAAS,EAAE;YACT,uDAAuD;YACvD,+CAA+C;YAC/C,qDAAqD;YACrD,uDAAuD;YACvD,8CAA8C;YAC9C,yBAAyB;SAC1B;KACF;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,mCAAmC;QAChD,SAAS,EAAE;YACT,gEAAgE;YAChE,qDAAqD;YACrD,uFAAuF;YACvF,qDAAqD;YACrD,4CAA4C;SAC7C;KACF;IAED,iBAAiB;IACjB,eAAe,EAAE;QACf,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,6CAA6C;QAC1D,SAAS,EAAE;YACT,yCAAyC;YACzC,0CAA0C;YAC1C,sCAAsC;YACtC,oCAAoC;YACpC,kCAAkC;YAClC,gCAAgC;SACjC;KACF;IAED,gBAAgB;IAChB,gBAAgB,EAAE;QAChB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,kCAAkC;QAC/C,SAAS,EAAE;YACT,wCAAwC;YACxC,2CAA2C;YAC3C,mCAAmC;YACnC,0BAA0B;YAC1B,gCAAgC;SACjC;KACF;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,iDAAiD;QAC9D,SAAS,EAAE;YACT,kCAAkC;YAClC,mEAAmE;YACnE,iCAAiC;YACjC,oCAAoC;YACpC,+CAA+C;SAChD;KACF;IAED,mBAAmB;IACnB,kBAAkB,EAAE;QAClB,IAAI,EAAE,gCAAgC;QACtC,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE;YACT,+BAA+B;YAC/B,2BAA2B;YAC3B,4CAA4C;YAC5C,gCAAgC;YAChC,sCAAsC;SACvC;KACF;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE;YACT,kCAAkC;YAClC,wCAAwC;YACxC,6BAA6B;SAC9B;KACF;IAED,eAAe;IACf,YAAY,EAAE;QACZ,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,sCAAsC;QACnD,SAAS,EAAE;YACT,6BAA6B;YAC7B,0BAA0B;YAC1B,6BAA6B;YAC7B,kCAAkC;YAClC,gDAAgD;SACjD;KACF;IAED,gBAAgB;IAChB,gBAAgB,EAAE;QAChB,IAAI,EAAE,uCAAuC;QAC7C,WAAW,EAAE,qCAAqC;QAClD,SAAS,EAAE;YACT,2CAA2C;YAC3C,2BAA2B;YAC3B,uCAAuC;YACvC,0BAA0B;SAC3B;KACF;IACD,WAAW,EAAE;QACX,IAAI,EAAE,wCAAwC;QAC9C,WAAW,EAAE,2BAA2B;QACxC,SAAS,EAAE;YACT,iCAAiC;YACjC,wBAAwB;YACxB,sBAAsB;YACtB,iCAAiC;YACjC,yBAAyB;SAC1B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,4CAA4C;QAClD,WAAW,EAAE,oBAAoB;QACjC,SAAS,EAAE;YACT,0CAA0C;YAC1C,iCAAiC;YACjC,2BAA2B;YAC3B,kCAAkC;SACnC;KACF;IACD,aAAa,EAAE;QACb,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,qBAAqB;QAClC,SAAS,EAAE;YACT,wBAAwB;YACxB,mCAAmC;YACnC,0BAA0B;YAC1B,8BAA8B;YAC9B,mCAAmC;SACpC;KACF;IAED,sBAAsB;IACtB,YAAY,EAAE;QACZ,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,4CAA4C;QACzD,SAAS,EAAE;YACT,6BAA6B;YAC7B,8CAA8C;YAC9C,uBAAuB;YACvB,+BAA+B;YAC/B,6DAA6D;SAC9D;KACF;IAED,gBAAgB;IAChB,iBAAiB,EAAE;QACjB,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,oCAAoC;QACjD,SAAS,EAAE;YACT,iCAAiC;YACjC,4CAA4C;YAC5C,yBAAyB;YACzB,0BAA0B;SAC3B;KACF;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,mDAAmD;QACzD,WAAW,EAAE,oCAAoC;QACjD,SAAS,EAAE;YACT,iCAAiC;YACjC,wCAAwC;YACxC,qBAAqB;YACrB,kCAAkC;SACnC;KACF;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,6DAA6D;QACnE,WAAW,EAAE,8BAA8B;QAC3C,SAAS,EAAE;YACT,oBAAoB;YACpB,4BAA4B;YAC5B,wBAAwB;YACxB,+BAA+B;SAChC;KACF;IAED,mBAAmB;IACnB,iBAAiB,EAAE;QACjB,IAAI,EAAE,oBAAoB;QAC1B,WAAW,EAAE,kCAAkC;QAC/C,SAAS,EAAE;YACT,gCAAgC;YAChC,oBAAoB;YACpB,wBAAwB;YACxB,8BAA8B;YAC9B,uCAAuC;SACxC;KACF;IAED,sBAAsB;IACtB,sBAAsB,EAAE;QACtB,IAAI,EAAE,kCAAkC;QACxC,WAAW,EAAE,+BAA+B;QAC5C,SAAS,EAAE;YACT,oCAAoC;YACpC,iCAAiC;YACjC,qCAAqC;YACrC,uCAAuC;SACxC;KACF;IAED,0BAA0B;IAC1B,eAAe,EAAE;QACf,IAAI,EAAE,qDAAqD;QAC3D,WAAW,EAAE,yCAAyC;QACtD,SAAS,EAAE;YACT,kCAAkC;YAClC,6CAA6C;YAC7C,mCAAmC;YACnC,qCAAqC;YACrC,8BAA8B;YAC9B,wCAAwC;SACzC;KACF;IACD,iBAAiB;IACjB,cAAc,EAAE;QACd,IAAI,EAAE,mDAAmD;QACzD,WAAW,EAAE,qCAAqC;QAClD,SAAS,EAAE;YACT,kCAAkC;YAClC,+BAA+B;YAC/B,qCAAqC;YACrC,sCAAsC;SACvC;KACF;IAED,eAAe;IACf,eAAe,EAAE;QACf,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,oCAAoC;QACjD,SAAS,EAAE;YACT,+BAA+B;YAC/B,0BAA0B;YAC1B,iBAAiB;YACjB,mBAAmB;YACnB,yCAAyC;SAC1C;KACF;CACF,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAE/C,OAAO;YACL,OAAO;YACP,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,IAAI;YACJ,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;QAC7D,OAAO;YACL,OAAO;YACP,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,IAAI,EAAE,sBAAsB,OAAO,CAAC,IAAI,+DAA+D;YACvG,SAAS,EAAE,OAAO,CAAC,SAAS;SAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAkB;IACzD,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -22,7 +22,8 @@ export declare const isNpxMode: boolean;
22
22
  */
23
23
  export declare const TEMPLATES_ROOT: string;
24
24
  /**
25
- * Resolve a path relative to templates root
25
+ * Resolve a path relative to templates root.
26
+ * In npx mode, handles renamed dotfiles (npm strips .gitignore during publish).
26
27
  */
27
28
  export declare function resolveTemplatePath(relativePath: string): string;
28
29
  //# sourceMappingURL=paths.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,SAA4B,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAgD,CAAC;AAE5E;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEhE"}
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,SAA4B,CAAC;AAEnD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,QAAgD,CAAC;AAU5E;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAShE"}
@@ -32,9 +32,22 @@ export const isNpxMode = existsSync(BUNDLE_MARKER);
32
32
  */
33
33
  export const TEMPLATES_ROOT = isNpxMode ? BUNDLED_TEMPLATES : MONOREPO_ROOT;
34
34
  /**
35
- * Resolve a path relative to templates root
35
+ * Dotfiles that npm strips during publish, renamed in bundled templates.
36
+ * Maps from original name → bundled name
37
+ */
38
+ const RENAMED_DOTFILES = {
39
+ '.gitignore': 'gitignore',
40
+ };
41
+ /**
42
+ * Resolve a path relative to templates root.
43
+ * In npx mode, handles renamed dotfiles (npm strips .gitignore during publish).
36
44
  */
37
45
  export function resolveTemplatePath(relativePath) {
38
- return join(TEMPLATES_ROOT, relativePath);
46
+ let resolvedPath = relativePath;
47
+ // In npx mode, use renamed versions of dotfiles that npm would strip
48
+ if (isNpxMode && RENAMED_DOTFILES[relativePath]) {
49
+ resolvedPath = RENAMED_DOTFILES[relativePath];
50
+ }
51
+ return join(TEMPLATES_ROOT, resolvedPath);
39
52
  }
40
53
  //# sourceMappingURL=paths.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,mDAAmD;AACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAEnE,4DAA4D;AAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAE1D,2EAA2E;AAC3E,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,OAAO,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAC5C,CAAC"}
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/utils/paths.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,mDAAmD;AACnD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,CAAC,CAAC;AAEnE,4DAA4D;AAC5D,MAAM,aAAa,GAAG,IAAI,CAAC,iBAAiB,EAAE,UAAU,CAAC,CAAC;AAE1D,2EAA2E;AAC3E,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AAE9D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC;AAE5E;;;GAGG;AACH,MAAM,gBAAgB,GAA2B;IAC/C,YAAY,EAAE,WAAW;CAC1B,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,YAAoB;IACtD,IAAI,YAAY,GAAG,YAAY,CAAC;IAEhC,qEAAqE;IACrE,IAAI,SAAS,IAAI,gBAAgB,CAAC,YAAY,CAAC,EAAE,CAAC;QAChD,YAAY,GAAG,gBAAgB,CAAC,YAAY,CAAC,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AAC5C,CAAC"}
@@ -5,7 +5,8 @@ import type { ScaffoldResult } from '../features/types.js';
5
5
  /**
6
6
  * Resolve selected features (always includes core)
7
7
  *
8
- * Features are independent - only explicitly selected features are included.
8
+ * Features are mostly independent, with one exception:
9
+ * - theming requires state feature (for Zustand persistence)
9
10
  */
10
11
  export declare function resolveFeatureDependencies(selectedFeatures: string[]): string[];
11
12
  /**
@@ -43,6 +44,10 @@ export declare function generateViteEnvDts(featureIds: string[]): string;
43
44
  * Generate env.ts content based on selected features
44
45
  */
45
46
  export declare function generateEnvTs(featureIds: string[]): string;
47
+ /**
48
+ * Generate routes.ts content based on selected features
49
+ */
50
+ export declare function generateRoutesTs(_featureIds: string[]): string;
46
51
  /**
47
52
  * Compute complete scaffold for selected features
48
53
  */
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/utils/scaffold.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAe/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAwBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAanE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa7D;AAgBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgB/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CA2OnH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CA4B/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CA0E1D;AAWD;;GAEG;AACH,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,GAAE,MAAiB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAyDzB"}
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/utils/scaffold.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,gBAAgB,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAoB/E;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG;IACvD,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACzC,CAwBA;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUzE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAanE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa7D;AAgBD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAgB/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAuRnH;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CA4B/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,CA0E1D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAuB9D;AAWD;;GAEG;AACH,wBAAsB,eAAe,CACnC,gBAAgB,EAAE,MAAM,EAAE,EAC1B,WAAW,GAAE,MAAiB,GAC7B,OAAO,CAAC,cAAc,CAAC,CA6DzB"}
@@ -8,7 +8,8 @@ import { resolveTemplatePath } from './paths.js';
8
8
  /**
9
9
  * Resolve selected features (always includes core)
10
10
  *
11
- * Features are independent - only explicitly selected features are included.
11
+ * Features are mostly independent, with one exception:
12
+ * - theming requires state feature (for Zustand persistence)
12
13
  */
13
14
  export function resolveFeatureDependencies(selectedFeatures) {
14
15
  const resolved = new Set();
@@ -21,6 +22,10 @@ export function resolveFeatureDependencies(selectedFeatures) {
21
22
  resolved.add(featureId);
22
23
  }
23
24
  }
25
+ // Theming requires state feature for Zustand persistence
26
+ if (resolved.has('theming') && !resolved.has('state')) {
27
+ resolved.add('state');
28
+ }
24
29
  return Array.from(resolved);
25
30
  }
26
31
  /**
@@ -187,6 +192,8 @@ ${commandLines.join('\n')}
187
192
  sections.push(`
188
193
  ## Project Structure
189
194
 
195
+ See [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for full structure and data flow.
196
+
190
197
  \`\`\`
191
198
  ${structureParts.join('\n')}
192
199
  \`\`\``);
@@ -206,7 +213,9 @@ ${structureParts.join('\n')}
206
213
 
207
214
  **TypeScript**: \`type\` for unions, \`interface\` for objects
208
215
 
209
- **State hierarchy**: ${stateHierarchy.join(' → ')}`);
216
+ **State hierarchy**: ${stateHierarchy.join(' → ')}
217
+
218
+ See [docs/CODING_STANDARDS.md](docs/CODING_STANDARDS.md) and [docs/COMPONENT_GUIDELINES.md](docs/COMPONENT_GUIDELINES.md).`);
210
219
  // UI Components section - only if ui feature
211
220
  if (featureIds.includes('ui')) {
212
221
  sections.push(`
@@ -266,21 +275,36 @@ const sizes = useTouchSizes();
266
275
  <Button size={sizes.button}>Click</Button> // 'touch' on mobile, 'default' on desktop
267
276
  \`\`\``);
268
277
  }
269
- // MCP Servers section - always helpful
270
- sections.push(`
271
- ## MCP Servers (PREFER OVER WebSearch)
278
+ // Theming section - only if theming feature
279
+ if (featureIds.includes('theming')) {
280
+ sections.push(`
281
+ ## Theming
272
282
 
273
- Use MCP servers for documentation lookup. They provide **structured, version-accurate data** directly from source.
283
+ Light/dark/system theme support with Zustand persistence.
274
284
 
275
- ### Context7 MCP (All Libraries)
285
+ ### Usage
276
286
 
277
- Use for **any npm package** documentation:
287
+ \`\`\`tsx
288
+ import { usePreferencesStore } from '@/stores/preferencesStore';
278
289
 
279
- \`\`\`
280
- resolve-library-id get-library-docs
290
+ // Get current theme
291
+ const theme = usePreferencesStore((s) => s.theme);
292
+
293
+ // Toggle theme
294
+ const toggleTheme = usePreferencesStore((s) => s.toggleTheme);
295
+
296
+ // Get resolved theme (actual light/dark value when 'system')
297
+ const getResolvedTheme = usePreferencesStore((s) => s.getResolvedTheme);
281
298
  \`\`\`
282
299
 
283
- **Examples**: react-hook-form, @tanstack/react-query, zustand, zod, date-fns`);
300
+ The \`useThemeEffect\` hook automatically applies the \`.dark\` class to the document.
301
+ The ThemeToggle component provides a UI for switching between light, dark, and system themes.`);
302
+ }
303
+ // MCP Servers section - always helpful
304
+ sections.push(`
305
+ ## MCP Servers (PREFER OVER WebSearch)
306
+
307
+ Use MCP servers for documentation lookup. They provide **structured, version-accurate data** directly from source.`);
284
308
  if (featureIds.includes('ui')) {
285
309
  sections.push(`
286
310
  ### Shadcn MCP (UI Components)
@@ -289,8 +313,27 @@ resolve-library-id → get-library-docs
289
313
  | ------------------- | ------------------------------------------------ |
290
314
  | Find component | \`mcp__shadcn__search_items_in_registries\` |
291
315
  | View component code | \`mcp__shadcn__view_items_in_registries\` |
292
- | Usage examples | \`mcp__shadcn__get_item_examples_from_registries\` |`);
316
+ | Usage examples | \`mcp__shadcn__get_item_examples_from_registries\` |
317
+ | CLI add command | \`mcp__shadcn__get_add_command_for_items\` |`);
293
318
  }
319
+ sections.push(`
320
+ ### Context7 MCP (All Libraries)
321
+
322
+ Use for **any npm package** documentation:
323
+
324
+ \`\`\`
325
+ resolve-library-id → get-library-docs
326
+ \`\`\`
327
+
328
+ **Examples**: react-hook-form, @tanstack/react-query, zustand, zod, date-fns
329
+
330
+ ### Decision Flow
331
+
332
+ \`\`\`
333
+ Need UI component? → Shadcn MCP
334
+ Need library docs? → Context7 MCP (any npm package)
335
+ Need general info? → WebSearch (fallback only)
336
+ \`\`\``);
294
337
  // Translations section - only if i18n feature
295
338
  if (featureIds.includes('i18n')) {
296
339
  sections.push(`
@@ -301,13 +344,17 @@ All user-facing text MUST have translator comments. ESLint enforces this.
301
344
  \`\`\`tsx
302
345
  <Trans comment="Dashboard heading">Welcome back</Trans>
303
346
  t({ message: 'Close', comment: 'Close button' })
304
- \`\`\``);
347
+ \`\`\`
348
+
349
+ See [docs/INTERNATIONALIZATION.md](docs/INTERNATIONALIZATION.md).`);
305
350
  }
306
351
  // Testing section - only if testing feature
307
352
  if (featureIds.includes('testing')) {
308
353
  sections.push(`
309
354
  ## Testing
310
355
 
356
+ See [docs/TESTING.md](docs/TESTING.md) and [docs/E2E_TESTING.md](docs/E2E_TESTING.md).
357
+
311
358
  Tests in \`tests/unit/\` mirror \`src/\` structure. 80% coverage required.
312
359
 
313
360
  \`\`\`typescript
@@ -439,6 +486,29 @@ ${envFields.join('\n')}
439
486
  export const env = validateEnv();
440
487
  `;
441
488
  }
489
+ /**
490
+ * Generate routes.ts content based on selected features
491
+ */
492
+ export function generateRoutesTs(_featureIds) {
493
+ const routes = [];
494
+ // Core routes (always included when routing feature is selected)
495
+ routes.push(" HOME: '/',");
496
+ // Not found route (always last)
497
+ routes.push(" NOT_FOUND: '*',");
498
+ // Note: Additional routes can be added here based on features
499
+ // For now, all demo content displays on HomePage directly
500
+ return `/**
501
+ * Typed route constants.
502
+ * Use these instead of hardcoded strings for type-safe navigation.
503
+ */
504
+
505
+ export const ROUTES = {
506
+ ${routes.join('\n')}
507
+ } as const;
508
+
509
+ export type AppRoute = (typeof ROUTES)[keyof typeof ROUTES];
510
+ `;
511
+ }
442
512
  /**
443
513
  * Read and parse the source package.json
444
514
  */
@@ -478,6 +548,8 @@ export async function computeScaffold(selectedFeatures, projectName = 'my-app')
478
548
  const viteEnvDts = generateViteEnvDts(resolvedFeatures);
479
549
  // Generate env.ts content
480
550
  const envTs = generateEnvTs(resolvedFeatures);
551
+ // Generate routes.ts content (only if routing feature is selected)
552
+ const routesTs = resolvedFeatures.includes('routing') ? generateRoutesTs(resolvedFeatures) : undefined;
481
553
  // Get docs with content filtered by features
482
554
  const docs = await computeDocsContent(resolvedFeatures);
483
555
  return {
@@ -494,6 +566,7 @@ export async function computeScaffold(selectedFeatures, projectName = 'my-app')
494
566
  claudeMd,
495
567
  viteEnvDts,
496
568
  envTs,
569
+ routesTs,
497
570
  docs,
498
571
  };
499
572
  }
@@ -1 +1 @@
1
- {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/utils/scaffold.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/utils/scaffold.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-spa-scaffold/mcp",
3
- "version": "0.4.1",
3
+ "version": "1.1.1",
4
4
  "description": "MCP server for scaffolding projects based on react-spa-scaffold template",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -113,14 +113,16 @@ Need general info? → WebSearch (fallback only)
113
113
 
114
114
  ## Translations (CRITICAL)
115
115
 
116
- All user-facing text MUST have translator comments. ESLint enforces this.
116
+ All user-facing text MUST be wrapped and include translator comments. ESLint enforces this.
117
117
 
118
118
  ```tsx
119
119
  <Trans comment="Dashboard heading">Welcome back</Trans>;
120
120
  t({ message: 'Close', comment: 'Close button' });
121
121
  ```
122
122
 
123
- See [docs/INTERNATIONALIZATION.md](docs/INTERNATIONALIZATION.md).
123
+ Technical identifiers (`id`, `htmlFor`, `autoComplete`, `register()`) are auto-ignored.
124
+
125
+ See [docs/INTERNATIONALIZATION.md](docs/INTERNATIONALIZATION.md) for full details.
124
126
 
125
127
  ## Testing
126
128
 
@@ -9,7 +9,6 @@ Quick reference for what's available. For architectural decisions, see [Architec
9
9
  | `api.ts` | HTTP client | Any API calls - handles errors, timeouts, JSON. Includes API_CONFIG |
10
10
  | `config.ts` | App configuration | Access APP_CONFIG, SENTRY_CONFIG |
11
11
  | `env.ts` | Environment variables | Type-safe `env.VITE_*` access |
12
- | `format.ts` | Formatters | Dates, numbers, currency, bytes - all locale-aware |
13
12
  | `routes.ts` | Route constants | Type-safe navigation, avoid magic strings |
14
13
  | `storage.ts` | localStorage wrapper | SSR-safe, typed storage with error handling |
15
14
  | `storageKeys.ts` | Storage key constants | Centralized key management |
@@ -62,6 +62,32 @@ The `eslint-plugin-lingui` enforces translations:
62
62
 
63
63
  Excluded from checks: tests, mocks, UI primitives, config files.
64
64
 
65
+ ### Auto-Ignored Technical Identifiers
66
+
67
+ The ESLint config automatically ignores strings that are technical identifiers:
68
+
69
+ **Prop names** (values don't need translation):
70
+
71
+ - HTML: `id`, `htmlFor`, `autoComplete`, `aria-invalid`
72
+ - Styling: `className`, `styleName`
73
+ - Components: `type`, `variant`, `size`, `role`, `name`
74
+ - Routing: `href`, `to`, `path`
75
+ - Data: `queryKey`, `data-testid`
76
+
77
+ **Function arguments**:
78
+
79
+ - `register('fieldName')` - React Hook Form field names
80
+ - `console.*`, `Error()` - Debug/error messages
81
+
82
+ ```tsx
83
+ // These are fine - no translation needed
84
+ <Label htmlFor="email">
85
+ <Input id="email" autoComplete="email" {...register('email')} />
86
+
87
+ // This DOES need translation (user-facing placeholder)
88
+ placeholder={t({ message: 'Enter email', comment: 'Email input hint' })}
89
+ ```
90
+
65
91
  ## Adding a New Locale
66
92
 
67
93
  Edit `lingui.config.js` and add the locale code to the `locales` array.
@@ -0,0 +1,33 @@
1
+ # Dependencies
2
+ node_modules/
3
+
4
+ # Build output
5
+ dist/
6
+ dist-ssr/
7
+ *.tsbuildinfo
8
+
9
+ # IDE
10
+ .vscode/
11
+ .idea/
12
+ *.swp
13
+ *.swo
14
+ .DS_Stores
15
+
16
+ # Environment
17
+ .env
18
+ .env.local
19
+ .env.*.local
20
+
21
+ # Testing
22
+ coverage/
23
+ playwright-report/
24
+ test-results/
25
+ playwright/.cache/
26
+
27
+ # i18n compiled catalogs (generated by Vite plugin during build)
28
+ src/locales/*.mjs
29
+
30
+ # Misc
31
+ tmp
32
+ *.log
33
+ npm-debug.log*
@@ -22,7 +22,7 @@
22
22
  "shadcn",
23
23
  "tailwind"
24
24
  ],
25
- "version": "0.4.0",
25
+ "version": "0.5.1",
26
26
  "type": "module",
27
27
  "workspaces": [
28
28
  "packages/*"
@@ -0,0 +1,91 @@
1
+ import { Trans, useLingui } from '@lingui/react/macro';
2
+
3
+ import { Button } from '@/components/ui/button';
4
+ import { FieldErrorMessage } from '@/components/ui/form-error';
5
+ import { Input } from '@/components/ui/input';
6
+ import { Label } from '@/components/ui/label';
7
+ import { useRegisterForm } from '@/hooks';
8
+
9
+ /**
10
+ * Registration form component demonstrating cross-field validation.
11
+ * Shows password confirmation with Zod's refine() for matching passwords.
12
+ */
13
+ export function RegisterForm() {
14
+ const { t } = useLingui();
15
+ const { form, onSubmit, isSubmitting, errors } = useRegisterForm();
16
+ const { register } = form;
17
+
18
+ return (
19
+ <form onSubmit={onSubmit} className="space-y-4">
20
+ <div className="space-y-2">
21
+ <Label htmlFor="username">
22
+ <Trans comment="Register form username field label">Username</Trans>
23
+ </Label>
24
+ <Input
25
+ id="username"
26
+ placeholder={t({ message: 'johndoe', comment: 'Username placeholder example' })}
27
+ autoComplete="username"
28
+ aria-invalid={!!errors.username}
29
+ {...register('username')}
30
+ />
31
+ <FieldErrorMessage error={errors.username} />
32
+ </div>
33
+
34
+ <div className="space-y-2">
35
+ <Label htmlFor="register-email">
36
+ <Trans comment="Register form email field label">Email</Trans>
37
+ </Label>
38
+ <Input
39
+ id="register-email"
40
+ type="email"
41
+ placeholder={t({ message: 'john@example.com', comment: 'Email placeholder example' })}
42
+ autoComplete="email"
43
+ aria-invalid={!!errors.email}
44
+ {...register('email')}
45
+ />
46
+ <FieldErrorMessage error={errors.email} />
47
+ </div>
48
+
49
+ <div className="space-y-2">
50
+ <Label htmlFor="password">
51
+ <Trans comment="Register form password field label">Password</Trans>
52
+ </Label>
53
+ <Input
54
+ id="password"
55
+ type="password"
56
+ placeholder={t({
57
+ message: 'Min 8 chars, uppercase, lowercase, number',
58
+ comment: 'Password requirements hint',
59
+ })}
60
+ autoComplete="new-password"
61
+ aria-invalid={!!errors.password}
62
+ {...register('password')}
63
+ />
64
+ <FieldErrorMessage error={errors.password} />
65
+ </div>
66
+
67
+ <div className="space-y-2">
68
+ <Label htmlFor="confirmPassword">
69
+ <Trans comment="Register form confirm password field label">Confirm Password</Trans>
70
+ </Label>
71
+ <Input
72
+ id="confirmPassword"
73
+ type="password"
74
+ placeholder={t({ message: 'Re-enter your password', comment: 'Confirm password placeholder' })}
75
+ autoComplete="new-password"
76
+ aria-invalid={!!errors.confirmPassword}
77
+ {...register('confirmPassword')}
78
+ />
79
+ <FieldErrorMessage error={errors.confirmPassword} />
80
+ </div>
81
+
82
+ <Button type="submit" disabled={isSubmitting} className="w-full">
83
+ {isSubmitting ? (
84
+ <Trans comment="Register form submitting state">Creating account...</Trans>
85
+ ) : (
86
+ <Trans comment="Register form submit button">Create Account</Trans>
87
+ )}
88
+ </Button>
89
+ </form>
90
+ );
91
+ }
@@ -0,0 +1 @@
1
+ export { RegisterForm } from './RegisterForm';
@@ -2,3 +2,4 @@ export { ThemeToggle } from './ThemeToggle';
2
2
  export { ErrorBoundary } from './ErrorBoundary';
3
3
  export { SEO } from './SEO';
4
4
  export { LanguageSwitcher } from './LanguageSwitcher';
5
+ export { RegisterForm } from './RegisterForm';
@@ -0,0 +1,70 @@
1
+ import * as React from 'react';
2
+
3
+ import { cn } from '@/lib/utils';
4
+
5
+ function Card({ className, size = 'default', ...props }: React.ComponentProps<'div'> & { size?: 'default' | 'sm' }) {
6
+ return (
7
+ <div
8
+ data-slot="card"
9
+ data-size={size}
10
+ className={cn(
11
+ 'ring-foreground/10 bg-card text-card-foreground group/card flex flex-col gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl',
12
+ className,
13
+ )}
14
+ {...props}
15
+ />
16
+ );
17
+ }
18
+
19
+ function CardHeader({ className, ...props }: React.ComponentProps<'div'>) {
20
+ return (
21
+ <div
22
+ data-slot="card-header"
23
+ className={cn(
24
+ 'group/card-header @container/card-header grid auto-rows-min items-start gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto] [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3',
25
+ className,
26
+ )}
27
+ {...props}
28
+ />
29
+ );
30
+ }
31
+
32
+ function CardTitle({ className, ...props }: React.ComponentProps<'div'>) {
33
+ return (
34
+ <div
35
+ data-slot="card-title"
36
+ className={cn('text-base leading-snug font-medium group-data-[size=sm]/card:text-sm', className)}
37
+ {...props}
38
+ />
39
+ );
40
+ }
41
+
42
+ function CardDescription({ className, ...props }: React.ComponentProps<'div'>) {
43
+ return <div data-slot="card-description" className={cn('text-muted-foreground text-sm', className)} {...props} />;
44
+ }
45
+
46
+ function CardAction({ className, ...props }: React.ComponentProps<'div'>) {
47
+ return (
48
+ <div
49
+ data-slot="card-action"
50
+ className={cn('col-start-2 row-span-2 row-start-1 self-start justify-self-end', className)}
51
+ {...props}
52
+ />
53
+ );
54
+ }
55
+
56
+ function CardContent({ className, ...props }: React.ComponentProps<'div'>) {
57
+ return <div data-slot="card-content" className={cn('px-4 group-data-[size=sm]/card:px-3', className)} {...props} />;
58
+ }
59
+
60
+ function CardFooter({ className, ...props }: React.ComponentProps<'div'>) {
61
+ return (
62
+ <div
63
+ data-slot="card-footer"
64
+ className={cn('bg-muted/50 flex items-center rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3', className)}
65
+ {...props}
66
+ />
67
+ );
68
+ }
69
+
70
+ export { Card, CardHeader, CardFooter, CardTitle, CardAction, CardDescription, CardContent };
@@ -0,0 +1,19 @@
1
+ import * as React from 'react';
2
+
3
+ import { cn } from '@/lib/utils';
4
+
5
+ function Input({ className, type, ...props }: React.ComponentProps<'input'>) {
6
+ return (
7
+ <input
8
+ type={type}
9
+ data-slot="input"
10
+ className={cn(
11
+ 'dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 file:text-foreground placeholder:text-muted-foreground h-8 w-full min-w-0 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors outline-none file:inline-flex file:h-6 file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:ring-[3px] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:ring-[3px] md:text-sm',
12
+ className,
13
+ )}
14
+ {...props}
15
+ />
16
+ );
17
+ }
18
+
19
+ export { Input };